|
|
|
@ -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)) { |
|
|
|
|