Browse Source

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 c70c467dfd)
5.0 5.0.19
lazedo 5 years ago
committed by Luis Azedo
parent
commit
1563c0642c
25 changed files with 717 additions and 472 deletions
  1. +1
    -1
      kamailio/acl-role.cfg
  2. +3
    -10
      kamailio/authorization.cfg
  3. +34
    -21
      kamailio/default-listeners.cfg
  4. +108
    -37
      kamailio/default.cfg
  5. +15
    -1
      kamailio/defs.cfg
  6. +26
    -22
      kamailio/dispatcher-role-5.4.cfg
  7. +4
    -0
      kamailio/globals.cfg
  8. +33
    -0
      kamailio/http.cfg
  9. +3
    -0
      kamailio/kamailio.cfg
  10. +1
    -23
      kamailio/kazoo-bindings.cfg
  11. +88
    -47
      kamailio/listener-defs.cfg
  12. +2
    -2
      kamailio/message-role.cfg
  13. +17
    -30
      kamailio/nodes-role.cfg
  14. +10
    -15
      kamailio/presence-fast-pickup.cfg
  15. +2
    -2
      kamailio/presence-notify.cfg
  16. +20
    -0
      kamailio/presence-reset.cfg
  17. +22
    -34
      kamailio/presence-role.cfg
  18. +19
    -0
      kamailio/prometheus.cfg
  19. +177
    -176
      kamailio/pusher-role.cfg
  20. +19
    -25
      kamailio/registrar-role.cfg
  21. +1
    -1
      kamailio/registrar-sync-role.cfg
  22. +22
    -1
      kamailio/sip_trace_all-role.cfg
  23. +35
    -3
      kamailio/tls-role.cfg
  24. +5
    -10
      kamailio/trusted.cfg
  25. +50
    -11
      kamailio/websockets-role.cfg

+ 1
- 1
kamailio/acl-role.cfg View File

@ -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)");


+ 3
- 10
kamailio/authorization.cfg View File

@ -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;


+ 34
- 21
kamailio/default-listeners.cfg View File

@ -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

+ 108
- 37
kamailio/default.cfg View File

@ -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

+ 15
- 1
kamailio/defs.cfg View File

@ -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

+ 26
- 22
kamailio/dispatcher-role-5.4.cfg View File

@ -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);
}


+ 4
- 0
kamailio/globals.cfg View File

@ -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


+ 33
- 0
kamailio/http.cfg View File

@ -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", "<html><body>Wrong URL $hu</body></html>");
}

+ 3
- 0
kamailio/kamailio.cfg View File

@ -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

+ 1
- 23
kamailio/kazoo-bindings.cfg View File

@ -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_");
}


+ 88
- 47
kamailio/listener-defs.cfg View File

@ -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"

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

@ -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 });


+ 17
- 30
kamailio/nodes-role.cfg View File

@ -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]
{


+ 10
- 15
kamailio/presence-fast-pickup.cfg View File

@ -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();
}


+ 2
- 2
kamailio/presence-notify.cfg View File

@ -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");


+ 20
- 0
kamailio/presence-reset.cfg View File

@ -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);
}

+ 22
- 34
kamailio/presence-role.cfg View File

@ -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]


+ 19
- 0
kamailio/prometheus.cfg View File

@ -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;
}
}

+ 177
- 176
kamailio/pusher-role.cfg View File

@ -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");
}
}

+ 19
- 25
kamailio/registrar-role.cfg View File

@ -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

+ 1
- 1
kamailio/registrar-sync-role.cfg View File

@ -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)");


+ 22
- 1
kamailio/sip_trace_all-role.cfg View File

@ -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();
}
}

+ 35
- 3
kamailio/tls-role.cfg View File

@ -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")

+ 5
- 10
kamailio/trusted.cfg View File

@ -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]


+ 50
- 11
kamailio/websockets-role.cfg View File

@ -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");


Loading…
Cancel
Save