@ -144,7 +144,7 @@ route[HANDLE_SUBSCRIBE]
route[DELETE_DUPLICATED_SUBSCRIPTIONS]
{
sql_query("exec", '$_s(DELETE FROM ACTIVE_WATCHERS WHERE FROM_USER = "$subs(from_user)" AND FROM_DOMAIN="$subs(from_domain)" AND EVENT="$subs(event)" AND PRESENTITY_URI="$subs(uri )" AND CALLID <> "$subs(callid)")');
sql_query("exec", '$_s(DELETE FROM ACTIVE_WATCHERS WHERE PRESENTITY_URI = "$subs(uri)" AND EVENT="$subs(event)" AND FROM_USER = "$subs(from_user)" AND FROM_DOMAIN="$subs(from_domain )" AND CALLID <> "$subs(callid)")');
}
route[HANDLE_RESUBSCRIBE]
@ -355,6 +355,21 @@ route[COUNT_SUBSCRIBERS]
xavp_params_explode($var(p), "watchers");
}
route[PRESENCE_STATE]
{
$var(state) = "";
if($(var(payload){kz.json,State}) = = "terminated") {
$var(state) = "available";
} else if($(var(payload){kz.json,State}) = = "early") {
$var(state) = "busy";
} else if($(var(payload){kz.json,State}) = = "confirmed") {
$var(state) = "onthephone";
}
$var(Query) = $_s(KZQ_FETCH_PRESENCE);
sql_xquery("cb", "$var(Query)", "presence");
}
event_route[kazoo:consumer-event-presence-dialog-update]
{
$var(kz_presence_log_level) = $(sel(cfg_get.kazoo.presence_no_targets_log_level){s.int});
@ -443,6 +458,7 @@ event_route[kazoo:consumer-event-presence-update]
route[PRESENCE_UPDATE]
{
$var(callid) = $(var(payload){kz.json,Call-ID});
if($(var(payload){kz.json,State}) = = "terminated") {
route(COUNT_PRESENTITIES);
} else {
@ -482,18 +498,36 @@ route[PRESENCE_UPDATE]
}
if($xavp(watchers = >presence) > 0) {
$var(kz_presence_log_level) = $(sel(cfg_get.kazoo.presence_with_targets_log_level){s.int});
xlog("L_DEBUG", "$(var(payload){kz.json,Call-ID})|log|publishing $var(presentity) presence update for $xavp(watchers = >presence) watchers\n");
kazoo_pua_publish_presence($var(payload));
pres_refresh_watchers("$var(presentity)", "presence", 1);
route(PRESENCE_STATE);
xlog("L_DEBUG", "presence state = > $(var(payload){kz.json,Call-ID})|log|$xavp(presence=>callid) , $var(callid), $xavp(presence=>state), $var(state)\n");
if($xavp(presence = >callid) == $var(callid)
|| $var(state) = = "onthephone"
|| ($var(state) = = "busy" && $xavp(presence=>state) != "onthephone")
) {
$var(kz_presence_log_level) = $(sel(cfg_get.kazoo.presence_with_targets_log_level){s.int});
xlog("L_DEBUG", "$(var(payload){kz.json,Call-ID})|log|publishing $var(presentity) presence update for $xavp(watchers = >presence) watchers\n");
if(kazoo_pua_publish_presence($var(JObj)) = = 1) {
pres_refresh_watchers("$var(presentity)", "presence", 1);
} else {
xlog("L_ERR", "$(var(payload){kz.json,Call-ID})|log|error publishing $var(presentity) presence update\n");
};
}
} else {
#!ifdef PRESENCE_TRACK_ALL_PKG_PRESENCE
if($(kzE{kz.json,Event-Package}) = = "presence") {
$var(kz_presence_log_level) = $(sel(cfg_get.kazoo.presence_with_targets_log_level){s.int});
xlog("L_DEBUG", "$(var(payload){kz.json,Call-ID})|log|saving $var(presentity) from presence update = > $var(payload)\n");
if(kazoo_pua_publish_presence($var(JObj)) ! = 1) {
xlog("L_ERR", "$(var(payload){kz.json,Call-ID})|log|error publishing $var(presentity) presence update = > $var(payload)\n");
}
route(PRESENCE_STATE);
xlog("L_DEBUG", "presence state = > $(var(payload){kz.json,Call-ID})|log|$xavp(presence=>callid) , $var(callid), $xavp(presence=>state), $var(state)\n");
if($xavp(presence = >callid) == $var(callid)
|| $var(state) = = "onthephone"
|| ($var(state) = = "busy" && $xavp(presence=>state) != "onthephone")
) {
$var(kz_presence_log_level) = $(sel(cfg_get.kazoo.presence_with_targets_log_level){s.int});
xlog("L_DEBUG", "$(var(payload){kz.json,Call-ID})|log|saving $var(presentity) from presence update = > $var(payload)\n");
if(kazoo_pua_publish_presence($var(JObj)) ! = 1) {
xlog("L_ERR", "$(var(payload){kz.json,Call-ID})|log|error publishing $var(presentity) presence update = > $var(payload)\n");
}
}
}
#!else
xlog("L_DEBUG", "$(var(payload){kz.json,Call-ID})|log|skip presence update for $var(presentity)\n");