<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 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@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:0in;
        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;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</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=Section1>

<p class=MsoNormal>Hi all <o:p></o:p></p>

<p class=MsoNormal>I try to configure kamailio to register sip client with
freeradius via kamailio.<o:p></o:p></p>

<p class=MsoNormal>My configure as:<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>###################kamailio.cfg#############<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># $Id$<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># Kamailio (OpenSER) SIP Server v3.0 - basic configuration
script<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - web: http://www.kamailio.org<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - git: http://sip-router.org<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># Direct your questions about this file to:
&lt;users@lists.kamailio.org&gt;<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># Refer to the Core CookBook at
http://www.kamailio.org/dokuwiki/doku.php<o:p></o:p></p>

<p class=MsoNormal># for an explanation of possible statements, functions and
parameters.<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># Several features can be enabled using '#!define
WITH_FEATURE' directives:<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># *** To run in debug mode:<o:p></o:p></p>

<p class=MsoNormal>#!define WITH_DEBUG<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># *** To enable mysql:<o:p></o:p></p>

<p class=MsoNormal>#!define WITH_MYSQL<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># *** To enable authentication execute:<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - enable mysql<o:p></o:p></p>

<p class=MsoNormal>#!define WITH_AUTH<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - add users using 'kamctl'<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># *** To enable persistent user location execute:<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - enable mysql<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - define WITH_USRLOCDB<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># *** To enable presence server execute:<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - enable mysql<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - define WITH_PRESENCE<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># *** To enable nat traversal execute:<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - define WITH_NAT<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - install RTPProxy:
http://www.rtpproxy.org<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - start RTPProxy:<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rtpproxy -l
_your_public_ip_ -s udp:localhost:7722<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># *** To enable PSTN gateway routing execute:<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - define WITH_PSTN<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - set the value of pstn.gw_ip<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - check route[PSTN] for regexp
routing condition<o:p></o:p></p>

<p class=MsoNormal>#<o:p></o:p></p>

<p class=MsoNormal># *** To enhance accounting execute:<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - enable mysql<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - define WITH_ACCDB<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp; - add following columns to
database<o:p></o:p></p>

<p class=MsoNormal>#!ifdef ACCDB_COMMENT<o:p></o:p></p>

<p class=MsoNormal>&nbsp; ALTER TABLE acc ADD COLUMN src_user VARCHAR(64) NOT
NULL DEFAULT '';<o:p></o:p></p>

<p class=MsoNormal>&nbsp; ALTER TABLE acc ADD COLUMN src_domain VARCHAR(128)
NOT NULL DEFAULT '';<o:p></o:p></p>

<p class=MsoNormal>&nbsp; ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR(64) NOT
NULL DEFAULT '';<o:p></o:p></p>

<p class=MsoNormal>&nbsp; ALTER TABLE acc ADD COLUMN dst_user VARCHAR(64) NOT
NULL DEFAULT '';<o:p></o:p></p>

<p class=MsoNormal>&nbsp; ALTER TABLE acc ADD COLUMN dst_domain VARCHAR(128)
NOT NULL DEFAULT '';<o:p></o:p></p>

<p class=MsoNormal>&nbsp; ALTER TABLE missed_calls ADD COLUMN src_user
VARCHAR(64) NOT NULL DEFAULT '';<o:p></o:p></p>

<p class=MsoNormal>&nbsp; ALTER TABLE missed_calls ADD COLUMN src_domain
VARCHAR(128) NOT NULL DEFAULT '';<o:p></o:p></p>

<p class=MsoNormal>&nbsp; ALTER TABLE missed_calls ADD COLUMN dst_ouser
VARCHAR(64) NOT NULL DEFAULT '';<o:p></o:p></p>

<p class=MsoNormal>&nbsp; ALTER TABLE missed_calls ADD COLUMN dst_user
VARCHAR(64) NOT NULL DEFAULT '';<o:p></o:p></p>

<p class=MsoNormal>&nbsp; ALTER TABLE missed_calls ADD COLUMN dst_domain
VARCHAR(128) NOT NULL DEFAULT '';<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>####### Global Parameters #########<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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=no<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>&nbsp;</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>&nbsp;</o:p></p>

<p class=MsoNormal>log_facility=LOG_LOCAL0<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;&nbsp; based on revers DNS on IPs (default on) */<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>#auto_aliases=no<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>port=5060<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;&nbsp; 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>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>####### Custom Parameters #########<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;</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 = &quot;10.0.0.101&quot; desc &quot;My PSTN GW
Address&quot;<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 = &quot;&quot; desc &quot;PSTN GW Address&quot;<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>####### Modules Section ########<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>#set module path<o:p></o:p></p>

<p class=MsoNormal>mpath=&quot;/usr/local/lib/kamailio/modules_k/:/usr/local/lib/kamailio/modules/&quot;<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>/* uncomment next line for MySQL DB support */<o:p></o:p></p>

<p class=MsoNormal>#!ifdef WITH_MYSQL<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;db_mysql.so&quot;<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;mi_fifo.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;kex.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;tm.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;tmx.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;sl.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;rr.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;pv.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;maxfwd.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;usrloc.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;registrar.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;textops.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;uri_db.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;siputils.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;xlog.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;sanity.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;ctl.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;mi_rpc.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;acc.so&quot;<o:p></o:p></p>

<p class=MsoNormal>#!ifdef WITH_AUTH<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;auth.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;auth_radius.so&quot;<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal>/* uncomment next line for aliases support<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp; NOTE: a DB (like db_mysql) module must be also
loaded */<o:p></o:p></p>

<p class=MsoNormal>#loadmodule &quot;alias_db.so&quot;<o:p></o:p></p>

<p class=MsoNormal>/* uncomment next line for multi-domain support<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp; NOTE: a DB (like db_mysql) module must be also
loaded<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp; NOTE: be sure and enable multi-domain support
in all used modules<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (see
&quot;multi-module params&quot; section ) */<o:p></o:p></p>

<p class=MsoNormal>#loadmodule &quot;domain.so&quot;<o:p></o:p></p>

<p class=MsoNormal>#!ifdef WITH_PRESENCE<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;presence.so&quot;<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;presence_xml.so&quot;<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>#!ifdef WITH_NAT<o:p></o:p></p>

<p class=MsoNormal>loadmodule &quot;nathelper.so&quot;<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># ----------------- setting module-specific parameters
---------------<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># ----- mi_fifo params -----<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;mi_fifo&quot;, &quot;fifo_name&quot;,
&quot;/tmp/kamailio_fifo&quot;)<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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(&quot;rr&quot;, &quot;enable_full_lr&quot;, 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(&quot;rr&quot;, &quot;append_fromtag&quot;, 0)<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># ----- rr params -----<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;registrar&quot;,
&quot;method_filtering&quot;, 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(&quot;registrar&quot;,
&quot;append_branches&quot;, 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(&quot;registrar&quot;, &quot;max_contacts&quot;,
10)<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># ----- uri_db params -----<o:p></o:p></p>

<p class=MsoNormal>/* by default we disable the DB support in the module as we
do not need it<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp; in this configuration */<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;uri_db&quot;, &quot;use_uri_table&quot;, 0)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;uri_db&quot;, &quot;db_url&quot;,
&quot;&quot;)<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># ----- acc params -----<o:p></o:p></p>

<p class=MsoNormal>/* what sepcial events should be accounted ? */<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;acc&quot;, &quot;early_media&quot;, 1)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;acc&quot;, &quot;report_ack&quot;, 1)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;acc&quot;, &quot;report_cancels&quot;, 1)<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>&nbsp;&nbsp; if you enable this parameter, be sure the
enable &quot;append_fromtag&quot;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp; in &quot;rr&quot; module */<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;acc&quot;, &quot;detect_direction&quot;, 0)<o:p></o:p></p>

<p class=MsoNormal>/* account triggers (flags) */<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;acc&quot;,
&quot;failed_transaction_flag&quot;, 3)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;acc&quot;, &quot;log_flag&quot;, 1)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;acc&quot;, &quot;log_missed_flag&quot;, 2)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;acc&quot;, &quot;log_extra&quot;,<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&quot;)<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(&quot;acc&quot;, &quot;db_flag&quot;, 1)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;acc&quot;, &quot;db_missed_flag&quot;, 2)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;acc&quot;, &quot;db_url&quot;,<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;mysql://openser:openserrw@localhost/openser&quot;)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;acc&quot;, &quot;db_extra&quot;,<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&quot;)<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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(&quot;usrloc&quot;,
&quot;db_mode&quot;,&nbsp;&nbsp; 2)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;usrloc&quot;, &quot;db_url&quot;,<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;mysql://openser:openserrw@localhost/openser&quot;)<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># ----- auth_db params -----<o:p></o:p></p>

<p class=MsoNormal>/* enable the DB based authentication */<o:p></o:p></p>

<p class=MsoNormal>#!ifdef WITH_AUTH<o:p></o:p></p>

<p class=MsoNormal>#modparam(&quot;auth_db&quot;, &quot;calculate_ha1&quot;,
yes)<o:p></o:p></p>

<p class=MsoNormal>#modparam(&quot;auth_db&quot;, &quot;password_column&quot;,
&quot;password&quot;)<o:p></o:p></p>

<p class=MsoNormal>#modparam(&quot;auth_db&quot;, &quot;db_url&quot;,<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;mysql://openser:openserrw@localhost/kamailio&quot;)<o:p></o:p></p>

<p class=MsoNormal>#modparam(&quot;auth_db&quot;, &quot;load_credentials&quot;,
&quot;&quot;)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;auth_radius&quot;, &quot;radius_config&quot;,
&quot;/usr/local/etc/radiusclient-ng/radiusclient.conf&quot;)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;auth_radius&quot;, &quot;service_type&quot;,
15)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;auth_radius&quot;, &quot;auth_extra&quot;,
&quot;Acct-Session-Id=$ci&quot;)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;auth_radius&quot;, &quot;use_ruri_flag&quot;,
22)<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># ----- alias_db params -----<o:p></o:p></p>

<p class=MsoNormal>/* uncomment the following lines if you want to enable the
DB based<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp; aliases */<o:p></o:p></p>

<p class=MsoNormal>#modparam(&quot;alias_db&quot;, &quot;db_url&quot;,<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;mysql://openser:openserrw@localhost/openser&quot;)<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># ----- domain params -----<o:p></o:p></p>

<p class=MsoNormal>/* uncomment the following lines to enable multi-domain
detection<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp; support */<o:p></o:p></p>

<p class=MsoNormal>#modparam(&quot;domain&quot;, &quot;db_url&quot;,<o:p></o:p></p>

<p class=MsoNormal>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;mysql://openser:openserrw@localhost/openser&quot;)<o:p></o:p></p>

<p class=MsoNormal>#modparam(&quot;domain&quot;, &quot;db_mode&quot;,
1)&nbsp;&nbsp; # Use caching<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># ----- multi-module params -----<o:p></o:p></p>

<p class=MsoNormal>/* uncomment the following line if you want to enable
multi-domain support<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp; in the modules (dafault off) */<o:p></o:p></p>

<p class=MsoNormal>#modparam(&quot;alias_db|auth_db|usrloc|uri_db&quot;,
&quot;use_domain&quot;, 1)<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># ----- presence params -----<o:p></o:p></p>

<p class=MsoNormal>/* enable presence server support */<o:p></o:p></p>

<p class=MsoNormal>#!ifdef WITH_PRESENCE<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;presence|presence_xml&quot;,
&quot;db_url&quot;,<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;mysql://openser:openserrw@localhost/openser&quot;)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;presence_xml&quot;, &quot;force_active&quot;,
1)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;presence&quot;, &quot;server_address&quot;,
&quot;sip:10.0.0.10:5060&quot;)<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># ----- nathelper -----<o:p></o:p></p>

<p class=MsoNormal>#!ifdef WITH_NAT<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;nathelper&quot;, &quot;rtpproxy_sock&quot;,
&quot;udp:127.0.0.1:7722&quot;)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;nathelper&quot;,
&quot;natping_interval&quot;, 30)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;nathelper&quot;, &quot;ping_nated_only&quot;,
1)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;nathelper&quot;, &quot;sipping_bflag&quot;,
7)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;nathelper&quot;, &quot;sipping_from&quot;,
&quot;sip:pinger@kamailio.org&quot;)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;registrar|nathelper&quot;,
&quot;received_avp&quot;, &quot;$avp(i:80)&quot;)<o:p></o:p></p>

<p class=MsoNormal>modparam(&quot;usrloc&quot;, &quot;nat_bflag&quot;, 6)<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>####### Routing Logic ########<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal># main request routing logic<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>route{<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(!mf_process_maxfwd_header(&quot;10&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply(&quot;483&quot;,&quot;Too Many Hops&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if(!sanity_check(&quot;1511&quot;, &quot;7&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
xlog(&quot;Malformed SIP message from $si:$sp\n&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # NAT detection<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(NAT);<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>if (has_totag()) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# sequential request withing a dialog should<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# take the path determined by record-routing<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (loose_route()) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (is_method(&quot;BYE&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setflag(1);
# do accounting ...<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
setflag(3); # ... even if the transaction fails<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
route(RELAY);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
} else {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (is_method(&quot;SUBSCRIBE&quot;) &amp;&amp; uri == myself) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# in-dialog subscribe requests<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
route(PRESENCE);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if ( is_method(&quot;ACK&quot;) ) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if ( t_check_trans() ) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# non loose-route, but stateful ACK; must be an ACK after a 487 or e.g. 404
from upstream server<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
t_relay();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
} else {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# ACK without matching transaction ... ignore and discard.\n&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply(&quot;404&quot;,&quot;Not here&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #initial requests<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # CANCEL
processing<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(is_method(&quot;CANCEL&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if
(t_check_trans())<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
t_relay();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t_check_trans();<o:p></o:p></p>

<p class=MsoNormal># authentication<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(AUTH);<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # record routing
for dialog forming requests (in case they are routed)<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # - remove
preloaded route headers<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
remove_hf(&quot;Route&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(is_method(&quot;INVITE|SUBSCRIBE&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
record_route();<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # account only
INVITEs<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(is_method(&quot;INVITE&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
setflag(1); # do accounting<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!uri==myself)<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* replace with
following line if multi-domain support is used */<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ##if
(!is_uri_host_local())<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
append_hf(&quot;P-hint: outbound\r\n&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
route(RELAY);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;# requests for my
domain<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(
is_method(&quot;PUBLISH|SUBSCRIBE&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
route(PRESENCE);<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(is_method(&quot;REGISTER&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if(isflagset(5))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
setbflag(&quot;6&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# uncomment next line to do SIP
NAT pinging<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
## setbflag(&quot;7&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!save(&quot;location&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_reply_error();<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($rU==$null) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# request with no Username in RURI<o:p></o:p></p>

<p class=MsoNormal>sl_send_reply(&quot;484&quot;,&quot;Address
Incomplete&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(PSTN);<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # apply DB based
aliases (uncomment to enable)<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
##alias_db_lookup(&quot;dbaliases&quot;);<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(!lookup(&quot;location&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
switch ($rc) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
case -1:<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
case -3:<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
t_newtran();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
t_reply(&quot;404&quot;, &quot;Not Found&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
case -2:<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply(&quot;405&quot;, &quot;Method Not Allowed&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # when routing
via usrloc, log the missed calls also<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setflag(2);<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(RELAY);<o:p></o:p></p>

<p class=MsoNormal>}<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(check_route_param(&quot;nat=yes&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
setbflag(&quot;6&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isflagset(5)
|| isbflagset(&quot;6&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
route(RTPPROXY);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* example how to
enable some additional event routes */<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(is_method(&quot;INVITE&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
#t_on_branch(&quot;BRANCH_ONE&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
t_on_reply(&quot;REPLY_ONE&quot;);<o:p></o:p></p>

<p class=MsoNormal>t_on_reply(&quot;REPLY_ONE&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
t_on_failure(&quot;FAIL_ONE&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!t_relay()) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_reply_error();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<o:p></o:p></p>

<p class=MsoNormal>}<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>#!ifdef WITH_PRESENCE<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!t_newtran())<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_reply_error();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if(is_method(&quot;PUBLISH&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
handle_publish();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
t_release();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(
is_method(&quot;SUBSCRIBE&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
handle_subscribe();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t_release();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # if presence
enabled, this part will not be executed<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(is_method(&quot;PUBLISH&quot;) || $rU==$null)<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply(&quot;404&quot;, &quot;Not here&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<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>#!ifdef WITH_AUTH<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(is_method(&quot;REGISTER&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# authenticate the REGISTER requests (uncomment to enable auth)<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!radius_www_authorize(&quot;192.168.1.70&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
www_challenge(&quot;192.168.1.70&quot;, &quot;0&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if ($au!=$tU)<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply(&quot;403&quot;,&quot;Forbidden auth ID&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# authenticate if from local subscriber (uncomment to enable auth)<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (from_uri==myself)<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!radius_proxy_authorize(&quot;192.168.1.70&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
proxy_challenge(&quot;192.168.1.70&quot;, &quot;0&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (is_method(&quot;PUBLISH&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if ($au!=$tU) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply(&quot;403&quot;,&quot;Forbidden auth ID&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if ($au!=$fU) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply(&quot;403&quot;,&quot;Forbidden auth ID&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
consume_credentials();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# caller authenticated<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<o:p></o:p></p>

<p class=MsoNormal>}<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; force_rport();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(nat_uac_test(&quot;19&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (method==&quot;REGISTER&quot;) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
fix_nated_register();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
} else {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
fix_nated_contact();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
setflag(5);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<o:p></o:p></p>

<p class=MsoNormal>}<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(is_method(&quot;BYE&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
unforce_rtp_proxy();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if
(is_method(&quot;INVITE&quot;)){<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
force_rtp_proxy();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!has_totag())
add_rr_param(&quot;;nat=yes&quot;);<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<o:p></o:p></p>

<p class=MsoNormal>}<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # check if PSTN
GW IP is defined<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(strempty($sel(cfg_get.pstn.gw_ip))) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
xlog(&quot;SCRIPT: PSTN rotuing enabled but pstn.gw_ip not defined\n&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # route to PSTN
dialed numbers starting with '+' or '00'<o:p></o:p></p>

<p class=MsoNormal>&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp; (international format)<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # - update the
condition to match your dialing rules for PSTN routing<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if(!($rU=~&quot;^(\+|00)[1-9][0-9]{3,20}$&quot;))<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return;<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # only local
users allowed to call<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if(from_uri!=myself) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply(&quot;403&quot;, &quot;Not Allowed&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ru =
&quot;sip:&quot; + $rU + &quot;@&quot; + $sel(cfg_get.pstn.gw_ip);<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(RELAY);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<o:p></o:p></p>

<p class=MsoNormal>}<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xdbg(&quot;new
branch at $ru\n&quot;);<o:p></o:p></p>

<p class=MsoNormal>}<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
xdbg(&quot;incoming reply\n&quot;);<o:p></o:p></p>

<p class=MsoNormal>#!ifdef WITH_NAT<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((isflagset(5)
|| isbflagset(&quot;6&quot;)) &amp;&amp;
status=~&quot;(183)|(2[0-9][0-9])&quot;) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
force_rtp_proxy();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(isbflagset(&quot;6&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
fix_nated_contact();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<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>&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(is_method(&quot;INVITE&quot;)<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&amp;&amp; (isbflagset(&quot;6&quot;) || isflagset(5))) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
unforce_rtp_proxy();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal>#!endif<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;if
(t_is_canceled()) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # uncomment the
following lines if you want to block client<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # redirect based
on 3xx replies.<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ##if
(t_check_status(&quot;3[0-9][0-9]&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
##t_reply(&quot;404&quot;,&quot;Not found&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ##}<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # uncomment the
following lines if you want to redirect the failed<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # calls to a
different new destination<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ##if
(t_check_status(&quot;486|408&quot;)) {<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sethostport(&quot;192.168.2.100:5060&quot;);<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
append_branch();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # do not set the missed call flag again<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t_relay();<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ##}<o:p></o:p></p>

<p class=MsoNormal>}<o:p></o:p></p>

<p class=MsoNormal>##############################################<o:p></o:p></p>

<p class=MsoNormal>I run command : kamctl start<o:p></o:p></p>

<p class=MsoNormal>But : ERROR: PID file /var/run/kamailio.pid does not exist --
Kamailio start failed<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>And I run : tail &#8211;f /var/log/message to show log:<o:p></o:p></p>

<p class=MsoNormal>The log is:<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: ERROR: &lt;core&gt;
[sr_module.c:390]: ERROR: load_module: could not open module
&lt;/usr/local/lib/kamailio/modules/auth_radius.so&gt;:
libradiusclient-ng.so.2: cannot open shared object file: No such file or
directory<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: : &lt;core&gt;
[cfg.y:3330]: parse error in config file /usr/local/etc/kamailio/kamailio.cfg,
line 145, column 12-27: failed to load module<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: ERROR: &lt;core&gt;
[modparam.c:154]: set_mod_param_regex: No module matching &lt;auth_radius&gt;
found<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: : &lt;core&gt;
[cfg.y:3333]: parse error in config file /usr/local/etc/kamailio/kamailio.cfg,
line 234, column 92: Can't set module parameter<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: ERROR: &lt;core&gt;
[modparam.c:154]: set_mod_param_regex: No module matching &lt;auth_radius&gt;
found<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: : &lt;core&gt;
[cfg.y:3333]: parse error in config file /usr/local/etc/kamailio/kamailio.cfg,
line 235, column 43: Can't set module parameter<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: ERROR: &lt;core&gt;
[modparam.c:154]: set_mod_param_regex: No module matching &lt;auth_radius&gt;
found<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: : &lt;core&gt;
[cfg.y:3333]: parse error in config file /usr/local/etc/kamailio/kamailio.cfg,
line 236, column 60: Can't set module parameter<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: ERROR: &lt;core&gt;
[modparam.c:154]: set_mod_param_regex: No module matching &lt;auth_radius&gt;
found<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: : &lt;core&gt;
[cfg.y:3333]: parse error in config file /usr/local/etc/kamailio/kamailio.cfg,
line 237, column 44: Can't set module parameter<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: : &lt;core&gt;
[cfg.y:3333]: parse error in config file /usr/local/etc/kamailio/kamailio.cfg,
line 479, column 50: unknown command, missing loadmodule?<o:p></o:p></p>

<p class=MsoNormal>Aug&nbsp; 4 15:05:07 appliance kamailio: : &lt;core&gt;
[cfg.y:3333]: parse error in config file /usr/local/etc/kamailio/kamailio.cfg,
line 494, column 53: unknown command, missing loadmodule?<o:p></o:p></p>

<p class=MsoNormal>############### <o:p></o:p></p>

<p class=MsoNormal>I try to add : /usr/local/lib/* to /etc/ld.so.conf <o:p></o:p></p>

<p class=MsoNormal>And run : ldconfig &#8211;v<o:p></o:p></p>

<p class=MsoNormal>But the result is the same error .<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Please help me if someone know what is wrong.<o:p></o:p></p>

<p class=MsoNormal>Any suggest is welcome.<o:p></o:p></p>

<p class=MsoNormal>Thanks and Regards<o:p></o:p></p>

<p class=MsoNormal>Thanh.Truong<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

</body>

</html>