]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip_nat: Adjust when contact should be rewritten. 36/736/1
authorMark Michelson <mmichelson@digium.com>
Fri, 26 Jun 2015 21:12:33 +0000 (16:12 -0500)
committerMark Michelson <mmichelson@digium.com>
Fri, 26 Jun 2015 21:17:35 +0000 (16:17 -0500)
A previous change made the contact only get rewritten if the dialog's
route set was not marked frozen. Unfortunately, while the intent of this
is correct, the dialog's route set actually gets marked as frozen
earlier than expected, especially for UAS dialogs.

Instead, the idea is that the contact needs to not be rewritten if there
is a pre-existing route set on the dialog. This is now accomplished by
checking the dialog's route set list instead of checking if the route
set is frozen.

Doing this causes some broken tests to begin passing again.

ASTERISK-25196
Reported by Mark Michelson

Change-Id: I525ab251fd40a52ede327a52a2810a56deb0529e

res/res_pjsip_nat.c

index e47dd542c48044705847d8596196a5783c22d9de..c32b71d76c043077721109fea5a0dd94cbbf360f 100644 (file)
@@ -63,7 +63,7 @@ static int rewrite_route_set(pjsip_rx_data *rdata, pjsip_dialog *dlg)
        if (rr) {
                uri = pjsip_uri_get_uri(&rr->name_addr);
                rewrite_uri(rdata, uri);
-               if (dlg && dlg->route_set.next && !dlg->route_set_frozen) {
+               if (dlg && !pj_list_empty(&dlg->route_set) && !dlg->route_set_frozen) {
                        pjsip_routing_hdr *route = dlg->route_set.next;
                        uri = pjsip_uri_get_uri(&route->name_addr);
                        rewrite_uri(rdata, uri);
@@ -85,7 +85,7 @@ static int rewrite_contact(pjsip_rx_data *rdata, pjsip_dialog *dlg)
 
                rewrite_uri(rdata, uri);
 
-               if (dlg && !dlg->route_set_frozen && (!dlg->remote.contact
+               if (dlg && pj_list_empty(&dlg->route_set) && (!dlg->remote.contact
                        || pjsip_uri_cmp(PJSIP_URI_IN_REQ_URI, dlg->remote.contact->uri, contact->uri))) {
                        dlg->remote.contact = (pjsip_contact_hdr*)pjsip_hdr_clone(dlg->pool, contact);
                        dlg->target = dlg->remote.contact->uri;