AST-2014-003: res_pjsip: When handling 401/407 responses don't assume a request will...
authorJoshua Colp <jcolp@digium.com>
Mon, 10 Mar 2014 12:53:00 +0000 (12:53 +0000)
committerJoshua Colp <jcolp@digium.com>
Mon, 10 Mar 2014 12:53:00 +0000 (12:53 +0000)
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
res/res_pjsip/pjsip_options.c

index 4578e10..650c688 100644 (file)
@@ -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);
                }
index 2fe104a..c72e589 100644 (file)
@@ -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",