######## NAT Traversal module - signaling functions ########
|
|
#!ifndef NATHELPER-LOADED
|
|
loadmodule "nathelper.so"
|
|
#!endif
|
|
modparam("nathelper", "received_avp", "$avp(AVP_RECV_PARAM)")
|
|
modparam("nathelper", "sipping_from", "sip:sipcheck@MY_HOSTNAME")
|
|
|
|
####### NAT Traversal Logic ########
|
|
route[NAT_TEST_AND_CORRECT]
|
|
{
|
|
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);
|
|
}
|
|
$var(rr_idx) = $var(rr_idx) + 1;
|
|
$var(rr) = $(var(rr_base){s.select,$var(rr_idx),,});
|
|
}
|
|
}
|
|
} else if ($Rp == "5080") {
|
|
setflag(FLAG_SKIP_NAT_CORRECTION);
|
|
}
|
|
|
|
if (isflagset(FLAG_SKIP_NAT_CORRECTION)) {
|
|
return();
|
|
}
|
|
|
|
if (nat_uac_test("3")) {
|
|
force_rport();
|
|
fix_nated_contact();
|
|
}
|
|
|
|
if (has_body("application/sdp") && nat_uac_test("8")) {
|
|
fix_nated_sdp("10");
|
|
}
|
|
}
|
|
|
|
# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab
|