Browse Source

use internal routing for messages

4.3
lazedo 7 years ago
committed by Luis Azedo
parent
commit
5671d7893f
2 changed files with 52 additions and 48 deletions
  1. +0
    -5
      kamailio/default.cfg
  2. +52
    -43
      kamailio/message-role.cfg

+ 0
- 5
kamailio/default.cfg View File

@ -730,11 +730,6 @@ onreply_route[EXTERNAL_REPLY]
route(DOS_PREVENTION); route(DOS_PREVENTION);
#!endif #!endif
#!ifdef MESSAGE_ROLE
if (is_method("MESSAGE")) {
route(MESSAGE_REPLY);
}
#!endif
} }
onreply_route[INTERNAL_REPLY] onreply_route[INTERNAL_REPLY]


+ 52
- 43
kamailio/message-role.cfg View File

@ -1,36 +1,24 @@
modparam("htable", "htable", "msg=>size=32;autoexpire=60;")
route[HANDLE_MESSAGE] route[HANDLE_MESSAGE]
{ {
if (!is_method("MESSAGE")) return; 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"); 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 { } 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; 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) = ""; $var(uri_username) = "";
kazoo_json($kzE, "Endpoints[0].To-Username", "$var(uri_username)"); kazoo_json($kzE, "Endpoints[0].To-Username", "$var(uri_username)");
$var(x) = $(kzE{kz.json,Endpoints[0].To-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) != "" ) { if( $var(uri_username) != "" ) {
$var(from_uri) = "sip:" + $(kzE{kz.json,Caller-ID-Number}) + "@" + $(kzE{kz.json,Endpoints[0].To-Realm}); $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}); $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(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}); $var(to_uri) = $(kzE{kz.json,Endpoints[0].Route});
} }
$sht(msg=>$(kzE{kz.json,Call-ID})) = $kzE;
$uac_req(method)="MESSAGE"; $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(turi) = $var(to_uri);
$uac_req(ruri) = $var(to_uri); $uac_req(ruri) = $var(to_uri);
$uac_req(furi) = $var(from_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}); $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(); 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"; $var(exchange) = "targeted";
if($var(RoutingKey) == "") { if($var(RoutingKey) == "") {
$var(exchange) = "sms"; $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)); kazoo_publish($var(exchange), $var(RoutingKey), $var(Payload));
} }


Loading…
Cancel
Save