res_pjsip_nat: Adjust when contact should be rewritten.
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 fadefd8..483caa2 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;