mirror of
https://gitlab.gnome.org/GNOME/calls.git
synced 2025-01-07 12:25:31 +00:00
sip: slightly improved authentication
* removed nua_callstate_authenticating as it was never hit * move debug statement further up, because we might not reach it if no corresponding call is found * handle 401 and 407 the same way note: we should record which realm we're authenticating against during REGISTER so we can prompt the user for additional credentials when challenged for a different realm - still happens when calling from a sip.linphone.org account to a jmp.bwapp.bwsip.io account.
This commit is contained in:
parent
cadaa6a3e0
commit
17ac56fe44
1 changed files with 11 additions and 12 deletions
|
@ -128,6 +128,10 @@ sip_authenticate (CallsSipOrigin *origin,
|
||||||
scheme = proxy_auth->au_scheme;
|
scheme = proxy_auth->au_scheme;
|
||||||
realm = msg_params_find (proxy_auth->au_params, "realm=");
|
realm = msg_params_find (proxy_auth->au_params, "realm=");
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
g_warning ("No authentication context found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
g_debug ("need to authenticate to realm %s", realm);
|
g_debug ("need to authenticate to realm %s", realm);
|
||||||
|
|
||||||
auth = g_strdup_printf ("%s:%s:%s:%s",
|
auth = g_strdup_printf ("%s:%s:%s:%s",
|
||||||
|
@ -149,17 +153,15 @@ sip_r_invite (int status,
|
||||||
g_debug ("response to outgoing INVITE: %03d %s", status, phrase);
|
g_debug ("response to outgoing INVITE: %03d %s", status, phrase);
|
||||||
|
|
||||||
/* TODO call states (see i_state) */
|
/* TODO call states (see i_state) */
|
||||||
if (status == 401) {
|
if (status == 401 || status == 407) {
|
||||||
sip_authenticate (origin, nh, sip);
|
sip_authenticate (origin, nh, sip);
|
||||||
}
|
}
|
||||||
else if (status == 403) {
|
else if (status == 403) {
|
||||||
g_warning ("wrong credentials?");
|
g_warning ("Response to outgoing INVITE: 403 wrong credentials?");
|
||||||
}
|
|
||||||
else if (status == 407) {
|
|
||||||
sip_authenticate (origin, nh, sip);
|
|
||||||
}
|
}
|
||||||
else if (status == 904) {
|
else if (status == 904) {
|
||||||
g_warning ("unmatched challenge");
|
g_warning ("Response to outgoing INVITE: 904 unmatched challenge."
|
||||||
|
"Possibly the challenge was already answered?");
|
||||||
}
|
}
|
||||||
else if (status == 180) {
|
else if (status == 180) {
|
||||||
}
|
}
|
||||||
|
@ -187,7 +189,7 @@ sip_r_register (int status,
|
||||||
|
|
||||||
origin->state = SIP_ACCOUNT_ONLINE;
|
origin->state = SIP_ACCOUNT_ONLINE;
|
||||||
}
|
}
|
||||||
else if (status == 401) {
|
else if (status == 401 || status == 407) {
|
||||||
sip_authenticate (origin, nh, sip);
|
sip_authenticate (origin, nh, sip);
|
||||||
|
|
||||||
origin->state = SIP_ACCOUNT_AUTHENTICATING;
|
origin->state = SIP_ACCOUNT_AUTHENTICATING;
|
||||||
|
@ -221,6 +223,8 @@ sip_i_state (int status,
|
||||||
|
|
||||||
g_assert (CALLS_IS_SIP_ORIGIN (origin));
|
g_assert (CALLS_IS_SIP_ORIGIN (origin));
|
||||||
|
|
||||||
|
g_debug ("The call state has changed: %03d %s", status, phrase);
|
||||||
|
|
||||||
call = g_hash_table_lookup (origin->call_handles, nh);
|
call = g_hash_table_lookup (origin->call_handles, nh);
|
||||||
|
|
||||||
if (call == NULL) {
|
if (call == NULL) {
|
||||||
|
@ -228,7 +232,6 @@ sip_i_state (int status,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_debug ("The call state has changed: %03d %s", status, phrase);
|
|
||||||
tl_gets (tags,
|
tl_gets (tags,
|
||||||
SOATAG_REMOTE_SDP_REF (r_sdp),
|
SOATAG_REMOTE_SDP_REF (r_sdp),
|
||||||
NUTAG_CALLSTATE_REF (call_state),
|
NUTAG_CALLSTATE_REF (call_state),
|
||||||
|
@ -283,10 +286,6 @@ sip_i_state (int status,
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case nua_callstate_authenticating:
|
|
||||||
g_warning ("TODO Move authentication (INVITE) here");
|
|
||||||
return;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue