<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hello Kamailio Community,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I am struggle to make presence service work on my system.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Currently I have PUA list, RLS Watchers List and RLS Presentity List empty.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">What should I do to see anything there?<o:p></o:p></p>
<p class="MsoNormal">I am using Media5-RCS android app and Orange Labs’ Android RCS IMS stack as my client.<o:p></o:p></p>
<p class="MsoNormal"><br>
Basically I want to use Kamailio as an RCS server<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This is my configuration file:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!KAMAILIO<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef ACCDB_COMMENT<o:p></o:p></p>
<p class="MsoNormal">ALTER TABLE acc ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT '';<o:p></o:p></p>
<p class="MsoNormal">ALTER TABLE acc ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT '';<o:p></o:p></p>
<p class="MsoNormal">ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT '';<o:p></o:p></p>
<p class="MsoNormal">ALTER TABLE acc ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT '';<o:p></o:p></p>
<p class="MsoNormal">ALTER TABLE acc ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT '';<o:p></o:p></p>
<p class="MsoNormal">ALTER TABLE missed_calls ADD COLUMN src_user VARCHAR(64) NOT NULL<o:p></o:p></p>
<p class="MsoNormal">DEFAULT '';<o:p></o:p></p>
<p class="MsoNormal">ALTER TABLE missed_calls ADD COLUMN src_domain VARCHAR(128) NOT NULL<o:p></o:p></p>
<p class="MsoNormal">DEFAULT '';<o:p></o:p></p>
<p class="MsoNormal">ALTER TABLE missed_calls ADD COLUMN dst_ouser VARCHAR(64) NOT NULL<o:p></o:p></p>
<p class="MsoNormal">DEFAULT '';<o:p></o:p></p>
<p class="MsoNormal">ALTER TABLE missed_calls ADD COLUMN dst_user VARCHAR(64) NOT NULL<o:p></o:p></p>
<p class="MsoNormal">DEFAULT '';<o:p></o:p></p>
<p class="MsoNormal">ALTER TABLE missed_calls ADD COLUMN dst_domain VARCHAR(128) NOT NULL<o:p></o:p></p>
<p class="MsoNormal">DEFAULT '';<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">####### Defined Values #########<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!define WITH_DEBUG<o:p></o:p></p>
<p class="MsoNormal">#!define WITH_AUTH<o:p></o:p></p>
<p class="MsoNormal">#!define WITH_MYSQL<o:p></o:p></p>
<p class="MsoNormal">#!define WITH_USRLOCDB<o:p></o:p></p>
<p class="MsoNormal">#!define WITH_PRESENCE<o:p></o:p></p>
<p class="MsoNormal">#!define WITH_XCAPSRV<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># *** Value defines - IDs used later in config<o:p></o:p></p>
<p class="MsoNormal">#!ifdef WITH_MYSQL<o:p></o:p></p>
<p class="MsoNormal"># - database URL - used to connect to database server by modules such<o:p></o:p></p>
<p class="MsoNormal"># as: auth_db, acc, usrloc, a.s.o.<o:p></o:p></p>
<p class="MsoNormal">#!define DBURL "mysql://kamailio:kamailiorw@localhost/kamailio"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal">#!ifdef WITH_MULTIDOMAIN<o:p></o:p></p>
<p class="MsoNormal"># - the value for 'use_domain' parameters<o:p></o:p></p>
<p class="MsoNormal">#!define MULTIDOMAIN 1<o:p></o:p></p>
<p class="MsoNormal">#!else<o:p></o:p></p>
<p class="MsoNormal">#!define MULTIDOMAIN 0<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># - flags<o:p></o:p></p>
<p class="MsoNormal"># FLT_ - per transaction (message) flags<o:p></o:p></p>
<p class="MsoNormal"># FLB_ - per branch flags<o:p></o:p></p>
<p class="MsoNormal">#!define FLT_ACC 1<o:p></o:p></p>
<p class="MsoNormal">#!define FLT_ACCMISSED 2<o:p></o:p></p>
<p class="MsoNormal">#!define FLT_ACCFAILED 3<o:p></o:p></p>
<p class="MsoNormal">#!define FLT_NATS 5<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!define FLB_NATB 6<o:p></o:p></p>
<p class="MsoNormal">#!define FLB_NATSIPPING 7:5060"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">####### Global Parameters #########<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_DEBUG<o:p></o:p></p>
<p class="MsoNormal">debug=4<o:p></o:p></p>
<p class="MsoNormal">log_stderror=yes<o:p></o:p></p>
<p class="MsoNormal">#!else<o:p></o:p></p>
<p class="MsoNormal">debug=2<o:p></o:p></p>
<p class="MsoNormal">log_stderror=no<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">memdbg=5<o:p></o:p></p>
<p class="MsoNormal">memlog=5<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">log_facility=LOG_LOCAL0<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">fork=yes<o:p></o:p></p>
<p class="MsoNormal">children=4<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">/* uncomment the next line to disable TCP (default on) */<o:p></o:p></p>
<p class="MsoNormal">#disable_tcp=yes<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">/* uncomment the next line to disable the auto discovery of local aliases<o:p></o:p></p>
<p class="MsoNormal">based on reverse DNS on IPs (default on) */<o:p></o:p></p>
<p class="MsoNormal">#auto_aliases=no<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">/* add local domain aliases */<o:p></o:p></p>
<p class="MsoNormal">alias="192.168.1.120"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">/* uncomment and configure the following line if you want Kamailio to<o:p></o:p></p>
<p class="MsoNormal">bind on a specific interface/port/proto (default bind on all available) */<o:p></o:p></p>
<p class="MsoNormal">#listen=udp:10.0.0.10:5060<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">/* port to listen to<o:p></o:p></p>
<p class="MsoNormal">* - can be specified more than once if needed to listen on many ports */<o:p></o:p></p>
<p class="MsoNormal">port=5060<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_TLS<o:p></o:p></p>
<p class="MsoNormal">enable_tls=yes<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_XCAPSRV<o:p></o:p></p>
<p class="MsoNormal">tcp_accept_no_cl=yes<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">####### Custom Parameters #########<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># These parameters can be modified runtime via RPC interface<o:p></o:p></p>
<p class="MsoNormal"># - see the documentation of 'cfg_rpc' module.<o:p></o:p></p>
<p class="MsoNormal">#<o:p></o:p></p>
<p class="MsoNormal"># Format: group.id = value 'desc' description<o:p></o:p></p>
<p class="MsoNormal"># Access: $sel(cfg_get.group.id) or @cfg_get.group.id<o:p></o:p></p>
<p class="MsoNormal">#<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_PSTN<o:p></o:p></p>
<p class="MsoNormal"># PSTN GW Routing<o:p></o:p></p>
<p class="MsoNormal">#<o:p></o:p></p>
<p class="MsoNormal"># - pstn.gw_ip: valid IP or hostname as string value, example:<o:p></o:p></p>
<p class="MsoNormal"># pstn.gw_ip = "10.0.0.101" desc "My PSTN GW Address"<o:p></o:p></p>
<p class="MsoNormal">#<o:p></o:p></p>
<p class="MsoNormal"># - by default is empty to avoid misrouting<o:p></o:p></p>
<p class="MsoNormal">pstn.gw_ip = "" desc "PSTN GW Address"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">####### Modules Section ########<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># set paths to location of modules<o:p></o:p></p>
<p class="MsoNormal">#!ifdef LOCAL_TEST_RUN<o:p></o:p></p>
<p class="MsoNormal">mpath="modules_k:modules"<o:p></o:p></p>
<p class="MsoNormal">#!else<o:p></o:p></p>
<p class="MsoNormal">mpath="/usr/local/lib/kamailio/modules_k/:/home/user/git/sip-router/modules/"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_MYSQL<o:p></o:p></p>
<p class="MsoNormal">loadmodule "db_mysql.so"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">loadmodule "mi_fifo.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "kex.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "tm.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "tmx.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "sl.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "rr.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "pv.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "maxfwd.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "usrloc.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "registrar.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "textops.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "siputils.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "xlog.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "sanity.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "ctl.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "mi_rpc.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "acc.so"<o:p></o:p></p>
<p class="MsoNormal"># loadmodule "pua_mi.so"<o:p></o:p></p>
<p class="MsoNormal"># loadmodule "pua_usrloc.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "outbound.so"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_AUTH<o:p></o:p></p>
<p class="MsoNormal">loadmodule "auth.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "auth_db.so"<o:p></o:p></p>
<p class="MsoNormal">#!ifdef WITH_IPAUTH<o:p></o:p></p>
<p class="MsoNormal">loadmodule "permissions.so"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_ALIASDB<o:p></o:p></p>
<p class="MsoNormal">loadmodule "alias_db.so"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_MULTIDOMAIN<o:p></o:p></p>
<p class="MsoNormal">loadmodule "domain.so"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_PRESENCE<o:p></o:p></p>
<p class="MsoNormal">loadmodule "presence.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "presence_xml.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "pua.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "rls.so"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_NAT<o:p></o:p></p>
<p class="MsoNormal">loadmodule "nathelper.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "rtpproxy.so"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_TLS<o:p></o:p></p>
<p class="MsoNormal">loadmodule "tls.so"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_ANTIFLOOD<o:p></o:p></p>
<p class="MsoNormal">loadmodule "htable.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "pike.so"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_XMLRPC<o:p></o:p></p>
<p class="MsoNormal">loadmodule "xmlrpc.so"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_XCAPSRV<o:p></o:p></p>
<p class="MsoNormal">loadmodule "xhttp.so"<o:p></o:p></p>
<p class="MsoNormal">loadmodule "xcap_server.so"<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----------------- setting module-specific parameters ---------------<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- mi_fifo params -----<o:p></o:p></p>
<p class="MsoNormal">modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- tm params -----<o:p></o:p></p>
<p class="MsoNormal"># auto-discard branches from previous serial forking leg<o:p></o:p></p>
<p class="MsoNormal">modparam("tm", "failure_reply_mode", 3)<o:p></o:p></p>
<p class="MsoNormal"># default retransmission timeout: 30sec<o:p></o:p></p>
<p class="MsoNormal">modparam("tm", "fr_timer", 30000)<o:p></o:p></p>
<p class="MsoNormal"># default invite retransmission timeout after 1xx: 120sec<o:p></o:p></p>
<p class="MsoNormal">modparam("tm", "fr_inv_timer", 120000)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- rr params -----<o:p></o:p></p>
<p class="MsoNormal"># add value to ;lr param to cope with most of the UAs<o:p></o:p></p>
<p class="MsoNormal">modparam("rr", "enable_full_lr", 1)<o:p></o:p></p>
<p class="MsoNormal"># do not append from tag to the RR (no need for this script)<o:p></o:p></p>
<p class="MsoNormal">modparam("rr", "append_fromtag", 0)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- registrar params -----<o:p></o:p></p>
<p class="MsoNormal">modparam("registrar", "method_filtering", 1)<o:p></o:p></p>
<p class="MsoNormal">/* uncomment the next line to disable parallel forking via location */<o:p></o:p></p>
<p class="MsoNormal"># modparam("registrar", "append_branches", 0)<o:p></o:p></p>
<p class="MsoNormal">/* uncomment the next line not to allow more than 10 contacts per AOR */<o:p></o:p></p>
<p class="MsoNormal">#modparam("registrar", "max_contacts", 10)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- acc params -----<o:p></o:p></p>
<p class="MsoNormal">/* what special events should be accounted ? */<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "early_media", 0)<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "report_ack", 0)<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "report_cancels", 0)<o:p></o:p></p>
<p class="MsoNormal">/* by default ww do not adjust the direct of the sequential requests.<o:p></o:p></p>
<p class="MsoNormal">if you enable this parameter, be sure the enable "append_fromtag"<o:p></o:p></p>
<p class="MsoNormal">in "rr" module */<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "detect_direction", 0)<o:p></o:p></p>
<p class="MsoNormal">/* account triggers (flags) */<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "log_flag", FLT_ACC)<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "log_missed_flag", FLT_ACCMISSED)<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "log_extra",<o:p></o:p></p>
<p class="MsoNormal">"src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "failed_transaction_flag", FLT_ACCFAILED)<o:p></o:p></p>
<p class="MsoNormal">/* enhanced DB accounting */<o:p></o:p></p>
<p class="MsoNormal">#!ifdef WITH_ACCDB<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "db_flag", FLT_ACC)<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "db_missed_flag", FLT_ACCMISSED)<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "db_url", DBURL)<o:p></o:p></p>
<p class="MsoNormal">modparam("acc", "db_extra",<o:p></o:p></p>
<p class="MsoNormal">"src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- usrloc params -----<o:p></o:p></p>
<p class="MsoNormal">/* enable DB persistency for location entries */<o:p></o:p></p>
<p class="MsoNormal">#!ifdef WITH_USRLOCDB<o:p></o:p></p>
<p class="MsoNormal">modparam("usrloc", "db_url", DBURL)<o:p></o:p></p>
<p class="MsoNormal">modparam("usrloc", "db_mode", 2)<o:p></o:p></p>
<p class="MsoNormal">modparam("usrloc", "use_domain", MULTIDOMAIN)<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- auth_db params -----<o:p></o:p></p>
<p class="MsoNormal">#!ifdef WITH_AUTH<o:p></o:p></p>
<p class="MsoNormal">modparam("auth_db", "db_url", DBURL)<o:p></o:p></p>
<p class="MsoNormal">modparam("auth_db", "calculate_ha1", yes)<o:p></o:p></p>
<p class="MsoNormal">modparam("auth_db", "password_column", "password")<o:p></o:p></p>
<p class="MsoNormal">modparam("auth_db", "load_credentials", "")<o:p></o:p></p>
<p class="MsoNormal">modparam("auth_db", "use_domain", MULTIDOMAIN)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- permissions params -----<o:p></o:p></p>
<p class="MsoNormal">#!ifdef WITH_IPAUTH<o:p></o:p></p>
<p class="MsoNormal">modparam("permissions", "db_url", DBURL)<o:p></o:p></p>
<p class="MsoNormal">modparam("permissions", "db_mode", 1)<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- alias_db params -----<o:p></o:p></p>
<p class="MsoNormal">#!ifdef WITH_ALIASDB<o:p></o:p></p>
<p class="MsoNormal">modparam("alias_db", "db_url", DBURL)<o:p></o:p></p>
<p class="MsoNormal">modparam("alias_db", "use_domain", MULTIDOMAIN)<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- domain params -----<o:p></o:p></p>
<p class="MsoNormal">#!ifdef WITH_MULTIDOMAIN<o:p></o:p></p>
<p class="MsoNormal">modparam("domain", "db_url", DBURL)<o:p></o:p></p>
<p class="MsoNormal"># use caching<o:p></o:p></p>
<p class="MsoNormal">modparam("domain", "db_mode", 1)<o:p></o:p></p>
<p class="MsoNormal"># register callback to match myself condition with domains list<o:p></o:p></p>
<p class="MsoNormal">modparam("domain", "register_myself", 1)<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_PRESENCE<o:p></o:p></p>
<p class="MsoNormal"># ----- presence params -----<o:p></o:p></p>
<p class="MsoNormal">modparam("presence", "db_url", DBURL)<o:p></o:p></p>
<p class="MsoNormal">#modparam("presence", "server_address", "sip:presence@192.168.1.120:5060")<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- presence_xml params -----<o:p></o:p></p>
<p class="MsoNormal">modparam("pua", "db_url", DBURL)<o:p></o:p></p>
<p class="MsoNormal">modparam("pua", "db_table", "pua")<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">modparam("presence_xml", "db_url", DBURL)<o:p></o:p></p>
<p class="MsoNormal">modparam("presence_xml", "force_active", 1)<o:p></o:p></p>
<p class="MsoNormal">#modparam("presence_xml", "pidf_manipulation", 1)<o:p></o:p></p>
<p class="MsoNormal">modparam("presence_xml", "integrated_xcap_server", 1)<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "db_url", DBURL)<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "xcap_table", "xcap")<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "rlsubs_table", "rls_watchers")<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "rlpres_table", "rls_presentity")<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "clean_period", 100)<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "waitn_time", 50)<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "max_expires", 10800)<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "hash_size", 9)<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "xcap_root", "http://192.168.1.120/xcap-root:5060")<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "integrated_xcap_server", 1)<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "to_presence_code", 10)<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "rls_event", "presence")<o:p></o:p></p>
<p class="MsoNormal">modparam("rls", "server_address", "sip:rls@192.168.1.120:5060")<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_NAT<o:p></o:p></p>
<p class="MsoNormal"># ----- rtpproxy params -----<o:p></o:p></p>
<p class="MsoNormal">modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:7722")<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- nathelper params -----<o:p></o:p></p>
<p class="MsoNormal">modparam("nathelper", "natping_interval", 30)<o:p></o:p></p>
<p class="MsoNormal">modparam("nathelper", "ping_nated_only", 1)<o:p></o:p></p>
<p class="MsoNormal">modparam("nathelper", "sipping_bflag", FLB_NATSIPPING)<o:p></o:p></p>
<p class="MsoNormal">modparam("nathelper", "sipping_from", "sip:pinger@kamailio.org")<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># params needed for NAT traversal in other modules<o:p></o:p></p>
<p class="MsoNormal">modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")<o:p></o:p></p>
<p class="MsoNormal">modparam("usrloc", "nat_bflag", FLB_NATB)<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_TLS<o:p></o:p></p>
<p class="MsoNormal"># ----- tls params -----<o:p></o:p></p>
<p class="MsoNormal">modparam("tls", "config", "/etc/kamailio/tls.cfg")<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_ANTIFLOOD<o:p></o:p></p>
<p class="MsoNormal"># ----- pike params -----<o:p></o:p></p>
<p class="MsoNormal">modparam("pike", "sampling_time_unit", 2)<o:p></o:p></p>
<p class="MsoNormal">modparam("pike", "reqs_density_per_unit", 16)<o:p></o:p></p>
<p class="MsoNormal">modparam("pike", "remove_latency", 4)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># ----- htable params -----<o:p></o:p></p>
<p class="MsoNormal"># ip ban htable with autoexpire after 5 minutes<o:p></o:p></p>
<p class="MsoNormal">modparam("htable", "htable", "ipban=>size=8;autoexpire=300;")<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_XMLRPC<o:p></o:p></p>
<p class="MsoNormal"># ----- xmlrpc params -----<o:p></o:p></p>
<p class="MsoNormal">modparam("xmlrpc", "route", "XMLRPC");<o:p></o:p></p>
<p class="MsoNormal">modparam("xmlrpc", "url_match", "^/RPC")<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_XCAPSRV<o:p></o:p></p>
<p class="MsoNormal"># ----- xcap_server params -----<o:p></o:p></p>
<p class="MsoNormal">modparam("xcap_server", "db_url", DBURL)<o:p></o:p></p>
<p class="MsoNormal"># modparam("rls", "integrated_xcap_server", 1)<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">####### Routing Logic ########<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Main SIP request routing logic<o:p></o:p></p>
<p class="MsoNormal"># - processing of any incoming SIP request starts with this route<o:p></o:p></p>
<p class="MsoNormal">route {<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # per request initial checks<o:p></o:p></p>
<p class="MsoNormal">                route(REQINIT);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # NAT detection<o:p></o:p></p>
<p class="MsoNormal">                route(NAT);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # handle requests within SIP dialogs<o:p></o:p></p>
<p class="MsoNormal">                route(WITHINDLG);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                ### only initial requests (no To tag)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # CANCEL processing<o:p></o:p></p>
<p class="MsoNormal">                if (is_method("CANCEL"))<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                if (t_check_trans())<o:p></o:p></p>
<p class="MsoNormal">                                t_relay();<o:p></o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                t_check_trans();<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # authentication<o:p></o:p></p>
<p class="MsoNormal">                route(AUTH);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # record routing for dialog forming requests (in case they are routed)<o:p></o:p></p>
<p class="MsoNormal">                # - remove preloaded route headers<o:p></o:p></p>
<p class="MsoNormal">                remove_hf("Route");<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if(is_method("NOTIFY"))<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                xlog("  pua_update_contact  $rm from $fu  (IP:$si:$sp)  \n");<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        if(!pua_update_contact())<o:p></o:p></p>
<p class="MsoNormal">             xlog("pua update failed \n");<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if (is_method("INVITE|SUBSCRIBE"))<o:p></o:p></p>
<p class="MsoNormal">                                record_route();<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # account only INVITEs<o:p></o:p></p>
<p class="MsoNormal">                if (is_method("INVITE"))<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                setflag(FLT_ACC); # do accounting<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # dispatch requests to foreign domains<o:p></o:p></p>
<p class="MsoNormal">                route(SIPOUT);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                ### requests for my local domains<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # handle presence related requests<o:p></o:p></p>
<p class="MsoNormal">                route(PRESENCE);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # handle registrations<o:p></o:p></p>
<p class="MsoNormal">                route(REGISTRAR);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if ($rU==$null)<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                # request with no Username in RURI<o:p></o:p></p>
<p class="MsoNormal">                                sl_send_reply("484","Address Incomplete");<o:p></o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # dispatch destinations to PSTN<o:p></o:p></p>
<p class="MsoNormal">                route(PSTN);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # user location service<o:p></o:p></p>
<p class="MsoNormal">                route(LOCATION);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                route(RELAY);<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">route[RELAY] {<o:p></o:p></p>
<p class="MsoNormal">                #!ifdef WITH_NAT<o:p></o:p></p>
<p class="MsoNormal">                if (check_route_param("nat=yes")) {<o:p></o:p></p>
<p class="MsoNormal">                                setbflag(FLB_NATB);<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                if (isflagset(FLT_NATS) || isbflagset(FLB_NATB)) {<o:p></o:p></p>
<p class="MsoNormal">                                route(RTPPROXY);<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                /* example how to enable some additional event routes */<o:p></o:p></p>
<p class="MsoNormal">                if (is_method("INVITE")) {<o:p></o:p></p>
<p class="MsoNormal">                                #t_on_branch("BRANCH_ONE");<o:p></o:p></p>
<p class="MsoNormal">                                t_on_reply("REPLY_ONE");<o:p></o:p></p>
<p class="MsoNormal">                                t_on_failure("FAIL_ONE");<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if (!t_relay()) {<o:p></o:p></p>
<p class="MsoNormal">                                sl_reply_error();<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                exit;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Per SIP request initial checks<o:p></o:p></p>
<p class="MsoNormal">route[REQINIT] {<o:p></o:p></p>
<p class="MsoNormal">                #!ifdef WITH_ANTIFLOOD<o:p></o:p></p>
<p class="MsoNormal">                # flood dection from same IP and traffic ban for a while<o:p></o:p></p>
<p class="MsoNormal">                # be sure you exclude checking trusted peers, such as pstn gateways<o:p></o:p></p>
<p class="MsoNormal">                # - local host excluded (e.g., loop to self)<o:p></o:p></p>
<p class="MsoNormal">                if(src_ip!=myself)<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                if($sht(ipban=>$si)!=$null)<o:p></o:p></p>
<p class="MsoNormal">                                {<o:p></o:p></p>
<p class="MsoNormal">                                                # ip is already blocked<o:p></o:p></p>
<p class="MsoNormal">                                                xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n");<o:p></o:p></p>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                                if (!pike_check_req())<o:p></o:p></p>
<p class="MsoNormal">                                {<o:p></o:p></p>
<p class="MsoNormal">                                                xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");<o:p></o:p></p>
<p class="MsoNormal">                                                $sht(ipban=>$si) = 1;<o:p></o:p></p>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if (!mf_process_maxfwd_header("10")) {<o:p></o:p></p>
<p class="MsoNormal">                                sl_send_reply("483","Too Many Hops");<o:p></o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if(!sanity_check("1511", "7"))<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                xlog("Malformed SIP message from $si:$sp\n");<o:p></o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Handle requests within SIP dialogs<o:p></o:p></p>
<p class="MsoNormal">route[WITHINDLG] {<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if (has_totag()) {<o:p></o:p></p>
<p class="MsoNormal">                                # sequential request withing a dialog should<o:p></o:p></p>
<p class="MsoNormal">                                # take the path determined by record-routing<o:p></o:p></p>
<p class="MsoNormal">                                if (loose_route()) {<o:p></o:p></p>
<p class="MsoNormal">                                                if (is_method("BYE")) {<o:p></o:p></p>
<p class="MsoNormal">                                                                setflag(FLT_ACC); # do accounting ...<o:p></o:p></p>
<p class="MsoNormal">                                                                setflag(FLT_ACCFAILED); # ... even if the transaction fails<o:p></o:p></p>
<p class="MsoNormal">                                                }<o:p></o:p></p>
<p class="MsoNormal">                                                route(RELAY);<o:p></o:p></p>
<p class="MsoNormal">                                } else {<o:p></o:p></p>
<p class="MsoNormal">                                                if (is_method("SUBSCRIBE") && uri == myself) {<o:p></o:p></p>
<p class="MsoNormal">                                                # in-dialog subscribe requests<o:p></o:p></p>
<p class="MsoNormal">                                                route(PRESENCE);<o:p></o:p></p>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                                                if ( is_method("ACK") ) {<o:p></o:p></p>
<p class="MsoNormal">                                                                if ( t_check_trans() ) {<o:p></o:p></p>
<p class="MsoNormal">                                                                                # no loose-route, but stateful ACK;<o:p></o:p></p>
<p class="MsoNormal">                                                                                # must be an ACK after a 487<o:p></o:p></p>
<p class="MsoNormal">                                                                                # or e.g. 404 from upstream server<o:p></o:p></p>
<p class="MsoNormal">                                                                                t_relay();<o:p></o:p></p>
<p class="MsoNormal">                                                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                                                } else {<o:p></o:p></p>
<p class="MsoNormal">                                                                                # ACK without matching transaction ... ignore and discard<o:p></o:p></p>
<p class="MsoNormal">                                                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                                                }<o:p></o:p></p>
<p class="MsoNormal">                                                }<o:p></o:p></p>
<p class="MsoNormal">                                                sl_send_reply("404","Not here");<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Handle SIP registrations<o:p></o:p></p>
<p class="MsoNormal">route[REGISTRAR] {<o:p></o:p></p>
<p class="MsoNormal">                if (is_method("REGISTER"))<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                if(isflagset(FLT_NATS))<o:p></o:p></p>
<p class="MsoNormal">                                {<o:p></o:p></p>
<p class="MsoNormal">                                                setbflag(FLB_NATB);<o:p></o:p></p>
<p class="MsoNormal">                                                # uncomment next line to do SIP NAT pinging<o:p></o:p></p>
<p class="MsoNormal">                                                ## setbflag(FLB_NATSIPPING);<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                                if (!save("location"))<o:p></o:p></p>
<p class="MsoNormal">                                                sl_reply_error();<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># USER location service<o:p></o:p></p>
<p class="MsoNormal">route[LOCATION] {<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                #!ifdef WITH_ALIASDB<o:p></o:p></p>
<p class="MsoNormal">                # search in DB-based aliases<o:p></o:p></p>
<p class="MsoNormal">                alias_db_lookup("dbaliases");<o:p></o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if (!lookup("location")) {<o:p></o:p></p>
<p class="MsoNormal">                                switch ($rc) {<o:p></o:p></p>
<p class="MsoNormal">                                                case -1:<o:p></o:p></p>
<p class="MsoNormal">                                                case -3:<o:p></o:p></p>
<p class="MsoNormal">                                                                t_newtran();<o:p></o:p></p>
<p class="MsoNormal">                                                                t_reply("404", "Not Found");<o:p></o:p></p>
<p class="MsoNormal">                                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                                case -2:<o:p></o:p></p>
<p class="MsoNormal">                                                                sl_send_reply("405", "Method Not Allowed");<o:p></o:p></p>
<p class="MsoNormal">                                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # when routing via usrloc, log the missed calls also<o:p></o:p></p>
<p class="MsoNormal">                if (is_method("INVITE"))<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                setflag(FLT_ACCMISSED);<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Presence server route<o:p></o:p></p>
<p class="MsoNormal">route[PRESENCE] {<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if(!is_method("PUBLISH|SUBSCRIBE"))<o:p></o:p></p>
<p class="MsoNormal">                                return;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                #!ifdef WITH_PRESENCE<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if (!t_newtran())<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                sl_reply_error();<o:p></o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                };<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if(is_method("PUBLISH"))<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                handle_publish();<o:p></o:p></p>
<p class="MsoNormal">                                t_release();<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                else if( is_method("SUBSCRIBE"))<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                $var(ret_code)= rls_handle_subscribe();<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                                if($var(ret_code)== 10) {<o:p></o:p></p>
<p class="MsoNormal">                                                handle_subscribe();<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                                t_release();<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                }else if(method=="NOTIFY") {<o:p></o:p></p>
<p class="MsoNormal">                                <o:p></o:p></p>
<p class="MsoNormal">                                rls_handle_notify();<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                exit;<o:p></o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal">                # if presence enabled, this part will not be executed<o:p></o:p></p>
<p class="MsoNormal">                if (is_method("PUBLISH") || $rU==$null)<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                sl_send_reply("404", "Not here");<o:p></o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                return;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Authentication route<o:p></o:p></p>
<p class="MsoNormal">route[AUTH] {<o:p></o:p></p>
<p class="MsoNormal">                return;<o:p></o:p></p>
<p class="MsoNormal">                #!ifdef WITH_AUTH<o:p></o:p></p>
<p class="MsoNormal">                if (is_method("REGISTER"))<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                # authenticate the REGISTER requests (uncomment to enable auth)<o:p></o:p></p>
<p class="MsoNormal">                                if (!www_authorize("$td", "subscriber"))<o:p></o:p></p>
<p class="MsoNormal">                                {<o:p></o:p></p>
<p class="MsoNormal">                                www_challenge("$td", "0");<o:p></o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                                if ($au!=$tU)<o:p></o:p></p>
<p class="MsoNormal">                                {<o:p></o:p></p>
<p class="MsoNormal">                                                sl_send_reply("403","Forbidden auth ID");<o:p></o:p></p>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                } else {<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                                #!ifdef WITH_IPAUTH<o:p></o:p></p>
<p class="MsoNormal">                                if(allow_source_address())<o:p></o:p></p>
<p class="MsoNormal">                                {<o:p></o:p></p>
<p class="MsoNormal">                                                # source IP allowed<o:p></o:p></p>
<p class="MsoNormal">                                                return;<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                                #!endif<o:p></o:p></p>
<p class="MsoNormal">                                # authenticate if from local subscriber<o:p></o:p></p>
<p class="MsoNormal">                                if (from_uri==myself)<o:p></o:p></p>
<p class="MsoNormal">                                {<o:p></o:p></p>
<p class="MsoNormal">                                                if (!proxy_authorize("$fd", "subscriber")) {<o:p></o:p></p>
<p class="MsoNormal">                                                proxy_challenge("$fd", "0");<o:p></o:p></p>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                                if (is_method("PUBLISH"))<o:p></o:p></p>
<p class="MsoNormal">                                {<o:p></o:p></p>
<p class="MsoNormal">                                                if ($au!=$tU) {<o:p></o:p></p>
<p class="MsoNormal">                                                                sl_send_reply("403","Forbidden auth ID");<o:p></o:p></p>
<p class="MsoNormal">                                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                                }<o:p></o:p></p>
<p class="MsoNormal">                                } else {<o:p></o:p></p>
<p class="MsoNormal">                                                if ($au!=$fU) {<o:p></o:p></p>
<p class="MsoNormal">                                                                sl_send_reply("403","Forbidden auth ID");<o:p></o:p></p>
<p class="MsoNormal">                                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                                }<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                                consume_credentials();<o:p></o:p></p>
<p class="MsoNormal">                                # caller authenticated<o:p></o:p></p>
<p class="MsoNormal">                                } else {<o:p></o:p></p>
<p class="MsoNormal">                                                # caller is not local subscriber, then check if it calls<o:p></o:p></p>
<p class="MsoNormal">                                                # a local destination, otherwise deny, not an open relay here<o:p></o:p></p>
<p class="MsoNormal">                                                if (!uri==myself)<o:p></o:p></p>
<p class="MsoNormal">                                                {<o:p></o:p></p>
<p class="MsoNormal">                                                                sl_send_reply("403","Not relaying");<o:p></o:p></p>
<p class="MsoNormal">                                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                                }<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal">                return;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # Caller NAT detection route<o:p></o:p></p>
<p class="MsoNormal">route[NAT] {<o:p></o:p></p>
<p class="MsoNormal">                #!ifdef WITH_NAT<o:p></o:p></p>
<p class="MsoNormal">                                force_rport();<o:p></o:p></p>
<p class="MsoNormal">                                if (nat_uac_test("19")) {<o:p></o:p></p>
<p class="MsoNormal">                                                if (method=="REGISTER") {<o:p></o:p></p>
<p class="MsoNormal">                                                                fix_nated_register();<o:p></o:p></p>
<p class="MsoNormal">                                                } else {<o:p></o:p></p>
<p class="MsoNormal">                                                                fix_nated_contact();<o:p></o:p></p>
<p class="MsoNormal">                                                }<o:p></o:p></p>
<p class="MsoNormal">                                                setflag(FLT_NATS);<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal">                return;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># RTPProxy control<o:p></o:p></p>
<p class="MsoNormal">route[RTPPROXY] {<o:p></o:p></p>
<p class="MsoNormal">                #!ifdef WITH_NAT<o:p></o:p></p>
<p class="MsoNormal">                if (is_method("BYE")) {<o:p></o:p></p>
<p class="MsoNormal">                                unforce_rtp_proxy();<o:p></o:p></p>
<p class="MsoNormal">                } else if (is_method("INVITE")){<o:p></o:p></p>
<p class="MsoNormal">                                force_rtp_proxy();<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                if (!has_totag()) add_rr_param(";nat=yes");<o:p></o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal">                return;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Routing to foreign domains<o:p></o:p></p>
<p class="MsoNormal">route[SIPOUT] {<o:p></o:p></p>
<p class="MsoNormal">                if (!uri==myself)<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                append_hf("P-hint: outbound\r\n");<o:p></o:p></p>
<p class="MsoNormal">                                route(RELAY);<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># PSTN GW routing<o:p></o:p></p>
<p class="MsoNormal">route[PSTN] {<o:p></o:p></p>
<p class="MsoNormal">                #!ifdef WITH_PSTN<o:p></o:p></p>
<p class="MsoNormal">                # check if PSTN GW IP is defined<o:p></o:p></p>
<p class="MsoNormal">                if (strempty($sel(cfg_get.pstn.gw_ip))) {<o:p></o:p></p>
<p class="MsoNormal">                                xlog("SCRIPT: PSTN rotuing enabled but pstn.gw_ip not defined\n");<o:p></o:p></p>
<p class="MsoNormal">                                return;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # route to PSTN dialed numbers starting with '+' or '00'<o:p></o:p></p>
<p class="MsoNormal">                # (international format)<o:p></o:p></p>
<p class="MsoNormal">                # - update the condition to match your dialing rules for PSTN routing<o:p></o:p></p>
<p class="MsoNormal">                if(!($rU=~"^(\+|00)[1-9][0-9]{3,20}$"))<o:p></o:p></p>
<p class="MsoNormal">                                return;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # only local users allowed to call<o:p></o:p></p>
<p class="MsoNormal">                if(from_uri!=myself) {<o:p></o:p></p>
<p class="MsoNormal">                                sl_send_reply("403", "Not Allowed");<o:p></o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                $ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                route(RELAY);<o:p></o:p></p>
<p class="MsoNormal">                exit;<o:p></o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                return;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># XMLRPC routing<o:p></o:p></p>
<p class="MsoNormal">#!ifdef WITH_XMLRPC<o:p></o:p></p>
<p class="MsoNormal">route[XMLRPC]<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">                # allow XMLRPC from localhost<o:p></o:p></p>
<p class="MsoNormal">                if ((method=="POST" || method=="GET")<o:p></o:p></p>
<p class="MsoNormal">                                && (src_ip==127.0.0.1)) {<o:p></o:p></p>
<p class="MsoNormal">                                # close connection only for xmlrpclib user agents (there is a bug in<o:p></o:p></p>
<p class="MsoNormal">                                # xmlrpclib: it waits for EOF before interpreting the response).<o:p></o:p></p>
<p class="MsoNormal">                                if ($hdr(User-Agent) =~ "xmlrpclib")<o:p></o:p></p>
<p class="MsoNormal">                                                set_reply_close();<o:p></o:p></p>
<p class="MsoNormal">                                set_reply_no_connect();<o:p></o:p></p>
<p class="MsoNormal">                                dispatch_rpc();<o:p></o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                send_reply("403", "Forbidden");<o:p></o:p></p>
<p class="MsoNormal">                exit;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Sample branch router<o:p></o:p></p>
<p class="MsoNormal">branch_route[BRANCH_ONE] {<o:p></o:p></p>
<p class="MsoNormal">                xdbg("new branch at $ru\n");<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Sample onreply route<o:p></o:p></p>
<p class="MsoNormal">onreply_route[REPLY_ONE] {<o:p></o:p></p>
<p class="MsoNormal">                xdbg("incoming reply\n");<o:p></o:p></p>
<p class="MsoNormal">                #!ifdef WITH_NAT<o:p></o:p></p>
<p class="MsoNormal">                if ((isflagset(FLT_NATS) || isbflagset(FLB_NATB))<o:p></o:p></p>
<p class="MsoNormal">                && status=~"(183)|(2[0-9][0-9])") {<o:p></o:p></p>
<p class="MsoNormal">                                force_rtp_proxy();<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                if (isbflagset("6")) {<o:p></o:p></p>
<p class="MsoNormal">                                fix_nated_contact();<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Sample failure route<o:p></o:p></p>
<p class="MsoNormal">failure_route[FAIL_ONE] {<o:p></o:p></p>
<p class="MsoNormal">                #!ifdef WITH_NAT<o:p></o:p></p>
<p class="MsoNormal">                if (is_method("INVITE")<o:p></o:p></p>
<p class="MsoNormal">                && (isbflagset(FLB_NATB) || isflagset(FLT_NATS))) {<o:p></o:p></p>
<p class="MsoNormal">                                unforce_rtp_proxy();<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                if (t_is_canceled()) {<o:p></o:p></p>
<p class="MsoNormal">                                exit;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # uncomment the following lines if you want to block client<o:p></o:p></p>
<p class="MsoNormal">                # redirect based on 3xx replies.<o:p></o:p></p>
<p class="MsoNormal">                ##if (t_check_status("3[0-9][0-9]")) {<o:p></o:p></p>
<p class="MsoNormal">                ##t_reply("404","Not found");<o:p></o:p></p>
<p class="MsoNormal">                ## exit;<o:p></o:p></p>
<p class="MsoNormal">                ##}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # uncomment the following lines if you want to redirect the failed<o:p></o:p></p>
<p class="MsoNormal">                # calls to a different new destination<o:p></o:p></p>
<p class="MsoNormal">                ##if (t_check_status("486|408")) {<o:p></o:p></p>
<p class="MsoNormal">                ## sethostport("192.168.2.100:5060");<o:p></o:p></p>
<p class="MsoNormal">                ## append_branch();<o:p></o:p></p>
<p class="MsoNormal">                ## # do not set the missed call flag again<o:p></o:p></p>
<p class="MsoNormal">                ## t_relay();<o:p></o:p></p>
<p class="MsoNormal">                ##}<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!ifdef WITH_XCAPSRV<o:p></o:p></p>
<p class="MsoNormal"># #!define WITH_XHTTPAUTH<o:p></o:p></p>
<p class="MsoNormal">event_route[xhttp:request] {<o:p></o:p></p>
<p class="MsoNormal">                                xdbg("===== xhttp: request [$rv] $rm => $hu\n");<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                #!ifdef WITH_XHTTPAUTH<o:p></o:p></p>
<p class="MsoNormal">                                if (!www_authorize("xcap", "subscriber"))<o:p></o:p></p>
<p class="MsoNormal">                                {<o:p></o:p></p>
<p class="MsoNormal">                                                www_challenge("xcap", "0");<o:p></o:p></p>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal">                xdbg("===== xhttp: Antes del if de $hu\n");<o:p></o:p></p>
<p class="MsoNormal">                if($hu=~"^/xcap-root/")<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                                xdbg("===== xhttp: Dentro del if de $hu\n");<o:p></o:p></p>
<p class="MsoNormal">                                set_reply_close();<o:p></o:p></p>
<p class="MsoNormal">                                set_reply_no_connect();<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                                # xcap ops<o:p></o:p></p>
<p class="MsoNormal">                                $xcapuri(u=>data) = $hu;<o:p></o:p></p>
<p class="MsoNormal">                                if($xcapuri(u=>xuid)=~"^sip:.+@.+")<o:p></o:p></p>
<p class="MsoNormal">                                                $var(uri) = $xcapuri(u=>xuid);<o:p></o:p></p>
<p class="MsoNormal">                                else if($xcapuri(u=>xuid)=~".+@.+")<o:p></o:p></p>
<p class="MsoNormal">                                                $var(uri) = "sip:" + $xcapuri(u=>xuid);<o:p></o:p></p>
<p class="MsoNormal">                                else<o:p></o:p></p>
<p class="MsoNormal">                                                $var(uri) = "sip:"+ $xcapuri(u=>xuid) + "@" + $Ri;<o:p></o:p></p>
<p class="MsoNormal">xdbg("===== xhttp: Evgeny check var uri $var(uri)\n");<o:p></o:p></p>
<p class="MsoNormal">                                xlog("L_NOTICE", "===== xhttp: $xcapuri(u=>auid) : $xcapuri(u=>xuid)\n");<o:p></o:p></p>
<p class="MsoNormal">                                if($xcapuri(u=>auid)=="xcap-caps")<o:p></o:p></p>
<p class="MsoNormal">                                {<o:p></o:p></p>
<p class="MsoNormal">                                                $var(xbody) =<o:p></o:p></p>
<p class="MsoNormal">                                                "<?xml version='1.0' encoding='UTF-8'?><o:p></o:p></p>
<p class="MsoNormal">                                                <xcap-caps xmlns='urn:ietf:params:xml:ns:xcap-caps'><o:p></o:p></p>
<p class="MsoNormal">                                                <auids><o:p></o:p></p>
<p class="MsoNormal">                                                                <auid>rls-services</auid><o:p></o:p></p>
<p class="MsoNormal">                                                                <auid>pidf-manipulation</auid><o:p></o:p></p>
<p class="MsoNormal">                                                                <auid>xcap-caps</auid><o:p></o:p></p>
<p class="MsoNormal">                                                                <auid>resource-lists</auid><o:p></o:p></p>
<p class="MsoNormal">                                                                <auid>pres-rules</auid><o:p></o:p></p>
<p class="MsoNormal">                                                                <auid>org.openmobilealliance.pres-rules</auid><o:p></o:p></p>
<p class="MsoNormal">                                                </auids><o:p></o:p></p>
<p class="MsoNormal">                                                <extensions><o:p></o:p></p>
<p class="MsoNormal">                                                </extensions><o:p></o:p></p>
<p class="MsoNormal">                                                <namespaces><o:p></o:p></p>
<p class="MsoNormal">                                                                <namespace>urn:ietf:params:xml:ns:rls-services</namespace><o:p></o:p></p>
<p class="MsoNormal">                                                                <namespace>urn:ietf:params:xml:ns:pidf</namespace><o:p></o:p></p>
<p class="MsoNormal">                                                                <namespace>urn:ietf:params:xml:ns:xcap-caps</namespace><o:p></o:p></p>
<p class="MsoNormal">                                                                <namespace>urn:ietf:params:xml:ns:resource-lists</namespace><o:p></o:p></p>
<p class="MsoNormal">                                                                <namespace>urn:ietf:params:xml:ns:pres-rules</namespace><o:p></o:p></p>
<p class="MsoNormal">                                                </namespaces><o:p></o:p></p>
<p class="MsoNormal">                                                </xcap-caps>";<o:p></o:p></p>
<p class="MsoNormal">                                                xhttp_reply("200", "ok", "application/xcap-caps+xml",<o:p></o:p></p>
<p class="MsoNormal">                                                                                                "$var(xbody)");<o:p></o:p></p>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                #!ifdef WITH_XHTTPAUTH<o:p></o:p></p>
<p class="MsoNormal">                                # be sure auth user access only its documents<o:p></o:p></p>
<p class="MsoNormal">                                                if ($au!=$(var(uri){uri.user})) {<o:p></o:p></p>
<p class="MsoNormal">                                                                xhttp_reply("403", "Forbidden", "text/html",<o:p></o:p></p>
<p class="MsoNormal">                                                                                "<html><body>$si:$sp</body></html>");<o:p></o:p></p>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                #!endif<o:p></o:p></p>
<p class="MsoNormal">                xdbg("===== xhttp: Antes del switch $rm => $hu\n");<o:p></o:p></p>
<p class="MsoNormal">                switch($rm) {<o:p></o:p></p>
<p class="MsoNormal">                                case "PUT":<o:p></o:p></p>
<p class="MsoNormal">xdbg("===== xhttp: Evgeny something will happen after that $var(uri)\n");<o:p></o:p></p>
<p class="MsoNormal">                                                xcaps_put("$var(uri)", "$hu", "$rb");<o:p></o:p></p>
<p class="MsoNormal">xdbg("===== xhttp: Evgeny something before that\n");<o:p></o:p></p>
<p class="MsoNormal">                                                if($xcapuri(u=>auid)=~"pres-rules") {<o:p></o:p></p>
<p class="MsoNormal">                                                                pres_update_watchers("$var(uri)", "presence");<o:p></o:p></p>
<p class="MsoNormal">                                                                pres_refresh_watchers("$var(uri)", "presence", 1);<o:p></o:p></p>
<p class="MsoNormal">                                                } else if ($xcapuri(u=>auid)=~"resource-lists"<o:p></o:p></p>
<p class="MsoNormal">                                                  || $xcapuri(u=>auid)=~"rls-services") {<o:p></o:p></p>
<p class="MsoNormal">                                                                rls_update_subs("$var(uri)", "presence");<o:p></o:p></p>
<p class="MsoNormal">                                                }<o:p></o:p></p>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                break;<o:p></o:p></p>
<p class="MsoNormal">                                case "GET":<o:p></o:p></p>
<p class="MsoNormal">                                                xlog("L_NOTICE", "===== xhttp: get $var(uri) => $hu\n");<o:p></o:p></p>
<p class="MsoNormal">                                                xcaps_get("$var(uri)", "$hu");<o:p></o:p></p>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                break;<o:p></o:p></p>
<p class="MsoNormal">                                case "DELETE":<o:p></o:p></p>
<p class="MsoNormal">                                                xcaps_del("$var(uri)", "$hu");<o:p></o:p></p>
<p class="MsoNormal">                                                if($xcapuri(u=>auid)=~"pres-rules")<o:p></o:p></p>
<p class="MsoNormal">                                                {<o:p></o:p></p>
<p class="MsoNormal">                                                                xlog("L_NOTICE", "===== xhttp del: refreshing watchers for $var(uri)\n");<o:p></o:p></p>
<p class="MsoNormal">                                                                pres_update_watchers("$var(uri)", "presence");<o:p></o:p></p>
<p class="MsoNormal">                                                                pres_refresh_watchers("$var(uri)", "presence", 1);<o:p></o:p></p>
<p class="MsoNormal">                                                }<o:p></o:p></p>
<p class="MsoNormal">                                                exit;<o:p></o:p></p>
<p class="MsoNormal">                                break;<o:p></o:p></p>
<p class="MsoNormal">                                }<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                # http ops<o:p></o:p></p>
<p class="MsoNormal">                xhttp_reply("200", "ok", "text/html",<o:p></o:p></p>
<p class="MsoNormal">                "<html><body>OK: $si:$sp</body></html>");<o:p></o:p></p>
<p class="MsoNormal">                exit;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal">#!endif<o:p></o:p></p>
</div>
</body>
</html>