##### PRESENCE RESET ROUTINES route[PRESENCE_RESET_BINDINGS] { #!import_file "presence-reset-custom-bindings.cfg" #!ifndef PRESENCE_RESET_CUSTOM_BINDINGS $var(payload) = "{ 'exchange' : 'presence' , 'queue' : 'presence-reset-MY_HOSTNAME', 'exclusive' : 0 ,'type' : 'topic', 'routing' : 'presence.reset.*.*', 'federate' : 1 }"; kazoo_subscribe("$var(payload)"); #!endif } route[RESET_ALL] { 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_ZONE] { xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|received presence reset for this zone (MY_AMQP_ZONE)\n"); route(RESET_ALL); } route[RESET_SERVER] { xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|received presence reset for this server (MY_HOSTNAME)\n"); route(RESET_ALL); } 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}) == "*" && $(kzE{kz.json,Username}) == "*") { xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|received presence reset for cluster\n"); route(RESET_ALL); } else { if($(kzE{kz.json,Realm}) == "*") { if($(kzE{kz.json,Username}) == "MY_AMQP_ZONE") { route(RESET_ZONE); } else { if($(kzE{kz.json,Username}) == "MY_HOSTNAME") { route(RESET_SERVER); } else { xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|received presence wildcard reset for $(kzE{kz.json,Username}). 'MY_AMQP_ZONE/MY_HOSTNAME' doesn't care\n"); } } } 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})"'); if(pres_has_subscribers("$var(presentity)", "message-summary")) { xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|notifying message-summary subscribers of $var(presentity)\n"); pres_refresh_watchers("$var(presentity)", "message-summary", 1); } else { xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|skip message-summary subscriber notification for $var(presentity))\n"); } if(pres_has_subscribers("$var(presentity)", "presence")) { xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|notifying presence subscribers of $var(presentity)\n"); pres_refresh_watchers("$var(presentity)", "presence", 1); } else { xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|skip presence subscriber notification for $var(presentity))\n"); } if(pres_has_subscribers("$var(presentity)", "dialog")) { xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|notifying dialog subscribers of $var(presentity)\n"); pres_refresh_watchers("$var(presentity)", "dialog", 1); } else { xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|skip dialog subscriber notification for $var(presentity))\n"); } }