From 5aa99520b27700d30f88bd4de187d8624f91de13 Mon Sep 17 00:00:00 2001 From: lazedo Date: Mon, 10 Jun 2019 01:47:26 +0000 Subject: [PATCH] use internal routing for messages --- kamailio/default.cfg | 5 --- kamailio/message-role.cfg | 95 +++++++++++++++++++++------------------ 2 files changed, 52 insertions(+), 48 deletions(-) diff --git a/kamailio/default.cfg b/kamailio/default.cfg index b1fb648..05c8ec3 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -730,11 +730,6 @@ onreply_route[EXTERNAL_REPLY] route(DOS_PREVENTION); #!endif - #!ifdef MESSAGE_ROLE - if (is_method("MESSAGE")) { - route(MESSAGE_REPLY); - } - #!endif } onreply_route[INTERNAL_REPLY] diff --git a/kamailio/message-role.cfg b/kamailio/message-role.cfg index 53e5cdb..7b08b34 100644 --- a/kamailio/message-role.cfg +++ b/kamailio/message-role.cfg @@ -1,36 +1,24 @@ -modparam("htable", "htable", "msg=>size=32;autoexpire=60;") route[HANDLE_MESSAGE] { if (!is_method("MESSAGE")) return; + if (isflagset(FLAG_INTERNALLY_SOURCED) || src_ip == myself) return; + xlog("L_INFO", "$ci|log|MESSAGE from $fu to $tu\n"); - if (isflagset(FLAG_INTERNALLY_SOURCED) || src_ip == myself) { - xlog("L_INFO", "$ci| routing MESSAGE to external from $fu to $tu\n"); - if (registered("location")) { - lookup("location"); - xlog("L_INFO", "$ci|log|routing to $ruid\n"); - } else { - xlog("L_INFO", "$ci|end|user is not registered\n"); - append_to_reply("$def(AOR_NOT_SUBSCRIBED_REASON)\r\n"); - sl_send_reply("410", "Not registered"); - exit; - } + route(AUTH); + $xavp(regcfg=>match_received) = $su; + if($avp(is_registered) != "true") { + sl_send_reply("403", "Forbidden"); + exit; } else { - route(AUTH); - $xavp(regcfg=>match_received) = $su; - if($avp(is_registred) != "true") { - sl_send_reply("403", "Forbidden"); + if($hdr(Content-Type) == "text/plain") { + route(MESSAGE_INBOUND); + } else { + xlog("L_WARN", "$ci|end|dropping MESSAGE $hdr(Content-Type)\n"); + sl_send_reply("200", "OK"); exit; - } else { - if($hdr(Content-Type) == "text/plain") { - route(MESSAGE_INBOUND); - } else { - xlog("L_WARN", "$ci|end|dropping MESSAGE $hdr(Content-Type)\n"); - sl_send_reply("200", "OK"); - exit; - } - } + } } } @@ -53,7 +41,7 @@ event_route[kazoo:consumer-event-message-route] $var(uri_username) = ""; kazoo_json($kzE, "Endpoints[0].To-Username", "$var(uri_username)"); $var(x) = $(kzE{kz.json,Endpoints[0].To-Username}); - xlog("L_INFO", "received message route for $(kzE{kz.json,Endpoints[0].To-DID})\n"); + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|received message route for $(kzE{kz.json,Endpoints[0].To-DID})\n"); if( $var(uri_username) != "" ) { $var(from_uri) = "sip:" + $(kzE{kz.json,Caller-ID-Number}) + "@" + $(kzE{kz.json,Endpoints[0].To-Realm}); $var(to_uri) = "sip:" + $(kzE{kz.json,Endpoints[0].To-Username}) + "@" + $(kzE{kz.json,Endpoints[0].To-Realm}); @@ -61,40 +49,61 @@ event_route[kazoo:consumer-event-message-route] $var(from_uri) = "sip:" + $(kzE{kz.json,Caller-ID-Number}) + $(kzE{kz.json,Endpoints[0].To-Realm}); $var(to_uri) = $(kzE{kz.json,Endpoints[0].Route}); } - $sht(msg=>$(kzE{kz.json,Call-ID})) = $kzE; $uac_req(method)="MESSAGE"; - $uac_req(body)= $(kzE{kz.json,Body}); - $uac_req(hdrs)="X-KAZOO-AOR: " + $var(to_uri)+ "\r\nContent-Type: text/plain\r\n"; + $uac_req(body)= $kzE; + $uac_req(hdrs)="X-TM-Local: MESSAGE_ROUTE\r\nX-KAZOO-AOR: " + $var(to_uri)+ "\r\nContent-Type: text/plain\r\n"; $uac_req(turi) = $var(to_uri); $uac_req(ruri) = $var(to_uri); $uac_req(furi) = $var(from_uri); - $uac_req(ouri) = "sip:MY_IP_ADDRESS:5060"; + $uac_req(ouri) = "sip:127.0.0.1:5090;transport=tcp"; $uac_req(callid) = $(kzE{kz.json,Call-ID}); - xlog("L_INFO", "sending message from $var(from_uri) to $var(to_uri) \n"); + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|sending message from $var(from_uri) to $var(to_uri) \n"); uac_req_send(); } -route[MESSAGE_REPLY] +route[MESSAGE_ROUTE] { - if( $(sht(msg=>$ci)) == $null) { - exit(); - } + remove_hf_re("^X-"); - if($T_reply_code != 200 && $T_reply_code != 202) { - $var(Result) = "Failure"; - } else { - $var(Result) = "Success"; + route(ROUTE_TO_AOR); + $var(JObj) = $rb; + set_body("$(var(JObj){kz.json,Body})", "text/plain"); + $avp(message_id) = $(var(JObj){kz.json,Message-ID}); + $avp(msg_id) = $(var(JObj){kz.json,Msg-ID}); + $avp(server_id) = $(var(JObj){kz.json,Server-ID}); + t_on_reply("MESSAGE_REPLY"); + t_on_failure("MESSAGE_FAULT"); + + t_relay(); + +} + +onreply_route[MESSAGE_REPLY] +{ + $var(Payload) = $_s({ "Event-Category" : "message", "Event-Name" : "delivery", "Call-ID" : "$ci", "Message-ID" : "$avp(message_id)" , "Delivery-Result-Code" : "sip:$T_reply_code", "Msg-ID" : "$avp(msg_id)" , "Status" : "Success"}); + + $var(RoutingKey) = $avp(server_id); + $var(exchange) = "targeted"; + if($var(RoutingKey) == "") { + $var(exchange) = "sms"; + $var(RoutingKey) = "message.delivery." + $(ci{kz.encode}); } + xlog("L_INFO", "$ci|log|sending delivery message\n"); + kazoo_publish($var(exchange), $var(RoutingKey), $var(Payload)); +} + +failure_route[MESSAGE_FAULT] +{ - $var(Payload) = $_s({ "Event-Category" : "message", "Event-Name" : "delivery", "Call-ID" : "$(sht(msg=>$ci){kz.json,Call-ID})", "Message-ID" : "$(sht(msg=>$ci){kz.json,Message-ID})" , "Delivery-Result-Code" : "sip:$T_reply_code", "Msg-ID" : "$(sht(msg=>$ci){kz.json,Msg-ID})" , "Status" : "$var(Result)"}); + $var(Payload) = $_s({ "Event-Category" : "message", "Event-Name" : "delivery", "Call-ID" : "$ci", "Message-ID" : "$avp(message_id)" , "Delivery-Result-Code" : "sip:$T_reply_code", "Msg-ID" : "$avp(msg_id)" , "Status" : "Failure"}); - $var(RoutingKey) = $(sht(msg=>$ci){kz.json,Server-ID}); + $var(RoutingKey) = $avp(server_id); $var(exchange) = "targeted"; if($var(RoutingKey) == "") { $var(exchange) = "sms"; - $var(RoutingKey) = "message.delivery." + $(sht(msg=>$ci){kz.json,Call-ID}{kz.encode}); + $var(RoutingKey) = "message.delivery." + $(ci{kz.encode}); } - xlog("L_INFO", "sending delivery message for $ci\n"); + xlog("L_INFO", "$ci|log|sending delivery message\n"); kazoo_publish($var(exchange), $var(RoutingKey), $var(Payload)); }