Browse Source

backport of #100

4.3
Luis Azedo 7 years ago
parent
commit
e2f19675c0
7 changed files with 114 additions and 74 deletions
  1. +32
    -12
      kamailio/auth.cfg
  2. +12
    -48
      kamailio/default.cfg
  3. +1
    -0
      kamailio/defs.cfg
  4. +49
    -2
      kamailio/message-role.cfg
  5. +9
    -3
      kamailio/nodes-role.cfg
  6. +5
    -1
      kamailio/presence-fast-pickup.cfg
  7. +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]
{
@ -37,11 +56,18 @@ route[SETUP_AUTH_HEADERS]
$xavp(hf[0]=>X-AUTH-PORT) = $sp;
#!ifdef REGISTRAR_ROLE
$avp(is_registred) = "false";
$xavp(regcfg=>match_received) = $su;
if (registered("location","$fu", 2, 1) != 1) return;
$avp(is_registred) = "true";
#!ifdef WITH_AUTH_TOKEN
route(AUTH_TOKEN);
#!else
route(AUTH_CCVS);
#!endif
#!endif
}
@ -50,23 +76,17 @@ route[SETUP_AUTH_HEADERS]
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]
{
$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)
$xavp(hf[0]=>X-ecallmgr_Account-ID) = $(xavp(ulattrs=>custom_channel_vars){kz.json,Account-ID});


+ 12
- 48
kamailio/default.cfg View File

@ -36,7 +36,7 @@ debug = KAZOO_LOG_LEVEL
memdbg = 10
memlog = L_BUG
corelog = L_ERR
mem_summary = 0
mem_summary = KZ_MEM_SUMMARY
log_stderror = no
log_facility = LOG_LOCAL0
log_name="kamailio"
@ -327,13 +327,22 @@ route
route(SIP_TRACE);
#!endif
route_if_exists("CUSTOM_START_ROUTES");
route(HANDLE_NOTIFY);
#!ifdef AUTHORIZATION_ROLE
route(AUTHORIZATION_CHECK);
#!endif
#!ifdef MESSAGE_ROLE
route(HANDLE_MESSAGE);
#!else
if (is_method("MESSAGE")) {
sl_send_reply("405", "Method Not Allowed");
exit;
}
#!endif
#!ifdef PRESENCE_ROLE
route(HANDLE_SUBSCRIBE);
@ -486,48 +495,6 @@ route[HANDLE_NOTIFY]
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]
{
if (!is_method("REFER")) {
@ -691,7 +658,7 @@ branch_route[MANAGE_BRANCH] {
#!endif
route(BRANCH_HEADERS);
route_if_exists("CUSTOM_BRANCH_HEADERS");
}
route[RELAY]
@ -702,10 +669,6 @@ route[RELAY]
if (isflagset(FLAG_INTERNALLY_SOURCED)) {
route(INTERNAL_TO_EXTERNAL_RELAY);
#!ifdef MESSAGE_ROLE
} else if (is_method("MESSAGE") && src_ip == myself) {
route(INTERNAL_TO_EXTERNAL_RELAY);
#!endif
} else {
route(EXTERNAL_TO_INTERNAL_RELAY);
}
@ -1000,5 +963,6 @@ route[LOCAL_REQUEST]
exit;
}
#!import_file "custom-routes.cfg"
# 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_SLOTS 30
#!trydef KZ_MEM_SUMMARY 0
#!trydef KZ_DB_MODULE kazoo
#!substdef "!KAMAILIO_DBMS!$def(KZ_DB_MODULE)!g"


+ 49
- 2
kamailio/message-role.cfg View File

@ -1,5 +1,52 @@
modparam("htable", "htable", "msg=>size=32;autoexpire=60;")
route[HANDLE_MESSAGE]
{
if (!is_method("MESSAGE")) 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;
}
} else {
route(AUTH);
$xavp(regcfg=>match_received) = $su;
if($avp(is_registred) != "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]
{
@ -39,7 +86,7 @@ route[MESSAGE_REPLY]
$var(Result) = "Success";
}
$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)"}';
$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(RoutingKey) = $(sht(msg=>$ci){kz.json,Server-ID});
$var(exchange) = "targeted";
@ -54,7 +101,7 @@ route[MESSAGE_REPLY]
route[MESSAGE_BINDINGS]
{
$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 });
kazoo_subscribe("$var(payload)");
}


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

@ -136,10 +136,16 @@ route[CHECK_MEDIA_SERVERS]
$var(ProfileIdx) = 0;
while( $var(ProfileIdx) < $var(ProfileCount) ) {
$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(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) {
$sht(media=>$var(MediaUrl)::zone) = $var(Zone);
$shtex(media=>$var(MediaUrl)::zone) = 0;
@ -207,7 +213,7 @@ route[MEDIA_SERVER_RESTART]
#!ifndef NODES_CUSTOM_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)");
}
#!endif


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

@ -60,11 +60,11 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT]
route(PRESENCE_FAST_PICKUP_OPTION);
$du = $sht(fp=>$var(md5));
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");
route(RELAY);
exit();
} else {
$var(replaced_call_id) = "none";
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");
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");
route(RELAY);
exit();
@ -108,6 +109,7 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT]
$var(park) = $_s(*3$(ru{uri.user}{s.substr,2,0})@$(ru{uri.domain}));
if($sht(park=>$var(park)) != $null) {
$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");
route(RELAY);
exit();
@ -117,6 +119,7 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT]
if($sht(park=>$(ru{uri.user})@$(ru{uri.domain})) != $null) {
$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");
route(RELAY);
exit();
@ -135,6 +138,7 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT]
$du = $(kzR{kz.json,Channels[0].switch_url});
if($du != $null) {
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);
exit();
}


+ 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);
} else {
#!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
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"
#!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)");
#!endif
@ -561,7 +559,7 @@ route[PRESENCE_API_BINDINGS]
#!import_file "presence-api-custom-bindings.cfg"
#!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)");
#!endif


Loading…
Cancel
Save