From 50b0116af792d56a4e82a1c1e6550ee6a3fcc3b8 Mon Sep 17 00:00:00 2001 From: lazedo Date: Tue, 11 Apr 2017 01:33:23 +0100 Subject: [PATCH] KAZOO-5415 & KAZOO-5416 (#159) * remove config that breeak kamailio 5 * expires_offset doesn't work as intended. remove it for now * KAZOO-5415 allow reset by account * KAZOO-5416 allow reset by zone MY_AMQP_ZONE needs to be defined as a substdef #!substdef "!MY_AMQP_ZONE!lx2!g" * mi_fifo deprecated in kamailio 5 --- kamailio/default.cfg | 5 +--- kamailio/defs.cfg | 2 +- kamailio/kazoo-bindings.cfg | 2 +- kamailio/message-role.cfg | 2 +- kamailio/presence-role.cfg | 41 +++++++++++++++++++++++++++++++- kamailio/registrar-role.cfg | 2 +- kamailio/registrar-sync-role.cfg | 2 +- 7 files changed, 46 insertions(+), 10 deletions(-) diff --git a/kamailio/default.cfg b/kamailio/default.cfg index f2a52ca..a7aa8c2 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -159,9 +159,6 @@ loadmodule "pv.so" ######## Advanced logger module ######## loadmodule "xlog.so" -####### FIFO support for Management Interface ######## -loadmodule "mi_fifo.so" - ######## UAC ######## loadmodule "uac.so" @@ -177,7 +174,7 @@ modparam("db_text", "default_connection", "KAZOO_DB_URL") ####### Kazoo Integration module ########## loadmodule "kazoo.so" -modparam("kazoo", "amqp_primary_zone", MY_AMQP_ZONE) +modparam("kazoo", "amqp_primary_zone", "MY_AMQP_ZONE") modparam("kazoo", "amqp_query_timeout_avp", "$avp(kz_timeout)") modparam("kazoo", "node_hostname", "MY_HOSTNAME") modparam("kazoo", "amqp_heartbeats", MY_AMQP_HEARTBEATS) diff --git a/kamailio/defs.cfg b/kamailio/defs.cfg index d9c349e..17b77a1 100644 --- a/kamailio/defs.cfg +++ b/kamailio/defs.cfg @@ -52,7 +52,7 @@ #!endif #!ifndef MY_AMQP_ZONE -#!define MY_AMQP_ZONE "local" +#!substdef "!MY_AMQP_ZONE!local!g" #!endif # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab diff --git a/kamailio/kazoo-bindings.cfg b/kamailio/kazoo-bindings.cfg index f41caf5..42fc044 100644 --- a/kamailio/kazoo-bindings.cfg +++ b/kamailio/kazoo-bindings.cfg @@ -47,7 +47,7 @@ event_route[kazoo:mod-init] #!endif #!ifdef ACL_ROLE - $var(payload) = "{ 'exchange' : 'frontier_acl' , 'type' : 'topic', 'queue' : 'FRONTIERACL-FLUSH-MY_HOSTNAME', 'routing' : 'flush', 'auto_delete' : 1, 'durable' : 0, 'no_ack' : 1, 'wait_for_consumer_ack' : 0 }"; + $var(payload) = "{ 'exchange' : 'frontier_acl' , 'type' : 'topic', 'queue' : 'FRONTIERACL-FLUSH-MY_HOSTNAME', 'routing' : 'flush', 'no_ack' : 1, 'wait_for_consumer_ack' : 0 }"; kazoo_subscribe("$var(payload)"); #!endif diff --git a/kamailio/message-role.cfg b/kamailio/message-role.cfg index bb9b81d..8a8b9a1 100644 --- a/kamailio/message-role.cfg +++ b/kamailio/message-role.cfg @@ -54,7 +54,7 @@ route[MESSAGE_REPLY] route[MESSAGE_BINDINGS] { $var(key) = "kamailio@MY_HOSTNAME"; - $var(payload) = '{ "exchange" : "sms" , "type" : "topic", "queue" : "MSG-QUEUE-MY_HOSTNAME", "routing" : "message.route.' + $(var(key){kz.encode}) + '.*", "auto_delete" : 1, "durable" : 0, "no_ack" : 0, "wait_for_consumer_ack" : 1 }'; + $var(payload) = '{ "exchange" : "sms" , "type" : "topic", "queue" : "MSG-QUEUE-MY_HOSTNAME", "routing" : "message.route.' + $(var(key){kz.encode}) + '.*", "no_ack" : 0, "wait_for_consumer_ack" : 1 }'; kazoo_subscribe("$var(payload)"); } diff --git a/kamailio/presence-role.cfg b/kamailio/presence-role.cfg index 0a7d7e6..3d4493d 100644 --- a/kamailio/presence-role.cfg +++ b/kamailio/presence-role.cfg @@ -20,7 +20,7 @@ modparam("presence_xml", "disable_winfo", 1) modparam("presence_xml", "disable_bla", 1) modparam("presence", "subs_db_mode", 3) -modparam("presence", "expires_offset", 60) +modparam("presence", "expires_offset", 0) modparam("presence", "send_fast_notify", 1) modparam("presence", "clean_period", 30) modparam("presence", "db_update_period", 10) @@ -220,8 +220,47 @@ event_route[kazoo:consumer-event-presence-update] } +route[RESET_ZONE] +{ + xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|received presence reset for this zone\n"); + sql_query("exec", "delete from presentity"); + $var(presentities) = $sqlrows(exec); + xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|removed $var(presentities) presentities\n"); +} + +route[RESET_ACCOUNT] +{ + xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|received presence reset for realm $(kzE{kz.json,Realm})\n"); + sql_query("exec", 'delete from presentity where domain="$(kzE{kz.json,Realm})" '); + $var(presentities) = $sqlrows(exec); + sql_query("exec", 'update active_watchers set expires = $TS where watcher_domain="$(kzE{kz.json,Realm})" '); + $var(watchers) = $sqlrows(exec); + xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|removed $var(presentities) presentities and expired $var(watchers) subscribers for realm $(kzE{kz.json,Realm})\n"); +} + +route[RESET_WILDCARD] +{ + if($(kzE{kz.json,Realm}) == "*") { + if($(kzE{kz.json,Username}) == "MY_AMQP_ZONE") { + route(RESET_ZONE); + } else { + xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|received presence reset for zone $(kzE{kz.json,Username}). 'MY_AMQP_ZONE' doesn't care\n"); + } + exit(); + } else { + route(RESET_ACCOUNT); + } + +} + + event_route[kazoo:consumer-event-presence-reset] { + if($(kzE{kz.json,Username}) == "*" || $(kzE{kz.json,Realm}) == "*") { + route(RESET_WILDCARD); + exit(); + } + xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|received presence reset for $(kzE{kz.json,Username})@$(kzE{kz.json,Realm})\n"); $var(presentity) = "sip:" + $(kzE{kz.json,Username}) + "@" + $(kzE{kz.json,Realm}); sql_query("exec", 'delete from presentity where domain="$(kzE{kz.json,Realm})" and username = "$(kzE{kz.json,Username})"'); diff --git a/kamailio/registrar-role.cfg b/kamailio/registrar-role.cfg index d544835..1272029 100644 --- a/kamailio/registrar-role.cfg +++ b/kamailio/registrar-role.cfg @@ -310,7 +310,7 @@ event_route[kazoo:consumer-event-directory-reg-flush] route[REGISTRAR_BINDINGS] { - $var(payload) = "{ 'exchange' : 'registrar' , 'type' : 'topic', 'queue' : 'registrar-flush-MY_HOSTNAME', 'routing' : 'registration.flush.*', 'auto_delete' : 1, 'durable' : 0, 'no_ack' : 1, 'wait_for_consumer_ack' : 0 }"; + $var(payload) = "{ 'exchange' : 'registrar' , 'type' : 'topic', 'queue' : 'registrar-flush-MY_HOSTNAME', 'routing' : 'registration.flush.*', 'no_ack' : 1, 'wait_for_consumer_ack' : 0 }"; kazoo_subscribe("$var(payload)"); } diff --git a/kamailio/registrar-sync-role.cfg b/kamailio/registrar-sync-role.cfg index 1803cd3..da660c5 100644 --- a/kamailio/registrar-sync-role.cfg +++ b/kamailio/registrar-sync-role.cfg @@ -33,6 +33,6 @@ event_route[kazoo:consumer-event-directory-reg-sync] route[REGISTRAR_SYNC_BINDINGS] { - $var(payload) = "{ 'exchange' : 'registrar' , 'type' : 'topic', 'queue' : 'registra-sync-MY_HOSTNAME', 'routing' : 'registration.sync', 'auto_delete' : 1, 'durable' : 0, 'no_ack' : 1, 'wait_for_consumer_ack' : 0 }"; + $var(payload) = "{ 'exchange' : 'registrar' , 'type' : 'topic', 'queue' : 'registra-sync-MY_HOSTNAME', 'routing' : 'registration.sync', 'no_ack' : 1, 'wait_for_consumer_ack' : 0 }"; kazoo_subscribe("$var(payload)"); }