diff --git a/kamailio/default.cfg b/kamailio/default.cfg index c2fd179..644f244 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -214,6 +214,9 @@ include_file "responder-role.cfg" #!ifdef NODES-ROLE include_file "nodes-role.cfg" #!endif +#!ifdef REGISTRAR_SYNC-ROLE +include_file "registrar-sync-role.cfg" +#!endif ####### Permissions module ########## loadmodule "permissions.so" @@ -765,6 +768,14 @@ event_route[kazoo:mod-init] kazoo_subscribe("$var(payload)"); #!endif + + #!ifdef REGISTRAR_SYNC-ROLE + + $var(payload) = "{ 'exchange' : 'callmgr' , 'type' : 'topic', 'queue' : 'REGISTRAR-SYNC-QUEUE-MY_HOSTNAME', 'routing' : 'registration.sync', 'auto_delete' : 1, 'durable' : 0, 'no_ack' : 1, 'wait_for_consumer_ack' : 0 }"; + kazoo_subscribe("$var(payload)"); + + #!endif + } event_route[kazoo:consumer-event] diff --git a/kamailio/local.cfg b/kamailio/local.cfg index 48eb357..de5a18e 100644 --- a/kamailio/local.cfg +++ b/kamailio/local.cfg @@ -23,6 +23,7 @@ debug = L_INFO # # #!trydef ACL-ROLE # # #!trydef MESSAGE-ROLE # # #!trydef PUSHER-ROLE +# # #!trydef REGISTRAR_SYNC-ROLE ################################################################################ ## SERVER INFORMATION diff --git a/kamailio/registrar-sync-role.cfg b/kamailio/registrar-sync-role.cfg new file mode 100644 index 0000000..49717ef --- /dev/null +++ b/kamailio/registrar-sync-role.cfg @@ -0,0 +1,36 @@ +######## Presence sync server module ######## + +####### SQL OPS module ########## +#!ifndef SQLOPS-LOADED +loadmodule "sqlops.so" +modparam("sqlops","sqlcon", KAZOO_SQLOPS_DB_URL) +#!trydef SQLOPS-LOADED +#!endif + +event_route[kazoo:consumer-event-directory-reg-sync] +{ + xlog("L_INFO", "received registrar SYNC $kzE"); + + if (sql_xquery("cb", "location", "ra") == 1) + { + while($xavp(ra) != $null) { + $var(runloop) = 1; + while($xavp(ra) != $null && $var(runloop) < 500 ) { + if(registered("location", "sip:$xavp(ra=>username)@$xavp(ra=>domain)", 0, 1)) { + xlog("L_INFO", "[id, username, domain] = [$xavp(ra=>id), $xavp(ra=>username), $xavp(ra=>domain)]"); + $var(Expires) = $xavp(ra=>expires) - $TS; + $var(amqp_payload_request) = '{"Event-Category" : "directory", "Event-Name" : "reg_success", "Status" : "Success", "Event-Timestamp" : $TS, "Expires" : $(var(Expires){s.int}), "First-Registration" : false, "Contact" : "$(xavp(ra=>contact){s.escape.common})", "Call-ID" : "$xavp(ra=>callid)", "Realm" : "$xavp(ra=>domain)", "Username" : "$xavp(ra=>username)", "From-User" : "$xavp(ra=>username)", "From-Host" : "$xavp(ra=>domain)", "To-User" : "$xavp(ra=>username)", "To-Host" : "$xavp(ra=>domain)", "User-Agent" : "$(xavp(ra=>user_agent){s.escape.common})" , "Custom-Channel-Vars" : $xavp(ulattrs=>custom_channel_vars), "Proxy-Path" : "sip:$(xavp(ra=>socket){s.substr,4,0})" }'; + kazoo_publish("targeted", "$(kzE{kz.json,Queue})", $var(amqp_payload_request)); + } + pv_unset("$xavp(ra)"); + $var(runloop) = $var(runloop) + 1; + } + } + } + +} + + +# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab + +