From 1563c0642c6b07f26a1399481f71a9801a9946f5 Mon Sep 17 00:00:00 2001 From: lazedo Date: Wed, 21 Apr 2021 17:26:23 +0100 Subject: [PATCH] update routes & configuration (#146) * use wildcard for amqp bindings * kazoo custom headers adds route REMOVE_RESERVED_HEADERS adds external configurable setting for cleaning sip headers before sending to exterrnal * use wildcard for AUTHORIZATION_CHECK * add KAZOO_DB_LOCATION to defs allows overriding the locaction of db_kazoo database * add prometheus creates http.cfg for handling xhttp:request decouple websockets from xhttp:request * add flags * remove k-cid handling from fastpickup * rework default listeners adds oob definitions * add support for internal tcp proto * use wildcard for for local request routes * use wildcard for deferred init * rework websocket listeners * add trace_init_mode and a way to ignore tracing for configured ports * remove local request in presence * pusher record-route * update dispatcher next route * allow alg selection from other routes other routes may set alg and then call DISPATCHER_SELECT_ROUTES * support media check with tcp proto * classify with X-FS-Core-UUID support for tcp without changing KZ_DISPATCHER_CLASSIFY_FLAGS * use wildcard for custom HANDLE_REGISTER * handle proto for proxy-path * allow relocation of tls config adds xavp_cfg param to tls for easier selection of tls definition * add tcpops module * decouple websockets * don't create transaction for in dialog * run custom routes * handle ruri alias * add newline to log * support tcp in media associations * allow skip nat manage by flag * allow no force send socket for internal listener * use wildcard in route extensibility * add route to external * adds dispatcher for outbound * adds custom for outbound * include extra routes * formatting * more decoupling with wildcard routes * move MWI_PRESENCE_BODY to route * code readability * fix import extra files * allow external definition of websocket domain #!trydef WEBSOCKET_DOMAIN "where.is.that" the substdef will be created with that value this avoids the creation of substdef expressions in local.cfg or other included scripts * add log prefix settings * dispatcher log formatting * use trace_ignored_methods * use modparamx for siptrace uri * set loglevel to debug for group route (cherry picked from commit c70c467dfd894321368dd15ba8b3259713a5a5e1) --- kamailio/acl-role.cfg | 2 +- kamailio/authorization.cfg | 13 +- kamailio/default-listeners.cfg | 55 +++-- kamailio/default.cfg | 145 ++++++++---- kamailio/defs.cfg | 16 +- kamailio/dispatcher-role-5.4.cfg | 48 ++-- kamailio/globals.cfg | 4 + kamailio/http.cfg | 33 +++ kamailio/kamailio.cfg | 3 + kamailio/kazoo-bindings.cfg | 24 +- kamailio/listener-defs.cfg | 135 ++++++++---- kamailio/message-role.cfg | 4 +- kamailio/nodes-role.cfg | 47 ++-- kamailio/presence-fast-pickup.cfg | 25 +-- kamailio/presence-notify.cfg | 4 +- kamailio/presence-reset.cfg | 20 ++ kamailio/presence-role.cfg | 56 ++--- kamailio/prometheus.cfg | 19 ++ kamailio/pusher-role.cfg | 353 +++++++++++++++--------------- kamailio/registrar-role.cfg | 44 ++-- kamailio/registrar-sync-role.cfg | 2 +- kamailio/sip_trace_all-role.cfg | 23 +- kamailio/tls-role.cfg | 38 +++- kamailio/trusted.cfg | 15 +- kamailio/websockets-role.cfg | 61 +++++- 25 files changed, 717 insertions(+), 472 deletions(-) create mode 100644 kamailio/http.cfg create mode 100644 kamailio/prometheus.cfg diff --git a/kamailio/acl-role.cfg b/kamailio/acl-role.cfg index f7580fb..dd52ba4 100644 --- a/kamailio/acl-role.cfg +++ b/kamailio/acl-role.cfg @@ -266,7 +266,7 @@ event_route[kazoo:consumer-event-acl-acl-flush] } -route[ACL_BINDINGS] +route[KZ_AMQP_BINDING_FRONTIERACL] { $var(payload) = $_s({"name": "acl-role", "exchange" : "frontier_acl" , "type" : "topic", "queue" : "FRONTIERACL-FLUSH-MY_HOSTNAME", "routing" : "flush" }); kazoo_subscribe("$var(payload)"); diff --git a/kamailio/authorization.cfg b/kamailio/authorization.cfg index ed92312..0dfbf4c 100644 --- a/kamailio/authorization.cfg +++ b/kamailio/authorization.cfg @@ -27,7 +27,7 @@ route[AUTHORIZATION] return; } - route(AUTHORIZATION_CHECK); + routes("AUTHORIZATION_CHECK_"); if (has_totag()) { setflag(FLAG_AUTHORIZED); @@ -47,14 +47,6 @@ route[AUTHORIZATION] } -route[AUTHORIZATION_CHECK] -{ - - route(AUTHORIZATION_CHECK_TRUSTED); - route(AUTHORIZATION_CHECK_REGISTERED); - -} - route[AUTHORIZATION_CHECK_TRUSTED] { if (isflagset(FLAG_AUTHORIZED)) return; @@ -73,6 +65,7 @@ route[AUTHORIZATION_CHECK_REGISTERED] #!ifdef REGISTRAR_ROLE $xavp(regcfg=>match_received) = $su; if (registered("location","sip:$Au", 2, 1) == 1) { + xlog("L_INFO", "$ci|authz|authorized for registered device\n"); route(SETUP_AUTH_ORIGIN); $xavp(hf[0]=>X-AUTH-Token) = $xavp(ulattrs=>token); setflag(FLAG_AUTHORIZED); @@ -249,7 +242,7 @@ route[AUTH_HEADERS_JSON] route[AUTH_HEADERS] { - remove_hf_re("^X-"); + route(REMOVE_RESERVED_HEADERS); if (!is_method("INVITE|MESSAGE|REFER")) { return; diff --git a/kamailio/default-listeners.cfg b/kamailio/default-listeners.cfg index ed53f81..2f04740 100644 --- a/kamailio/default-listeners.cfg +++ b/kamailio/default-listeners.cfg @@ -8,36 +8,49 @@ ## what they are doing :) #!ifndef WITHOUT_DEFAULT_LISTENER -listen=SIP_UDP_LISTENER -listen=SIP_TCP_LISTENER -listen=ALG_UDP_LISTENER -listen=ALG_TCP_LISTENER +listen=UDP_LISTENER_SIP +listen=TCP_LISTENER_SIP +listen=UDP_LISTENER_ALG +listen=TCP_LISTENER_ALG #!endif #!ifdef WITH_INTERNAL_LISTENER -listen=PORT_PROTO_INTERNAL_LISTENER +#!ifdef WITH_INTERNAL_LOAD_BALANCED_LISTENER +listen=PROTO_LB_LISTENER_INTERNAL +#!else +listen=PROTO_LISTENER_INTERNAL #!endif - -#!ifdef WITH_ADVERTISE_LISTENER -listen=SIP_UDP_ADVERTISED_LISTENER -listen=SIP_TCP_ADVERTISED_LISTENER -listen=ALG_UDP_ADVERTISED_LISTENER -listen=ALG_TCP_ADVERTISED_LISTENER #!endif #!ifdef WITH_EXTERNAL_LISTENER -listen=SIP_UDP_EXTERNAL_LISTENER -listen=SIP_TCP_EXTERNAL_LISTENER -listen=ALG_UDP_EXTERNAL_LISTENER -listen=ALG_TCP_EXTERNAL_LISTENER +listen=UDP_EXTERNAL_LISTENER_SIP +listen=TCP_EXTERNAL_LISTENER_SIP +listen=UDP_EXTERNAL_LISTENER_ALG +listen=TCP_EXTERNAL_LISTENER_ALG +#!else +#!ifdef WITH_EXTERNAL_SIP_LISTENER +listen=UDP_EXTERNAL_LISTENER_SIP +listen=TCP_EXTERNAL_LISTENER_SIP +#!endif +#!ifdef WITH_EXTERNAL_ALG_LISTENER +listen=UDP_EXTERNAL_LISTENER_ALG +listen=TCP_EXTERNAL_LISTENER_ALG +#!endif +#!endif + +#!ifdef WITH_LOAD_BALANCED_LISTENER +listen=UDP_LOAD_BALANCED_LISTENER_SIP +listen=TCP_LOAD_BALANCED_LISTENER_SIP +listen=UDP_LOAD_BALANCED_LISTENER_ALG +listen=TCP_LOAD_BALANCED_LISTENER_ALG #!else -#!ifdef WITH_EXTERNAL_LISTENER_SIP -listen=SIP_UDP_EXTERNAL_LISTENER -listen=SIP_TCP_EXTERNAL_LISTENER +#!ifdef WITH_LOAD_BALANCED_SIP_LISTENER +listen=UDP_LOAD_BALANCED_LISTENER_SIP +listen=TCP_LOAD_BALANCED_LISTENER_SIP #!endif -#!ifdef WITH_EXTERNAL_LISTENER_ALG -listen=ALG_UDP_EXTERNAL_LISTENER -listen=ALG_TCP_EXTERNAL_LISTENER +#!ifdef WITH_LOAD_BALANCED_ALG_LISTENER +listen=UDP_LOAD_BALANCED_LISTENER_ALG +listen=TCP_LOAD_BALANCED_LISTENER_ALG #!endif #!endif diff --git a/kamailio/default.cfg b/kamailio/default.cfg index 70b30a4..6d31094 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -64,6 +64,9 @@ loadmodule "siputils.so" ######## Text operations module ######## loadmodule "textopsx.so" +######## TCP operations module ######## +loadmodule "tcpops.so" + ######## sdp operations module ######## loadmodule "sdpops.so" @@ -132,9 +135,6 @@ include_file "message-role.cfg" #!ifdef NAT_TRAVERSAL_ROLE include_file "nat-traversal-role.cfg" #!endif -#!ifdef WEBSOCKETS_ROLE -include_file "websockets-role.cfg" -#!endif #!ifdef TLS_ROLE include_file "tls-role.cfg" #!endif @@ -175,6 +175,9 @@ include_file "blocker-role.cfg" ## sanity ## include_file "sanity.cfg" +## http ## +include_file "http.cfg" + ## auth ## include_file "trusted.cfg" include_file "authorization.cfg" @@ -222,21 +225,21 @@ route route(SIP_TRACE); #!endif + routes("KZ_$(rm)_START_ROUTE_"); + route(HANDLE_NOTIFY); #!ifdef REGISTRAR_ROLE route(HANDLE_REGISTER); #!endif - route_if_exists("CUSTOM_START_ROUTES"); - #!ifdef RESPONDER_ROLE if (isflagset(FLAG_INTERNALLY_SOURCED)) { route(HANDLE_RESPOND); } #!endif - if (!t_newtran()) { + if (!has_totag() && !t_newtran()) { xlog("L_ERROR", "$ci|default|failed to create transaction\n"); drop; exit; @@ -429,10 +432,7 @@ route[HANDLE_IN_DIALOG_REQUESTS] if (loose_route()) { #!ifdef NAT_TRAVERSAL_ROLE - if(!isdsturiset()) { - handle_ruri_alias(); - } - if ( is_method("ACK") ) { + if (handle_ruri_alias() != 1 && is_method("ACK") ) { # ACK is forwarded statelessly route(NAT_MANAGE); } @@ -482,6 +482,14 @@ route[HANDLE_IN_DIALOG_REQUESTS] } route(RELAY); } else { + #!ifdef NAT_TRAVERSAL_ROLE + if(!isdsturiset()) { + if (handle_ruri_alias() == 1) { + t_relay(); + exit; + }; + } + #!endif xlog("L_INFO", "$ci|default|message had a to-tag but can't be loose routed\n"); sl_send_reply("481", "Call Leg/Transaction Does Not Exist"); } @@ -490,6 +498,12 @@ route[HANDLE_IN_DIALOG_REQUESTS] route[PREPARE_INITIAL_REQUESTS] { + #!ifdef NAT_TRAVERSAL_ROLE + if(!isdsturiset()) { + handle_ruri_alias(); + } + #!endif + if (is_method("CANCEL")) { if (t_check_trans()) { route(RELAY); @@ -517,7 +531,7 @@ route[PREPARE_INITIAL_REQUESTS] } if (!isflagset(FLAG_INTERNALLY_SOURCED)) { - xlog("L_INFO", "$ci|log|call is not from internal source, recording route"); + xlog("L_INFO", "$ci|log|call is not from internal source, recording route\n"); remove_hf("Route"); record_route(); } else if (loose_route()) { @@ -534,7 +548,7 @@ route[SETUP] if (!isflagset(FLAG_INTERNALLY_SOURCED)) { route(DISPATCHER_FIND_ROUTES); } else { - route(ROUTE_TO_AOR); + route(ROUTE_TO_EXTERNAL); } #!endif @@ -546,8 +560,12 @@ route[BRANCH_HEADERS] if (!isflagset(FLAG_INTERNALLY_SOURCED)) { route(AUTH_HEADERS); } else { - remove_hf_re("^X-"); - remove_hf_re("^k-cid"); + if (isflagset(FLAG_OUTBOUND_DISPATCHER)) { + if ($xavp(cr=>dispatcher_route) != $null) { + route_if_exists($_s($xavp(cr=>dispatcher_route)_CUSTOM_BRANCH)); + } + } + route(REMOVE_RESERVED_HEADERS); } } @@ -555,11 +573,13 @@ route[BRANCH_HEADERS] branch_route[MANAGE_BRANCH] { xlog("L_INFO", "$ci|branch|new branch [$T_branch_idx] to $ru\n"); #!ifdef NAT_TRAVERSAL_ROLE - route(NAT_MANAGE); + if (!isflagset(FLAG_SKIP_NAT_MANAGE)) { + route(NAT_MANAGE); + } #!endif route(BRANCH_HEADERS); - route_if_exists("CUSTOM_BRANCH_HEADERS"); + routes("BRANCH_HEADERS_"); } route[RELAY] @@ -592,7 +612,7 @@ route[INTERNAL_TO_EXTERNAL_RELAY] } #!endif - route_if_exists("CUSTOM_INTERNAL_TO_EXTERNAL_RELAY"); + routes("INTERNAL_TO_EXTERNAL_RELAY_"); t_on_reply("EXTERNAL_REPLY"); t_on_failure("EXTERNAL_FAULT"); @@ -615,6 +635,8 @@ route[EXTERNAL_TO_INTERNAL_RELAY] } #!endif + routes("EXTERNAL_TO_INTERNAL_RELAY_"); + t_on_reply("INTERNAL_REPLY"); t_on_failure("INTERNAL_FAULT"); @@ -625,8 +647,10 @@ route[EXTERNAL_TO_INTERNAL_RELAY] } #!ifdef WITH_INTERNAL_LISTENER - xlog("L_DEBUG", "$ci|route|routing to internal thru PORT_PROTO_INTERNAL_LISTENER\n"); - force_send_socket(PORT_PROTO_INTERNAL_LISTENER); + #!ifndef NO_FORCE_INTERNAL_LISTENER + xlog("L_DEBUG", "$ci|route|routing to internal thru PROTO_LISTENER_INTERNAL\n"); + force_send_socket(PROTO_LISTENER_INTERNAL); + #!endif #!endif t_relay(); @@ -638,6 +662,8 @@ onreply_route[EXTERNAL_REPLY] xlog("L_INFO", "$ci|default|external reply $T_reply_code $T_reply_reason\n"); } + routes("EXTERNAL_REPLY_"); + if($rs == 100) { if($sel(cfg_get.kazoo.use_progressive_timers) == 1) { t_set_fr(0, $sel(cfg_get.kazoo.to_external_no_response_100_timer)); @@ -668,7 +694,7 @@ failure_route[EXTERNAL_FAULT] { # this branch handles failures (>=300) to external - route_if_exists("CUSTOM_EXTERNAL_FAULT"); + routes("EXTERNAL_FAULT_"); # if the failure cause was due to the transaction being # cancelled then we are complete @@ -678,6 +704,9 @@ failure_route[EXTERNAL_FAULT] } xlog("L_INFO", "$ci|failure|external reply $T_reply_code $T_reply_reason\n"); + if(isflagset(FLAG_OUTBOUND_DISPATCHER)) { + route(DISPATCHER_NEXT_ROUTE); + } } @@ -688,6 +717,8 @@ onreply_route[INTERNAL_REPLY] xlog("L_INFO", "$ci|default|internal reply $T_reply_code $T_reply_reason\n"); } + routes("INTERNAL_REPLY_"); + if($rs == 100) { if($sel(cfg_get.kazoo.use_progressive_timers) == 1) { t_set_fr(0, $sel(cfg_get.kazoo.to_internal_no_response_100_timer)); @@ -724,6 +755,8 @@ failure_route[INTERNAL_FAULT] # this branch handles failures (>=300) to our media servers, # which we can sometimes overcome by routing to another server + routes("INTERNAL_FAULT_"); + # if the failure cause was due to the transaction being # cancelled then we are complete if (t_is_canceled()) { @@ -741,13 +774,13 @@ failure_route[INTERNAL_FAULT] route(INTERNAL_REDIRECT); } - remove_hf_re("^X-.*"); + route(REMOVE_RESERVED_HEADERS); # change 6xx to 4xx - if (t_check_status("6[0-9][0-9]") && !t_check_status("600|603|604|606")) { + if (t_check_status("6[0-9][0-9]") && !t_check_status("600|603|604|606|607")) { $var(new_code) = "4" + $(T_reply_code{s.substr,1,0}); xlog("L_INFO", "$ci|failure|sending $T_reply_code reply as $var(new_code) $T_reply_reason\n"); - t_reply("$(var(new_code){s.int})", "$T_reply_reason"); + t_reply("$(var(new_code){s.int})", "$T_reply_reason"); # if the failure case was something that we should recover # from then try to find a new media server @@ -797,8 +830,8 @@ route[INTERNAL_REDIRECT] onsend_route { if (isflagset(FLAG_ASSOCIATE_USER) && is_request()) { $var(user_source) = $(ct{tobody.user}) + "@" + $si + ":" + $sp; - xlog("L_INFO", "$ci|default|associate traffic from $var(user_source) with media server sip:$sndto(ip):$sndto(port)\n"); - $sht(associations=>$var(user_source))= "sip:" + $sndto(ip) + ":" + $sndto(port); + xlog("L_INFO", "$ci|default|associate traffic from $var(user_source) with media server sip:$(ruri{uri.host}):$(ruri{uri.port});transport=$sndto(sproto)\n"); + $sht(associations=>$var(user_source)) = "sip:" + $(ruri{uri.host}) + ":" + $(ruri{uri.port}) + ";transport=" + $sndto(sproto); } #!ifdef SIP_TRACE_ROLE @@ -826,7 +859,7 @@ route[ROUTE_TO_AOR] if ($hdr(X-KAZOO-INVITE-FORMAT) == "route") { xlog("L_INFO", "$ci|default|routing $hdr(X-KAZOO-AOR) to $ruri\n"); } else if ($hdr(X-KAZOO-INVITE-FORMAT) == "contact") { - if(lookup("location", "$hdr(X-KAZOO-AOR)") > 0){ + if(lookup("location", "$hdr(X-KAZOO-AOR)") > 0) { xlog("L_INFO", "$ci|end|routing to contact $ru\n"); $avp(aor) = $hdr(X-KAZOO-AOR); handle_ruri_alias(); @@ -850,6 +883,49 @@ route[ROUTE_TO_AOR] } } +route[ROUTE_TO_GROUP] +{ + if ($hdr(X-KAZOO-Dispatcher-Group) == $null) { + return; + } + + $var(ds_primary_group) = $(hdr(X-KAZOO-Dispatcher-Group){s.int}); + $vn(dispatcher_route) = $hdr(X-KAZOO-Dispatcher-Route); + + xlog("L_INFO", "$ci|log|routing to group $hdr(X-KAZOO-Dispatcher-Group) : $hdr(X-KAZOO-Dispatcher-Route)\n"); + + if ($vn(dispatcher_route) != $null) { + xlog("L_DEBUG", "$ci|log|running $_s($vn(dispatcher_route)_BEFORE_DISPATCHER)\n"); + route_if_exists($_s($vn(dispatcher_route)_BEFORE_DISPATCHER)); + } + + route(DISPATCHER_SELECT_ROUTES); + + if ($vn(dispatcher_route) != $null) { + xlog("L_DEBUG", "$ci|log|running $_s($vn(dispatcher_route)_AFTER_DISPATCHER)\n"); + route_if_exists($_s($vn(dispatcher_route)_AFTER_DISPATCHER)); + $xavp(cr=>dispatcher_route) = $vn(dispatcher_route); + } + + setflag(FLAG_OUTBOUND_DISPATCHER); +} + +route[ROUTE_TO_CUSTOM] +{ + if ($hdr(X-KAZOO-Route) == $null) { + return; + } + + $var(custom_route) = $hdr(X-KAZOO-Route); +} + +route[ROUTE_TO_EXTERNAL] +{ + route(ROUTE_TO_AOR); + route(ROUTE_TO_GROUP); + route(ROUTE_TO_CUSTOM); +} + event_route[tm:local-request] { setflag(FLAG_LOCAL_REQUEST); @@ -862,22 +938,14 @@ event_route[tm:local-request] route(SIP_TRACE); #!endif - #!ifdef PRESENCE_ROLE - route(PRESENCE_LOCAL_REQUEST); - #!endif + routes("KZ_LOCAL_$(rm)_"); } event_route[evrexec:DEFERRED_INIT] { xlog("L_INFO", "processing deferred init\n"); - - #!ifdef PRESENCE_ROLE - route(PRESENCE_DEFERRED_INIT); - #!endif - - #!import_file "custom-init.cfg" - + routes("KZ_DEFERRED_INIT_"); } route[LOCAL_REQUEST] @@ -900,6 +968,9 @@ route[LOCAL_REQUEST] exit; } -#!import_file "custom-routes.cfg" +route[REMOVE_RESERVED_HEADERS] +{ + remove_hf_re_pv("$sel(cfg_get.kazoo.reserved_headers)"); +} # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab diff --git a/kamailio/defs.cfg b/kamailio/defs.cfg index 25cd001..70e7535 100644 --- a/kamailio/defs.cfg +++ b/kamailio/defs.cfg @@ -23,6 +23,9 @@ #!trydef OVERRIDE_MEDIA_REPLY_480 603 +#!trydef KZ_RESERVED_HEADERS "^(X-AUTH|X-KAZOO|X-FS-)" + + kazoo.to_internal_no_response_timer = EXTERNAL_TO_INTERNAL_NO_RESPONSE_TIMER descr "external to internal no response timer" kazoo.to_external_no_response_timer = INTERNAL_TO_EXTERNAL_NO_RESPONSE_TIMER descr "internal to external no response timer" @@ -37,6 +40,8 @@ kazoo.to_external_no_response_18X_timer = INTERNAL_TO_EXTERNAL_NO_RESPONSE_18X_T kazoo.override_media_reply_480 = OVERRIDE_MEDIA_REPLY_480 descr "sip code to send upstream when media returns 480 with session in progress" +kazoo.reserved_headers = KZ_RESERVED_HEADERS descr "headers that are removed" + #!ifndef MY_HOSTNAME #!substdef "!MY_HOSTNAME!$HN(f)!g" #!endif @@ -57,9 +62,13 @@ kazoo.override_media_reply_480 = OVERRIDE_MEDIA_REPLY_480 descr "sip code to sen #!ifndef WEBSOCKET_NO_ORIGIN_RESTRICTION #!ifndef MY_WEBSOCKET_DOMAIN +#!ifdef WEBSOCKET_DOMAIN +#!substdef "!MY_WEBSOCKET_DOMAIN!$def(WEBSOCKET_DOMAIN)!g" +#!else #!substdef "!MY_WEBSOCKET_DOMAIN!$HN(d)!g" #!endif #!endif +#!endif #!trydef KAZOO_LOG_LEVEL L_INFO @@ -70,8 +79,10 @@ kazoo.override_media_reply_480 = OVERRIDE_MEDIA_REPLY_480 descr "sip code to sen #!trydef KZ_DB_MODULE kazoo #!substdef "!KAMAILIO_DBMS!$def(KZ_DB_MODULE)!g" +#!trydef KAZOO_DB_LOCATION /etc/kazoo/kamailio/db + #!ifndef KAZOO_DATA_DIR -#!substdef "!KAZOO_DATA_DIR!/etc/kazoo/kamailio/db!g" +#!substdef "!KAZOO_DATA_DIR!$def(KAZOO_DB_LOCATION)!g" #!endif #!ifndef KAZOO_DB_URL @@ -118,6 +129,9 @@ kazoo.override_media_reply_480 = OVERRIDE_MEDIA_REPLY_480 descr "sip code to sen #!trydef KZ_MULTI_HOMED 0 +#!trydef KZ_LOG_PREFIX_MODE 1 +#!trydef KZ_LOG_PREFIX "$kzTS " + #!endif # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab diff --git a/kamailio/dispatcher-role-5.4.cfg b/kamailio/dispatcher-role-5.4.cfg index f7d7aab..fea78be 100644 --- a/kamailio/dispatcher-role-5.4.cfg +++ b/kamailio/dispatcher-role-5.4.cfg @@ -85,7 +85,8 @@ route[DISPATCHER_CLASSIFY_SOURCE] ds_is_from_list(KZ_DISPATCHER_PRESENCE_PRIMARY_GROUP, "$var(classify_dispatcher_flag)") || ds_is_from_list(KZ_DISPATCHER_PRESENCE_SECONDARY_GROUP, "$var(classify_dispatcher_flag)") || ds_is_from_list(KZ_DISPATCHER_REGISTRAR_PRIMARY_GROUP, "$var(classify_dispatcher_flag)") || - ds_is_from_list(KZ_DISPATCHER_REGISTRAR_SECONDARY_GROUP, "$var(classify_dispatcher_flag)")) { + ds_is_from_list(KZ_DISPATCHER_REGISTRAR_SECONDARY_GROUP, "$var(classify_dispatcher_flag)") || + ($hdr(X-FS-Core-UUID) != $null && $sht(media=>$hdr(X-FS-Core-UUID)) != $null)) { xlog("$var(log_request_level)", "$ci|log|originated from internal sources\n"); setflag(FLAG_INTERNALLY_SOURCED); } else { @@ -123,6 +124,8 @@ route[DISPATCHER_FIND_ROUTES] route(PRESENCE_FAST_PICKUP_ATTEMPT); #!endif + $var(ds_alg) = $sel(cfg_get.kazoo.dispatcher_algorithm); + route(DISPATCHER_SELECT_ROUTES); } @@ -130,7 +133,6 @@ route[DISPATCHER_SELECT_ROUTES] { $var(ds_group) = $var(ds_primary_group); - $var(ds_alg) = $sel(cfg_get.kazoo.dispatcher_algorithm); if(ds_list_exists("$var(ds_backup_group)")) { $var(ds_rule) = $_s($var(ds_primary_group)=$var(ds_alg);$var(ds_backup_group)=$var(ds_alg)); } else { @@ -198,41 +200,37 @@ route[PRINT_ROUTES] } -#!import_file "dispatcher-next-route.cfg" - -#!ifndef CUSTOM_DISPATCHER_NEXT_ROUTE # Try next destinations in failure route route[DISPATCHER_NEXT_ROUTE] { + if(!route_if_exists("DISPATCHER_CUSTOM_NEXT_ROUTE")) { + if($avp(ds_retries) >= $sel(cfg_get.kazoo.dispatcher_max_retries)) return; - if($avp(ds_retries) >= $sel(cfg_get.kazoo.dispatcher_max_retries)) return; - - $avp(ds_retries) = $avp(ds_retries) + 1; - if(ds_next_dst()) { - xlog("L_INFO", "$ci|log|routing call to next media server $du\n"); + $avp(ds_retries) = $avp(ds_retries) + 1; + if(ds_next_dst()) { + xlog("L_INFO", "$ci|log|routing call to next media server $du\n"); - setflag(FLAG_SKIP_NAT_CORRECTION); + setflag(FLAG_SKIP_NAT_CORRECTION); - # relay the request to the new media server - route(RELAY); + # relay the request to the new media server + route(RELAY); - exit; + exit; + } } } -#!endif event_route[dispatcher:dst-down] { - xlog("L_WARNING", "Destination down: $ru , $xavp(ds_dst=>uri), $xavp(ds_dst=>grp), $xavp(ds_dst=>attrs)\n"); + xlog("L_WARNING", "event|dispatcher|destination down: $ru , $xavp(ds_dst=>uri), $xavp(ds_dst=>grp), $xavp(ds_dst=>attrs)\n"); } event_route[dispatcher:dst-up] { - xlog("L_WARNING", "Destination up: $ru , $xavp(ds_dst=>uri), $xavp(ds_dst=>grp), $xavp(ds_dst=>attrs)\n"); + xlog("L_NOTICE", "event|dispatcher|destination up: $ru , $xavp(ds_dst=>uri), $xavp(ds_dst=>grp), $xavp(ds_dst=>attrs)\n"); } - -route[DISPATCHER_CHECK_MEDIA_SERVER] +route[MEDIA_SERVER_UP_DISPATCHER] { $var(check_media_server_ret) = 0; if($sel(cfg_get.kazoo.dispatcher_auto_add) == 1) { @@ -241,8 +239,11 @@ route[DISPATCHER_CHECK_MEDIA_SERVER] $var(SetId) = 2; } + $var(MediaUrlBack) = $var(MediaUrl); + #!ifdef WITH_INTERNAL_LISTENER - $var(dispatcher_socket) = $_s(socket=PORT_PROTO_INTERNAL_LISTENER;); + $var(dispatcher_socket) = $_s(socket=PROTO_LISTENER_INTERNAL;); + $var(MediaUrl) = $_s($var(MediaUrl);transport=$def(INTERNAL_PROTO)); #!else $var(dispatcher_socket) = ""; #!endif @@ -258,8 +259,11 @@ route[DISPATCHER_CHECK_MEDIA_SERVER] if($sel(cfg_get.kazoo.dispatcher_add_secondary_ip) == 1) { if($var(MediaIP) != "" && $var(MediaIP) != $(var(MediaUrl){uri.host})) { - $var(MediaUrlBack) = $var(MediaUrl); + #!ifdef WITH_INTERNAL_LISTENER + $var(MediaUrl) = $_s($(var(MediaUrlBack){uri.scheme}):$var(MediaIP):$(var(MediaUrlBack){uri.port});transport=$def(INTERNAL_PROTO)); + #!else $var(MediaUrl) = $_s($(var(MediaUrlBack){uri.scheme}):$var(MediaIP):$(var(MediaUrlBack){uri.port})); + #!endif $var(attrs) = $_s($var(dispatcher_socket)zone=$var(Zone);profile=$var(MediaProfile);duid=$(var(MediaUrl){s.corehash, MEDIA_SERVERS_HASH_SIZE});node=$var(MediaName)); $var(SetId) = $sel(cfg_get.kazoo.dispatcher_add_secondary_ip_group); route_if_exists("DISPATCHER_CUSTOM_MEDIA_CHECK"); @@ -268,10 +272,10 @@ route[DISPATCHER_CHECK_MEDIA_SERVER] $shv(dispatcher_reload) = 1; $var(check_media_server_ret) = 1; } - $var(MediaUrl) = $var(MediaUrlBack); } } + $var(MediaUrl) = $var(MediaUrlBack); } return $var(check_media_server_ret); } diff --git a/kamailio/globals.cfg b/kamailio/globals.cfg index 15dae62..03961dc 100644 --- a/kamailio/globals.cfg +++ b/kamailio/globals.cfg @@ -18,6 +18,8 @@ #!trydef FLAG_RECORD_ROUTE_ADDED 19 #!trydef FLAG_AUTHORIZED 20 #!trydef FLAG_REGISTERED_ENDPOINT 21 +#!trydef FLAG_SKIP_NAT_MANAGE 22 +#!trydef FLAG_OUTBOUND_DISPATCHER 23 ####### Global Parameters ######### fork = yes @@ -44,6 +46,8 @@ mem_summary = KZ_MEM_SUMMARY log_stderror = no log_facility = LOG_LOCAL0 log_name="kamailio" +log_prefix_mode = KZ_LOG_PREFIX_MODE +log_prefix = KZ_LOG_PREFIX ####### Alias Parameters ######### auto_aliases = yes diff --git a/kamailio/http.cfg b/kamailio/http.cfg new file mode 100644 index 0000000..e9805a8 --- /dev/null +++ b/kamailio/http.cfg @@ -0,0 +1,33 @@ +tcp_accept_no_cl=yes + +######## Basic HTTP request handling ######## +loadmodule "xhttp.so" + +#!ifdef WEBSOCKETS_ROLE +include_file "websockets-role.cfg" +#!endif + +#!ifndef DISABLE_PROMETHEUS_STATS +include_file "prometheus.cfg" +#!endif + +event_route[xhttp:request] +{ + set_reply_close(); + set_reply_no_connect(); + +#!ifdef WEBSOCKETS_ROLE + if($Rp == WS_PORT || $Rp == WSS_PORT) { + route("WEBSOCKET_REQUEST"); + } +#!endif + +#!ifndef DISABLE_PROMETHEUS_STATS + if( $Rp == PROMETHEUS_PORT) { + route("PROMETHEUS_REQUEST"); + } +#!endif + + xhttp_reply("200", "OK", "text/html", "Wrong URL $hu"); +} + diff --git a/kamailio/kamailio.cfg b/kamailio/kamailio.cfg index fd83fab..4d5f318 100644 --- a/kamailio/kamailio.cfg +++ b/kamailio/kamailio.cfg @@ -65,4 +65,7 @@ include_file "default-listeners.cfg" ####### Default Configuration ###### include_file "default.cfg" +####### Extras Configuration ###### +import_files "./extras.d/*.cfg" + # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab diff --git a/kamailio/kazoo-bindings.cfg b/kamailio/kazoo-bindings.cfg index a11d9e7..18e46a0 100644 --- a/kamailio/kazoo-bindings.cfg +++ b/kamailio/kazoo-bindings.cfg @@ -50,29 +50,7 @@ modparam("kazoo", "amqp_connection", "MY_AMQP_DENARY_URL") event_route[kazoo:mod-init] { - #!ifdef PRESENCE_ROLE - route(PRESENCE_BINDINGS); - #!endif - - #!ifdef MESSAGE_ROLE - route(MESSAGE_BINDINGS); - #!endif - - #!ifdef REGISTRAR_ROLE - route(REGISTRAR_BINDINGS); - #!endif - - #!ifdef NODES_ROLE - route(NODES_BINDINGS); - #!endif - - #!ifdef ACL_ROLE - route(ACL_BINDINGS); - #!endif - - route(TRUSTED_BINDINGS); - - #!import_file "kazoo-custom-bindings.cfg" + routes("KZ_AMQP_BINDING_"); } diff --git a/kamailio/listener-defs.cfg b/kamailio/listener-defs.cfg index 73d7889..b9a7ae0 100644 --- a/kamailio/listener-defs.cfg +++ b/kamailio/listener-defs.cfg @@ -10,63 +10,104 @@ #!trydef ALG_S_PORT 7001 #!trydef WS_PORT 5064 #!trydef WSS_PORT 5065 + + #!trydef INTERNAL_PORT 5070 #!trydef INTERNAL_PROTO udp -#!trydef SIP_PUBLIC_PORT 5060 -#!trydef SIP_S_PUBLIC_PORT 5061 -#!trydef ALG_PUBLIC_PORT 7000 -#!trydef ALG_S_PUBLIC_PORT 7001 + +#!trydef SIP_EXTERNAL_LISTEN_PORT 5060 +#!trydef SIP_EXTERNAL_ADVERTISE_PORT 5060 +#!trydef SIP_S_EXTERNAL_LISTEN_PORT 5061 +#!trydef SIP_S_EXTERNAL_ADVERTISE_PORT 5061 +#!trydef ALG_EXTERNAL_LISTEN_PORT 7000 +#!trydef ALG_EXTERNAL_ADVERTISE_PORT 7000 +#!trydef ALG_S_EXTERNAL_LISTEN_PORT 7001 +#!trydef ALG_S_EXTERNAL_ADVERTISE_PORT 7001 +#!trydef WS_EXTERNAL_LISTEN_PORT 5064 +#!trydef WS_EXTERNAL_ADVERTISE_PORT 5064 +#!trydef WSS_EXTERNAL_LISTEN_PORT 5065 +#!trydef WSS_EXTERNAL_ADVERTISE_PORT 5065 + +#!trydef SIP_LB_LISTEN_PORT 5060 +#!trydef SIP_LB_ADVERTISE_PORT 5060 +#!trydef SIP_S_LB_LISTEN_PORT 5061 +#!trydef SIP_S_LB_ADVERTISE_PORT 5061 +#!trydef ALG_LB_LISTEN_PORT 7000 +#!trydef ALG_LB_ADVERTISE_PORT 7000 +#!trydef ALG_S_LB_LISTEN_PORT 7001 +#!trydef ALG_S_LB_ADVERTISE_PORT 7001 +#!trydef WS_LB_LISTEN_PORT 5064 +#!trydef WS_LB_ADVERTISE_PORT 5064 +#!trydef WSS_LB_LISTEN_PORT 5065 +#!trydef WSS_LB_ADVERTISE_PORT 5065 + +#!substdef "!TCP_INTERNAL!tcp:MY_IP_ADDRESS:$def(INTERNAL_PORT)!g" +#!substdef "!PROTO_INTERNAL!$def(INTERNAL_PROTO):MY_IP_ADDRESS:$def(INTERNAL_PORT)!g" +#!substdef "!PROTO_LB_INTERNAL!$def(INTERNAL_PROTO):MY_IP_ADDRESS:$def(INTERNAL_PORT) advertise $def(LOAD_BALANCE_IP):$def(INTERNAL_PORT)!g" #!substdef "!UDP_SIP!udp:MY_IP_ADDRESS:$def(SIP_PORT)!g" #!substdef "!TCP_SIP!tcp:MY_IP_ADDRESS:$def(SIP_PORT)!g" #!substdef "!TLS_SIP!tls:MY_IP_ADDRESS:$def(SIP_S_PORT)!g" - #!substdef "!UDP_ALG!udp:MY_IP_ADDRESS:$def(ALG_PORT)!g" #!substdef "!TCP_ALG!tcp:MY_IP_ADDRESS:$def(ALG_PORT)!g" #!substdef "!TLS_ALG!tls:MY_IP_ADDRESS:$def(ALG_S_PORT)!g" - #!substdef "!TCP_WS!tcp:MY_IP_ADDRESS:$def(WS_PORT)!g" #!substdef "!TLS_WSS!tls:MY_IP_ADDRESS:$def(WSS_PORT)!g" -#!substdef "!PROTO_PORT_INTERNAL!$def(INTERNAL_PROTO):MY_IP_ADDRESS:$def(INTERNAL_PORT)!g" - -#!substdef "!UDP_ADVERTISED_SIP!udp:MY_IP_ADDRESS:$def(SIP_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_PUBLIC_PORT)!g" -#!substdef "!TCP_ADVERTISED_SIP!tcp:MY_IP_ADDRESS:$def(SIP_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_PUBLIC_PORT)!g" -#!substdef "!TLS_ADVERTISED_SIP!tcp:MY_IP_ADDRESS:$def(SIP_S_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_S_PUBLIC_PORT)!g" -#!substdef "!UDP_ADVERTISED_ALG!udp:MY_IP_ADDRESS:$def(ALG_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_PUBLIC_PORT)!g" -#!substdef "!TCP_ADVERTISED_ALG!tcp:MY_IP_ADDRESS:$def(ALG_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_PUBLIC_PORT)!g" -#!substdef "!TLS_ADVERTISED_ALG!tcp:MY_IP_ADDRESS:$def(ALG_S_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_S_PUBLIC_PORT)!g" - -#!substdef "!UDP_EXTERNAL_SIP!udp:MY_IP_ADDRESS:$def(SIP_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_PUBLIC_PORT)!g" -#!substdef "!TCP_EXTERNAL_SIP!tcp:MY_IP_ADDRESS:$def(SIP_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_PUBLIC_PORT)!g" -#!substdef "!TLS_EXTERNAL_SIP!tcp:MY_IP_ADDRESS:$def(SIP_S_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_S_PUBLIC_PORT)!g" -#!substdef "!UDP_EXTERNAL_ALG!udp:MY_IP_ADDRESS:$def(ALG_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_PUBLIC_PORT)!g" -#!substdef "!TCP_EXTERNAL_ALG!tcp:MY_IP_ADDRESS:$def(ALG_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_PUBLIC_PORT)!g" -#!substdef "!TLS_EXTERNAL_ALG!tcp:MY_IP_ADDRESS:$def(ALG_S_PUBLIC_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_S_PUBLIC_PORT)!g" - -#!substdef "!SIP_UDP_LISTENER!UDP_SIP!g" -#!substdef "!SIP_TCP_LISTENER!TCP_SIP!g" -#!substdef "!SIP_TLS_LISTENER!TLS_SIP!g" -#!substdef "!ALG_UDP_LISTENER!UDP_ALG!g" -#!substdef "!ALG_TCP_LISTENER!TCP_ALG!g" -#!substdef "!ALG_TLS_LISTENER!TLS_ALG!g" - -#!substdef "!WS_TCP_LISTENER!TCP_WS!g" -#!substdef "!WSS_TLS_LISTENER!TLS_WSS!g" - -#!substdef "!SIP_UDP_EXTERNAL_LISTENER!UDP_EXTERNAL_SIP!g" -#!substdef "!SIP_TCP_EXTERNAL_LISTENER!TCP_EXTERNAL_SIP!g" -#!substdef "!SIP_TLS_EXTERNAL_LISTENER!TLS_EXTERNAL_SIP!g" -#!substdef "!ALG_UDP_EXTERNAL_LISTENER!UDP_EXTERNAL_ALG!g" -#!substdef "!ALG_TCP_EXTERNAL_LISTENER!TCP_EXTERNAL_ALG!g" -#!substdef "!ALG_TLS_EXTERNAL_LISTENER!TLS_EXTERNAL_ALG!g" - -#!substdef "!SIP_UDP_ADVERTISED_LISTENER!UDP_ADVERTISED_SIP!g" -#!substdef "!SIP_TCP_ADVERTISED_LISTENER!TCP_ADVERTISED_SIP!g" -#!substdef "!SIP_TLS_ADVERTISED_LISTENER!TLS_ADVERTISED_SIP!g" -#!substdef "!ALG_UDP_ADVERTISED_LISTENER!UDP_ADVERTISED_ALG!g" -#!substdef "!ALG_TCP_ADVERTISED_LISTENER!TCP_ADVERTISED_ALG!g" -#!substdef "!ALG_TLS_ADVERTISED_LISTENER!TLS_ADVERTISED_ALG!g" - -#!substdef "!PORT_PROTO_INTERNAL_LISTENER!PROTO_PORT_INTERNAL!g" +#!substdef "!UDP_EXTERNAL_SIP!udp:MY_IP_ADDRESS:$def(SIP_EXTERNAL_LISTEN_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_EXTERNAL_ADVERTISE_PORT)!g" +#!substdef "!TCP_EXTERNAL_SIP!tcp:MY_IP_ADDRESS:$def(SIP_EXTERNAL_LISTEN_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_EXTERNAL_ADVERTISE_PORT)!g" +#!substdef "!TLS_EXTERNAL_SIP!tcp:MY_IP_ADDRESS:$def(SIP_S_EXTERNAL_LISTEN_PORT) advertise $def(MY_PUBLIC_IP):$def(SIP_S_EXTERNAL_ADVERTISE_PORT)!g" +#!substdef "!UDP_EXTERNAL_ALG!udp:MY_IP_ADDRESS:$def(ALG_EXTERNAL_LISTEN_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_EXTERNAL_ADVERTISE_PORT)!g" +#!substdef "!TCP_EXTERNAL_ALG!tcp:MY_IP_ADDRESS:$def(ALG_EXTERNAL_LISTEN_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_EXTERNAL_ADVERTISE_PORT)!g" +#!substdef "!TLS_EXTERNAL_ALG!tcp:MY_IP_ADDRESS:$def(ALG_S_EXTERNAL_LISTEN_PORT) advertise $def(MY_PUBLIC_IP):$def(ALG_S_EXTERNAL_ADVERTISE_PORT)!g" +#!substdef "!TCP_EXTERNAL_WS!tcp:MY_IP_ADDRESS:$def(WS_EXTERNAL_LISTEN_PORT) advertise $def(MY_PUBLIC_IP):$def(WS_EXTERNAL_ADVERTISE_PORT)!g" +#!substdef "!TLS_EXTERNAL_WSS!tls:MY_IP_ADDRESS:$def(WSS_EXTERNAL_LISTEN_PORT) advertise $def(MY_PUBLIC_IP):$def(WSS_EXTERNAL_ADVERTISE_PORT)!g" + +#!substdef "!UDP_EXT_ALG!udp:MY_IP_ADDRESS:$def(ALG_EXTERNAL_LISTEN_PORT)!g" +#!substdef "!UDP_LB_ALG!udp:MY_IP_ADDRESS:$def(ALG_LB_LISTEN_PORT)!g" + +#!substdef "!UDP_LOAD_BALANCED_SIP!udp:MY_IP_ADDRESS:$def(SIP_LB_LISTEN_PORT) advertise $def(LOAD_BALANCE_IP):$def(SIP_LB_ADVERTISE_PORT)!g" +#!substdef "!TCP_LOAD_BALANCED_SIP!tcp:MY_IP_ADDRESS:$def(SIP_LB_LISTEN_PORT) advertise $def(LOAD_BALANCE_IP):$def(SIP_LB_ADVERTISE_PORT)!g" +#!substdef "!TLS_LOAD_BALANCED_SIP!tcp:MY_IP_ADDRESS:$def(SIP_S_LB_LISTEN_PORT) advertise $def(LOAD_BALANCE_IP):$def(SIP_S_LB_ADVERTISE_PORT)!g" +#!substdef "!UDP_LOAD_BALANCED_ALG!udp:MY_IP_ADDRESS:$def(ALG_LB_LISTEN_PORT) advertise $def(LOAD_BALANCE_IP):$def(ALG_LB_ADVERTISE_PORT)!g" +#!substdef "!TCP_LOAD_BALANCED_ALG!tcp:MY_IP_ADDRESS:$def(ALG_LB_LISTEN_PORT) advertise $def(LOAD_BALANCE_IP):$def(ALG_LB_ADVERTISE_PORT)!g" +#!substdef "!TLS_LOAD_BALANCED_ALG!tcp:MY_IP_ADDRESS:$def(ALG_S_LB_LISTEN_PORT) advertise $def(LOAD_BALANCE_IP):$def(ALG_S_LB_ADVERTISE_PORT)!g" +#!substdef "!TCP_LOAD_BALANCED_WS!tcp:MY_IP_ADDRESS:$def(WS_LB_LISTEN_PORT) advertise $def(LOAD_BALANCE_IP):$def(WS_LB_ADVERTISE_PORT)!g" +#!substdef "!TLS_LOAD_BALANCED_WSS!tls:MY_IP_ADDRESS:$def(WSS_LB_LISTEN_PORT) advertise $def(LOAD_BALANCE_IP):$def(WSS_LB_ADVERTISE_PORT)!g" + + +#!substdef "!UDP_LISTENER_EXT_ALG!UDP_EXT_ALG!g" +#!substdef "!UDP_LISTENER_LB_ALG!UDP_LB_ALG!g" + +#!substdef "!TCP_LISTENER_INTERNAL!TCP_INTERNAL!g" +#!substdef "!PROTO_LISTENER_INTERNAL!PROTO_INTERNAL!g" +#!substdef "!PROTO_LB_LISTENER_INTERNAL!PROTO_LB_INTERNAL!g" + +#!substdef "!UDP_LISTENER_SIP!UDP_SIP!g" +#!substdef "!TCP_LISTENER_SIP!TCP_SIP!g" +#!substdef "!TLS_LISTENER_SIP!TLS_SIP!g" +#!substdef "!UDP_LISTENER_ALG!UDP_ALG!g" +#!substdef "!TCP_LISTENER_ALG!TCP_ALG!g" +#!substdef "!TLS_LISTENER_ALG!TLS_ALG!g" +#!substdef "!TCP_LISTENER_WS!TCP_WS!g" +#!substdef "!TLS_LISTENER_WSS!TLS_WSS!g" + +#!substdef "!UDP_EXTERNAL_LISTENER_SIP!UDP_EXTERNAL_SIP!g" +#!substdef "!TCP_EXTERNAL_LISTENER_SIP!TCP_EXTERNAL_SIP!g" +#!substdef "!TLS_EXTERNAL_LISTENER_SIP!TLS_EXTERNAL_SIP!g" +#!substdef "!UDP_EXTERNAL_LISTENER_ALG!UDP_EXTERNAL_ALG!g" +#!substdef "!TCP_EXTERNAL_LISTENER_ALG!TCP_EXTERNAL_ALG!g" +#!substdef "!TLS_EXTERNAL_LISTENER_ALG!TLS_EXTERNAL_ALG!g" +#!substdef "!TCP_EXTERNAL_LISTENER_WS!TCP_EXTERNAL_WS!g" +#!substdef "!TLS_EXTERNAL_LISTENER_WSS!TLS_EXTERNAL_WSS!g" + +#!substdef "!UDP_LOAD_BALANCED_LISTENER_SIP!UDP_LOAD_BALANCED_SIP!g" +#!substdef "!TCP_LOAD_BALANCED_LISTENER_SIP!TCP_LOAD_BALANCED_SIP!g" +#!substdef "!TLS_LOAD_BALANCED_LISTENER_SIP!TLS_LOAD_BALANCED_SIP!g" +#!substdef "!UDP_LOAD_BALANCED_LISTENER_ALG!UDP_LOAD_BALANCED_ALG!g" +#!substdef "!TCP_LOAD_BALANCED_LISTENER_ALG!TCP_LOAD_BALANCED_ALG!g" +#!substdef "!TLS_LOAD_BALANCED_LISTENER_ALG!TLS_LOAD_BALANCED_ALG!g" +#!substdef "!TCP_LOAD_BALANCED_LISTENER_WS!TCP_LOAD_BALANCED_WS!g" +#!substdef "!TLS_LOAD_BALANCED_LISTENER_WSS!TLS_LOAD_BALANCED_WSS!g" + diff --git a/kamailio/message-role.cfg b/kamailio/message-role.cfg index f1a31c3..a510b60 100644 --- a/kamailio/message-role.cfg +++ b/kamailio/message-role.cfg @@ -55,7 +55,7 @@ event_route[kazoo:consumer-event-sms-outbound] route[MESSAGE_ROUTE] { - remove_hf_re("^X-"); + route(REMOVE_RESERVED_HEADERS); route(ROUTE_TO_AOR); $var(JObj) = $rb; @@ -90,7 +90,7 @@ failure_route[MESSAGE_FAULT] kazoo_publish($var(exchange), $var(RK), $var(Payload)); } -route[MESSAGE_BINDINGS] +route[KZ_AMQP_BINDING_MESSAGE] { $var(key) = "kamailio@MY_HOSTNAME"; $var(payload) = $_s({"name": "sms", "exchange": "im", "type": "topic", "queue": "MSG-QUEUE-MY_HOSTNAME", "routing": "sms.outbound.$(var(key){kz.encode}).*", "no_ack": false, "federate": true }); diff --git a/kamailio/nodes-role.cfg b/kamailio/nodes-role.cfg index d53df68..e63808b 100644 --- a/kamailio/nodes-role.cfg +++ b/kamailio/nodes-role.cfg @@ -163,10 +163,14 @@ route[CHECK_MEDIA_SERVERS] $shtex(media=>$var(MediaUrl)::zone) = 0; $sht(media=>$var(MediaUrl)::uuid) = $var(MediaInstanceUUID); $shtex(media=>$var(MediaUrl)::uuid) = 0; + $sht(media=>$var(MediaInstanceUUID)) = $var(MediaUrl); + $shtex(media=>$var(MediaInstanceUUID)) = 0; route(MEDIA_SERVER_UP); } else if($sht(media=>$var(MediaUrl)::uuid) != $var(MediaInstanceUUID)) { $sht(media=>$var(MediaUrl)::uuid) = $var(MediaInstanceUUID); $shtex(media=>$var(MediaUrl)::uuid) = 0; + $sht(media=>$var(MediaInstanceUUID)) = $var(MediaUrl); + $shtex(media=>$var(MediaInstanceUUID)) = 0; $var(Zone) = $sht(media=>$var(MediaUrl)::zone); route(MEDIA_SERVER_RESTART); } else if($var(MediaReconnected) == 1) { @@ -187,61 +191,44 @@ event_route[htable:expired:media] { $var(MediaUrl) = $(shtrecord(key){re.subst,/(.*)::(.*)/\1/}); $var(Zone) = $sht(media=>$var(MediaUrl)::zone); + $var(CoreUUID) = $sht(media=>$var(MediaUrl)::uuid); route(MEDIA_SERVER_DOWN); + $sht(media=>$var(CoreUUID)) = $null; + $sht(media=>$var(MediaUrl)::uuid) = $null; + $sht(media=>$var(MediaUrl)::zone) = $null; } route[MEDIA_SERVER_UP] { xlog("L_NOTICE", "event|nodes|$var(Msg-ID) $var(Node) reported new media server $var(MediaUrl) in zone $var(Zone)\n"); - -#!ifdef DISPATCHER_ROLE - route(DISPATCHER_CHECK_MEDIA_SERVER); -#!endif - -#!ifdef PRESENCE_ROLE - route(PRESENCE_FAST_PICKUP_START); - route(RESET_PUBLISHER); -#!endif - + routes("MEDIA_SERVER_UP_"); } route[MEDIA_SERVER_DOWN] { xlog("L_WARNING", "event|nodes|heartbeat expired for media server $var(MediaUrl) in zone $var(Zone)\n"); - -#!ifdef PRESENCE_ROLE - route(RESET_PUBLISHER); -#!endif - + routes("MEDIA_SERVER_DOWN_"); } route[MEDIA_SERVER_RESTART] { xlog("L_NOTICE", "event|nodes|$var(Msg-ID) media server $var(MediaUrl) restarted in zone $var(Zone)\n"); - -#!ifdef PRESENCE_ROLE - route(RESET_PUBLISHER); -#!endif - + routes("MEDIA_SERVER_RESTART_"); } route[MEDIA_SERVER_RECONNECTED] { xlog("L_NOTICE", "event|nodes|$var(Msg-ID) media server $var(MediaUrl) reconnected to $var(Node) in zone $var(Zone)\n"); - -#!ifdef PRESENCE_ROLE - route(RESET_PUBLISHER); -#!endif - + routes("MEDIA_SERVER_RECONNECTED_"); } -#!ifndef NODES_CUSTOM_BINDINGS -route[NODES_BINDINGS] +route[KZ_AMQP_BINDING_NODES] { - $var(payload) = $_s({"name": "nodes", "exchange" : "nodes" , "type" : "fanout", "queue" : "nodes-MY_HOSTNAME", "exclusive": false, "federate": true }); - kazoo_subscribe("$var(payload)"); + if(!check_route_exists("KZ_AMQP_BINDING_CUSTOM_NODES")) { + $var(payload) = $_s({"name": "nodes", "exchange" : "nodes" , "type" : "fanout", "queue" : "nodes-MY_HOSTNAME", "exclusive": false, "federate": true }); + kazoo_subscribe("$var(payload)"); + } } -#!endif route[LISTENER_STATUS] { diff --git a/kamailio/presence-fast-pickup.cfg b/kamailio/presence-fast-pickup.cfg index 0e93a08..278bf96 100644 --- a/kamailio/presence-fast-pickup.cfg +++ b/kamailio/presence-fast-pickup.cfg @@ -10,6 +10,16 @@ kazoo.presence_fast_pickup_cookies = KZ_PRESENCE_FAST_PICKUP_COOKIES descr "main kazoo.presence_fast_pickup_realtime = KZ_PRESENCE_FAST_PICKUP_REALTIME descr "queries channels api for realtime status of call-id" kazoo.presence_fast_pickup_star_5 = KZ_PRESENCE_FAST_PICKUP_STAR_5 descr "treats *5 as park pickup, queries state of *3" +route[MEDIA_SERVER_UP_FAST_PICKUP] +{ + route(PRESENCE_FAST_PICKUP_START); +} + +route[KZ_DEFERRED_INIT_FAST_PICKUP] +{ + route(PRESENCE_FAST_PICKUP_START); +} + route[PRESENCE_FAST_PICKUP_START] { $sht(fp=>count) = 0; @@ -60,9 +70,6 @@ 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"); - if(!is_present_hf("k-cid")) { - append_hf("k-cid: $var(replaced_call_id)\r\n"); - } xlog("L_INFO", "$ci|pickup|found shortcut for call-id $var(replaced_call_id) , redirecting ($(ru{uri.user})) to $du\n"); route(RELAY); exit(); @@ -90,9 +97,6 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT] } remove_hf_re("^Replaces"); append_hf("Replaces: $var(rep)\r\n"); - if(!is_present_hf("k-cid")) { - append_hf("k-cid: $var(replaced_call_id)\r\n"); - } xlog("L_INFO", "$ci|pickup|call-id $var(replaced_call_id) found, redirecting call ($(ru{uri.user})) to $du => $var(rep)\n"); route(RELAY); exit(); @@ -113,9 +117,6 @@ 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)); - if(!is_present_hf("k-cid")) { - append_hf("k-cid: $sht(park=>$var(park)::callid)\r\n"); - } xlog("L_INFO", "$ci|pickup|redirecting park request to $du , callid : $sht(park=>$var(park)::callid)\n"); route(RELAY); exit(); @@ -125,9 +126,6 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT] if($sht(park=>$(ru{uri.user})@$(ru{uri.domain})) != $null) { $du = $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})); - if(!is_present_hf("k-cid")) { - append_hf("k-cid: $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})::callid)\r\n"); - } xlog("L_INFO", "$ci|pickup|redirecting park request to $du, callid: $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})::callid)\n"); route(RELAY); exit(); @@ -146,9 +144,6 @@ route[PRESENCE_FAST_PICKUP_ATTEMPT] $du = $(kzR{kz.json,Channels[0].switch_url}); if($du != $null) { xlog("L_INFO", "$ci|pickup|redirecting park request to $du from realtime query reply\n"); - if(!is_present_hf("k-cid")) { - append_hf("k-cid: $(kzR{kz.json,Channels[0].call_id})\r\n"); - } route(RELAY); exit(); } diff --git a/kamailio/presence-notify.cfg b/kamailio/presence-notify.cfg index 1de9e0f..9dc6789 100644 --- a/kamailio/presence-notify.cfg +++ b/kamailio/presence-notify.cfg @@ -20,7 +20,7 @@ kazoo.presence_notify_log_level = KZ_PRESENCE_NOTIFY_LOG_LEVEL descr "loglevel f ######## Generic Hash Table container in shared memory ######## modparam("htable", "htable", "notify=>size=16;autoexpire=3600;updateexpire=1;initval=0") -route[PRESENCE_LOCAL_REQ_NOTIFY] +route[KZ_LOCAL_NOTIFY_PRESENCE] { if($rm != "NOTIFY") { return; @@ -188,7 +188,7 @@ route[PRESENCE_PUBLISHER_CLEANUP] } -route[PRESENCE_DEFERRED_INIT] +route[KZ_DEFERRED_INIT_PRESENCE] { xlog("L_INFO", "event|notify|processing presence deferred init\n"); $var(sqlres) = sql_query("cb", "update tmp_probe set action = 0 where action = 2"); diff --git a/kamailio/presence-reset.cfg b/kamailio/presence-reset.cfg index d521f2c..61d326c 100644 --- a/kamailio/presence-reset.cfg +++ b/kamailio/presence-reset.cfg @@ -152,3 +152,23 @@ event_route[kazoo:consumer-event-presence-reset] } } + +route[MEDIA_SERVER_UP_RESET_PUBLISHER] +{ + route(RESET_PUBLISHER); +} + +route[MEDIA_SERVER_DOWN_RESET_PUBLISHER] +{ + route(RESET_PUBLISHER); +} + +route[MEDIA_SERVER_RESTART_RESET_PUBLISHER] +{ + route(RESET_PUBLISHER); +} + +route[MEDIA_SERVER_RECONNECTED_RESET_PUBLISHER] +{ + route(RESET_PUBLISHER); +} diff --git a/kamailio/presence-role.cfg b/kamailio/presence-role.cfg index 651c39f..514a251 100644 --- a/kamailio/presence-role.cfg +++ b/kamailio/presence-role.cfg @@ -498,14 +498,16 @@ route[PRESENCE_UPDATE] } -#!define MWI_PRESENCE_BODY $(kzE{re.subst,/"Messages-Waiting"\s*\:\s*"[^"]*"/"State" : "$var(State)"/} \ -{re.subst,/"From"\s*\:\s*"[^"]*"/"From" : "$var(presentity)"/} \ -{re.subst,/"From-User"\s*\:\s*"[^"]*"/"From-User" : "$var(user)"/} \ -{re.subst,/"To"\s*\:\s*"[^"]*"/"To" : "$var(presentity)"/} \ -{re.subst,/"To-User"\s*\:\s*"[^"]*"/"To-User" : "$var(user)"/} \ -{re.subst,/"Messages-New"\s*\:\s*[^,]*/"Direction" : "initiator"/} \ -{re.subst,/"Event-Name"\s*\:\s*"[^"]*"/"Event-Name" : "presence"/}); - +route[MWI_PRESENCE_BODY] +{ + $var(mwi_body) = $(kzE{re.subst,/"Messages-Waiting"\s*\:\s*"[^"]*"/"State" : "$var(State)"/}); + $var(mwi_body) = $(var(mwi_body){re.subst,/"From"\s*\:\s*"[^"]*"/"From" : "$var(presentity)"/}); + $var(mwi_body) = $(var(mwi_body){re.subst,/"From-User"\s*\:\s*"[^"]*"/"From-User" : "$var(user)"/}); + $var(mwi_body) = $(var(mwi_body){re.subst,/"To"\s*\:\s*"[^"]*"/"To" : "$var(presentity)"/}); + $var(mwi_body) = $(var(mwi_body){re.subst,/"To-User"\s*\:\s*"[^"]*"/"To-User" : "$var(user)"/}); + $var(mwi_body) = $(var(mwi_body){re.subst,/"Messages-New"\s*\:\s*[^,]*/"Direction" : "initiator"/}); + $var(mwi_body) = $(var(mwi_body){re.subst,/"Event-Name"\s*\:\s*"[^"]*"/"Event-Name" : "presence"/}); +} route[MWI_AS_PRESENCE] { @@ -522,41 +524,27 @@ route[MWI_AS_PRESENCE] $var(State) = "terminated"; } - $var(payload) = MWI_PRESENCE_BODY + route(MWI_PRESENCE_BODY); + $var(payload) = $var(mwi_body); $var(JObj) = $var(payload); route(PRESENCE_UPDATE); } -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" : false, "federate" : true }); - kazoo_subscribe("$var(payload)"); - #!endif - - route(PRESENCE_API_BINDINGS); - - route(PRESENCE_FAST_PICKUP_START); - -} - -route[PRESENCE_API_BINDINGS] +route[KZ_AMQP_BINDING_PRESENCE] { - #!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": false, "federate": true }); - kazoo_subscribe("$var(payload)"); - #!endif - + if(!check_route_exists("KZ_AMQP_BINDING_CUSTOM_PRESENCE")) { + $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)"); + } } -route[PRESENCE_LOCAL_REQUEST] +route[KZ_AMQP_BINDING_PRESENCE_API] { - route(PRESENCE_LOCAL_REQ_NOTIFY); + if(!check_route_exists("KZ_AMQP_BINDING_CUSTOM_PRESENCE_API")) { + $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)"); + } } route[PRESENCE_AUTHN] diff --git a/kamailio/prometheus.cfg b/kamailio/prometheus.cfg new file mode 100644 index 0000000..c070d33 --- /dev/null +++ b/kamailio/prometheus.cfg @@ -0,0 +1,19 @@ +######## Prometheus Exporter ######## + +#!trydef PROMETHEUS_PORT 9494 +#!substdef "!TCP_PROMETHEUS!tcp:MY_IP_ADDRESS:$def(PROMETHEUS_PORT)!g" +#!substdef "!PROMETHEUS_TCP_LISTENER!TCP_PROMETHEUS!g" + +listen=PROMETHEUS_TCP_LISTENER + +loadmodule "xhttp_prom.so" +# show all kamailio statistics. +modparam("xhttp_prom", "xhttp_prom_stats", "all") +modparam("xhttp_prom", "xhttp_prom_buf_size", 65536) +route[PROMETHEUS_REQUEST] +{ + if (prom_check_uri()) { + prom_dispatch(); + exit; + } +} diff --git a/kamailio/pusher-role.cfg b/kamailio/pusher-role.cfg index 9baa47d..42ac63f 100644 --- a/kamailio/pusher-role.cfg +++ b/kamailio/pusher-role.cfg @@ -8,213 +8,214 @@ modparam("htable", "htable", "push_cache=>autoexpire=60;") route[PUSHER_ROUTE] { - if ( (!is_method("INVITE")) || (!isflagset(FLAG_INTERNALLY_SOURCED)) || $hdr(X-KAZOO-PUSHER-Token-ID) == $null) - return; - - xlog("L_INFO", "$ci|pusher|start deliver call to $hdr(X-KAZOO-PUSHER-Token-ID)\n"); - if(route(PUSHER_PREPARE_PUSH)) { - if(reg_fetch_contacts("location", "$hdr(X-KAZOO-AOR)", "callee")) { - $du = $(ulc(callee=>received)); - $fs = $(ulc(callee=>socket)); - xlog("L_INFO", "$ci|pusher|routing $hdr(X-KAZOO-AOR) to contact $du\n"); - send_reply(100, "calling a push device"); - t_set_fr(0, 2000); - route(PUSHER_TO_EXTERNAL_RELAY); - } else { - send_reply(100, "waking the push device"); - route(PUSHER_SEND_PUSH_NOTIFICATION); - } - } - exit(); + if ( (!is_method("INVITE")) || (!isflagset(FLAG_INTERNALLY_SOURCED)) || $hdr(X-KAZOO-PUSHER-Token-ID) == $null) return; + + xlog("L_INFO", "$ci|pusher|start deliver call to $hdr(X-KAZOO-PUSHER-Token-ID)\n"); + if(route(PUSHER_PREPARE_PUSH)) { + if(reg_fetch_contacts("location", "$hdr(X-KAZOO-AOR)", "callee")) { + $du = $(ulc(callee=>received)); + $fs = $(ulc(callee=>socket)); + xlog("L_INFO", "$ci|pusher|routing $hdr(X-KAZOO-AOR) to contact $du\n"); + send_reply(100, "calling a push device"); + t_set_fr(0, 2000); + route(PUSHER_TO_EXTERNAL_RELAY); + } else { + send_reply(100, "waking the push device"); + route(PUSHER_SEND_PUSH_NOTIFICATION); + } + } + exit(); } route[PUSHER_TO_EXTERNAL_RELAY] { - remove_hf_re("^X-.*"); - set_forward_no_connect(); - t_on_branch("MANAGE_BRANCH"); - t_on_reply("EXTERNAL_REPLY"); - t_on_failure("PUSHER_EXTERNAL_FAULT"); - t_relay(); + record_route(); + route(REMOVE_RESERVED_HEADERS); + set_forward_no_connect(); + t_on_branch("MANAGE_BRANCH"); + t_on_reply("EXTERNAL_REPLY"); + t_on_failure("PUSHER_EXTERNAL_FAULT"); + t_relay(); } failure_route[PUSHER_EXTERNAL_FAULT] { - if (!t_check_status("486|487|603") && $avp(push_sent) != 1) { - send_reply(182, "sending push notification"); - route(PUSHER_SEND_PUSH_NOTIFICATION); - } else if (t_check_status("487")) { - xlog("L_INFO", "$ci|pusher|push transaction canceled\n"); - t_reply("$T_reply_code", "pusher canceled"); - } else { - xlog("L_INFO", "$ci|pusher|push transaction result - $T_reply_code\n"); - t_reply("$T_reply_code", "pusher failed"); - } + if (!t_check_status("486|487|603") && $avp(push_sent) != 1) { + send_reply(182, "sending push notification"); + route(PUSHER_SEND_PUSH_NOTIFICATION); + } else if (t_check_status("487")) { + xlog("L_INFO", "$ci|pusher|push transaction canceled\n"); + t_reply("$T_reply_code", "pusher canceled"); + } else { + xlog("L_INFO", "$ci|pusher|push transaction result - $T_reply_code\n"); + t_reply("$T_reply_code", "pusher failed"); + } } route[PUSHER_PREPARE_PUSH] { - if (t_newtran()) { - route(PUSHER_PREPARE_PUSH_PAYLOAD); - remove_hf_re("^X-.*"); - t_save_lumps(); - t_set_auto_inv_100(0); - return 1; - } else { - sl_send_reply(500, "error creating transaction for waking the dead guy"); - return 0; - } + $var(nt) = t_newtran(); + if ($var(nt) != 0) { + route(PUSHER_PREPARE_PUSH_PAYLOAD); + route(REMOVE_RESERVED_HEADERS); + t_save_lumps(); + t_set_auto_inv_100(0); + return 1; + } else { + sl_send_reply(500, "error creating transaction for waking the dead guy"); + return 0; + } } route[PUSHER_PREPARE_PUSH_PAYLOAD] { - $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(TokenProxy) = $hdr(X-KAZOO-PUSHER-Token-Proxy); - #!ifdef PUSHER_TOKEN_PROXY - $var(TokenProxy) = $_s(PUSHER_TOKEN_PROXY); - #!endif - - ### token for fast reg ### - $var(TokenReg) = $uuid(g); - $sht(push_cache=>$var(TokenReg)) = 1; - - ### caller-id ### - if($hdr(Remote-Party-ID) != $null) { - $var(from_user) = $(hdr(Remote-Party-ID){tobody.user}); - $var(from_name) = $(hdr(Remote-Party-ID){tobody.display}{re.subst,/"//g}); - } else if($hdr(P-Asserted-Identity) != $null) { - $var(from_user) = $(hdr(P-Asserted-Identity){tobody.user}); - $var(from_name) = $(hdr(P-Asserted-Identity){tobody.display}{re.subst,/"//g}); - } else if($hdr(P-Preferred-Identity) != $null) { - $var(from_user) = $(hdr(P-Preferred-Identity){tobody.user}); - $var(from_name) = $(hdr(P-Preferred-Identity){tobody.display}{re.subst,/"//g}); - } else { - $var(from_user) = $(hdr(From){tobody.user}); - $var(from_name) = $(hdr(From){tobody.display}{re.subst,/"//g}); - } - - $var(from) = $_s($var(from_user) - $var(from_name)); - - - $var(PushPayload) = $_s({"call-id" : "$ci", "proxy" : "$var(TokenProxy)", "caller-id-number" : "$var(from_user)", "caller-id-name" : "$var(from_name)", "registration-token" : "$var(TokenReg)"}); - $var(Payload) = $_s({ "Event-Category" : "notification", "Event-Name" : "push_req", "Call-ID" : "$ci", "Token-ID" : "$var(TokenID)", "Token-Type" : "$var(TokenType)", "Token-App" : "$var(TokenApp)", "Alert-Key" : "IC_SIL", "Alert-Params" : ["$var(from)"], "Sound" : "ring.caf", "Payload" : $var(PushPayload) }); - - $avp(push_routing_key) = "notification.push." + $var(TokenType) + "." + $var(TokenID); - $avp(push_payload) = $var(Payload); + $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(TokenProxy) = $hdr(X-KAZOO-PUSHER-Token-Proxy); + #!ifdef PUSHER_TOKEN_PROXY + $var(TokenProxy) = $_s(PUSHER_TOKEN_PROXY); + #!endif + + ### token for fast reg ### + $var(TokenReg) = $uuid(g); + $sht(push_cache=>$var(TokenReg)) = 1; + + ### caller-id ### + if($hdr(Remote-Party-ID) != $null) { + $var(from_user) = $(hdr(Remote-Party-ID){tobody.user}); + $var(from_name) = $(hdr(Remote-Party-ID){tobody.display}{re.subst,/"//g}); + } else if($hdr(P-Asserted-Identity) != $null) { + $var(from_user) = $(hdr(P-Asserted-Identity){tobody.user}); + $var(from_name) = $(hdr(P-Asserted-Identity){tobody.display}{re.subst,/"//g}); + } else if($hdr(P-Preferred-Identity) != $null) { + $var(from_user) = $(hdr(P-Preferred-Identity){tobody.user}); + $var(from_name) = $(hdr(P-Preferred-Identity){tobody.display}{re.subst,/"//g}); + } else { + $var(from_user) = $(hdr(From){tobody.user}); + $var(from_name) = $(hdr(From){tobody.display}{re.subst,/"//g}); + } + + $var(from) = $_s($var(from_user) - $var(from_name)); + + + $var(PushPayload) = $_s({"call-id" : "$ci", "proxy" : "$var(TokenProxy)", "caller-id-number" : "$var(from_user)", "caller-id-name" : "$var(from_name)", "registration-token" : "$var(TokenReg)"}); + $var(Payload) = $_s({ "Event-Category" : "notification", "Event-Name" : "push_req", "Call-ID" : "$ci", "Token-ID" : "$var(TokenID)", "Token-Type" : "$var(TokenType)", "Token-App" : "$var(TokenApp)", "Alert-Key" : "IC_SIL", "Alert-Params" : ["$var(from)"], "Sound" : "ring.caf", "Payload" : $var(PushPayload) }); + + $avp(push_routing_key) = "notification.push." + $var(TokenType) + "." + $var(TokenID); + $avp(push_payload) = $var(Payload); } route[PUSHER_SEND_PUSH_NOTIFICATION] { - xlog("L_INFO", "$ci|pusher|sending push notification request\n"); - xlog("L_DEBUG", "$ci|pusher|pushing to $avp(push_routing_key) : $avp(push_payload)\n"); - t_set_fr(20000, 20000); - $avp(push_sent) = 1; - t_suspend(); - $sht(push_cache=>$(tu{s.tolower})) = $_s(a=0;index=$T(id_index);label=$T(id_label)); - kazoo_publish("pushes", $avp(push_routing_key), $avp(push_payload)); + xlog("L_INFO", "$ci|pusher|sending push notification request\n"); + xlog("L_DEBUG", "$ci|pusher|pushing to $avp(push_routing_key) : $avp(push_payload)\n"); + t_set_fr(20000, 20000); + $avp(push_sent) = 1; + t_suspend(); + $sht(push_cache=>$(tu{s.tolower})) = $_s(a=0;index=$T(id_index);label=$T(id_label)); + kazoo_publish("pushes", $avp(push_routing_key), $avp(push_payload)); } route[PUSHER_ATTEMPT_REGISTRATION] { - if (!is_method("REGISTER")) { - return; - } - - if($hdr(X-Token-Reg) != $null) { - if($sht(push_cache=>$hdr(X-Token-Reg)) != $null) { - $sht(push_cache=>$hdr(X-Token-Reg)) = $null; - xlog("L_INFO", "$ci|pusher|registration with x-token-reg $hdr(X-Token-Reg)\n"); - $xavp(ulattrs=>custom_channel_vars) = "{}"; - $xavp(ulattrs[0]=>x_token_reg) = $hdr(X-Token-Reg); - route(SAVE_LOCATION); - exit; - } else { - xlog("L_INFO", "$ci|pusher|registration x-token-reg '$hdr(X-Token-Reg)' from header was not found\n"); - } - } - - if($(sel(contact.uri){uri.param,x-token-reg}) != "") { - if($sht(push_cache=>$(sel(contact.uri){uri.param,x-token-reg})) != $null) { - $sht(push_cache=>$(sel(contact.uri){uri.param,x-token-reg})) = $null; - xlog("L_INFO", "$ci|pusher|registration with x-token-reg $(sel(contact.uri){uri.param,x-token-reg})\n"); - $xavp(ulattrs=>custom_channel_vars) = "{}"; - $xavp(ulattrs[0]=>x_token_reg) = $(sel(contact.uri){uri.param,x-token-reg}); - route(SAVE_LOCATION); - exit; - } else { - xlog("L_INFO", "$ci|pusher|registration x-token-reg from contact uri param '$(sel(contact.uri){uri.param,x-token-reg})' was not found\n"); - } - } - - if($(sel(contact){tobody.params}{param.value,x-token-reg}) != "") { - if($sht(push_cache=>$(sel(contact){tobody.params}{param.value,x-token-reg})) != $null) { - $sht(push_cache=>$(sel(contact){tobody.params}{param.value,x-token-reg})) = $null; - xlog("L_INFO", "$ci|pusher|registration with x-token-reg $(sel(contact){tobody.params}{param.value,x-token-reg})\n"); - $xavp(ulattrs=>custom_channel_vars) = "{}"; - $xavp(ulattrs[0]=>x_token_reg) = $(sel(contact){tobody.params}{param.value,x-token-reg}); - route(SAVE_LOCATION); - exit; - } else { - xlog("L_INFO", "$ci|pusher|registration x-token-reg from contact param '$(sel(contact){tobody.params}{param.value,x-token-reg})' was not found\n"); - } - } + if (!is_method("REGISTER")) { + return; + } + + if($hdr(X-Token-Reg) != $null) { + if($sht(push_cache=>$hdr(X-Token-Reg)) != $null) { + $sht(push_cache=>$hdr(X-Token-Reg)) = $null; + xlog("L_INFO", "$ci|pusher|registration with x-token-reg $hdr(X-Token-Reg)\n"); + $xavp(ulattrs=>custom_channel_vars) = "{}"; + $xavp(ulattrs[0]=>x_token_reg) = $hdr(X-Token-Reg); + route(SAVE_LOCATION); + exit; + } else { + xlog("L_INFO", "$ci|pusher|registration x-token-reg '$hdr(X-Token-Reg)' from header was not found\n"); + } + } + + if($(sel(contact.uri){uri.param,x-token-reg}) != "") { + if($sht(push_cache=>$(sel(contact.uri){uri.param,x-token-reg})) != $null) { + $sht(push_cache=>$(sel(contact.uri){uri.param,x-token-reg})) = $null; + xlog("L_INFO", "$ci|pusher|registration with x-token-reg $(sel(contact.uri){uri.param,x-token-reg})\n"); + $xavp(ulattrs=>custom_channel_vars) = "{}"; + $xavp(ulattrs[0]=>x_token_reg) = $(sel(contact.uri){uri.param,x-token-reg}); + route(SAVE_LOCATION); + exit; + } else { + xlog("L_INFO", "$ci|pusher|registration x-token-reg from contact uri param '$(sel(contact.uri){uri.param,x-token-reg})' was not found\n"); + } + } + + if($(sel(contact){tobody.params}{param.value,x-token-reg}) != "") { + if($sht(push_cache=>$(sel(contact){tobody.params}{param.value,x-token-reg})) != $null) { + $sht(push_cache=>$(sel(contact){tobody.params}{param.value,x-token-reg})) = $null; + xlog("L_INFO", "$ci|pusher|registration with x-token-reg $(sel(contact){tobody.params}{param.value,x-token-reg})\n"); + $xavp(ulattrs=>custom_channel_vars) = "{}"; + $xavp(ulattrs[0]=>x_token_reg) = $(sel(contact){tobody.params}{param.value,x-token-reg}); + route(SAVE_LOCATION); + exit; + } else { + xlog("L_INFO", "$ci|pusher|registration x-token-reg from contact param '$(sel(contact){tobody.params}{param.value,x-token-reg})' was not found\n"); + } + } } route[PUSHER_ON_REGISTRATION] { - if( ( $(xavp(ulattrs=>x_token_reg){s.len}) > 0 || - $(xavp(ulattrs=>custom_channel_vars){kz.json,Pusher-Application}{s.len}) > 0) && - $var(Status) == "Registered") { - if($sht(push_cache=>$(tu{s.tolower})) != $null) { - xlog("L_INFO", "$ci|pusher|device registered, delivering the call\n"); - $var(ref) = $sht(push_cache=>$(tu{s.tolower})); - $sht(push_cache=>$(tu{s.tolower})) = $null; - $var(t_index) = $(var(ref){param.value,index}{s.int}); - $var(t_label) = $(var(ref){param.value,label}{s.int}); - t_continue("$var(t_index)", "$var(t_label)", "PUSHER_DELIVER_CALL"); - } - } + if( ( $(xavp(ulattrs=>x_token_reg){s.len}) > 0 || + $(xavp(ulattrs=>custom_channel_vars){kz.json,Pusher-Application}{s.len}) > 0) && + $var(Status) == "Registered") { + if($sht(push_cache=>$(tu{s.tolower})) != $null) { + xlog("L_INFO", "$ci|pusher|device registered, delivering the call\n"); + $var(ref) = $sht(push_cache=>$(tu{s.tolower})); + $sht(push_cache=>$(tu{s.tolower})) = $null; + $var(t_index) = $(var(ref){param.value,index}{s.int}); + $var(t_label) = $(var(ref){param.value,label}{s.int}); + t_continue("$var(t_index)", "$var(t_label)", "PUSHER_DELIVER_CALL"); + } + } } route[PUSHER_DELIVER_CALL] { - if(reg_fetch_contacts("location", "$hdr(X-KAZOO-AOR)", "callee")) { - if($sel(cfg_get.kazoo.pusher_log_contacts) == 1) { - xlog("L_NOTICE", "$ci|pusher|callee=>aor: $(ulc(callee=>aor))\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>count: $(ulc(callee=>count))\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>domain: $(ulc(callee=>domain))\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>aorhash $(ulc(callee=>aorhash))\n"); - $var(i) = 0; - while($var(i) < $(ulc(callee=>count))) { - xlog("L_NOTICE", "$ci|pusher|--- contact [$var(i)]\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>addr: $(ulc(callee=>addr)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>path: $(ulc(callee=>path)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>received: $(ulc(callee=>received)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>expires: $(ulc(callee=>expires)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>callid: $(ulc(callee=>callid)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>regid: $(ulc(callee=>regid)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>q: $(ulc(callee=>q)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>cseq: $(ulc(callee=>cseq)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>flags: $(ulc(callee=>flags)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>cflags: $(ulc(callee=>cflags)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>user_agent: $(ulc(callee=>user_agent)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>socket: $(ulc(callee=>socket)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>modified: $(ulc(callee=>modified)[$var(i)])\n"); - xlog("L_NOTICE", "$ci|pusher|callee=>methods: $(ulc(callee=>methods)[$var(i)])\n"); - $var(i) = $var(i) + 1; - } - } - - $var(idx) = $ulc(callee=>count) - 1; - $du = $(ulc(callee=>received)[$var(idx)]); - $fs = $(ulc(callee=>socket)[$var(idx)]); - t_set_fr(30000, 30000); - route(PUSHER_TO_EXTERNAL_RELAY); - } else { - t_reply(486, "Failed to lookup after resume"); - } + if(reg_fetch_contacts("location", "$hdr(X-KAZOO-AOR)", "callee")) { + if($sel(cfg_get.kazoo.pusher_log_contacts) == 1) { + xlog("L_NOTICE", "$ci|pusher|callee=>aor: $(ulc(callee=>aor))\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>count: $(ulc(callee=>count))\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>domain: $(ulc(callee=>domain))\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>aorhash $(ulc(callee=>aorhash))\n"); + $var(i) = 0; + while($var(i) < $(ulc(callee=>count))) { + xlog("L_NOTICE", "$ci|pusher|--- contact [$var(i)]\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>addr: $(ulc(callee=>addr)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>path: $(ulc(callee=>path)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>received: $(ulc(callee=>received)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>expires: $(ulc(callee=>expires)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>callid: $(ulc(callee=>callid)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>regid: $(ulc(callee=>regid)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>q: $(ulc(callee=>q)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>cseq: $(ulc(callee=>cseq)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>flags: $(ulc(callee=>flags)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>cflags: $(ulc(callee=>cflags)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>user_agent: $(ulc(callee=>user_agent)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>socket: $(ulc(callee=>socket)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>modified: $(ulc(callee=>modified)[$var(i)])\n"); + xlog("L_NOTICE", "$ci|pusher|callee=>methods: $(ulc(callee=>methods)[$var(i)])\n"); + $var(i) = $var(i) + 1; + } + } + + $var(idx) = $ulc(callee=>count) - 1; + $du = $(ulc(callee=>received)[$var(idx)]); + $fs = $(ulc(callee=>socket)[$var(idx)]); + t_set_fr(30000, 30000); + route(PUSHER_TO_EXTERNAL_RELAY); + } else { + t_reply(486, "Failed to lookup after resume"); + } } diff --git a/kamailio/registrar-role.cfg b/kamailio/registrar-role.cfg index 144d08a..7af930f 100644 --- a/kamailio/registrar-role.cfg +++ b/kamailio/registrar-role.cfg @@ -181,7 +181,7 @@ route[HANDLE_REGISTER] $vn(password) = $null; - route_if_exists("CUSTOM_HANDLER_REGISTER"); + routes("HANDLE_REGISTER_"); #!ifdef PUSHER_ROLE route(PUSHER_ATTEMPT_REGISTRATION); @@ -431,10 +431,18 @@ route[SAVE_LOCATION] } #!ifdef WITH_INTERNAL_LISTENER + #!ifdef WITHOUT_REGISTRAR_PROXY_PATH_PROTO $var(proxy_path) = $_s(sip:MY_IP_ADDRESS:$def(INTERNAL_PORT)); + #!else + $var(proxy_path) = $_s(sip:MY_IP_ADDRESS:$def(INTERNAL_PORT);transport=$def(INTERNAL_PROTO)); + #!endif $var(proto) = $def(INTERNAL_PROTO); #!else + #!ifdef WITHOUT_REGISTRAR_PROXY_PATH_PROTO $var(proxy_path) = $_s(sip:MY_IP_ADDRESS:$var(port)); + #!else + $var(proxy_path) = $_s(sip:MY_IP_ADDRESS:$var(port);transport=$proto); + #!endif $var(proto) = $proto; #!endif @@ -508,33 +516,21 @@ event_route[kazoo:consumer-event-directory-reg-flush] #!endif } -route[REGISTRAR_BINDINGS] +route[KZ_AMQP_BINDING_REGISTRAR_FLUSH] { - #!import_file "registrar-custom-bindings.cfg" - - #!ifndef REGISTRAR_CUSTOM_BINDINGS - - $var(payload) = $_s({"name": "registrar-flush", "exchange": "registrar", "type": "topic", "queue": "registrar-flush-MY_HOSTNAME", "routing": "registration.flush.*", "federate": true }); - kazoo_subscribe("$var(payload)"); - - #!endif - - route(REGISTRAR_API_BINDINGS); - - #!ifdef REGISTRAR_SYNC_ROLE - route(REGISTRAR_SYNC_BINDINGS); - #!endif + if(!check_route_exists("KZ_AMQP_BINDING_CUSTOM_REGISTRAR_FLUSH")) { + $var(payload) = $_s({"name": "registrar-flush", "exchange": "registrar", "type": "topic", "queue": "registrar-flush-MY_HOSTNAME", "routing": "registration.flush.*", "federate": true }); + kazoo_subscribe("$var(payload)"); + } } -route[REGISTRAR_API_BINDINGS] +route[KZ_AMQP_BINDING_REGISTRAR_API] { - #!import_file "registrar-api-custom-bindings.cfg" - - #!ifndef REGISTRAR_API_CUSTOM_BINDINGS - $var(payload) = $_s({"name": "registrar-api", "exchange": "registrar", "type": "topic", "queue": "registrar-api-MY_HOSTNAME", "routing": "registration.search_req.*", "federate": true }); - kazoo_subscribe("$var(payload)"); - #!endif + if(!check_route_exists("KZ_AMQP_BINDING_CUSTOM_REGISTRAR_API")) { + $var(payload) = $_s({"name": "registrar-api", "exchange": "registrar", "type": "topic", "queue": "registrar-api-MY_HOSTNAME", "routing": "registration.search_req.*", "federate": true }); + kazoo_subscribe("$var(payload)"); + } } @@ -649,6 +645,4 @@ event_route[usrloc:contact-expired] #!include_file "registrar-sync-role.cfg" #!endif -#!import_file "registrar-custom-handler.cfg" - # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab diff --git a/kamailio/registrar-sync-role.cfg b/kamailio/registrar-sync-role.cfg index 7670c18..2109b88 100644 --- a/kamailio/registrar-sync-role.cfg +++ b/kamailio/registrar-sync-role.cfg @@ -24,7 +24,7 @@ event_route[kazoo:consumer-event-directory-reg-sync] } -route[REGISTRAR_SYNC_BINDINGS] +route[KZ_AMQP_BINDING_REGISTRAR_SYNC] { $var(payload) = $_s({"exchange": "registrar", "type": "topic", "queue": "registrar-sync-MY_HOSTNAME", "routing": "registration.sync"}); kazoo_subscribe("$var(payload)"); diff --git a/kamailio/sip_trace_all-role.cfg b/kamailio/sip_trace_all-role.cfg index ab4f4ab..2c42436 100644 --- a/kamailio/sip_trace_all-role.cfg +++ b/kamailio/sip_trace_all-role.cfg @@ -13,11 +13,32 @@ ####### Siptrace module ########## loadmodule "siptrace.so" -modparam("siptrace", "duplicate_uri", SIP_TRACE_URI) +modparamx("siptrace", "duplicate_uri", "$def(SIP_TRACE_URI)") modparam("siptrace", "hep_mode_on", 1) modparam("siptrace", "hep_version", 3) modparam("siptrace", "hep_capture_id", HEP_CAPTURE_ID) modparam("siptrace", "trace_to_database", 0) modparam("siptrace", "trace_on", KZ_TRACE) modparam("siptrace", "trace_mode", 1) +modparam("siptrace", "trace_init_mode", 1) + +#!trydef KZ_TRACE_IGNORED_PORTS "9494|5090" +#!trydef KZ_TRACE_IGNORED_METHODS "OPTIONS" + +kazoo.trace_ignored_ports = KZ_TRACE_IGNORED_PORTS descr "trace ignored ports" +kazoo.trace_ignored_methods = KZ_TRACE_IGNORED_METHODS descr "trace ignored methods" + +event_route[siptrace:msg] +{ + + if($rm =~ $sel(cfg_get.kazoo.trace_ignored_methods)) { + xlog("L_DEBUG", "$ci|trace|dropping trace for method $rm\n"); + drop(); + } + + if($Rp =~ $sel(cfg_get.kazoo.trace_ignored_ports)) { + xlog("L_INFO", "$ci|trace|dropping trace for port $Rp\n"); + drop(); + } +} diff --git a/kamailio/tls-role.cfg b/kamailio/tls-role.cfg index 8b2f413..1bda577 100644 --- a/kamailio/tls-role.cfg +++ b/kamailio/tls-role.cfg @@ -1,13 +1,45 @@ +#!trydef TLS_CONFIG_FILE /etc/kazoo/kamailio/tls.cfg + +#!substdef "!TLS_CFG!$def(TLS_CONFIG_FILE)!g" + enable_tls = yes -listen=SIP_TLS_LISTENER -listen=ALG_TLS_LISTENER +#!ifndef WITHOUT_DEFAULT_LISTENER +listen=TLS_LISTENER_SIP +listen=TLS_LISTENER_ALG +#!endif + +#!ifdef WITH_EXTERNAL_TLS_LISTENER +listen=TLS_EXTERNAL_LISTENER_SIP +listen=TLS_EXTERNAL_LISTENER_ALG +#!else +#!ifdef WITH_EXTERNAL_TLS_SIP_LISTENER +listen=TLS_EXTERNAL_LISTENER_SIP +#!endif +#!ifdef WITH_EXTERNAL_TLS_ALG_LISTENER +listen=TLS_EXTERNAL_LISTENER_ALG +#!endif +#!endif + +#!ifdef WITH_LOAD_BALANCED_TLS_LISTENER +listen=TLS_LOAD_BALANCED_LISTENER_SIP +listen=TLS_LOAD_BALANCED_LISTENER_ALG +#!else +#!ifdef WITH_LOAD_BALANCED_TLS_SIP_LISTENER +listen=TLS_LOAD_BALANCED_LISTENER_SIP +#!endif +#!ifdef WITH_LOAD_BALANCED_TLS_ALG_LISTENER +listen=TLS_LOAD_BALANCED_LISTENER_ALG +#!endif +#!endif + ####### TLS Parameters ######### loadmodule "tls.so" -modparam("tls", "config", "/etc/kazoo/kamailio/tls.cfg") +modparam("tls", "config", "TLS_CFG") modparam("tls", "low_mem_threshold1", 1) modparam("tls", "low_mem_threshold2", 1) +modparam("tls", "xavp_cfg", "tls") modparam("debugger", "mod_level", "tls=1") diff --git a/kamailio/trusted.cfg b/kamailio/trusted.cfg index 9184eb9..2c711ff 100644 --- a/kamailio/trusted.cfg +++ b/kamailio/trusted.cfg @@ -117,17 +117,12 @@ route[TRUSTED_QUERY] }; } -route[TRUSTED_BINDINGS] +route[KZ_AMQP_BINDING_TRUSTED] { - #!import_file "trusted-custom-bindings.cfg" - - #!ifndef TRUSTED_CUSTOM_BINDINGS - - $var(payload) = $_s({"name": "trusted-reload", "exchange": "trusted", "type": "topic", "queue": "trusted-reload-MY_HOSTNAME", "routing": "trusted.reload", "federate": true }); - kazoo_subscribe("$var(payload)"); - - #!endif - + if(!check_route_exists("KZ_AMQP_BINDING_CUSTOM_TRUSTED")) { + $var(payload) = $_s({"name": "trusted-reload", "exchange": "trusted", "type": "topic", "queue": "trusted-reload-MY_HOSTNAME", "routing": "trusted.reload", "federate": true }); + kazoo_subscribe("$var(payload)"); + } } event_route[kazoo:consumer-event-trusted-reload] diff --git a/kamailio/websockets-role.cfg b/kamailio/websockets-role.cfg index 468fd51..c16c3f9 100644 --- a/kamailio/websockets-role.cfg +++ b/kamailio/websockets-role.cfg @@ -1,10 +1,56 @@ tcp_accept_no_cl=yes -listen=WS_TCP_LISTENER + +#!ifndef WITHOUT_DEFAULT_LISTENER +#!ifdef WS_LISTEN_PLAIN +listen=TCP_LISTENER_WS +#!endif +#!ifdef TLS_ROLE +listen=TLS_LISTENER_WSS +#!endif +#!endif + +#!ifdef WITH_EXTERNAL_WEBSOCKETS_LISTENER +#!ifdef WS_LISTEN_PLAIN +listen=TCP_EXTERNAL_LISTENER_WS +#!endif #!ifdef TLS_ROLE -listen=WSS_TLS_LISTENER +listen=TLS_EXTERNAL_LISTENER_WSS +#!endif +#!else +#!ifdef WITH_EXTERNAL_WS_LISTENER +#!ifdef WS_LISTEN_PLAIN +listen=TCP_EXTERNAL_LISTENER_WS +#!endif +#!endif +#!ifdef WITH_EXTERNAL_WSS_LISTENER +#!ifdef TLS_ROLE +listen=TLS_EXTERNAL_LISTENER_WSS +#!endif +#!endif #!endif +#!ifdef WITH_LOAD_BALANCED_WEBSOCKETS_LISTENER +#!ifdef WS_LISTEN_PLAIN +listen=TCP_LOAD_BALANCED_LISTENER_WS +#!endif +#!ifdef TLS_ROLE +listen=TLS_LOAD_BALANCED_LISTENER_WSS +#!endif +#!else +#!ifdef WITH_LOAD_BALANCED_WS_LISTENER +#!ifdef WS_LISTEN_PLAIN +listen=TCP_LOAD_BALANCED_LISTENER_WS +#!endif +#!endif +#!ifdef WITH_LOAD_BALANCED_WSS_LISTENER +#!ifdef TLS_ROLE +listen=TLS_LOAD_BALANCED_LISTENER_WSS +#!endif +#!endif +#!endif + + ######## NAT Traversal module - signaling functions ######## #!ifndef NATHELPER_LOADED #!trydef NATHELPER_LOADED @@ -14,10 +60,6 @@ loadmodule "nathelper.so" ######## Generic Hash Table container in shared memory ######## modparam("htable", "htable", "websockets=>size=16;initval=0") -######## Basic HTTP request handling ######## -loadmodule "xhttp.so" - - #!trydef WS_KEEPALIVE_MECHANISM 3 #!trydef WS_KEEPALIVE_TIMEOUT 30 #!trydef WS_KEEPALIVE_PROCESSES 3 @@ -46,11 +88,8 @@ kazoo.ws_max_connection_per_proxy = WS_MAX_CONNECTIONS_PER_PROXY desc "max conne kazoo.ws_connections_via_proxy_only = WS_CONNECTIONS_FROM_PROXY_ONLY desc "only allow connections via proxy" kazoo.ws_connections_restrict_origin = WS_CONNECTIONS_RESTRICT_ORIGIN desc "restrict origin if MY_WEBSOCKET_DOMAIN is defined" -event_route[xhttp:request] +route[WEBSOCKET_REQUEST] { - set_reply_close(); - set_reply_no_connect(); - if (!($rm =~ "GET")) { xlog("L_INFO", "http|websocket|rejecting HTTP request $rm from $si:$sp\n"); xhttp_reply("405", "Method Not Allowed", "", ""); @@ -75,7 +114,7 @@ event_route[xhttp:request] exit; } - #!ifdef MY_WEBSOCKET_DOMAIN + #!ifndef WEBSOCKET_NO_ORIGIN_RESTRICTION if($sel(cfg_get.kazoo.ws_connections_restrict_origin) == 1) { if (!($hdr(Origin) =~ "MY_WEBSOCKET_DOMAIN")) { xlog("L_INFO", "http|websocket|rejecting HTTP request with unauthorized origin $hdr(Origin) from $si:$sp, allowed origin is MY_WEBSOCKET_DOMAIN\n");