res/res_pjsip_nat: Ignore REGISTER requests when looking for a Record-Route
authorMatt Jordan <mjordan@digium.com>
Thu, 10 Sep 2015 13:39:21 +0000 (08:39 -0500)
committerMatt Jordan <mjordan@digium.com>
Thu, 10 Sep 2015 13:43:54 +0000 (08:43 -0500)
We will only rewrite the Contact header if there is no Record-Route header in
the received request. If a malfunctioning proxy places a Record-Route header
into a REGISTER request, we will decide that we shouldn't update the IP/port
in the Contact header, and we will end up storing a contact with an AoR that
contains the NAT'd IP address.

While it is nice to have the proxy *not* send a Record-Route in a REGISTER
request, it's also a good idea to not process the header in a non-dialog
message. This patch updates the code to explicitly ignore the Record-Route
header in REGISTER requests.

ASTERISK-25387 #close

Change-Id: I4bd3bcccc4003d460cc354d986b0dea2e433ef3f

res/res_pjsip_nat.c

index 483caa2..683ae61 100644 (file)
@@ -56,7 +56,7 @@ static int rewrite_route_set(pjsip_rx_data *rdata, pjsip_dialog *dlg)
                                break;
                        }
                }
-       } else {
+       } else if (pjsip_method_cmp(&rdata->msg_info.msg->line.req.method, &pjsip_register_method)) {
                rr = pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_RECORD_ROUTE, NULL);
        }