From: Kinsey Moore Date: Tue, 21 Jan 2014 17:15:34 +0000 (+0000) Subject: PJSIP: Handle headers in a list appropriately X-Git-Tag: 13.0.0-beta1~627 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e0da867dbee6a1f90fd8f791b77371cc6e2c1824;p=thirdparty%2Fasterisk.git PJSIP: Handle headers in a list appropriately The PJSIP header parsing function (pjsip_parse_hdr) can generate more than one header instance from a single header field. These header instances exist as a list attached to the returned header and must be handled appropriately when they are added to a message or else only the first header instance will be used. This changes the linked list functions used in outbound proxy code to merge the lists properly. ........ Merged revisions 406020 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@406022 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_pjsip.c b/res/res_pjsip.c index 1f518dca8b..e5da2eb314 100644 --- a/res/res_pjsip.c +++ b/res/res_pjsip.c @@ -1539,7 +1539,7 @@ pjsip_dialog *ast_sip_create_dialog_uac(const struct ast_sip_endpoint *endpoint, pjsip_dlg_terminate(dlg); return NULL; } - pj_list_push_back(&route_set, route); + pj_list_insert_nodes_before(&route_set, route); pjsip_dlg_set_route_set(dlg, &route_set); } @@ -1901,7 +1901,7 @@ int ast_sip_set_outbound_proxy(pjsip_tx_data *tdata, const char *proxy) return -1; } - pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)route); + pj_list_insert_nodes_before(&tdata->msg->hdr, (pjsip_hdr*)route); return 0; } diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c index 55279c58c0..c51904253f 100644 --- a/res/res_pjsip_outbound_registration.c +++ b/res/res_pjsip_outbound_registration.c @@ -776,7 +776,7 @@ static int sip_outbound_registration_regc_alloc(void *data) if (!(route = pjsip_parse_hdr(pjsip_regc_get_pool(registration->state->client_state->client), &ROUTE_HNAME, tmp.ptr, tmp.slen, NULL))) { return -1; } - pj_list_push_back(&route_set, route); + pj_list_insert_nodes_before(&route_set, route); pjsip_regc_set_route_set(registration->state->client_state->client, &route_set); }