<div dir="ltr"><div class="gmail-adn gmail-ads" style="border-left:none;padding:0px;display:flex;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:medium"><div class="gmail-gs" style="margin:0px;padding:0px 0px 20px;width:2000px"><div class="gmail-"><div id="gmail-:6er" class="gmail-ii gmail-gt" style="font-size:0.875rem;direction:ltr;margin:8px 0px 0px;padding:0px"><div id="gmail-:6eq" class="gmail-a3s gmail-aiL" style="overflow:hidden;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:small;line-height:1.5;font-family:Arial,Helvetica,sans-serif"><div dir="ltr"><div>I have one Kamailio that makes an outbound register on two Asterisk.<br></div>I have a dispatcher with that same two Asterisk destinations, on INVITE message I call replace_from("", ) in order<div>to call a internal extension and on failure route I receive 401 and call </div><div><br></div><div>the process of authorization is OK.</div><div><br></div><div>The problem is that if the first Asterisk fail and I get 500 on failure route I can not call replace_from() because</div><div>is not valid on the block.</div><div><br></div><div>Is there any way to make this type of authorization process after receiving a 500 on failure route of dispatcher ?</div><div><br></div><div>Below my cfg file.<br></div><div><br></div><div>Thanks in advance.</div><div>Antonio Couto</div><div><br></div><div><pre style="white-space:pre-wrap;box-sizing:border-box;margin-top:0px;margin-bottom:0px;padding:0.5em;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:14px;line-height:inherit;font-family:"Courier New",Courier,monospace;vertical-align:baseline;width:2000px;overflow-x:auto;background:rgb(240,240,240);color:rgb(68,68,68)"><span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!KAMAILIO</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!ifdef WITH_DEBUG</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!define DBGLEVEL 3</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!else</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!define DBGLEVEL 2</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!endif</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># - flags</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># FLT_ - per transaction (message) flags</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># FLB_ - per branch flags</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!define FLT_ACC 1</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!define FLT_ACCMISSED 2</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!define FLT_ACCFAILED 3</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!define FLT_NATS 5</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!define FLB_NATB 6</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">#!define FLB_NATSIPPING 7</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">####### Global Parameters #########</span>
/* LOG Levels: 3=DBG, 2=INFO, 1=NOTICE, 0=WARN, -1=ERR, ... */
debug=DBGLEVEL
/* <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">set</span> to <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">'yes'</span> to <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">print</span> <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">log</span> messages to terminal or use <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">'-E'</span> cli option */
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">log</span>_stderror=no
memdbg=5
memlog=5
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">log</span>_facility=LOG_LOCAL0
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">log</span>_prefix=<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"{<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$mt</span> <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$hdr</span>(CSeq) <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$ci</span>} "</span>
children=8
auto_aliases=no
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">enable</span>_tls=no
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">enable</span>_sctp=no
tcp_accept_no_cl=yes
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># SIP port</span>
listen=udp:<a href="http://192.168.0.201:5060/" target="_blank">192.168.0.201:5060</a>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># xhttp port</span>
listen=tcp:<a href="http://127.0.0.1:8181/" target="_blank">127.0.0.1:8181</a>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"xhttp.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"jsonrpcs.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"kex.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"corex.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"tm.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"tmx.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"sl.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"rr.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"pv.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"maxfwd.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"textops.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"siputils.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"xlog.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"sanity.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"ctl.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"acc.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"htable.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"db_text.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dialog.so"</span>
loadmodule <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"uac.so"</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># ----------------- setting module-specific parameters ---------------</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># ----- jsonrpcs params -----</span>
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"jsonrpcs"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"pretty_format"</span>, 1)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"jsonrpcs"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"transport"</span>, 1)
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># ----- sanity params -----</span>
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"sanity"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"autodrop"</span>, 0)
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># ----- tm params -----</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># default retransmission timeout: 2sec</span>
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"tm"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"fr_timer"</span>, 1500)
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># default invite retransmission timeout after 1xx: 40sec</span>
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"tm"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"fr_inv_timer"</span>, 40000)
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># ----- rr params -----</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># set next param to 1 to add value to ;lr param (helps with some UAs)</span>
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"rr"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"enable_full_lr"</span>, 0)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"rr"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"append_fromtag"</span>, 1)
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># account triggers (flags)</span>
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"acc"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"log_flag"</span>, FLT_ACC)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"acc"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"failed_transaction_flag"</span>, FLT_ACCFAILED)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"acc"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"log_extra"</span>,
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"src_user=<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$fU</span>;src_domain=<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$fd</span>;src_ip=<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$si</span>;"</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dst_ouser=<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$tU</span>;dst_user=<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$rU</span>;dst_domain=<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$rd</span>"</span>)
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># ----- dispatcher params -----</span>
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"list_file"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"/etc/kamailio/dispatcher.list"</span>)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"flags"</span>, 2)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"xavp_dst"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"_dsdst_"</span>)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"xavp_ctx"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"_dsctx_"</span>)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"ds_ping_method"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"OPTIONS"</span>)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"ds_ping_from"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"<a href="mailto:sip%3Aproxy@kamailio.org" target="_blank">sip:proxy@kamailio.org</a>"</span>)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"ds_ping_interval"</span>, 1)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"ds_probing_mode"</span>, 1)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"ds_probing_threshold"</span>, 1)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"ds_inactive_threshold"</span>, 1)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dispatcher"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"ds_timer_mode"</span>, 1)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"db_text"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"db_mode"</span>, 1)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"db_text"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"emptystring"</span>, 1)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dialog"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dlg_flag"</span>, 4)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"dialog"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"track_cseq_updates"</span>, 1)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"uac"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"restore_dlg"</span>, 1)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"uac"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"reg_db_url"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"text:///etc/kamailio/dbtext"</span>)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"uac"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"reg_db_table"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"uacreg"</span>)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"uac"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"reg_timer_interval"</span>, 60)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"uac"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"reg_retry_interval"</span>, 60)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"uac"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"reg_contact_addr"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"<a href="http://192.168.0.201:5060/" target="_blank">192.168.0.201:5060</a>"</span>)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"uac"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"auth_username_avp"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$avp</span>(auser)"</span>)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"uac"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"auth_password_avp"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$avp</span>(apass)"</span>)
modparam(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"uac"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"auth_realm_avp"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$avp</span>(arealm)"</span>)
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)">####### Routing Logic ########</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># main request routing logic</span>
request_route {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># per request initial checks</span>
route(REQINIT);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># CANCEL processing</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (is_method(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"CANCEL"</span>)) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (t_check_trans()) {
route(RELAY);
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># handle retransmissions</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (!is_method(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"ACK"</span>)) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span>(t_precheck_trans()) {
t_check_trans();
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
t_check_trans();
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># handle requests within SIP dialogs</span>
route(WITHINDLG);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># record routing for dialog forming requests (in case they are routed)</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># - remove preloaded route headers</span>
remove_hf(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"Route"</span>);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (is_method(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"INVITE|SUBSCRIBE"</span>)) {
record_route();
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># account only INVITEs</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (is_method(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"INVITE"</span>)) {
setflag(FLT_ACC); <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># do accounting</span>
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$rU</span>==<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$null</span>) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># request with no Username in RURI</span>
sl_send_reply(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"484"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"Address Incomplete"</span>);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># dispatch destinations</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (is_method(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"INVITE"</span>)) {
route(DISPATCH);
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">else</span> {
sl_send_reply(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"501"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"Not Implemented"</span>);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># Dispatch requests</span>
route[DISPATCH] {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$si</span> == <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"192.168.0.44"</span> and <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$sp</span> == 5060) {
xlog(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"L_ALERT"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"from switch <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$si</span>:<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$sp</span>)\n"</span>);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$var</span>(groupid) = <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"2"</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">else</span>{
xlog(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"L_ALERT"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"from others <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$si</span>:<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$sp</span>)\n"</span>);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$var</span>(groupid) = <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"1"</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span>(!ds_select_dst(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$var</span>(groupid), <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"11"</span>)) {
send_reply(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"503"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"Service Unavailable"</span>);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$du</span> =~ <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"192.168.0.210"</span>) {
xlog(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"L_ALERT"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"SCRIPT: uac_replace_from\n"</span>);
uac_replace_from(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">""</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"<a href="http://sip:4000@192.168.0.201:5060/" target="_blank">sip:4000@192.168.0.201:5060</a>"</span>);
}
xlog(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"L_ALERT"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"SCRIPT: going to <<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$ru</span>> via <<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$du</span>> (attrs: <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$xavp</span>(_dsdst_=>attrs))\n"</span>);
t_on_failure(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"RTF_DISPATCH"</span>);
route(RELAY);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
failure_route[RTF_DISPATCH] {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$var</span>(ts) = t_get_status_code();
xlog(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"L_ALERT"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"ALERT: failure_route[RTF_DISPATCH]] from <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$si</span>:<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$rp</span> status:<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$var</span>(ts)\n"</span>);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (t_is_canceled()) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span>(t_check_status(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"401|407"</span>)) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$avp</span>(auser) = <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"4000"</span>;
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$avp</span>(apass) = <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"1234"</span>;
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$avp</span>(arealm) = <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"asterisk"</span>;
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (uac_auth()) {
route(RELAY);
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (t_check_status(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"500"</span>) or (t_branch_timeout() and !t_branch_replied())) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (ds_next_dst()) {
xlog(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"L_ALERT"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"retrying to <<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$ru</span>> via <<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$du</span>> (attrs: <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$xavp</span>(_dsdst_=>attrs))\n"</span>);
t_on_failure(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"RTF_DISPATCH"</span>);
route(RELAY);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
}
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># Per SIP request initial checks</span>
route[REQINIT] {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span>(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$ua</span> =~ <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"friendly|scanner|sipcli|sipvicious|VaxSIPUserAgent"</span>) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># silent drop for scanners - uncomment next line if want to reply</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># sl_send_reply("200", "OK");</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (!mf_process_maxfwd_header(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"10"</span>)) {
sl_send_reply(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"483"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"Too Many Hops"</span>);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span>(is_method(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"OPTIONS"</span>) && uri==myself && <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$rU</span>==<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$null</span>) {
sl_send_reply(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"200"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"Keepalive"</span>);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span>(!sanity_check(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"17895"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"7"</span>)) {
xlog(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"Malformed SIP request from <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$si</span>:<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$sp</span>\n"</span>);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># Handle requests within SIP dialogs</span>
route[WITHINDLG] {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (!has_totag()) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">return</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># sequential request withing a dialog should</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># take the path determined by record-routing</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (loose_route()) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (is_method(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"BYE"</span>)) {
setflag(FLT_ACC); <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># do accounting ...</span>
setflag(FLT_ACCFAILED); <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># ... even if the transaction fails</span>
}
route(RELAY);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (is_method(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"ACK"</span>)) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (t_check_trans()) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># no loose-route, but stateful ACK;</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># must be an ACK after a 487</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># or e.g. 404 from upstream server</span>
route(RELAY);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
} <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">else</span> {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># ACK without matching transaction ... ignore and discard</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
}
sl_send_reply(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"500"</span>,<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"Server Internal Error"</span>);
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># Wrapper for relaying requests</span>
route[RELAY] {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># enable additional event routes for forwarded requests</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># - serial forking, RTP relaying handling, a.s.o.</span>
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (is_method(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"INVITE|BYE|SUBSCRIBE|UPDATE"</span>)) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span>(!t_is_<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">set</span>(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"branch_route"</span>)) t_on_branch(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"MANAGE_BRANCH"</span>);
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (is_method(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"INVITE|SUBSCRIBE|UPDATE"</span>)) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span>(!t_is_<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">set</span>(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"onreply_route"</span>)) t_on_reply(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"MANAGE_REPLY"</span>);
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (is_method(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"INVITE"</span>)) {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span>(!t_is_<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">set</span>(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"failure_route"</span>)) t_on_failure(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"MANAGE_FAILURE"</span>);
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (!t_relay()) {
sl_reply_error();
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(57,115,0)">exit</span>;
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,136,136)"># jsonrpc dispatch</span>
event_route[xhttp:request] {
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">if</span> (<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$hu</span> =~ <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"^/RPC"</span>) {
jsonrpc_dispatch();
}
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:700;font-stretch:inherit;font-size:inherit;line-height:inherit;font-family:inherit;vertical-align:baseline">else</span> {
xhttp_reply(<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"200"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"OK"</span>, <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"text/html"</span>,
<span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(136,0,0)">"<html><body>Wrong URL <span style="box-sizing:border-box;margin:0px;padding:0px;border:0px;font:inherit;vertical-align:baseline;color:rgb(188,96,96)">$hu</span></body></html>"</span>);
}
}</pre></div></div><div class="gmail-yj6qo"></div><div class="gmail-adL"></div></div></div><div class="gmail-hi" style="border-bottom-left-radius:1px;border-bottom-right-radius:1px;padding:0px;width:auto;background:rgb(242,242,242);margin:0px"></div></div></div><div class="gmail-ajx" style="clear:both"></div></div><div class="gmail-gA gmail-gt gmail-acV" style="font-size:0.875rem;padding:0px;width:auto;border-bottom-left-radius:0px;border-bottom-right-radius:0px;border-top:none;margin:0px;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif"><div class="gmail-gB gmail-xu" style="border-top:0px;padding:0px"><div class="gmail-ip gmail-iq" style="clear:both;margin:0px;padding:16px 0px;border-top:none"><br class="gmail-Apple-interchange-newline"></div></div></div></div>