<div dir="ltr">Thanks a lot.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Mar 18, 2021 at 10:33 AM Daniel-Constantin Mierla <<a href="mailto:miconda@gmail.com">miconda@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <p>Hello,</p>
    <p>there was an answer to a similar post from you, see it in the
      archive:</p>
    <p>  -
      <a href="https://lists.kamailio.org/pipermail/sr-users/2021-March/112121.html" target="_blank">https://lists.kamailio.org/pipermail/sr-users/2021-March/112121.html</a></p>
    <p>Cheers,<br>
      Daniel<br>
    </p>
    <div>On 17.03.21 17:20, Antonio Couto wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">
        <div style="border-left:none;padding:0px;display:flex;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:medium">
          <div style="margin:0px;padding:0px 0px 20px;width:2000px">
            <div>
              <div id="gmail-m_-5077086096503601492gmail-:6er" style="font-size:0.875rem;direction:ltr;margin:8px 0px 0px;padding:0px">
                <div id="gmail-m_-5077086096503601492gmail-:6eq" 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>
              </div>
            </div>
          </div>
        </div>
        <div 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 style="border-top:0px;padding:0px">
            <div style="clear:both;margin:0px;padding:16px 0px;border-top:none"><br>
            </div>
          </div>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <pre>_______________________________________________
Kamailio (SER) - Users Mailing List
<a href="mailto:sr-users@lists.kamailio.org" target="_blank">sr-users@lists.kamailio.org</a>
<a href="https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users" target="_blank">https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users</a>
</pre>
    </blockquote>
    <pre cols="72">-- 
Daniel-Constantin Mierla -- <a href="http://www.asipto.com" target="_blank">www.asipto.com</a>
<a href="http://www.twitter.com/miconda" target="_blank">www.twitter.com/miconda</a> -- <a href="http://www.linkedin.com/in/miconda" target="_blank">www.linkedin.com/in/miconda</a>
Funding: <a href="https://www.paypal.me/dcmierla" target="_blank">https://www.paypal.me/dcmierla</a></pre>
  </div>

</blockquote></div>