diff --git a/kamailio/presence-role.cfg b/kamailio/presence-role.cfg index faf372d..c80d5f1 100644 --- a/kamailio/presence-role.cfg +++ b/kamailio/presence-role.cfg @@ -182,7 +182,7 @@ route[HANDLE_PUBLISH] route[COUNT_PRESENTITIES] { $var(Query) = $_s(KZQ_COUNT_PRESENTITIES); - $var(p) = "uri="+$(kzE{kz.json,From}); + $var(p) = $_s(uri=$var(presentity)); if (sql_xquery("cb", "$var(Query)", "subs") == 1) { while($xavp(subs) != $null) { @@ -247,10 +247,11 @@ event_route[kazoo:consumer-event-presence-dialog-update] route(FAST_PICKUP_INIT); #!endif + $var(presentity) = $(kzE{kz.json,From}); + if($(kzE{kz.json,State}) == "terminated") { route(COUNT_PRESENTITIES); } else { - $var(presentity) = $(kzE{kz.json,From}); route(COUNT_SUBSCRIBERS); } @@ -291,15 +292,30 @@ event_route[kazoo:consumer-event-presence-mwi-update] event_route[kazoo:consumer-event-presence-update] { - xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|received presence update for $(kzE{kz.json,From})\n"); - $var(presentity) = $(kzE{kz.json,From}); - route(COUNT_SUBSCRIBERS); + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|received presence update for $(kzE{kz.json,Presence-ID}) : $kzE\n"); + + $var(presentity) = $_s(sip:$(kzE{kz.json,Presence-ID})); + + if($(kzE{kz.json,State}) == "terminated") { + route(COUNT_PRESENTITIES); + } else { + route(COUNT_SUBSCRIBERS); + } + + if($xavp(watchers=>dialog) > 0) { + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|publishing $var(presentity) dialog update for $xavp(watchers=>dialog) watchers\n"); + kazoo_pua_publish_dialoginfo($kzE); + pres_refresh_watchers("$var(presentity)", "dialog", 1); + } else { + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|skip dialog update for $var(presentity)\n"); + } + if($xavp(watchers=>presence) > 0) { - xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|publishing $(kzE{kz.json,From}) presence update for $xavp(watchers=>presence) watchers\n"); + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|publishing $var(presentity) presence update for $xavp(watchers=>presence) watchers\n"); kazoo_pua_publish_presence($kzE); - pres_refresh_watchers("$(kzE{kz.json,From})", "presence", 1); + pres_refresh_watchers("$var(presentity)", "presence", 1); } else { - xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|skip presence update for $(kzE{kz.json,From})\n"); + xlog("L_INFO", "$(kzE{kz.json,Call-ID})|log|skip presence update for $var(presentity)\n"); } }