FS-6287 --resolve When a broken registrar sends a 401 unauth then replies with a subsequent 401 unauth without the stale=true attribute, sofia tries to invalidate the auth handle and get stuck in a state where it cannot recover until the reg handle is destroyed. In this case, the provider in question has a bug on thier end when the nonce count rolls from nc=000000ff to nc=00000100 they start sending several consecitive 401 rather than a 401 with stale=true or a 403. This change will allow it to reset properly and try again with nc=00000001 on the next try.
This commit is contained in:
parent
ce9f1e5f98
commit
6e818216e2
|
@ -1197,13 +1197,9 @@ int nua_base_client_check_restart(nua_client_request_t *cr,
|
||||||
|
|
||||||
cr->cr_challenged = 1;
|
cr->cr_challenged = 1;
|
||||||
|
|
||||||
if (invalid) {
|
if (!invalid && auc_has_authorization(&nh->nh_auth)) {
|
||||||
/* Bad username/password */
|
return nua_client_restart(cr, 100, "Request Authorized by Cache");
|
||||||
SU_DEBUG_7(("nua(%p): bad credentials, clearing them\n", (void *)nh));
|
}
|
||||||
auc_clear_credentials(&nh->nh_auth, NULL, NULL);
|
|
||||||
}
|
|
||||||
else if (auc_has_authorization(&nh->nh_auth))
|
|
||||||
return nua_client_restart(cr, 100, "Request Authorized by Cache");
|
|
||||||
|
|
||||||
orq = cr->cr_orq, cr->cr_orq = NULL;
|
orq = cr->cr_orq, cr->cr_orq = NULL;
|
||||||
|
|
||||||
|
@ -1213,7 +1209,7 @@ int nua_base_client_check_restart(nua_client_request_t *cr,
|
||||||
cr->cr_status = 0, cr->cr_phrase = NULL;
|
cr->cr_status = 0, cr->cr_phrase = NULL;
|
||||||
nua_client_request_unref(cr);
|
nua_client_request_unref(cr);
|
||||||
|
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* GriGiu : RFC-3261 status supported Retry-After */
|
/* GriGiu : RFC-3261 status supported Retry-After */
|
||||||
|
|
Loading…
Reference in New Issue