From 0b8388fcd4e15d6de55005bef76e209b17dc31f9 Mon Sep 17 00:00:00 2001 From: lazedo Date: Thu, 26 Feb 2015 15:36:03 +0000 Subject: [PATCH 01/12] KAZOO-2137 pusher-role --- kamailio/default.cfg | 7 +++++++ kamailio/local.cfg | 3 ++- kamailio/pusher-role.cfg | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 kamailio/pusher-role.cfg diff --git a/kamailio/default.cfg b/kamailio/default.cfg index 11bbbaa..374639d 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -199,6 +199,9 @@ include_file "antiflood-role.cfg" #!ifdef TRAFFIC-FILTER-ROLE include_file "traffic-filter-role.cfg" #!endif +#!ifdef PUSHER-ROLE +include_file "pusher-role.cfg" +#!endif ####### Permissions module ########## loadmodule "permissions.so" @@ -506,6 +509,10 @@ route[INTERNAL_TO_EXTERNAL_RELAY] } #!endif + #!ifdef PUSHER-ROLE + route(INTERNAL_TO_EXTERNAL_PUSH); + #!endif + remove_hf_re("^X-.*"); t_on_reply("EXTERNAL_REPLY"); diff --git a/kamailio/local.cfg b/kamailio/local.cfg index e6534ce..530b1d0 100644 --- a/kamailio/local.cfg +++ b/kamailio/local.cfg @@ -18,7 +18,8 @@ debug = L_INFO # # #!trydef TLS-ROLE # # #!trydef ANTIFLOOD-ROLE # # #!trydef MESSAGE-ROLE - +# # #!trydef PUSHER-ROLE + ################################################################################ ## SERVER INFORMATION ################################################################################ diff --git a/kamailio/pusher-role.cfg b/kamailio/pusher-role.cfg new file mode 100644 index 0000000..24cabc7 --- /dev/null +++ b/kamailio/pusher-role.cfg @@ -0,0 +1,36 @@ +## PUSHER ROLE + +route[INTERNAL_TO_EXTERNAL_PUSH] +{ + if (is_method("INVITE") && $hdr(X-KAZOO-PUSHER-Token-ID) != $null) + { + if(!registered("location")) { + sl_send_reply(180, "waking the dead guy"); + $var(TokenID) = $hdr(X-KAZOO-PUSHER-Token-ID); + $var(TokenType) = $hdr(X-KAZOO-PUSHER-Token-Type); + $var(TokenApp) = $hdr(X-KAZOO-PUSHER-Token-App); + $var(rp) = $hdr(Remote-Party-ID); + $var(from) = $(var(rp){tobody.user}) + " - " + $(var(rp){tobody.display}{s.escape.common}); + $var(Payload) = '{ "Event-Category" : "notification", "Event-Name" : "push_req", "Call-ID" : "$ci", "Token-ID" : "$var(TokenID)", "Token-Type" : "$var(TokenType)", "Token-App" : "$var(TokenApp)", "Alert-Body" : "$var(from)" }'; + $var(RoutingKey) = "notification.push." + $var(TokenType) + "." + $var(TokenID); + $var(exchange) = "pushes"; + $avp(kazoo=>timeout) = 20000; + kazoo_query($var(exchange), $var(RoutingKey), $var(Payload)); + } + + if ( registered("location")) + { + lookup("location", "sip:$hdr(X-KAZOO-AOR)"); + xlog("L_INFO", "$ci|end|routing to $ruid : AOR : $hdr(X-KAZOO-AOR)"); + remove_hf_re("^X-.*"); + t_on_reply("EXTERNAL_REPLY"); + t_set_fr(0, 10000); + t_relay(); + } else { + t_reply(487, "Temporarely unavailable"); + }; + + exit; + } +} + From 2c96fec0e6b4b4b8861481b108ba396a51458bbd Mon Sep 17 00:00:00 2001 From: lazedo Date: Thu, 26 Feb 2015 15:52:03 +0000 Subject: [PATCH 02/12] KAZOO-2137 fix AOR on registered --- kamailio/pusher-role.cfg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kamailio/pusher-role.cfg b/kamailio/pusher-role.cfg index 24cabc7..32adef2 100644 --- a/kamailio/pusher-role.cfg +++ b/kamailio/pusher-role.cfg @@ -18,10 +18,10 @@ route[INTERNAL_TO_EXTERNAL_PUSH] kazoo_query($var(exchange), $var(RoutingKey), $var(Payload)); } - if ( registered("location")) + if(registered("location")) { - lookup("location", "sip:$hdr(X-KAZOO-AOR)"); - xlog("L_INFO", "$ci|end|routing to $ruid : AOR : $hdr(X-KAZOO-AOR)"); + lookup("location"); + xlog("L_INFO", "$ci|end|routing to $ruid"); remove_hf_re("^X-.*"); t_on_reply("EXTERNAL_REPLY"); t_set_fr(0, 10000); From b06fa74b74b0fb6efcf9b31afd6f15e16b4c992b Mon Sep 17 00:00:00 2001 From: lazedo Date: Thu, 26 Feb 2015 16:20:38 +0000 Subject: [PATCH 03/12] KAZOO-2137 push timeout --- kamailio/default.cfg | 3 +-- kamailio/pusher-role.cfg | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/kamailio/default.cfg b/kamailio/default.cfg index 374639d..568e9d8 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -165,8 +165,7 @@ modparam("kazoo", "amqp_max_channels", MY_AMQP_MAX_CHANNELS) #!else modparam("kazoo", "amqp_max_channels", 100) #!endif -modparam("kazoo", "amqp_internal_loop_count", 1); -modparam("kazoo", "amqp_consumer_loop_count", 4); +modparam("kazoo", "amqp_query_timeout_avp", "$avp(kz_timeout)"); ####### Role Configurations ########## #!ifdef DISPATCHER-ROLE diff --git a/kamailio/pusher-role.cfg b/kamailio/pusher-role.cfg index 32adef2..d2396af 100644 --- a/kamailio/pusher-role.cfg +++ b/kamailio/pusher-role.cfg @@ -14,7 +14,7 @@ route[INTERNAL_TO_EXTERNAL_PUSH] $var(Payload) = '{ "Event-Category" : "notification", "Event-Name" : "push_req", "Call-ID" : "$ci", "Token-ID" : "$var(TokenID)", "Token-Type" : "$var(TokenType)", "Token-App" : "$var(TokenApp)", "Alert-Body" : "$var(from)" }'; $var(RoutingKey) = "notification.push." + $var(TokenType) + "." + $var(TokenID); $var(exchange) = "pushes"; - $avp(kazoo=>timeout) = 20000; + $avp(kz_timeout) = 20000; kazoo_query($var(exchange), $var(RoutingKey), $var(Payload)); } From 435da023b2fc174597f3010ad638ac3eecf2b819 Mon Sep 17 00:00:00 2001 From: lazedo Date: Thu, 26 Feb 2015 16:55:49 +0000 Subject: [PATCH 04/12] KAZOO-2137 send_reply fix --- kamailio/pusher-role.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kamailio/pusher-role.cfg b/kamailio/pusher-role.cfg index d2396af..689752a 100644 --- a/kamailio/pusher-role.cfg +++ b/kamailio/pusher-role.cfg @@ -27,7 +27,7 @@ route[INTERNAL_TO_EXTERNAL_PUSH] t_set_fr(0, 10000); t_relay(); } else { - t_reply(487, "Temporarely unavailable"); + send_reply(480, "No Answer"); }; exit; From f17d6248c7b585a9a8f81c631ad82bd292fb22c5 Mon Sep 17 00:00:00 2001 From: lazedo Date: Sun, 1 Mar 2015 10:51:37 +0000 Subject: [PATCH 05/12] KAZOO-2137 formatting --- kamailio/pusher-role.cfg | 57 ++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/kamailio/pusher-role.cfg b/kamailio/pusher-role.cfg index 689752a..4692335 100644 --- a/kamailio/pusher-role.cfg +++ b/kamailio/pusher-role.cfg @@ -2,35 +2,34 @@ route[INTERNAL_TO_EXTERNAL_PUSH] { - if (is_method("INVITE") && $hdr(X-KAZOO-PUSHER-Token-ID) != $null) - { - if(!registered("location")) { - sl_send_reply(180, "waking the dead guy"); - $var(TokenID) = $hdr(X-KAZOO-PUSHER-Token-ID); - $var(TokenType) = $hdr(X-KAZOO-PUSHER-Token-Type); - $var(TokenApp) = $hdr(X-KAZOO-PUSHER-Token-App); - $var(rp) = $hdr(Remote-Party-ID); - $var(from) = $(var(rp){tobody.user}) + " - " + $(var(rp){tobody.display}{s.escape.common}); - $var(Payload) = '{ "Event-Category" : "notification", "Event-Name" : "push_req", "Call-ID" : "$ci", "Token-ID" : "$var(TokenID)", "Token-Type" : "$var(TokenType)", "Token-App" : "$var(TokenApp)", "Alert-Body" : "$var(from)" }'; - $var(RoutingKey) = "notification.push." + $var(TokenType) + "." + $var(TokenID); - $var(exchange) = "pushes"; - $avp(kz_timeout) = 20000; - kazoo_query($var(exchange), $var(RoutingKey), $var(Payload)); - } + if (is_method("INVITE") && $hdr(X-KAZOO-PUSHER-Token-ID) != $null) + { + if(!registered("location")) { + sl_send_reply(180, "waking the dead guy"); + $var(TokenID) = $hdr(X-KAZOO-PUSHER-Token-ID); + $var(TokenType) = $hdr(X-KAZOO-PUSHER-Token-Type); + $var(TokenApp) = $hdr(X-KAZOO-PUSHER-Token-App); + $var(rp) = $hdr(Remote-Party-ID); + $var(from) = $(var(rp){tobody.user}) + " - " + $(var(rp){tobody.display}{s.escape.common}); + $var(Payload) = '{ "Event-Category" : "notification", "Event-Name" : "push_req", "Call-ID" : "$ci", "Token-ID" : "$var(TokenID)", "Token-Type" : "$var(TokenType)", "Token-App" : "$var(TokenApp)", "Alert-Body" : "$var(from)" }'; + $var(RoutingKey) = "notification.push." + $var(TokenType) + "." + $var(TokenID); + $var(exchange) = "pushes"; + $avp(kz_timeout) = 20000; + kazoo_query($var(exchange), $var(RoutingKey), $var(Payload)); + } - if(registered("location")) - { - lookup("location"); - xlog("L_INFO", "$ci|end|routing to $ruid"); - remove_hf_re("^X-.*"); - t_on_reply("EXTERNAL_REPLY"); - t_set_fr(0, 10000); - t_relay(); - } else { - send_reply(480, "No Answer"); - }; - - exit; - } + if(registered("location")) + { + lookup("location"); + xlog("L_INFO", "$ci|end|routing to $ruid"); + remove_hf_re("^X-.*"); + t_on_reply("EXTERNAL_REPLY"); + t_set_fr(0, 10000); + t_relay(); + } else { + send_reply(480, "No Answer"); + }; + exit; + } } From af4e2eb677c31f2865385087c3f1dde37de2e536 Mon Sep 17 00:00:00 2001 From: lazedo Date: Thu, 5 Mar 2015 10:00:11 +0000 Subject: [PATCH 06/12] KAZOO-3388 - false duplicate changed the key used for checking duplicates --- kamailio/presence-role.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kamailio/presence-role.cfg b/kamailio/presence-role.cfg index 8c40331..343a938 100644 --- a/kamailio/presence-role.cfg +++ b/kamailio/presence-role.cfg @@ -104,10 +104,10 @@ route[HANDLE_PUBLISH] event_route[kazoo:consumer-event-presence-update] { if( $(kzE{kz.json,Event-Package}) == "dialog") { - if($sht(p=>$(kzE{kz.json,Call-ID})) != $(kzE{kz.json,State})) { + if($sht(p=>$(kzE{kz.json,Call-ID})-$(kzE{kz.json,From})) != $(kzE{kz.json,State})) { xlog("L_INFO", "received $(kzE{kz.json,Event-Package}) update for $(kzE{kz.json,From})"); xlog("L_INFO", "payload $kzE"); - $sht(p=>$(kzE{kz.json,Call-ID})) = $(kzE{kz.json,State}); + $sht(p=>$(kzE{kz.json,Call-ID})-$(kzE{kz.json,From})) = $(kzE{kz.json,State}); kazoo_pua_publish($kzE); pres_refresh_watchers("$(kzE{kz.json,From})", "$(kzE{kz.json,Event-Package})", 1); } else { From e0b6d7e4c24a87f04a69b6b74a4802d458e0aa37 Mon Sep 17 00:00:00 2001 From: karl anderson Date: Tue, 10 Mar 2015 14:47:55 -0400 Subject: [PATCH 07/12] registrar: fix expires value --- kamailio/registrar-role.cfg | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kamailio/registrar-role.cfg b/kamailio/registrar-role.cfg index d5c2c96..2a3f4e2 100644 --- a/kamailio/registrar-role.cfg +++ b/kamailio/registrar-role.cfg @@ -145,6 +145,10 @@ route[ATTEMPT_AUTHORIZATION] if($var(expires) == 0) { xlog("L_INFO", "$ci|end|unregister request from $Au $si:$sp"); exit; + } else if($var(Expires) < REGISTRAR_MIN_EXPIRES) { + $var(Expires) = REGISTRAR_MIN_EXPIRES; + } else if($var(Expires) > REGISTRAR_MAX_EXPIRES) { + $var(Expires) = REGISTRAR_MAX_EXPIRES; } if($(proto{s.tolower}) == "udp" || $(proto{s.tolower}) == "tcp" || $(proto{s.tolower}) == "tls") { From 1be2ffc2ae4d42f528c8b23470c19fffa708ed5d Mon Sep 17 00:00:00 2001 From: lazedo Date: Wed, 11 Mar 2015 00:37:59 +0000 Subject: [PATCH 08/12] fix : registrar param name --- kamailio/registrar-role.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kamailio/registrar-role.cfg b/kamailio/registrar-role.cfg index 2a3f4e2..f56ea85 100644 --- a/kamailio/registrar-role.cfg +++ b/kamailio/registrar-role.cfg @@ -39,7 +39,7 @@ modparam("registrar", "received_avp", "$avp(AVP_RECV_PARAM)") modparam("registrar", "min_expires", REGISTRAR_MIN_EXPIRES) modparam("registrar", "max_expires", REGISTRAR_MAX_EXPIRES) modparam("registrar", "xavp_cfg", "regcfg") -modparam("registrar", "reg_match_flag", 1) +modparam("registrar", "reg_on_match_flag", 1) ####### Registrar Logic ######## From 46c5d0720b44da58034e26fbab804a211968d453 Mon Sep 17 00:00:00 2001 From: lazedo Date: Wed, 11 Mar 2015 00:43:51 +0000 Subject: [PATCH 09/12] dispatcher: helpers for routing --- kamailio/dispatcher-role.cfg | 45 ++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/kamailio/dispatcher-role.cfg b/kamailio/dispatcher-role.cfg index 9cee94e..90c779f 100644 --- a/kamailio/dispatcher-role.cfg +++ b/kamailio/dispatcher-role.cfg @@ -71,8 +71,20 @@ route[DISPATCHER_FIND_ROUTES] if (is_method("INVITE")) { + $var(replaced_call_id) = "none"; + + if( $(ou{uri.param,kazoo-id}{s.len}) > 0) { + if($hdr(Replaces)== $null) { + $var(replaced_call_id) = $(ou{uri.param,kazoo-id}{s.unescape.param}); + append_hf("Replaces: $var(replaced_call_id)\r\n"); + } + } + if($hdr(Replaces)!= $null) { $var(replaced_call_id) = $(hdr(Replaces){s.select,0,;}); + } + + if($var(replaced_call_id) != "none") { xlog("L_INFO", "$ci|log|replaces call-id $var(replaced_call_id)"); $var(amqp_payload_request) = '{"Event-Category" : "call_event" , "Event-Name" : "channel_status_req", "Call-ID" : "' + $var(replaced_call_id) + '", "Active-Only" : true }'; $var(amqp_routing_key) = "call.status_req." + $(var(replaced_call_id){kz.encode}); @@ -83,15 +95,30 @@ route[DISPATCHER_FIND_ROUTES] return; } } - } - - ##### CALL-PARK #### - if($(ru{uri.user}) =~ "\*3" && $sht(park=>$(ru{uri.user})@$(ru{uri.domain})) != $null) { - $du = $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})); - $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})) = $null; - xlog("L_INFO", "$ci|log|redirecting park request to $du"); - return; - } + } + + ##### CALL-PARK #### + if($(ru{uri.user}) =~ "\*3" && $sht(park=>$(ru{uri.user})@$(ru{uri.domain})) != $null) { + $du = $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})); + $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})) = $null; + xlog("L_INFO", "$ci|log|redirecting park request to $du"); + return; + } + + + ##### CALL-PARK IN KAZOO #### + if($(ru{uri.user}) =~ "\*3" && !($rd =~ "[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}\.[0-9]{1,3}") ) { + xlog("L_INFO", "$ci|log|checking park request to $(ru{uri.user})@$(ru{uri.domain})"); + $var(amqp_payload_request) = '{"Event-Category" : "call_event" , "Event-Name" : "query_user_channels_req", "Username" : "$(ru{uri.user})", "Realm" : "$(ru{uri.domain})", "Active-Only" : true }'; + $var(amqp_routing_key) = "call.status_req." + $(var(replaced_call_id){kz.encode}); + if(kazoo_query("callevt", $var(amqp_routing_key), $var(amqp_payload_request))) { + $du = $(kzR{kz.json,Channels[0].switch_url}); + if($du != $null) { + xlog("L_INFO", "$ci|log|redirecting park request to $du, courtesy of kazoo"); + return; + } + } + } } From 4dc5493845dc8ecbf038c9eb3e5a582a208e457b Mon Sep 17 00:00:00 2001 From: John Duffield Date: Thu, 12 Mar 2015 08:38:15 +1300 Subject: [PATCH 10/12] typo .. additonal parenthesis Prevented kamailio starting --- kamailio/registrar-role.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kamailio/registrar-role.cfg b/kamailio/registrar-role.cfg index f56ea85..7825e34 100644 --- a/kamailio/registrar-role.cfg +++ b/kamailio/registrar-role.cfg @@ -76,7 +76,7 @@ route[ATTEMPT_AUTHORIZATION] $xavp(regcfg=>match_received) = $su; $xavp(regcfg[0]=>match_contact) = $(ct{nameaddr.uri}); - if ($sht(auth_cache=>$Au) != $null && registered("location", "$rz:$Au", 6) == 1)) { + if ($sht(auth_cache=>$Au) != $null && registered("location", "$rz:$Au", 6) == 1) { xlog("L_INFO", "$ci|log|authenticating $fu via cached SIP creds"); $var(password) = $sht(auth_cache=>$Au); } else { From 60d0fabeb6a2e5cf1c9bdca72c13b0555eb07400 Mon Sep 17 00:00:00 2001 From: karl anderson Date: Fri, 13 Mar 2015 17:14:34 -0700 Subject: [PATCH 11/12] KAZOO-3336: execute nat correction for recieved OPTIONS --- kamailio/default.cfg | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kamailio/default.cfg b/kamailio/default.cfg index 5b98c32..7933085 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -305,6 +305,10 @@ route[HANDLE_OPTIONS] route(FILTER_REQUEST_DOMAIN); #!endif + #!ifdef NAT-TRAVERSAL-ROLE + route(NAT_TEST_AND_CORRECT); + #!endif + sl_send_reply("200", "Rawr!!"); } exit; From d812e05f29db94242977ea029d4a6ad0f0a3736f Mon Sep 17 00:00:00 2001 From: lazedo Date: Tue, 17 Mar 2015 15:00:41 +0000 Subject: [PATCH 12/12] lookup by AOR --- kamailio/pusher-role.cfg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kamailio/pusher-role.cfg b/kamailio/pusher-role.cfg index 4692335..2bd8c61 100644 --- a/kamailio/pusher-role.cfg +++ b/kamailio/pusher-role.cfg @@ -4,7 +4,7 @@ route[INTERNAL_TO_EXTERNAL_PUSH] { if (is_method("INVITE") && $hdr(X-KAZOO-PUSHER-Token-ID) != $null) { - if(!registered("location")) { + if(!registered("location", "$hdr(X-KAZOO-AOR)")) { sl_send_reply(180, "waking the dead guy"); $var(TokenID) = $hdr(X-KAZOO-PUSHER-Token-ID); $var(TokenType) = $hdr(X-KAZOO-PUSHER-Token-Type); @@ -18,9 +18,9 @@ route[INTERNAL_TO_EXTERNAL_PUSH] kazoo_query($var(exchange), $var(RoutingKey), $var(Payload)); } - if(registered("location")) + if(registered("location", "$hdr(X-KAZOO-AOR)")) { - lookup("location"); + lookup("location", "$hdr(X-KAZOO-AOR)"); xlog("L_INFO", "$ci|end|routing to $ruid"); remove_hf_re("^X-.*"); t_on_reply("EXTERNAL_REPLY");