On 06/13/2013 09:34 AM, ThanhTruong wrote:
>
> For handling register authentication in callback I used:
>
> if(evt == nua_r_register && (status == 401 || status == 407))
> {
> if (sip && sip->sip_www_authenticate &&
> sip->sip_www_authenticate->au_params)
> {
> const char realm[] = "realm=\"";
> for (const char *param = (const
> char*)sip->sip_www_authenticate->au_params[0]; param != NULL; ++param)
> {
> size_t param_strlen = strlen(param);
> if (param_strlen > sizeof(realm) &&
> strncmp(realm, param, sizeof(realm) - 1) == 0)
> {
> std::string realm_val(param +
> sizeof(realm) - 1, param_strlen - sizeof(realm));
> std::stringstream digest;
> digest << "Digest:\"" << realm_val
> << "\"" << ":" << m_userName << ":" << m_passWord;
>
> nua_authenticate(m_registrationHandle, NUTAG_AUTH(digest.str().c_str()),
> TAG_END());
> }
> }
> }
> }
>
>
Hey there!
Nothing to do with the problem but I just wanted to say that you can
simplify/strengthen
the code for building the auth string by doing it like this code:
"sip" is of type <sip_t const* sip>, which is delivered by NUA to the
callback:
sip_www_authenticate_t const* www_auth = sip->sip_www_authenticate;
char const* scheme = www_auth->au_scheme;
const char* realm = msg_params_find( www_auth->au_params, "realm=" );
char auth_str[ 8192 ] = { 0 };
snprintf( auth_str, 8192, "%s:%s:%s:%s",
scheme, realm,
"USERNAME",
"PASSWORD" );
nua_authenticate( nh, NUTAG_AUTH( auth_str ), TAG_END() );
Hope it helps :-)
Regards,
Andreas
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:
Build for Windows Store.
http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Sofia-sip-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sofia-sip-devel