######## Presence server module ########
|
|
#!trydef PRESENCE_MIN_EXPIRES 300
|
|
#!trydef PRESENCE_MIN_EXPIRES_ACTION 1
|
|
#!trydef PRESENCE_MAX_EXPIRES 3600
|
|
|
|
modparam("htable", "htable", "p=>size=32;autoexpire=600;")
|
|
|
|
loadmodule "presence.so"
|
|
loadmodule "presence_dialoginfo.so"
|
|
loadmodule "presence_mwi.so"
|
|
loadmodule "presence_xml.so"
|
|
|
|
modparam("presence_dialoginfo", "force_dummy_dialog", 1)
|
|
modparam("presence_xml", "force_active", 1)
|
|
|
|
modparam("presence", "subs_db_mode", 3)
|
|
modparam("presence", "expires_offset", 60)
|
|
modparam("presence", "send_fast_notify", 1)
|
|
modparam("presence", "clean_period", 30)
|
|
modparam("presence", "publ_cache", 0)
|
|
modparam("presence", "min_expires_action", PRESENCE_MIN_EXPIRES_ACTION)
|
|
modparam("presence", "min_expires", PRESENCE_MIN_EXPIRES)
|
|
modparam("presence", "max_expires", PRESENCE_MAX_EXPIRES)
|
|
modparam("presence", "sip_uri_match", 1)
|
|
modparam("presence", "waitn_time", 1)
|
|
modparam("presence", "notifier_processes", 5)
|
|
modparam("presence", "db_url", "text:///etc/kazoo/kamailio/dbtext")
|
|
|
|
modparam("kazoo", "db_url", "text:///etc/kazoo/kamailio/dbtext")
|
|
modparam("kazoo", "pua_mode", 1)
|
|
|
|
####### Presence Logic ########
|
|
route[HANDLE_SUBSCRIBE]
|
|
{
|
|
if (is_method("SUBSCRIBE")) {
|
|
#!ifdef NAT-TRAVERSAL-ROLE
|
|
route(NAT_TEST_AND_CORRECT);
|
|
#!endif
|
|
|
|
if (!t_newtran()) {
|
|
sl_reply_error();
|
|
exit;
|
|
}
|
|
|
|
if ($tU == $null) {
|
|
xlog("L_INFO", "$ci|stop|ignoring subscribe with empty TO username from a $ua");
|
|
sl_send_reply(400, "Missing TO username");
|
|
t_release();
|
|
exit;
|
|
}
|
|
|
|
if ($fU == $null) {
|
|
xlog("L_INFO", "$ci|stop|ignoring subscribe with empty FROM username from a $ua");
|
|
sl_send_reply(400, "Missing FROM username");
|
|
t_release();
|
|
exit;
|
|
}
|
|
|
|
if (!handle_subscribe()) {
|
|
xlog("L_INFO", "$ci|stop|unsupported subsribe");
|
|
t_release();
|
|
exit;
|
|
}
|
|
|
|
$var(Expires) = $hdr(Expires);
|
|
if($var(Expires) < PRESENCE_MIN_EXPIRES) {
|
|
$var(Expires) = PRESENCE_MIN_EXPIRES;
|
|
} else if($var(Expires) > PRESENCE_MAX_EXPIRES) {
|
|
$var(Expires) = PRESENCE_MAX_EXPIRES;
|
|
}
|
|
|
|
##RabbitMQ
|
|
$var(fs_path) = "%3C" + $rz + "%3A" + $Ri + "%3A" + $Rp + "%3Btransport=" + $proto + "%3Blr%3Breceived=" + $si+":"+$sp+"%3E";
|
|
$var(fs_contact) = "<" + $(ct{tobody.uri}) + ";fs_path=" + $var(fs_path) + ">";
|
|
if($(ct{tobody.params}) != $null) {
|
|
$var(fs_contact) = $var(fs_contact) + ";" + $(ct{tobody.params});
|
|
}
|
|
|
|
$var(amqp_payload_request) = '{"Event-Category" : "presence", "Event-Name" : "subscription", "Event-Package" : "$hdr(event)", "Expires" : "$var(Expires)", "Queue" : "BLF-MY_HOSTNAME", "Server-ID" : "BLF-MY_HOSTNAME" , "Contact" : "$(ct{s.escape.common})", "Call-ID" : "$ci", "From" : "$fu", "User" : "$tu", "User-Agent" : "$(ua{s.escape.common})" }';
|
|
|
|
kazoo_publish("dialoginfo_subs", "dialoginfo_subs", $var(amqp_payload_request));
|
|
|
|
t_release();
|
|
exit;
|
|
}
|
|
}
|
|
|
|
route[HANDLE_PUBLISH]
|
|
{
|
|
if (is_method("PUBLISH")) {
|
|
if (!t_newtran()) {
|
|
sl_reply_error();
|
|
exit;
|
|
}
|
|
if($hdr(Sender)!= $null)
|
|
handle_publish("$hdr(Sender)");
|
|
else
|
|
handle_publish();
|
|
t_release();
|
|
exit;
|
|
}
|
|
}
|
|
|
|
event_route[kazoo:consumer-event-presence-update]
|
|
{
|
|
if( $(kzE{kz.json,Event-Package}) == "dialog") {
|
|
if($sht(p=>$(kzE{kz.json,Call-ID})-$(kzE{kz.json,From})) != $(kzE{kz.json,State})) {
|
|
xlog("L_INFO", "received $(kzE{kz.json,Event-Package}) update for $(kzE{kz.json,From})");
|
|
xlog("L_INFO", "payload $kzE");
|
|
$sht(p=>$(kzE{kz.json,Call-ID})-$(kzE{kz.json,From})) = $(kzE{kz.json,State});
|
|
kazoo_pua_publish($kzE);
|
|
pres_refresh_watchers("$(kzE{kz.json,From})", "$(kzE{kz.json,Event-Package})", 1);
|
|
} else {
|
|
xlog("L_INFO", "received duplicate $(kzE{kz.json,Event-Package}) update for $(kzE{kz.json,From})");
|
|
xlog("L_INFO", "payload $kzE");
|
|
}
|
|
} else {
|
|
xlog("L_INFO", "received $(kzE{kz.json,Event-Package}) update for $(kzE{kz.json,From}) $kzE");
|
|
kazoo_pua_publish($kzE);
|
|
pres_refresh_watchers("$(kzE{kz.json,From})", "$(kzE{kz.json,Event-Package})", 1);
|
|
}
|
|
}
|
|
|
|
# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab
|