From e0da867dbee6a1f90fd8f791b77371cc6e2c1824 Mon Sep 17 00:00:00 2001 From: Kinsey Moore Date: Tue, 21 Jan 2014 17:15:34 +0000 Subject: 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 --- res/res_pjsip.c | 4 ++-- res/res_pjsip_outbound_registration.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/res/res_pjsip.c b/res/res_pjsip.c index 1f518dca8..e5da2eb31 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 55279c58c..c51904253 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); } -- cgit v1.2.3