From 1323817655031047ffea1bd52e2ae65ed27f8ec6 Mon Sep 17 00:00:00 2001 From: lazedo Date: Tue, 7 Feb 2017 00:28:48 +0000 Subject: [PATCH] nat traversal role for presence (#140) * add nat_traversal to presence * adjust dev time timer * add KAZOO_DATA_DIR * remove PRESENCE_NAT role --- kamailio/defs.cfg | 6 ++++- kamailio/presence-role.cfg | 45 +++++++++++++++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/kamailio/defs.cfg b/kamailio/defs.cfg index 24ca823..1aaa2c0 100644 --- a/kamailio/defs.cfg +++ b/kamailio/defs.cfg @@ -3,8 +3,12 @@ ####### defs ######## +#!ifndef KAZOO_DATA_DIR +#!substdef "!KAZOO_DATA_DIR!/etc/kazoo/kamailio/dbtext!g" +#!endif + #!ifndef KAZOO_DB_URL -#!substdef "!KAZOO_DB_URL!text:///etc/kazoo/kamailio/dbtext!g" +#!substdef "!KAZOO_DB_URL!text://KAZOO_DATA_DIR!g" #!endif #!ifndef MAX_WHILE_LOOPS diff --git a/kamailio/presence-role.cfg b/kamailio/presence-role.cfg index 226d6f9..8fb2fa0 100644 --- a/kamailio/presence-role.cfg +++ b/kamailio/presence-role.cfg @@ -33,13 +33,52 @@ modparam("presence", "xavp_cfg", "pres") modparam("kazoo", "db_url", "KAZOO_DB_URL") modparam("kazoo", "pua_mode", 1) +#!ifdef NAT_TRAVERSAL_ROLE +#!ifndef NAT_TRAVERSAL_LOADED +#!trydef NAT_TRAVERSAL_LOADED +loadmodule "nat_traversal.so" +#!endif +modparam("nat_traversal", "keepalive_method", "OPTIONS") +modparam("nat_traversal", "keepalive_from", "sip:sipcheck@MY_HOSTNAME") +modparam("nat_traversal", "keepalive_state_file", "KAZOO_DATA_DIR/keep_alive_state") +modparam("nat_traversal", "keepalive_interval", 60) +#!endif + +route[PRESENCE_NAT] +{ + if (client_nat_test("3")) { + fix_contact(); + nat_keepalive(); + force_rport(); + } +} + +route[PRESENCE_CHECK_NAT] +{ +#!ifdef REGISTRAR_ROLE + $xavp(regcfg=>match_received) = $su; + xlog("L_INFO", "$ci|check|checking if $fU is registered\n"); + if(registered("location", "$rz:$fU", 2, 1)) { + ## is registered, keep alive handled in registrar + route(NAT_TEST_AND_CORRECT); + return; + } else { + route(PRESENCE_NAT); + } +#!else + route(PRESENCE_NAT); +#!endif + +} + ####### Presence Logic ######## route[HANDLE_SUBSCRIBE] { if (is_method("SUBSCRIBE")) { - #!ifdef NAT_TRAVERSAL_ROLE - route(NAT_TEST_AND_CORRECT); - #!endif + + #!ifdef NAT_TRAVERSAL_ROLE + route(PRESENCE_CHECK_NAT); + #!endif if ($tU == $null) { xlog("L_INFO", "$ci|stop|ignoring subscribe with empty TO username from a $ua\n");