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; + } +} +