diff --git a/kamailio/nat-traversal-role.cfg b/kamailio/nat-traversal-role.cfg index 7c64f84..3236e6c 100644 --- a/kamailio/nat-traversal-role.cfg +++ b/kamailio/nat-traversal-role.cfg @@ -22,8 +22,28 @@ kazoo.nat_fix_sdp_request = KZ_NAT_FIX_SDP_REQUEST descr "performs request sdp r kazoo.nat_fix_sdp_reply = KZ_NAT_FIX_SDP_REPLY descr "performs reply sdp replacement of private addresses" ####### NAT Traversal Logic ######## +route[NAT_SDP] +{ + if( has_body("application/sdp")) { + if( nat_uac_test(KZ_NAT_SDP_TEST)) { + xlog("L_DEBUG", "$ci|log|applying sdp nat fix\n"); + $var(ret) = fix_nated_sdp(KZ_NAT_SDP_FIX); + xlog("L_DEBUG", "$ci|log|result of applying sdp nat fix is $var(ret)\n"); + } else if( is_method("INVITE") && !isflagset(FLAG_INTERNALLY_SOURCED) && is_audio_on_hold()) { + xlog("L_DEBUG", "$ci|log|applying sdp nat fix for held channel\n"); + $var(ret) = fix_nated_sdp(KZ_NAT_SDP_FIX); + xlog("L_DEBUG", "$ci|log|result of applying sdp nat fix for held channel is $var(ret)\n"); + } + } +} + route[NAT_DETECT] { + + if($sel(cfg_get.kazoo.nat_fix_sdp_request) == 1) { + route(NAT_SDP); + } + if ($Rp == "5080") { setflag(FLAG_SKIP_NAT_CORRECTION); xlog("L_DEBUG", "$ci|log|skipping nat correction on PORT 5080\n"); @@ -61,20 +81,12 @@ route[NAT_DETECT] } } - if($sel(cfg_get.kazoo.nat_fix_sdp_request) == 1) { - if (has_body("application/sdp") && nat_uac_test(KZ_NAT_SDP_TEST)) { - fix_nated_sdp(KZ_NAT_SDP_FIX); - } - } - } route[NAT_MANAGE] { - if(is_reply() && $sel(cfg_get.kazoo.nat_fix_sdp_reply) == 1) { - if (has_body("application/sdp") && nat_uac_test(KZ_NAT_SDP_TEST)) { - fix_nated_sdp(KZ_NAT_SDP_FIX); - } + if( is_reply() && $sel(cfg_get.kazoo.nat_fix_sdp_reply) == 1) { + route(NAT_SDP); } if ( is_request() && isflagset(FLAG_INTERNALLY_SOURCED)) {