You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

113 lines
4.4 KiB

##### 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_PUBLISHER]
{
xlog("L_INFO", "$var(Msg-ID)|reset|received presence reset for publisher $var(MediaUrl))\n");
sql_query("exec", "delete from presentity where sender = \"$var(MediaUrl)\"");
$var(presentities) = $sqlrows(exec);
xlog("L_INFO", "$var(Msg-ID)|reset|removed $var(presentities) presentities from publisher $var(MediaUrl)\n");
}
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 {
if($(kzE{kz.json,Username}) =~ "sip:") {
$var(Msg-ID) = $(kzE{kz.json,Msg-ID});
$var(MediaUrl) = $(kzE{kz.json,Username});
route(RESET_PUBLISHER);
} 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");
}
}