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
changes/97/197/1
Kinsey Moore 12 years ago
parent 1590d32ab0
commit e0da867dbe

@ -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;
}

@ -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);
}

Loading…
Cancel
Save