From ba327638c056718439a5f002d9cb9f2ad44c76d4 Mon Sep 17 00:00:00 2001 From: lazedo Date: Tue, 6 Sep 2016 20:06:43 +0100 Subject: [PATCH] KAZOO-4979 handle multiple record routes in same header (#97) --- kamailio/nat-traversal-role.cfg | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/kamailio/nat-traversal-role.cfg b/kamailio/nat-traversal-role.cfg index be00b29..125947e 100644 --- a/kamailio/nat-traversal-role.cfg +++ b/kamailio/nat-traversal-role.cfg @@ -9,16 +9,19 @@ modparam("nathelper", "sipping_from", "sip:sipcheck@MY_HOSTNAME") route[NAT_TEST_AND_CORRECT] { if (is_present_hf("Record-Route")) { - $var(i) = $rr_count; - ## We witnessed this loop execute more than - ## 500 times, probably do to inability to - ## allocate rr_count or the parser. Either - ## way ensure the while loop is not unbound'd - while($var(i) > 0 && $var(i) < 30) { - $var(i) = $var(i) - 1; - $var(rr) = $(hdr(Record-Route)[$var(i)]); - if (!is_myself("$(var(rr){nameaddr.uri})")) { - setflag(FLAG_SKIP_NAT_CORRECTION); + $var(i) = 0; + $var(rr_count) = $rr_count; + while($var(i) < $var(rr_count)) { + $var(rr_base) = $(hdr(Record-Route)[$var(i)]); + $var(rr_idx) = 0; + $var(rr) = $(var(rr_base){s.select,$var(rr_idx),,}); + while($var(rr) != $null && $var(rr) != "") { + $var(i) = $var(i) + 1; + if (!is_myself("$(var(rr){nameaddr.uri})")) { + setflag(FLAG_SKIP_NAT_CORRECTION); + } + $var(rr_idx) = $var(rr_idx) + 1; + $var(rr) = $(var(rr_base){s.select,$var(rr_idx),,}); } } } else if ($Rp == "5080") {