From b71fcb0ba906681391c86cd81e1d19c6520d8ce7 Mon Sep 17 00:00:00 2001 From: lazedo Date: Tue, 8 Jan 2019 17:49:09 +0000 Subject: [PATCH] decouple nat port/contact tests --- kamailio/defs.cfg | 4 ---- kamailio/local.cfg | 7 +++---- kamailio/nat-traversal-role.cfg | 11 ++++++++++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/kamailio/defs.cfg b/kamailio/defs.cfg index 558dc96..1e3d26b 100644 --- a/kamailio/defs.cfg +++ b/kamailio/defs.cfg @@ -54,10 +54,6 @@ #!trydef KZ_PRESENCE_REQUEST_RESUBSCRIBE_PROBE 0 #!trydef KZ_PRESENCE_REQUEST_PROBE 1 -#!ifndef NAT_UAC_TEST_LEVEL -#!substdef "!NAT_UAC_TEST_LEVEL!3!g" -#!endif - #!trydef RR_FULL_LR 1 #!trydef RR_DOUBLE_RR 1 #!trydef RR_FORCE_SOCKET 1 diff --git a/kamailio/local.cfg b/kamailio/local.cfg index 9bb050b..5dfb13f 100644 --- a/kamailio/local.cfg +++ b/kamailio/local.cfg @@ -111,10 +111,9 @@ ## NAT ################################################################################ ## These parameters are OPTIONAL. -## It allows overriding the nat_uac_test with a different value than "3" -## (default) as it is proven that it fixes the issue reported here: -## https://lists.kamailio.org/pipermail/sr-users/2016-August/094211.html -# # #!substdef "!NAT_UAC_TEST_LEVEL!1!g" +## It allows overriding the nat_uac_test for port / contact with different values +# # #!trydef KZ_NAT_CONTACT_DETECT "1" +# # #!trydef KZ_NAT_PORT_DETECT "2" ################################################################################ ## SIP traffic mirroring to SIP_TRACE server diff --git a/kamailio/nat-traversal-role.cfg b/kamailio/nat-traversal-role.cfg index 7b087bf..8e66e98 100644 --- a/kamailio/nat-traversal-role.cfg +++ b/kamailio/nat-traversal-role.cfg @@ -6,6 +6,9 @@ loadmodule "nathelper.so" modparam("nathelper", "received_avp", "$avp(AVP_RECV_PARAM)") modparam("nathelper", "sipping_from", "sip:sipcheck@MY_HOSTNAME") +#!trydef KZ_NAT_CONTACT_DETECT "1" +#!trydef KZ_NAT_PORT_DETECT "2" + ####### NAT Traversal Logic ######## route[NAT_TEST_AND_CORRECT] { @@ -20,6 +23,7 @@ route[NAT_TEST_AND_CORRECT] $var(i) = $var(i) + 1; if (!is_myself("$(var(rr){nameaddr.uri})")) { setflag(FLAG_SKIP_NAT_CORRECTION); + xlog("L_DEBUG", "$ci|log|skipping nat correction on record-route $(var(rr){nameaddr.uri})\n"); } $var(rr_idx) = $var(rr_idx) + 1; $var(rr) = $(var(rr_base){s.select,$var(rr_idx),,}); @@ -33,8 +37,13 @@ route[NAT_TEST_AND_CORRECT] return(); } - if (nat_uac_test("NAT_UAC_TEST_LEVEL")) { + if (nat_uac_test(KZ_NAT_PORT_DETECT)) { + xlog("L_DEBUG", "$ci|nat|forcing rport\n"); force_rport(); + } + + if (nat_uac_test(KZ_NAT_CONTACT_DETECT)) { + xlog("L_DEBUG", "$ci|nat|contact correction\n"); fix_nated_contact(); }