]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip_nat: Adjust when contact should be rewritten. 35/735/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:12:33 +0000 (16:12 -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 fadefd86ad1383a2aabde2699e5f921d29c07b2d..483caa2d2900cd7f2e9aa8a2b373e1670dff6436 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;