<br><div>Hola tengo problemas para traspasar llamadas desde un terminal asterisk de numeracion 5XXX a un</div><div>terminal en kamailio 3XXX</div><div>La configuracion es muy simple</div><div>Telefono3XXX<------->Kamailio<------->Asterisk<------->telefono5XXX</div>
<div><br></div><div>cuando llamo de 3100 a 5555</div><div>Kamailio le responde a asterisk con un 484 address incomplete</div><div><br></div><div>y cuando lo hago de 5555 a 3000 </div><div>Asterisk manda un 403 forbidem</div>
<div><br></div><div>Cual es el problema? Es una configuración bien simple </div><div>de antemano muchas gracias</div><div><br></div><div>Adjunto mi configuracion en Asterisk</div><div>extensions.conf</div><div><span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; "><pre style="padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(47, 111, 171); border-right-color: rgb(47, 111, 171); border-bottom-color: rgb(47, 111, 171); border-left-color: rgb(47, 111, 171); color: black; line-height: 1.1em; ">
<span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">[from-kamailio]
include => from-internal
[sip-local]
include => asterisk-out
;;Llamadas a extensions locales
exten => _5XXX,1,NoOp(Llamada Entrante)
exten => _5XXX,2, Dial(SIP/${EXTEN},20,Ttr)
exten => _5XXX,3,Hangup()
[asterisk-out]
;;Llamadas hacia Kamailio
exten => _3XXX,1,NoOp(Llamada hacia Kamailio)
exten => _3XXX,2, Dial(SIP/${<a href="http://EXTEN}@10.3.0.240:5060">EXTEN}@10.3.0.240:5060</a>)
exten => _3XXX,3,Hangup()</span></pre></span></div><div>sip.conf</div><div><br></div><div><span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; "><pre style="padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(47, 111, 171); border-right-color: rgb(47, 111, 171); border-bottom-color: rgb(47, 111, 171); border-left-color: rgb(47, 111, 171); color: black; background-color: rgb(249, 249, 249); line-height: 1.1em; ">
[general]
context=default
register => <a href="mailto:5999%3A5999@10.3.0.240">5999:5999@10.3.0.240</a>
registertimeout=20
registerattempts=10
allowoverlap=no
bindport=5060
srvlookup=yes
</pre><div><font class="Apple-style-span" face="monospace"><span class="Apple-style-span" style="line-height: 14px; white-space: pre;"><span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px; white-space: normal; "><pre style="padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(47, 111, 171); border-right-color: rgb(47, 111, 171); border-bottom-color: rgb(47, 111, 171); border-left-color: rgb(47, 111, 171); color: black; background-color: rgb(249, 249, 249); line-height: 1.1em; ">
[5999]
type=friend
secret=5999
context=from-kamailio
callerid=”Kamailio-Asterisk” <5999>
username=5999
fromuser=5999
insecure=very
fromdomain=10.2.0.240
call-limit=1
outboundproxy=10.2.0.240
port=5060</pre></span></span></font></div></span></div><div>Adjunto mi archivo de configuracion de kamailio</div><div><br></div><div>***************************Archivo de configuracion de Kamailio*******************************************+</div>
<div><br></div><div><div>#!KAMAILIO</div><div>#</div><div># $Id$</div><div>#</div><div># Kamailio (OpenSER) SIP Server v3.0 - basic configuration script</div><div># - web: <a href="http://www.kamailio.org">http://www.kamailio.org</a></div>
<div># - git: <a href="http://sip-router.org">http://sip-router.org</a></div><div>#</div><div># Direct your questions about this file to: <<a href="mailto:users@lists.kamailio.org">users@lists.kamailio.org</a>></div>
<div>#</div><div># Refer to the Core CookBook at <a href="http://www.kamailio.org/dokuwiki/doku.php">http://www.kamailio.org/dokuwiki/doku.php</a></div><div># for an explanation of possible statements, functions and parameters.</div>
<div>#</div><div># Several features can be enabled using '#!define WITH_FEATURE' directives:</div><div>#</div><div># *** To run in debug mode: </div><div># - define WITH_DEBUG</div><div>#</div><div># *** To enable mysql: </div>
<div># - define WITH_MYSQL</div><div>#</div><div># *** To enable authentication execute:</div><div># - enable mysql</div><div># - define WITH_AUTH</div><div># - add users using 'kamctl'</div><div>#</div>
<div># *** To enable persistent user location execute:</div><div># - enable mysql</div><div># - define WITH_USRLOCDB</div><div>#</div><div># *** To enable presence server execute:</div><div># - enable mysql</div>
<div># - define WITH_PRESENCE</div><div>#</div><div># *** To enable nat traversal execute:</div><div># - define WITH_NAT</div><div># - install RTPProxy: <a href="http://www.rtpproxy.org">http://www.rtpproxy.org</a></div>
<div># - start RTPProxy:</div><div># rtpproxy -l _your_public_ip_ -s udp:localhost:7722</div><div>#</div><div># *** To enable PSTN gateway routing execute:</div><div># - define WITH_PSTN</div><div># - set the value of pstn.gw_ip</div>
<div># - check route[PSTN] for regexp routing condition</div><div>#</div><div># *** To enhance accounting execute:</div><div># - enable mysql</div><div># - define WITH_ACCDB</div><div># - add following columns to database</div>
<div>#!ifdef ACCDB_COMMENT</div><div> ALTER TABLE acc ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT '';</div><div> ALTER TABLE acc ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT '';</div><div> ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT '';</div>
<div> ALTER TABLE acc ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT '';</div><div> ALTER TABLE acc ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT '';</div><div> ALTER TABLE missed_calls ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT '';</div>
<div> ALTER TABLE missed_calls ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT '';</div><div> ALTER TABLE missed_calls ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT '';</div><div> ALTER TABLE missed_call ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT '';</div>
<div> ALTER TABLE missed_calls ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT '';</div><div>#!endif</div><div><br></div><div><br></div><div>####### Global Parameters #########</div><div><br></div><div>#!ifdef WITH_DEBUG</div>
<div>debug=3</div><div>log_stderror=no</div><div>#!else</div><div>debug=2</div><div>log_stderror=no</div><div>#!endif</div><div><br></div><div>memdbg=5</div><div>memlog=5</div><div><br></div><div>log_facility=LOG_LOCAL0</div>
<div>fork=yes</div><div>children=4</div><div><br></div><div>/* uncomment the next line to disable TCP (default on) */</div><div>disable_tcp=yes</div><div><br></div><div>/* uncomment the next line to disable the auto discovery of local aliases</div>
<div> based on revers DNS on IPs (default on) */</div><div>auto_aliases=no</div><div>dns_try_ipv6=no</div><div><br></div><div>port=5060</div><div><br></div><div>/* uncomment and configure the following line if you want Kamailio to </div>
<div> bind on a specific interface/port/proto (default bind on all available) */</div><div>#listen=udp:<a href="http://10.0.0.10:5060">10.0.0.10:5060</a></div><div><br></div><div><br></div><div>####### Custom Parameters #########</div>
<div><br></div><div># These parameters can be modified runtime via RPC interface</div><div># - see the documentation of 'cfg_rpc' module.</div><div>#</div><div># Format: <a href="http://group.id">group.id</a> = value 'desc' description</div>
<div># Access: $sel(<a href="http://cfg_get.group.id">cfg_get.group.id</a>) or @<a href="http://cfg_get.group.id">cfg_get.group.id</a></div><div>#</div><div><br></div><div>#!ifdef WITH_PSTN</div><div># PSTN GW Routing</div>
<div>#</div><div># - pstn.gw_ip: valid IP or hostname as string value, example:</div><div># pstn.gw_ip = "10.0.0.101" desc "My PSTN GW Address"</div><div>#</div><div># - by default is empty to avoid misrouting</div>
<div>pstn.gw_ip = "" desc "PSTN GW Address"</div><div>#!endif</div><div><br></div><div><br></div><div>####### Modules Section ########</div><div><br></div><div>#set module path</div><div>mpath="/usr/local/lib/kamailio/modules_k/:/usr/local/lib/kamailio/modules/"</div>
<div><br></div><div>/* uncomment next line for MySQL DB support */</div><div>#!ifdef WITH_MYSQL</div><div>loadmodule "db_mysql.so"</div><div>#!endif</div><div>loadmodule "mi_fifo.so"</div><div>loadmodule "kex.so"</div>
<div>loadmodule "tm.so"</div><div>loadmodule "tmx.so"</div><div>loadmodule "sl.so"</div><div>loadmodule "rr.so"</div><div>loadmodule "pv.so"</div><div>loadmodule "maxfwd.so"</div>
<div>loadmodule "usrloc.so"</div><div>loadmodule "registrar.so"</div><div>loadmodule "textops.so"</div><div>loadmodule "uri_db.so"</div><div>loadmodule "siputils.so"</div>
<div>loadmodule "xlog.so"</div><div>loadmodule "sanity.so"</div><div>loadmodule "ctl.so"</div><div>loadmodule "mi_rpc.so"</div><div>loadmodule "acc.so"</div><div>#!ifdef WITH_AUTH</div>
<div>loadmodule "auth.so"</div><div>loadmodule "auth_db.so"</div><div>#!endif</div><div>/* uncomment next line for aliases support</div><div> NOTE: a DB (like db_mysql) module must be also loaded */</div>
<div>#loadmodule "alias_db.so"</div><div>/* uncomment next line for multi-domain support</div><div> NOTE: a DB (like db_mysql) module must be also loaded</div><div> NOTE: be sure and enable multi-domain support in all used modules</div>
<div> (see "multi-module params" section ) */</div><div>#loadmodule "domain.so"</div><div>#!ifdef WITH_PRESENCE</div><div>loadmodule "presence.so"</div><div>loadmodule "presence_xml.so"</div>
<div>#!endif</div><div><br></div><div>#!ifdef WITH_NAT</div><div>loadmodule "nathelper.so"</div><div>#!endif</div><div><br></div><div># ----------------- setting module-specific parameters ---------------</div><div>
<br></div><div><br></div><div># ----- mi_fifo params -----</div><div>modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")</div><div><br></div><div><br></div><div># ----- rr params -----</div>
<div># add value to ;lr param to cope with most of the UAs</div><div>modparam("rr", "enable_full_lr", 1)</div><div># do not append from tag to the RR (no need for this script)</div><div>modparam("rr", "append_fromtag", 0)</div>
<div><br></div><div><br></div><div># ----- rr params -----</div><div>modparam("registrar", "method_filtering", 1)</div><div>/* uncomment the next line to disable parallel forking via location */</div><div>
# modparam("registrar", "append_branches", 0)</div><div>/* uncomment the next line not to allow more than 10 contacts per AOR */</div><div>#modparam("registrar", "max_contacts", 10)</div>
<div><br></div><div><br></div><div># ----- uri_db params -----</div><div>/* by default we disable the DB support in the module as we do not need it</div><div> in this configuration */</div><div>modparam("uri_db", "use_uri_table", 0)</div>
<div>modparam("uri_db", "db_url", "")</div><div><br></div><div><br></div><div># ----- acc params -----</div><div>/* what sepcial events should be accounted ? */</div><div>modparam("acc", "early_media", 1)</div>
<div>modparam("acc", "report_ack", 1)</div><div>modparam("acc", "report_cancels", 1)</div><div>/* by default ww do not adjust the direct of the sequential requests.</div><div> if you enable this parameter, be sure the enable "append_fromtag"</div>
<div> in "rr" module */</div><div>modparam("acc", "detect_direction", 0)</div><div>/* account triggers (flags) */</div><div>modparam("acc", "failed_transaction_flag", 3)</div>
<div>modparam("acc", "log_flag", 1)</div><div>modparam("acc", "log_missed_flag", 2)</div><div>modparam("acc", "log_extra", </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>"src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")</div>
<div>/* enhanced DB accounting */</div><div>#!ifdef WITH_ACCDB</div><div>modparam("acc", "db_flag", 1)</div><div>modparam("acc", "db_missed_flag", 2)</div><div>modparam("acc", "db_url",</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>"mysql://openser:openserrw@localhost/openser")</div><div>modparam("acc", "db_extra",</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>"src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")</div>
<div>#!endif</div><div><br></div><div># ----- usrloc params -----</div><div>/* enable DB persistency for location entries */</div><div>#!ifdef WITH_USRLOCDB</div><div>modparam("usrloc", "db_mode", 2)</div>
<div>modparam("usrloc", "db_url",</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>"mysql://openser:openserrw@localhost/openser")</div><div>#!endif</div><div><br></div><div>
# ----- auth_db params -----</div><div>/* enable the DB based authentication */</div><div>#!ifdef WITH_AUTH</div><div>#modparam("auth_db", "calculate_ha1", yes)</div><div>#modparam("auth_db", "password_column", "password")</div>
<div>#modparam("auth_db", "db_url",</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>"mysql://openser:openserrw@localhost/openser")</div><div>#modparam("auth_db", "load_credentials", "")</div>
<div>#!endif</div><div><br></div><div># ----- alias_db params -----</div><div>/* uncomment the following lines if you want to enable the DB based</div><div> aliases */</div><div>#modparam("alias_db", "db_url",</div>
<div>#<span class="Apple-tab-span" style="white-space:pre">        </span>"mysql://openser:openserrw@localhost/openser")</div><div><br></div><div><br></div><div># ----- domain params -----</div><div>/* uncomment the following lines to enable multi-domain detection</div>
<div> support */</div><div>#modparam("domain", "db_url",</div><div>#<span class="Apple-tab-span" style="white-space:pre">        </span>"mysql://openser:openserrw@localhost/openser")</div><div>#modparam("domain", "db_mode", 1) # Use caching</div>
<div><br></div><div><br></div><div># ----- multi-module params -----</div><div>/* uncomment the following line if you want to enable multi-domain support</div><div> in the modules (dafault off) */</div><div>#modparam("alias_db|auth_db|usrloc|uri_db", "use_domain", 1)</div>
<div><br></div><div><br></div><div># ----- presence params -----</div><div>/* enable presence server support */</div><div>#!ifdef WITH_PRESENCE</div><div>modparam("presence|presence_xml", "db_url",</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>"mysql://openser:openserrw@localhost/openser")</div><div>modparam("presence_xml", "force_active", 1)</div><div>modparam("presence", "server_address", "sip:<a href="http://10.0.0.10:5060">10.0.0.10:5060</a>")</div>
<div>#!endif</div><div><br></div><div># ----- nathelper -----</div><div>#!ifdef WITH_NAT</div><div>modparam("nathelper", "rtpproxy_sock", "udp:<a href="http://127.0.0.1:7722">127.0.0.1:7722</a>")</div>
<div>modparam("nathelper", "natping_interval", 30)</div><div>modparam("nathelper", "ping_nated_only", 1)</div><div>modparam("nathelper", "sipping_bflag", 7)</div>
<div>modparam("nathelper", "sipping_from", "<a href="mailto:sip%3Apinger@kamailio.org">sip:pinger@kamailio.org</a>")</div><div>modparam("registrar|nathelper", "received_avp", "$avp(i:80)")</div>
<div>modparam("usrloc", "nat_bflag", 6)</div><div>#!endif</div><div><br></div><div>####### Routing Logic ########</div><div><br></div><div><br></div><div># main request routing logic</div><div><br></div>
<div>route{</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (!mf_process_maxfwd_header("10")) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>sl_send_reply("483","Too Many Hops");</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if(!sanity_check("1511", "7"))</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>xlog("Malformed SIP message from $si:$sp\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>exit;</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># NAT detection</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>route(NAT);</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (has_totag()) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span># sequential request withing a dialog should</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span># take the path determined by record-routing</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (loose_route()) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (is_method("BYE")) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>setflag(1); # do accounting ...</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>setflag(3); # ... even if the transaction fails</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>route(RELAY);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>#route(1);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>} else {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>#if (is_method("SUBSCRIBE") && uri == myself) {</div><div>
<span class="Apple-tab-span" style="white-space:pre">                        </span>if (is_method("SUBSCRIBE") && $rd == "<a href="http://10.3.0.249:5060">10.3.0.249:5060</a>") {<span class="Apple-tab-span" style="white-space:pre">        </span></div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span># in-dialog subscribe requests</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>route(PRESENCE);</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>#route(2);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if ( is_method("ACK") ) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>if ( t_check_trans() ) {</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span># non loose-route, but stateful ACK; must be an ACK after a 487 or e.g. 404 from upstream server</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                        </span>t_relay();</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>} else {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                        </span># ACK without matching transaction ... ignore and discard.\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>exit;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>sl_send_reply("404","Not here");</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>#initial requests</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># CANCEL processing</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (is_method("CANCEL"))</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (t_check_trans())</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>t_relay();</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>t_check_trans();</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># authentication</div><div><span class="Apple-tab-span" style="white-space:pre">        </span># route(AUTH);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># record routing for dialog forming requests (in case they are routed)</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span># - remove preloaded route headers</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>remove_hf("Route");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (is_method("INVITE|SUBSCRIBE"))</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>record_route();</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># account only INVITEs</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (is_method("INVITE")) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>if (uri =~ "sip:5[0-9][0-9][0-9]@*"){</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>route(3);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>exit;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>#setflag(1); # do accounting</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if (!uri==myself)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>/* replace with following line if multi-domain support is used */</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>##if (!is_uri_host_local())</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>append_hf("P-hint: outbound\r\n"); </div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>route(RELAY);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># requests for my domain</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if( is_method("PUBLISH|SUBSCRIBE"))</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>route(PRESENCE);</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (is_method("PUBLISH")) </div><div> { </div><div> sl_send_reply("503", "Service Unavailable"); </div>
<div> exit; </div><div> } </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (is_method("REGISTER"))</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>if(isflagset(5))</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>setbflag("6");</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span># uncomment next line to do SIP NAT pinging </div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>## setbflag("7");</div><div>
<span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (!save("location"))</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>sl_reply_error();</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if ($rU==$null) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>#$rU==10.3.0.252</div><div><span class="Apple-tab-span" style="white-space:pre">                </span># request with no Username in RURI</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>sl_send_reply("484","Address Incomplete"+$rU);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>#route(PSTN);</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># apply DB based aliases (uncomment to enable)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>##alias_db_lookup("dbaliases");</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (!lookup("location")) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>switch ($rc) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>case -1:</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>case -3:</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>t_newtran();</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>t_reply("404", "Not Found");</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>case -2:</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>sl_send_reply("405", "Method Not Allowed");</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># when routing via usrloc, log the missed calls also</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>setflag(2);</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>route(RELAY);</div><div>}</div><div><br></div><div><br></div><div>route[RELAY] {</div><div>#!ifdef WITH_NAT</div><div>#<span class="Apple-tab-span" style="white-space:pre">        </span>if (check_route_param("nat=yes")) {</div>
<div>#<span class="Apple-tab-span" style="white-space:pre">                </span>setbflag("6");</div><div>#<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>#<span class="Apple-tab-span" style="white-space:pre">        </span>if (isflagset(5) || isbflagset("6")) {</div>
<div>#<span class="Apple-tab-span" style="white-space:pre">                </span>route(RTPPROXY);</div><div>#<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>#!endif</div><div><br></div><div>#<span class="Apple-tab-span" style="white-space:pre">        </span>/* example how to enable some additional event routes */</div>
<div>#<span class="Apple-tab-span" style="white-space:pre">        </span>if (is_method("INVITE")) {</div><div>#<span class="Apple-tab-span" style="white-space:pre">                </span>#t_on_branch("BRANCH_ONE");</div><div>
#<span class="Apple-tab-span" style="white-space:pre">                </span>t_on_reply("REPLY_ONE");</div><div>#<span class="Apple-tab-span" style="white-space:pre">                </span>t_on_failure("FAIL_ONE");</div><div>#<span class="Apple-tab-span" style="white-space:pre">        </span>}</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (!t_relay()) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>sl_reply_error();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>exit;</div><div>}</div><div><br></div><div><br></div><div># Presence server route</div><div>route[PRESENCE]</div><div>{</div><div>#!ifdef WITH_PRESENCE</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if (!t_newtran())</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>sl_reply_error();</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>};</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if(is_method("PUBLISH"))</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>handle_publish();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>t_release();</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>else</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if( is_method("SUBSCRIBE"))</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>handle_subscribe();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>t_release();</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>exit;</div><div>#!endif</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span># if presence enabled, this part will not be executed</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (is_method("PUBLISH") || $rU==$null)</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>sl_send_reply("404", "Not here");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>exit;</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>return;</div><div>}</div><div><br></div><div># Authentication route</div><div>route[AUTH] {</div>
<div>#!ifdef WITH_AUTH</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (is_method("REGISTER"))</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span># authenticate the REGISTER requests (uncomment to enable auth)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>if (!www_authorize("", "subscriber"))</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>www_challenge("", "0");</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if ($au!=$tU)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>sl_send_reply("403","Forbidden auth ID");</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>exit;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>} else {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span># authenticate if from local subscriber (uncomment to enable auth)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>if (from_uri==myself)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (!proxy_authorize("", "subscriber")) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>proxy_challenge("", "0");</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (is_method("PUBLISH"))</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>if ($au!=$tU) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                        </span>sl_send_reply("403","Forbidden auth ID");</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>exit;</div><div>
<span class="Apple-tab-span" style="white-space:pre">                                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>} else {</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>if ($au!=$fU) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                        </span>sl_send_reply("403","Forbidden auth ID");</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>exit;</div><div>
<span class="Apple-tab-span" style="white-space:pre">                                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>consume_credentials();</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span># caller authenticated</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div>
<div>#!endif</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>return;</div><div>}</div><div><br></div><div># Caller NAT detection route</div><div>route[NAT]{</div><div>#!ifdef WITH_NAT</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>force_rport();</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if (nat_uac_test("19")) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (method=="REGISTER") {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>fix_nated_register();</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>} else {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>fix_nated_contact();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>setflag(5);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>#!endif</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>return;</div>
<div>}</div><div><br></div><div># RTPProxy control</div><div>route[RTPPROXY] {</div><div>#!ifdef WITH_NAT</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (is_method("BYE")) {</div><div>
<span class="Apple-tab-span" style="white-space:pre">                </span>unforce_rtp_proxy();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>} else if (is_method("INVITE")){</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>force_rtp_proxy();</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (!has_totag()) add_rr_param(";nat=yes");</div><div>#!endif</div><div>
<span class="Apple-tab-span" style="white-space:pre">        </span>return;</div><div>}</div><div><br></div><div># PSTN GW routing</div><div>route[PSTN] {</div><div>#!ifdef WITH_PSTN</div><div><span class="Apple-tab-span" style="white-space:pre">        </span># check if PSTN GW IP is defined</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if (strempty($sel(cfg_get.pstn.gw_ip))) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>xlog("SCRIPT: PSTN rotuing enabled but pstn.gw_ip not defined\n");</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>return;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># route to PSTN dialed numbers starting with '+' or '00'</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span># (international format)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span># - update the condition to match your dialing rules for PSTN routing</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>if(!($rU=~"^(\+|00)[1-9][0-9]{3,20}$"))</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return;</div><div><br></div><div>
<span class="Apple-tab-span" style="white-space:pre">        </span># only local users allowed to call</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if(from_uri!=myself) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>sl_send_reply("403", "Not Allowed");</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>$ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip);</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>route(RELAY);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>exit;</div><div>#!endif</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>return;</div>
<div>}</div><div><br></div><div># Sample branch router</div><div>branch_route[BRANCH_ONE] {</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>xdbg("new branch at $ru\n");</div><div>}</div><div>
<br></div><div># Sample onreply route</div><div>onreply_route[REPLY_ONE] {</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>xdbg("incoming reply\n");</div><div>#!ifdef WITH_NAT</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if ((isflagset(5) || isbflagset("6")) && status=~"(183)|(2[0-9][0-9])") {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>force_rtp_proxy();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (isbflagset("6")) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>fix_nated_contact();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>#!endif</div><div>}</div><div><br></div><div># Sample failure route</div>
<div>failure_route[FAIL_ONE] {</div><div>#!ifdef WITH_NAT</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (is_method("INVITE")</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>&& (isbflagset("6") || isflagset(5))) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>unforce_rtp_proxy();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>#!endif</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (t_is_canceled()) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>exit;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># uncomment the following lines if you want to block client </div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span># redirect based on 3xx replies.</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>##if (t_check_status("3[0-9][0-9]")) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>##t_reply("404","Not found");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>##<span class="Apple-tab-span" style="white-space:pre">        </span>exit;</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>##}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># uncomment the following lines if you want to redirect the failed </div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span># calls to a different new destination</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>##if (t_check_status("486|408")) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>##<span class="Apple-tab-span" style="white-space:pre">        </span>sethostport("<a href="http://192.168.2.100:5060">192.168.2.100:5060</a>");</div><div>
<span class="Apple-tab-span" style="white-space:pre">        </span>##<span class="Apple-tab-span" style="white-space:pre">        </span>append_branch();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>##<span class="Apple-tab-span" style="white-space:pre">        </span># do not set the missed call flag again</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>##<span class="Apple-tab-span" style="white-space:pre">        </span>t_relay();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>##}</div><div>
}</div><div> route[3] { </div><div> if (uri=~ "sip:5[0-9][0-9][0-9]@*"){ #nuevamente corrobora la regla de marcación</div><div> rewritehostport("<a href="http://10.3.0.249:5060">10.3.0.249:5060</a>"); </div>
<div> route(RELAY); </div><div> exit;</div><div> } </div><div> }</div></div>