|
|
|
|
|
kazoo.presence_reset_blf_defer_update = PRESENCE_RESET_BLF_DEFER_UPDATE descr "defers blf reset"
|
|
|
|
|
|
|
|
|
##### PRESENCE RESET ROUTINES
|
|
|
|
|
|
route[PRESENCE_RESET_ROUTE]
|
|
|
{
|
|
|
$var(runloop) = 1;
|
|
|
while(mq_fetch("blf_reset") == 1 && $var(runloop) < MAX_WHILE_LOOPS) {
|
|
|
$var(Key) = $mqk(blf_reset);
|
|
|
$sht(nodes=>$var(Key)) = 0;
|
|
|
$var(runloop) = $var(runloop) + 1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
route[PRESENCE_RESET_BINDINGS]
|
|
|
{
|
|
|
#!import_file "presence-reset-custom-bindings.cfg"
|
|
|
|
|
|
#!ifndef PRESENCE_RESET_CUSTOM_BINDINGS
|
|
|
$var(payload) = $_s({"exchange": "presence", "queue": "presence-reset-MY_HOSTNAME", "type": "topic", "routing": "presence.reset.*.*", "exclusive": 0, "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");
|
|
|
if($sel(cfg_get.kazoo.presence_reset_blf_defer_update) == 0) {
|
|
|
$var(Query) = $_s(KZQ_RESET_PUBLISHER_UPDATE);
|
|
|
sql_query("exec", "$var(Query)");
|
|
|
}
|
|
|
$var(Query) = $_s(KZQ_PRESENCE_RESET);
|
|
|
sql_query("exec", "$var(Query)");
|
|
|
$var(presentities) = $sqlrows(exec);
|
|
|
xlog("L_INFO", "$var(Msg-ID)|reset|removed $var(presentities) presentities from publisher $var(MediaUrl)\n");
|
|
|
}
|
|
|
|
|
|
route[RESET_ALL]
|
|
|
{
|
|
|
xlog("L_INFO", "$var(Msg-ID)|reset|received presence reset ALL\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_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", 'KZQ_RESET_ACCOUNT_DELETE');
|
|
|
$var(presentities) = $sqlrows(exec);
|
|
|
sql_query("exec", 'KZQ_RESET_ACCOUNT_UPDATE');
|
|
|
$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) = $_s(sip:$(kzE{kz.json,Username})@$(kzE{kz.json,Realm}));
|
|
|
route(COUNT_SUBSCRIBERS);
|
|
|
sql_query("exec", 'KZQ_EVENT_PRESENCE_RESET_DELETE');
|
|
|
|
|
|
if($xavp(watchers=>message-summary) > 0) {
|
|
|
xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|notifying $xavp(watchers=>message-summary) 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($xavp(watchers=>presence) > 0) {
|
|
|
xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|notifying $xavp(watchers=>presence) 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($xavp(watchers=>dialog) > 0) {
|
|
|
xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|notifying $xavp(watchers=>dialog) 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");
|
|
|
}
|
|
|
|
|
|
}
|