You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

75 lines
2.0 KiB

######## NAT Traversal module - signaling functions ########
#!ifndef NATHELPER_LOADED
loadmodule "nathelper.so"
#!trydef NATHELPER_LOADED
#!endif
modparam("nathelper", "received_avp", "$avp(AVP_RECV_PARAM)")
modparam("nathelper", "sipping_from", "sip:sipcheck@MY_HOSTNAME")
#!trydef KZ_NAT_DETECT "19"
####### NAT Traversal Logic ########
route[NAT_INITIAL_TEST]
{
if(nat_uac_test(64)) return();
if(!is_method("INVITE|REGISTER|SUBSCRIBE")) return();
if ($Rp == "5080") {
setflag(FLAG_SKIP_NAT_CORRECTION);
} else {
if (is_present_hf("Record-Route")) {
$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);
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),,});
}
}
}
}
if (isflagset(FLAG_SKIP_NAT_CORRECTION)) {
return();
}
if(nat_uac_test(KZ_NAT_DETECT)) {
force_rport();
setflag(FLAG_NAT);
if (!is_method("REGISTER")) {
if(is_first_hop()) set_contact_alias();
}
}
if (has_body("application/sdp") && nat_uac_test("8")) {
fix_nated_sdp("10");
}
}
route[NAT_REPLY_TEST]
{
if(nat_uac_test(64)) return();
if(nat_uac_test(KZ_NAT_DETECT)) {
setflag(FLAG_NAT);
force_rport();
set_contact_alias();
}
if (has_body("application/sdp") && nat_uac_test("8")) {
fix_nated_sdp("10");
}
}
# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab