Browse Source

allow immediate update on media crash

KAZOO-5650
lazedo 9 years ago
parent
commit
4f2143a5f3
4 changed files with 38 additions and 14 deletions
  1. +4
    -0
      kamailio/defs.cfg
  2. +1
    -0
      kamailio/kazoodb.sql
  3. +32
    -11
      kamailio/presence-reset.cfg
  4. +1
    -3
      kamailio/presence-role.cfg

+ 4
- 0
kamailio/defs.cfg View File

@ -59,4 +59,8 @@
#!define DISPATCHER_ADD_SERVERS 1 #!define DISPATCHER_ADD_SERVERS 1
#!endif #!endif
#!ifndef PRESENCE_RESET_BLF_DEFER_UPDATE
#!define PRESENCE_RESET_BLF_DEFER_UPDATE 0
#!endif
# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab

+ 1
- 0
kamailio/kazoodb.sql View File

@ -845,6 +845,7 @@ CREATE INDEX topos_t_rectime_idx ON topos_t (rectime);
CREATE INDEX topos_t_a_callid_idx ON topos_t (a_callid); CREATE INDEX topos_t_a_callid_idx ON topos_t (a_callid);
CREATE INDEX presentity_presentity_expires ON presentity (expires); CREATE INDEX presentity_presentity_expires ON presentity (expires);
CREATE INDEX presentity_account_idx ON presentity (username, domain, event); CREATE INDEX presentity_account_idx ON presentity (username, domain, event);
CREATE INDEX presentity_sender ON presentity (sender, username, domain, event);
CREATE INDEX active_watchers_active_watchers_expires ON active_watchers (expires); CREATE INDEX active_watchers_active_watchers_expires ON active_watchers (expires);
CREATE INDEX active_watchers_active_watchers_pres ON active_watchers (presentity_uri, event); CREATE INDEX active_watchers_active_watchers_pres ON active_watchers (presentity_uri, event);
CREATE INDEX active_watchers_updated_idx ON active_watchers (updated); CREATE INDEX active_watchers_updated_idx ON active_watchers (updated);


+ 32
- 11
kamailio/presence-reset.cfg View File

@ -1,5 +1,19 @@
kazoo.presence_reset_blf_defer_update = PRESENCE_RESET_BLF_DEFER_UPDATE descr "defers blf reset"
##### PRESENCE RESET ROUTINES ##### 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] route[PRESENCE_RESET_BINDINGS]
{ {
#!import_file "presence-reset-custom-bindings.cfg" #!import_file "presence-reset-custom-bindings.cfg"
@ -13,8 +27,13 @@ route[PRESENCE_RESET_BINDINGS]
route[RESET_PUBLISHER] 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)\"");
xlog("L_INFO", "$var(Msg-ID)|reset|received presence reset for publisher $var(MediaUrl))\n");
if(@cfg_get.kazoo.presence_reset_blf_defer_update == 0) {
$var(Query) = $_s(update active_watchers set expires = $TS where id in (select b.id from presentity a inner join active_watchers b on a.username = b.to_user and a.domain = b.to_domain and a.event = b.event where a.sender = "$var(MediaUrl)"));
sql_query("exec", "$var(Query)");
}
$var(Query) = $_s(delete from presentity where sender = "$var(MediaUrl)");
sql_query("exec", "$var(Query)");
$var(presentities) = $sqlrows(exec); $var(presentities) = $sqlrows(exec);
xlog("L_INFO", "$var(Msg-ID)|reset|removed $var(presentities) presentities from publisher $var(MediaUrl)\n"); xlog("L_INFO", "$var(Msg-ID)|reset|removed $var(presentities) presentities from publisher $var(MediaUrl)\n");
} }
@ -88,26 +107,28 @@ event_route[kazoo:consumer-event-presence-reset]
xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|received presence reset for $(kzE{kz.json,Username})@$(kzE{kz.json,Realm})\n"); 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}); $var(presentity) = "sip:" + $(kzE{kz.json,Username}) + "@" + $(kzE{kz.json,Realm});
route(COUNT_SUBSCRIBERS);
sql_query("exec", 'delete from presentity where domain="$(kzE{kz.json,Realm})" and username = "$(kzE{kz.json,Username})"'); 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");
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); pres_refresh_watchers("$var(presentity)", "message-summary", 1);
} else { } else {
xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|skip message-summary subscriber notification for $var(presentity))\n");
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");
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); pres_refresh_watchers("$var(presentity)", "presence", 1);
} else { } else {
xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|skip presence subscriber notification for $var(presentity))\n");
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");
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); pres_refresh_watchers("$var(presentity)", "dialog", 1);
} else { } else {
xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|skip dialog subscriber notification for $var(presentity))\n");
xlog("L_INFO", "$(kzE{kz.json,Msg-ID})|reset|skip dialog subscriber notification for $var(presentity)\n");
} }
} }

+ 1
- 3
kamailio/presence-role.cfg View File

@ -64,9 +64,6 @@ modparam("nat_traversal", "keepalive_interval", 45)
#!include_file "presence_notify_sync-role.cfg" #!include_file "presence_notify_sync-role.cfg"
#!endif #!endif
#!include_file "presence-reset.cfg"
####### Presence Logic ######## ####### Presence Logic ########
#!ifdef NAT_TRAVERSAL_ROLE #!ifdef NAT_TRAVERSAL_ROLE
@ -274,6 +271,7 @@ event_route[kazoo:consumer-event-presence-update]
} }
#!include_file "presence-reset.cfg"
route[PRESENCE_BINDINGS] route[PRESENCE_BINDINGS]
{ {


Loading…
Cancel
Save