From aa57dcf6341a9a6e91e93cda14258ea3ba48af60 Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Mon, 10 Mar 2014 12:53:00 +0000 Subject: AST-2014-003: res_pjsip: When handling 401/407 responses don't assume a request will have an endpoint. This change removes the assumption that an outgoing request will always have an endpoint and makes the authenticate_qualify option work once again. (closes issue ASTERISK-23210) Reported by: Joshua Colp ........ Merged revisions 410306 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410307 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_pjsip.c | 2 +- res/res_pjsip/pjsip_options.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/res/res_pjsip.c b/res/res_pjsip.c index 4578e1047..650c68884 100644 --- a/res/res_pjsip.c +++ b/res/res_pjsip.c @@ -1850,7 +1850,7 @@ static void send_request_cb(void *token, pjsip_event *e) } AST_RWLIST_UNLOCK(&supplements); - if (tsx->status_code == 401 || tsx->status_code == 407) { + if ((tsx->status_code == 401 || tsx->status_code == 407) && req_data->endpoint) { if (!ast_sip_create_request_with_auth(&req_data->endpoint->outbound_auths, challenge, tsx, &tdata)) { pjsip_endpt_send_request(ast_sip_get_pjsip_endpoint(), tdata, -1, req_data->token, req_data->callback); } diff --git a/res/res_pjsip/pjsip_options.c b/res/res_pjsip/pjsip_options.c index 2fe104aa8..c72e58972 100644 --- a/res/res_pjsip/pjsip_options.c +++ b/res/res_pjsip/pjsip_options.c @@ -226,7 +226,7 @@ static int qualify_contact(struct ast_sip_endpoint *endpoint, struct ast_sip_con RAII_VAR(struct ast_sip_endpoint *, endpoint_local, ao2_bump(endpoint), ao2_cleanup); - if (!endpoint_local) { + if (!endpoint_local && contact->authenticate_qualify) { struct ao2_iterator *endpoint_iterator = find_endpoints(contact); /* try to find endpoints that are associated with the contact */ @@ -256,7 +256,7 @@ static int qualify_contact(struct ast_sip_endpoint *endpoint, struct ast_sip_con init_start_time(contact); ao2_ref(contact, +1); - if (ast_sip_send_request(tdata, NULL, endpoint_local, contact, + if (ast_sip_send_request(tdata, NULL, contact->authenticate_qualify ? endpoint_local : NULL, contact, qualify_contact_cb) != PJ_SUCCESS) { /* The callback will be called so we don't need to drop the contact ref*/ ast_log(LOG_ERROR, "Unable to send request to qualify contact %s\n", -- cgit v1.2.3