Browse Source

Merge pull request #101 from 2600hz/trusted-4.3

backport of #100
4.3 4.3.3
bitbashing 6 years ago
committed by GitHub
parent
commit
b2c18c86d9
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 140 additions and 103 deletions
  1. +32
    -12
      kamailio/auth.cfg
  2. +13
    -53
      kamailio/default.cfg
  3. +1
    -0
      kamailio/defs.cfg
  4. +3
    -0
      kamailio/kazoo-bindings.cfg
  5. +70
    -25
      kamailio/message-role.cfg
  6. +9
    -3
      kamailio/nodes-role.cfg
  7. +5
    -1
      kamailio/presence-fast-pickup.cfg
  8. +1
    -1
      kamailio/presence-query.cfg
  9. +6
    -8
      kamailio/presence-role.cfg

+ 32
- 12
kamailio/auth.cfg View File

@ -30,6 +30,25 @@ route[AUTH_HEADERS]
} }
route[AUTH_HEADERS_JSON]
{
xavp_params_implode("hf", "$var(outx)");
$var(out) = $(var(outx){re.subst,/^(.*);$$/\1/});
$var(c) = $(var(out){param.count});
$var(headers_json) = "";
$var(sep) = "";
xlog("L_DEBUG", "$ci|auth|headers $var(c) => $var(out) => $var(outx)\n");
while($var(c) > 0) {
$var(idx) = $var(c) - 1;
xlog("L_DEBUG", "$ci|auth|adding $(var(out){param.name,$var(idx)}): $(var(out){param.valueat,$var(idx)}{s.unescape.param})\n");
append_hf("$(var(out){param.name,$var(idx)}): $(var(out){param.valueat,$var(idx)}{s.unescape.param})\r\n");
$var(headers_json) = $_s($var(headers_json)$var(sep)"$(var(out){param.name,$var(idx)})" : "$(var(out){param.valueat,$var(idx)}{s.unescape.param})");
$var(c) = $var(c) - 1;
$var(sep) = " , ";
}
$var(headers_json) = $_s({ $var(headers_json) });
}
route[SETUP_AUTH_HEADERS] route[SETUP_AUTH_HEADERS]
{ {
@ -37,11 +56,18 @@ route[SETUP_AUTH_HEADERS]
$xavp(hf[0]=>X-AUTH-PORT) = $sp; $xavp(hf[0]=>X-AUTH-PORT) = $sp;
#!ifdef REGISTRAR_ROLE #!ifdef REGISTRAR_ROLE
$avp(is_registered) = "false";
$xavp(regcfg=>match_received) = $su;
if (registered("location","$fu", 2, 1) != 1) return;
$avp(is_registered) = "true";
#!ifdef WITH_AUTH_TOKEN #!ifdef WITH_AUTH_TOKEN
route(AUTH_TOKEN); route(AUTH_TOKEN);
#!else #!else
route(AUTH_CCVS); route(AUTH_CCVS);
#!endif #!endif
#!endif #!endif
} }
@ -50,23 +76,17 @@ route[SETUP_AUTH_HEADERS]
route[AUTH_TOKEN] route[AUTH_TOKEN]
{ {
$xavp(regcfg=>match_received) = $su;
if (registered("location","$fu", 2, 1) == 1) {
if($(xavp(ulattrs=>token){s.len}) > 0) {
$xavp(hf[0]=>X-AUTH-Token) = $xavp(ulattrs=>token);
} else {
if($(xavp(ulattrs=>Authorizing-ID){s.len}) > 0 && $(xavp(ulattrs=>Account-ID){s.len})) {
$xavp(hf[0]=>X-AUTH-Token) = $_s($(xavp(ulattrs=>custom_channel_vars){kz.json,Authorizing-ID})@$(xavp(ulattrs=>custom_channel_vars){kz.json,Account-ID}));
}
}
if($(xavp(ulattrs=>token){s.len}) > 0) {
$xavp(hf[0]=>X-AUTH-Token) = $xavp(ulattrs=>token);
} else {
if($(xavp(ulattrs=>Authorizing-ID){s.len}) > 0 && $(xavp(ulattrs=>Account-ID){s.len})) {
$xavp(hf[0]=>X-AUTH-Token) = $_s($(xavp(ulattrs=>custom_channel_vars){kz.json,Authorizing-ID})@$(xavp(ulattrs=>custom_channel_vars){kz.json,Account-ID}));
}
} }
} }
route[AUTH_CCVS] route[AUTH_CCVS]
{ {
$xavp(regcfg=>match_received) = $su;
if (registered("location","$fu", 2, 1) != 1) return;
if($(xavp(ulattrs=>custom_channel_vars){kz.json,Account-ID}{s.len}) > 0) if($(xavp(ulattrs=>custom_channel_vars){kz.json,Account-ID}{s.len}) > 0)
$xavp(hf[0]=>X-ecallmgr_Account-ID) = $(xavp(ulattrs=>custom_channel_vars){kz.json,Account-ID}); $xavp(hf[0]=>X-ecallmgr_Account-ID) = $(xavp(ulattrs=>custom_channel_vars){kz.json,Account-ID});


+ 13
- 53
kamailio/default.cfg View File

@ -36,7 +36,7 @@ debug = KAZOO_LOG_LEVEL
memdbg = 10 memdbg = 10
memlog = L_BUG memlog = L_BUG
corelog = L_ERR corelog = L_ERR
mem_summary = 0
mem_summary = KZ_MEM_SUMMARY
log_stderror = no log_stderror = no
log_facility = LOG_LOCAL0 log_facility = LOG_LOCAL0
log_name="kamailio" log_name="kamailio"
@ -327,13 +327,22 @@ route
route(SIP_TRACE); route(SIP_TRACE);
#!endif #!endif
route_if_exists("CUSTOM_START_ROUTES");
route(HANDLE_NOTIFY); route(HANDLE_NOTIFY);
#!ifdef AUTHORIZATION_ROLE #!ifdef AUTHORIZATION_ROLE
route(AUTHORIZATION_CHECK); route(AUTHORIZATION_CHECK);
#!endif #!endif
#!ifdef MESSAGE_ROLE
route(HANDLE_MESSAGE); route(HANDLE_MESSAGE);
#!else
if (is_method("MESSAGE")) {
sl_send_reply("405", "Method Not Allowed");
exit;
}
#!endif
#!ifdef PRESENCE_ROLE #!ifdef PRESENCE_ROLE
route(HANDLE_SUBSCRIBE); route(HANDLE_SUBSCRIBE);
@ -486,48 +495,6 @@ route[HANDLE_NOTIFY]
exit; exit;
} }
route[HANDLE_MESSAGE]
{
#!ifdef MESSAGE_ROLE
if (is_method("MESSAGE")) {
xlog("L_INFO", "$ci|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");
}
#!ifdef TRAFFIC_FILTER_ROLE
} else if (!isflagset(FLAG_TRUSTED_SOURCE)
&& $rd =~ "[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}\.[0-9]{1,3}") {
xlog("L_WARN", "$ci|end|dropping MESSAGE request with IP domain\n");
exit();
#!endif
} else {
xlog("L_WARN", "$ci|end|MESSAGE $hdr(Content-Type)\n");
if( $hdr(Content-Type) == "application/im-iscomposing+xml" ) {
xlog("L_WARN", "$ci|end|dropping MESSAGE application/im-iscomposing+xml\n");
sl_send_reply("200", "OK");
} else if( $hdr(Content-Type) == "message/imdn+xml" ) {
xlog("L_WARN", "$ci|end|dropping MESSAGE message/imdn+xml\n");
sl_send_reply("202", "Accepted");
} else {
route(DISPATCHER_FIND_ROUTES);
}
}
route(RELAY);
}
#!else
if (is_method("MESSAGE")) {
if (!isflagset(FLAG_INTERNALLY_SOURCED)) {
sl_send_reply("202", "delivered to /dev/null");
exit();
}
route(RELAY);
}
#!endif
}
route[HANDLE_REFER] route[HANDLE_REFER]
{ {
if (!is_method("REFER")) { if (!is_method("REFER")) {
@ -555,6 +522,7 @@ route[HANDLE_IN_DIALOG_REQUESTS]
if (is_method("INVITE")) { if (is_method("INVITE")) {
setflag(FLAG_SESSION_PROGRESS); setflag(FLAG_SESSION_PROGRESS);
record_route();
} }
if (loose_route()) { if (loose_route()) {
@ -691,7 +659,7 @@ branch_route[MANAGE_BRANCH] {
#!endif #!endif
route(BRANCH_HEADERS); route(BRANCH_HEADERS);
route_if_exists("CUSTOM_BRANCH_HEADERS");
} }
route[RELAY] route[RELAY]
@ -702,10 +670,6 @@ route[RELAY]
if (isflagset(FLAG_INTERNALLY_SOURCED)) { if (isflagset(FLAG_INTERNALLY_SOURCED)) {
route(INTERNAL_TO_EXTERNAL_RELAY); route(INTERNAL_TO_EXTERNAL_RELAY);
#!ifdef MESSAGE_ROLE
} else if (is_method("MESSAGE") && src_ip == myself) {
route(INTERNAL_TO_EXTERNAL_RELAY);
#!endif
} else { } else {
route(EXTERNAL_TO_INTERNAL_RELAY); route(EXTERNAL_TO_INTERNAL_RELAY);
} }
@ -767,11 +731,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]
@ -1000,5 +959,6 @@ route[LOCAL_REQUEST]
exit; exit;
} }
#!import_file "custom-routes.cfg"
# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab

+ 1
- 0
kamailio/defs.cfg View File

@ -27,6 +27,7 @@
#!trydef PV_BUFFER_SIZE 16384 #!trydef PV_BUFFER_SIZE 16384
#!trydef PV_BUFFER_SLOTS 30 #!trydef PV_BUFFER_SLOTS 30
#!trydef KZ_MEM_SUMMARY 0
#!trydef KZ_DB_MODULE kazoo #!trydef KZ_DB_MODULE kazoo
#!substdef "!KAMAILIO_DBMS!$def(KZ_DB_MODULE)!g" #!substdef "!KAMAILIO_DBMS!$def(KZ_DB_MODULE)!g"


+ 3
- 0
kamailio/kazoo-bindings.cfg View File

@ -2,6 +2,8 @@
### ###
### ###
#!trydef KZ_PUA_PRESENCE_USE_FULL_ENTITY 0
####### Kazoo Integration module ########## ####### Kazoo Integration module ##########
loadmodule "kazoo.so" loadmodule "kazoo.so"
modparam("kazoo", "pua_mode", MY_AMQP_PUA_MODE) modparam("kazoo", "pua_mode", MY_AMQP_PUA_MODE)
@ -12,6 +14,7 @@ modparam("kazoo", "amqp_heartbeats", MY_AMQP_HEARTBEATS)
modparam("kazoo", "amqp_max_channels", MY_AMQP_MAX_CHANNELS) modparam("kazoo", "amqp_max_channels", MY_AMQP_MAX_CHANNELS)
modparam("kazoo", "amqp_consumer_processes", MY_AMQP_CONSUMER_PROCESSES) modparam("kazoo", "amqp_consumer_processes", MY_AMQP_CONSUMER_PROCESSES)
modparam("kazoo", "amqp_consumer_workers", MY_AMQP_CONSUMER_WORKERS) modparam("kazoo", "amqp_consumer_workers", MY_AMQP_CONSUMER_WORKERS)
modparam("kazoo", "presence_use_full_entity", KZ_PUA_PRESENCE_USE_FULL_ENTITY)
## amqp connections ## amqp connections
#!ifdef MY_AMQP_URL #!ifdef MY_AMQP_URL
modparam("kazoo", "amqp_connection", "MY_AMQP_URL") modparam("kazoo", "amqp_connection", "MY_AMQP_URL")


+ 70
- 25
kamailio/message-role.cfg View File

@ -1,12 +1,47 @@
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");
route(AUTH);
$xavp(regcfg=>match_received) = $su;
if($avp(is_registered) != "true") {
sl_send_reply("403", "Forbidden");
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;
}
}
}
route[MESSAGE_INBOUND]
{
route(AUTH_HEADERS_JSON);
$var(Payload) = $_s({"Event-Category" : "message", "Event-Name" : "inbound", "Call-ID" : "$ci", "Message-ID" : "$ci", "Route-Type" : "on-net", "Route-ID" : "sip", "From" : "$fU@$fd", "To" : "$tU@$td", "Request" : "$rU@$rd", "Caller-ID-Number" : "$fU", "Callee-ID-Number" : "$tU", "Body" : "$rb", "Custom-SIP-Headers" : $var(headers_json), "Msg-ID" : "$uuid(g)"});
$var(exchange) = "sms";
$var(RoutingKey) = $_s(message.inbound.sip.$(ci{kz.encode}));
xlog("L_INFO", "$ci|msg|sending inbound message $var(RoutingKey) => $var(Payload)\n");
kazoo_publish($var(exchange), $var(RoutingKey), $var(Payload));
sl_send_reply("200", "OK");
exit;
}
event_route[kazoo:consumer-event-message-route] 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});
@ -14,47 +49,57 @@ 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();
}
$var(Payload) = '{ "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)"}';
onreply_route[MESSAGE_REPLY]
{
xlog("L_INFO", "$ci|log|sending success delivery message to $avp(server_id)\n");
$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(exchange) = "targeted";
$var(RK) = $avp(server_id);
kazoo_publish($var(exchange), $var(RK), $var(Payload));
}
$var(RoutingKey) = $(sht(msg=>$ci){kz.json,Server-ID});
failure_route[MESSAGE_FAULT]
{
xlog("L_INFO", "$ci|log|sending failure delivery message to $avp(server_id)\n");
$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(exchange) = "targeted"; $var(exchange) = "targeted";
if($var(RoutingKey) == "") {
$var(exchange) = "sms";
$var(RoutingKey) = "message.delivery." + $(sht(msg=>$ci){kz.json,Call-ID}{kz.encode});
}
xlog("L_INFO", "sending delivery message for $ci\n");
kazoo_publish($var(exchange), $var(RoutingKey), $var(Payload));
$var(RK) = $avp(server_id);
kazoo_publish($var(exchange), $var(RK), $var(Payload));
} }
route[MESSAGE_BINDINGS] route[MESSAGE_BINDINGS]
{ {
$var(key) = "kamailio@MY_HOSTNAME"; $var(key) = "kamailio@MY_HOSTNAME";
$var(payload) = $_s({"name": "sms", "exchange": "sms", "type": "topic", "queue": "MSG-QUEUE-MY_HOSTNAME", "routing": "message.route.$(var(key){kz.encode}).*", "no_ack": 0 });
$var(payload) = $_s({"name": "sms", "exchange": "sms", "type": "topic", "queue": "MSG-QUEUE-MY_HOSTNAME", "routing": "message.route.$(var(key){kz.encode}).*", "no_ack": false, "federate": true });
kazoo_subscribe("$var(payload)"); kazoo_subscribe("$var(payload)");
} }


+ 9
- 3
kamailio/nodes-role.cfg View File

@ -136,10 +136,16 @@ route[CHECK_MEDIA_SERVERS]
$var(ProfileIdx) = 0; $var(ProfileIdx) = 0;
while( $var(ProfileIdx) < $var(ProfileCount) ) { while( $var(ProfileIdx) < $var(ProfileCount) ) {
$var(MediaProfile) = $(avp(ProfileKeys)[$var(ProfileIdx)]); $var(MediaProfile) = $(avp(ProfileKeys)[$var(ProfileIdx)]);
$var(MediaRawUrl) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Interfaces.$var(MediaProfile).URL});
$var(MediaRawUrl) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Interfaces.$var(MediaProfile).info.url});
if($var(MediaRawUrl) == "") {
$var(MediaRawUrl) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Interfaces.$var(MediaProfile).URL});
}
$var(MediaUrl) = $(var(MediaRawUrl){re.subst,/^sip:(.*)@(.*)/sip:\2/}); $var(MediaUrl) = $(var(MediaRawUrl){re.subst,/^sip:(.*)@(.*)/sip:\2/});
$var(MediaInstanceUUID) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Instance-UUID}); $var(MediaInstanceUUID) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Instance-UUID});
$var(MediaIP) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Interfaces.$var(MediaProfile).SIP-IP});
$var(MediaIP) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Interfaces.$var(MediaProfile).info.sip-ip});
if($var(MediaIP) == "") {
$var(MediaIP) = $(var(Payload){kz.json,Media-Servers.$var(MediaKey).Interfaces.$var(MediaProfile).SIP-IP});
}
if($shtinc(media=>$var(MediaUrl)::count) == 1) { if($shtinc(media=>$var(MediaUrl)::count) == 1) {
$sht(media=>$var(MediaUrl)::zone) = $var(Zone); $sht(media=>$var(MediaUrl)::zone) = $var(Zone);
$shtex(media=>$var(MediaUrl)::zone) = 0; $shtex(media=>$var(MediaUrl)::zone) = 0;
@ -207,7 +213,7 @@ route[MEDIA_SERVER_RESTART]
#!ifndef NODES_CUSTOM_BINDINGS #!ifndef NODES_CUSTOM_BINDINGS
route[NODES_BINDINGS] route[NODES_BINDINGS]
{ {
$var(payload) = $_s({"name": "nodes", "exchange" : "nodes" , "type" : "fanout", "queue" : "nodes-MY_HOSTNAME", "exclusive":0, "federate":1 });
$var(payload) = $_s({"name": "nodes", "exchange" : "nodes" , "type" : "fanout", "queue" : "nodes-MY_HOSTNAME", "exclusive": false, "federate": true });
kazoo_subscribe("$var(payload)"); kazoo_subscribe("$var(payload)");
} }
#!endif #!endif


+ 5
- 1
kamailio/presence-fast-pickup.cfg View File

@ -60,11 +60,11 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT]
route(PRESENCE_FAST_PICKUP_OPTION); route(PRESENCE_FAST_PICKUP_OPTION);
$du = $sht(fp=>$var(md5)); $du = $sht(fp=>$var(md5));
append_hf("Replaces: $var(replaced_call_id)$var(Pickup)\r\n"); append_hf("Replaces: $var(replaced_call_id)$var(Pickup)\r\n");
append_hf("k-cid: $var(replaced_call_id)\r\n");
xlog("L_INFO", "$ci|log|fast|found shortcut for call-id $var(replaced_call_id) , redirecting ($(ru{uri.user})) to $du\n"); xlog("L_INFO", "$ci|log|fast|found shortcut for call-id $var(replaced_call_id) , redirecting ($(ru{uri.user})) to $du\n");
route(RELAY); route(RELAY);
exit(); exit();
} else { } else {
$var(replaced_call_id) = "none";
xlog("L_INFO", "$ci|log|fast|shortcut $var(md5) invalid in this server, using standard routing\n"); xlog("L_INFO", "$ci|log|fast|shortcut $var(md5) invalid in this server, using standard routing\n");
} }
} }
@ -88,6 +88,7 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT]
} }
remove_hf_re("^Replaces"); remove_hf_re("^Replaces");
append_hf("Replaces: $var(rep)\r\n"); append_hf("Replaces: $var(rep)\r\n");
append_hf("k-cid: $var(replaced_call_id)\r\n");
xlog("L_INFO", "$ci|log|call-id $var(replaced_call_id) found, redirecting call ($(ru{uri.user})) to $du => $var(rep)\n"); xlog("L_INFO", "$ci|log|call-id $var(replaced_call_id) found, redirecting call ($(ru{uri.user})) to $du => $var(rep)\n");
route(RELAY); route(RELAY);
exit(); exit();
@ -108,6 +109,7 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT]
$var(park) = $_s(*3$(ru{uri.user}{s.substr,2,0})@$(ru{uri.domain})); $var(park) = $_s(*3$(ru{uri.user}{s.substr,2,0})@$(ru{uri.domain}));
if($sht(park=>$var(park)) != $null) { if($sht(park=>$var(park)) != $null) {
$du = $sht(park=>$var(park)); $du = $sht(park=>$var(park));
append_hf("k-cid: $sht(park=>$var(park)::callid)\r\n");
xlog("L_INFO", "$ci|log|redirecting park request to $du , callid : $sht(park=>$var(park)::callid)\n"); xlog("L_INFO", "$ci|log|redirecting park request to $du , callid : $sht(park=>$var(park)::callid)\n");
route(RELAY); route(RELAY);
exit(); exit();
@ -117,6 +119,7 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT]
if($sht(park=>$(ru{uri.user})@$(ru{uri.domain})) != $null) { if($sht(park=>$(ru{uri.user})@$(ru{uri.domain})) != $null) {
$du = $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})); $du = $sht(park=>$(ru{uri.user})@$(ruri{uri.domain}));
append_hf("k-cid: $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})::callid)\r\n");
xlog("L_INFO", "$ci|log|redirecting park request to $du, callid: $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})::callid)\n"); xlog("L_INFO", "$ci|log|redirecting park request to $du, callid: $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})::callid)\n");
route(RELAY); route(RELAY);
exit(); exit();
@ -135,6 +138,7 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT]
$du = $(kzR{kz.json,Channels[0].switch_url}); $du = $(kzR{kz.json,Channels[0].switch_url});
if($du != $null) { if($du != $null) {
xlog("L_INFO", "$ci|log|redirecting park request to $du from realtime query reply\n"); xlog("L_INFO", "$ci|log|redirecting park request to $du from realtime query reply\n");
append_hf("k-cid: $(kzR{kz.json,Channels[0].call_id})\r\n");
route(RELAY); route(RELAY);
exit(); exit();
} }


+ 1
- 1
kamailio/presence-query.cfg View File

@ -77,7 +77,7 @@ route[PRESENCE_SEARCH_DETAIL]
while($xavp(ra) != $null) { while($xavp(ra) != $null) {
$var(Event) = $xavp(ra=>event); $var(Event) = $xavp(ra=>event);
while($xavp(ra) != $null && $var(Event) == $xavp(ra=>event)) { while($xavp(ra) != $null && $var(Event) == $xavp(ra=>event)) {
$var(Sub) = $_s("$var(Username)" : {"$xavp(ra=>event)" : { "$xavp(ra=>watcher_username)" : {"kamailio@MY_HOSTNAME" : {"$xavp(ra=>callid)" : {"time" : $xavp(ra=>time), "result" : $xavp(ra=>result), "sent" : "$(xavp(ra=>sent_msg){s.escape.common}{s.replace,\','}{s.replace,$$,})", "received" : "$(xavp(ra=>received_msg){s.escape.common}{s.replace,\','}{s.replace,$$,})", "user_agent" : "$(xavp(ra=>user_agent){s.escape.common}{s.replace,\','}{s.replace,$$,})"}}}}});
$var(Sub) = $_s("$var(Username)" : {"$xavp(ra=>event)" : { "$xavp(ra=>watcher_username)" : {"kamailio@MY_HOSTNAME" : {"$xavp(ra=>callid)" : {"time" : $xavp(ra=>time), "result" : $xavp(ra=>result), "sent" : "$(xavp(ra=>sent_msg){s.escape.common}{s.replace,\','}{s.replace,$$,}{re.subst,/\\\\\\"/\\"/g})", "received" : "$(xavp(ra=>received_msg){s.escape.common}{s.replace,\','}{s.replace,$$,})", "user_agent" : "$(xavp(ra=>user_agent){s.escape.common}{s.replace,\','}{s.replace,$$,})"}}}}});
xlog("L_DEBUG", "$ci| RESULT \"Subscriptions\" : { $var(Sub) }\n"); xlog("L_DEBUG", "$ci| RESULT \"Subscriptions\" : { $var(Sub) }\n");
$var(amqp_payload_request) = '{"Event-Category" : "presence", "Event-Name" : "search_partial_resp", "Msg-ID" : "$var(Msg-ID)", "Subscriptions" : { $var(Sub) } }'; $var(amqp_payload_request) = '{"Event-Category" : "presence", "Event-Name" : "search_partial_resp", "Msg-ID" : "$var(Msg-ID)", "Subscriptions" : { $var(Sub) } }';
kazoo_publish("targeted", "$var(Queue)", $var(amqp_payload_request)); kazoo_publish("targeted", "$var(Queue)", $var(amqp_payload_request));


+ 6
- 8
kamailio/presence-role.cfg View File

@ -392,12 +392,10 @@ event_route[kazoo:consumer-event-presence-mwi-update]
pres_refresh_watchers("$(kzE{kz.json,From})", "message-summary", 1); pres_refresh_watchers("$(kzE{kz.json,From})", "message-summary", 1);
} else { } else {
#!ifdef PRESENCE_TRACK_ALL_PKG_MWI #!ifdef PRESENCE_TRACK_ALL_PKG_MWI
if($(kzE{kz.json,Event-Package}) == "message-summary") {
$var(kz_presence_log_level) = $(sel(cfg_get.kazoo.presence_with_targets_log_level){s.int});
xlog("L_DEBUG", "$(var(payload){kz.json,Call-ID})|log|saving $var(presentity) from mwi update => $var(payload)\n");
if(kazoo_pua_publish_mwi($kzE) != 1) {
xlog("L_ERR", "$(var(payload){kz.json,Call-ID})|log|error publishing $var(presentity) mwi update => $var(payload)\n");
}
$var(kz_presence_log_level) = $(sel(cfg_get.kazoo.presence_with_targets_log_level){s.int});
xlog("L_DEBUG", "$(var(payload){kz.json,Call-ID})|log|saving $var(presentity) from mwi update => $var(payload)\n");
if(kazoo_pua_publish_mwi($kzE) != 1) {
xlog("L_ERR", "$(var(payload){kz.json,Call-ID})|log|error publishing $var(presentity) mwi update => $var(payload)\n");
} }
#!else #!else
xlog("L_DEBUG", "$(var(payload){kz.json,Call-ID})|log|skip mwi update for $var(presentity)\n"); xlog("L_DEBUG", "$(var(payload){kz.json,Call-ID})|log|skip mwi update for $var(presentity)\n");
@ -546,7 +544,7 @@ route[PRESENCE_BINDINGS]
#!import_file "presence-custom-bindings.cfg" #!import_file "presence-custom-bindings.cfg"
#!ifndef PRESENCE_CUSTOM_BINDINGS #!ifndef PRESENCE_CUSTOM_BINDINGS
$var(payload) = $_s({ "name" : "presence", "exchange" : "presence", "type" : "topic", "queue" : "presence-dialog-MY_HOSTNAME", "routing" : ["dialog.*.*", "update.*.*", "mwi_updates.*.*"], "exclusive" : 0, "federate" : 1 });
$var(payload) = $_s({ "name" : "presence", "exchange" : "presence", "type" : "topic", "queue" : "presence-dialog-MY_HOSTNAME", "routing" : ["dialog.*.*", "update.*.*", "mwi_updates.*.*"], "exclusive" : false, "federate" : true });
kazoo_subscribe("$var(payload)"); kazoo_subscribe("$var(payload)");
#!endif #!endif
@ -561,7 +559,7 @@ route[PRESENCE_API_BINDINGS]
#!import_file "presence-api-custom-bindings.cfg" #!import_file "presence-api-custom-bindings.cfg"
#!ifndef PRESENCE_API_CUSTOM_BINDINGS #!ifndef PRESENCE_API_CUSTOM_BINDINGS
$var(payload) = $_s({"name": "presence-api", "exchange": "presence", "type": "topic", "queue": "presence-api-MY_HOSTNAME", "routing": ["presence.search_req.*", "presence.reset.*.*"], "exclusive": 0, "federate": 1 });
$var(payload) = $_s({"name": "presence-api", "exchange": "presence", "type": "topic", "queue": "presence-api-MY_HOSTNAME", "routing": ["presence.search_req.*", "presence.reset.*.*"], "exclusive": false, "federate": true });
kazoo_subscribe("$var(payload)"); kazoo_subscribe("$var(payload)");
#!endif #!endif


Loading…
Cancel
Save