mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-10 20:08:16 +00:00
Merge "res_pjsip_outbound_registration.c: Fix 423 response handling." into 13
This commit is contained in:
@@ -335,6 +335,8 @@ struct sip_outbound_registration_client_state {
|
|||||||
unsigned int auth_rejection_permanent;
|
unsigned int auth_rejection_permanent;
|
||||||
/*! \brief Determines whether SIP Path support should be advertised */
|
/*! \brief Determines whether SIP Path support should be advertised */
|
||||||
unsigned int support_path;
|
unsigned int support_path;
|
||||||
|
/*! CSeq number of last sent auth request. */
|
||||||
|
unsigned int auth_cseq;
|
||||||
/*! \brief Serializer for stuff and things */
|
/*! \brief Serializer for stuff and things */
|
||||||
struct ast_taskprocessor *serializer;
|
struct ast_taskprocessor *serializer;
|
||||||
/*! \brief Configured authentication credentials */
|
/*! \brief Configured authentication credentials */
|
||||||
@@ -758,15 +760,27 @@ static int handle_registration_response(void *data)
|
|||||||
ast_debug(1, "Processing REGISTER response %d from server '%s' for client '%s'\n",
|
ast_debug(1, "Processing REGISTER response %d from server '%s' for client '%s'\n",
|
||||||
response->code, server_uri, client_uri);
|
response->code, server_uri, client_uri);
|
||||||
|
|
||||||
if (!response->client_state->auth_attempted &&
|
if ((response->code == 401 || response->code == 407)
|
||||||
(response->code == 401 || response->code == 407)) {
|
&& (!response->client_state->auth_attempted
|
||||||
|
|| response->rdata->msg_info.cseq->cseq != response->client_state->auth_cseq)) {
|
||||||
|
int res;
|
||||||
|
pjsip_cseq_hdr *cseq_hdr;
|
||||||
pjsip_tx_data *tdata;
|
pjsip_tx_data *tdata;
|
||||||
|
|
||||||
if (!ast_sip_create_request_with_auth_from_old(&response->client_state->outbound_auths,
|
if (!ast_sip_create_request_with_auth_from_old(&response->client_state->outbound_auths,
|
||||||
response->rdata, response->old_request, &tdata)) {
|
response->rdata, response->old_request, &tdata)) {
|
||||||
response->client_state->auth_attempted = 1;
|
response->client_state->auth_attempted = 1;
|
||||||
ast_debug(1, "Sending authenticated REGISTER to server '%s' from client '%s'\n",
|
ast_debug(1, "Sending authenticated REGISTER to server '%s' from client '%s'\n",
|
||||||
server_uri, client_uri);
|
server_uri, client_uri);
|
||||||
if (registration_client_send(response->client_state, tdata) == PJ_SUCCESS) {
|
pjsip_tx_data_add_ref(tdata);
|
||||||
|
res = registration_client_send(response->client_state, tdata);
|
||||||
|
|
||||||
|
/* Save the cseq that actually got sent. */
|
||||||
|
cseq_hdr = (pjsip_cseq_hdr *) pjsip_msg_find_hdr(tdata->msg, PJSIP_H_CSEQ,
|
||||||
|
NULL);
|
||||||
|
response->client_state->auth_cseq = cseq_hdr->cseq;
|
||||||
|
pjsip_tx_data_dec_ref(tdata);
|
||||||
|
if (res == PJ_SUCCESS) {
|
||||||
ao2_ref(response, -1);
|
ao2_ref(response, -1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user