Browse Source

handle state for presence event

* unlike dialog, presence is not aggregated with state handling, we need to do it here.
update-rsyslog-config
lazedo 7 years ago
parent
commit
ca13905853
1 changed files with 44 additions and 10 deletions
  1. +44
    -10
      kamailio/presence-role.cfg

+ 44
- 10
kamailio/presence-role.cfg View File

@ -144,7 +144,7 @@ route[HANDLE_SUBSCRIBE]
route[DELETE_DUPLICATED_SUBSCRIPTIONS] 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] route[HANDLE_RESUBSCRIBE]
@ -355,6 +355,21 @@ route[COUNT_SUBSCRIBERS]
xavp_params_explode($var(p), "watchers"); 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] event_route[kazoo:consumer-event-presence-dialog-update]
{ {
$var(kz_presence_log_level) = $(sel(cfg_get.kazoo.presence_no_targets_log_level){s.int}); $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] route[PRESENCE_UPDATE]
{ {
$var(callid) = $(var(payload){kz.json,Call-ID});
if($(var(payload){kz.json,State}) == "terminated") { if($(var(payload){kz.json,State}) == "terminated") {
route(COUNT_PRESENTITIES); route(COUNT_PRESENTITIES);
} else { } else {
@ -482,18 +498,36 @@ route[PRESENCE_UPDATE]
} }
if($xavp(watchers=>presence) > 0) { 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 { } else {
#!ifdef PRESENCE_TRACK_ALL_PKG_PRESENCE #!ifdef PRESENCE_TRACK_ALL_PKG_PRESENCE
if($(kzE{kz.json,Event-Package}) == "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 #!else
xlog("L_DEBUG", "$(var(payload){kz.json,Call-ID})|log|skip presence update for $var(presentity)\n"); xlog("L_DEBUG", "$(var(payload){kz.json,Call-ID})|log|skip presence update for $var(presentity)\n");


Loading…
Cancel
Save