<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hello,<br>
    <br>
    is Asterisk supposed to forward the video stream as well? When you
    mean Asrerisk has only local address, means its address is not
    routable from the sip clients, right? If yes, have you set rtpproxy
    in bridged mode?<br>
    <br>
    A ngrep trace of the sip signaling for a call which does not work
    would be useful to provide more details about what could be wrong
    there.<br>
    <br>
    Cheers,<br>
    Daniel<br>
    <br>
    On 12/29/11 11:38 PM, Stoyan Mihaylov wrote:
    <blockquote
cite="mid:CAPScudYHR-FQGgBSp5mke1TLpZtH1DAhhsGf7QYM3iccQ5ipsA@mail.gmail.com"
      type="cite">
      <div>My whole configuration is:</div>
      <div>[Sip clients] &lt; = &gt; Kamailio 3.2 &lt;=&gt; Asterisk
        servers (behind Kamailio)</div>
      <div>Asterisk servers have only local IP addresses, and I use
        t_relay instead of forward.</div>
      <div>Kamailio runs on same server as rtpproxy.</div>
      <div><br>
      </div>
      <div>Now I played lot of combinations and I have next results:</div>
      <div>1. Clients are in same net with Kamailio server (and Asterisk
        server). Client call Kamailio, Kamailio t_relay to Asterisk,
        Asterisk dial back to Kamailio, and Kamailio dial Client.
        rtpproxy is working. Video and audio are fine...</div>
      <div>2. Same as above, but clients are behind NAT. Sound is
        perfect, no video.</div>
      <div>3. Same as in point 1, but no rtpproxy, and no Asterisk
        servers. Sound and video are perfect. With rtpproxy - no voice,
        no video.</div>
      <div><br>
      </div>
      <div>I would like to find solution for point 2. Sound and video
        are on different rports (seen in wireshark). As I understand, my
        error is either in wrong forwarding of ACK (I do t_relay to
        Asterisk in case from and to addresses are same), or may be I
        have to find correct FLAGS for rtpproxy_manage(), or even
        replace it and place with rtpproxy_offer (answer etc).</div>
      <div><br>
      </div>
      <div>Bellow is my kamailio.cfg:</div>
      <div>####### Defined Values #########</div>
      <div>#!define WITH_MYSQL</div>
      <div>#!define WITH_AUTH</div>
      <div>#!define WITH_USRLOCDB</div>
      <div><br>
      </div>
      <div>#!define WITH_IPAUTH</div>
      <div>#!define WITH_NAT</div>
      <div>#!define WITH_PSTN</div>
      <div><br>
      </div>
      <div># *** Value defines - IDs used later in config</div>
      <div>#!define DBURL "mysql://<a moz-do-not-send="true"
          href="http://user:pass@192.168.2.251/openser">user:pass@192.168.2.251/openser</a>"</div>
      <div>#!define MULTIDOMAIN 0</div>
      <div><br>
      </div>
      <div>#!define FLT_ACC 1</div>
      <div>#!define FLT_ACCMISSED 2</div>
      <div>#!define FLT_ACCFAILED 3</div>
      <div>#!define FLT_NATS 5</div>
      <div><br>
      </div>
      <div>#!define FLB_NATB 6</div>
      <div>#!define FLB_NATSIPPING 7</div>
      <div><br>
      </div>
      <div>####### Global Parameters #########</div>
      <div><br>
      </div>
      <div>debug=3</div>
      <div>log_stderror=no</div>
      <div><br>
      </div>
      <div>memdbg=5</div>
      <div>memlog=5</div>
      <div><br>
      </div>
      <div>log_facility=LOG_LOCAL0</div>
      <div><br>
      </div>
      <div>fork=yes</div>
      <div>children=4</div>
      <div><br>
      </div>
      <div>port=5060</div>
      <div><br>
      </div>
      <div>tcp_connection_lifetime=3605</div>
      <div>#!ifdef WITH_PSTN</div>
      <div>pstn.gw_ip = "192.168.2.251" desc "PSTN GW Address"</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div># set paths to location of modules (to sources or
        installation folders)</div>
      <div>#!ifdef WITH_SRCPATH</div>
      <div>mpath="modules_k:modules"</div>
      <div>#!else</div>
      <div>mpath="//lib64/kamailio/modules_k/://lib64/kamailio/modules/"</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_MYSQL</div>
      <div>loadmodule "db_mysql.so"</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>loadmodule "mi_fifo.so"</div>
      <div>loadmodule "kex.so"</div>
      <div>loadmodule "tm.so"</div>
      <div>loadmodule "tmx.so"</div>
      <div>loadmodule "sl.so"</div>
      <div>loadmodule "rr.so"</div>
      <div>loadmodule "pv.so"</div>
      <div>loadmodule "maxfwd.so"</div>
      <div>loadmodule "usrloc.so"</div>
      <div>loadmodule "registrar.so"</div>
      <div>loadmodule "textops.so"</div>
      <div>loadmodule "siputils.so"</div>
      <div>loadmodule "xlog.so"</div>
      <div>loadmodule "sanity.so"</div>
      <div>loadmodule "ctl.so"</div>
      <div>loadmodule "cfg_rpc.so"</div>
      <div>loadmodule "mi_rpc.so"</div>
      <div>loadmodule "acc.so"</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_AUTH</div>
      <div>loadmodule "auth.so"</div>
      <div>loadmodule "auth_db.so"</div>
      <div>#!ifdef WITH_IPAUTH</div>
      <div>loadmodule "permissions.so"</div>
      <div>#!endif</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_ALIASDB</div>
      <div>loadmodule "alias_db.so"</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_SPEEDDIAL</div>
      <div>loadmodule "speeddial.so"</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_MULTIDOMAIN</div>
      <div>loadmodule "domain.so"</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_PRESENCE</div>
      <div>loadmodule "presence.so"</div>
      <div>loadmodule "presence_xml.so"</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_NAT</div>
      <div>loadmodule "nathelper.so"</div>
      <div>loadmodule "rtpproxy.so"</div>
      <div>#!endif</div>
      <div>
        <br>
      </div>
      <div>#!ifdef WITH_TLS</div>
      <div>loadmodule "tls.so"</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>loadmodule "htable.so"</div>
      <div>#!ifdef WITH_ANTIFLOOD</div>
      <div>loadmodule "pike.so"</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_XMLRPC</div>
      <div>loadmodule "xmlrpc.so"</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_DEBUG</div>
      <div>loadmodule "debugger.so"</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div># ----------------- setting module-specific parameters
        ---------------</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div>loadmodule "dispatcher.so"</div>
      <div>modparam("dispatcher", "db_url", DBURL)</div>
      <div># ----- mi_fifo params -----</div>
      <div>modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div># ----- tm params -----</div>
      <div># auto-discard branches from previous serial forking leg</div>
      <div>modparam("tm", "failure_reply_mode", 3)</div>
      <div># default retransmission timeout: 30sec</div>
      <div>modparam("tm", "fr_timer", 30000)</div>
      <div># default invite retransmission timeout after 1xx: 120sec</div>
      <div>modparam("tm", "fr_inv_timer", 120000)</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div># ----- rr params -----</div>
      <div># add value to ;lr param to cope with most of the UAs</div>
      <div>modparam("rr", "enable_full_lr", 1)</div>
      <div># do not append from tag to the RR (no need for this script)</div>
      <div>modparam("rr", "append_fromtag", 0)</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div># ----- registrar params -----</div>
      <div>modparam("registrar", "method_filtering", 1)</div>
      <div>/* uncomment the next line to disable parallel forking via
        location */</div>
      <div># modparam("registrar", "append_branches", 0)</div>
      <div>/* uncomment the next line not to allow more than 10 contacts
        per AOR */</div>
      <div>#modparam("registrar", "max_contacts", 10)</div>
      <div># max value for expires of registrations</div>
      <div>modparam("registrar", "max_expires", 3600)</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div># ----- acc params -----</div>
      <div>/* what special events should be accounted ? */</div>
      <div>modparam("acc", "early_media", 0)</div>
      <div>modparam("acc", "report_ack", 0)</div>
      <div>modparam("acc", "report_cancels", 0)</div>
      <div>modparam("acc", "detect_direction", 0)</div>
      <div>/* account triggers (flags) */</div>
      <div>modparam("acc", "log_flag", FLT_ACC)</div>
      <div>modparam("acc", "log_missed_flag", FLT_ACCMISSED)</div>
      <div>modparam("acc", "log_extra",&nbsp;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>"src_user=$fU;src_domain=$fd;src_ip=$si;"</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>"dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")</div>
      <div>modparam("acc", "failed_transaction_flag", FLT_ACCFAILED)</div>
      <div>/* enhanced DB accounting */</div>
      <div>#!ifdef WITH_ACCDB</div>
      <div>modparam("acc", "db_flag", FLT_ACC)</div>
      <div>modparam("acc", "db_missed_flag", FLT_ACCMISSED)</div>
      <div>modparam("acc", "db_url", DBURL)</div>
      <div>modparam("acc", "db_extra",</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>"src_user=$fU;src_domain=$fd;src_ip=$si;"</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>"dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")</div>
      <div>#!endif</div>
      <div>#!ifdef WITH_USRLOCDB</div>
      <div>modparam("usrloc", "db_url", DBURL)</div>
      <div>modparam("usrloc", "db_mode", 2)</div>
      <div>modparam("usrloc", "use_domain", MULTIDOMAIN)</div>
      <div>#!endif</div>
      <div>#!ifdef WITH_AUTH</div>
      <div>modparam("auth_db", "db_url", DBURL)</div>
      <div>modparam("auth_db", "calculate_ha1", yes)</div>
      <div>modparam("auth_db", "password_column", "password")</div>
      <div>modparam("auth_db", "load_credentials", "")</div>
      <div>modparam("auth_db", "use_domain", MULTIDOMAIN)</div>
      <div>#!ifdef WITH_IPAUTH</div>
      <div>modparam("permissions", "db_url", DBURL)</div>
      <div>modparam("permissions", "db_mode", 1)</div>
      <div>#!endif</div>
      <div>#!endif</div>
      <div>#!ifdef WITH_ALIASDB</div>
      <div>modparam("alias_db", "db_url", DBURL)</div>
      <div>modparam("alias_db", "use_domain", MULTIDOMAIN)</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div># ----- speedial params -----</div>
      <div>#!ifdef WITH_SPEEDDIAL</div>
      <div>modparam("speeddial", "db_url", DBURL)</div>
      <div>modparam("speeddial", "use_domain", MULTIDOMAIN)</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div>#!ifdef WITH_NAT</div>
      <div># ----- rtpproxy params -----</div>
      <div>modparam("rtpproxy", "rtpproxy_sock", "udp:<a
          moz-do-not-send="true" href="http://127.0.0.1:7722">127.0.0.1:7722</a>")</div>
      <div><br>
      </div>
      <div># ----- nathelper params -----</div>
      <div>modparam("nathelper", "natping_interval", 30)</div>
      <div>modparam("nathelper", "ping_nated_only", 1)</div>
      <div>modparam("nathelper", "sipping_bflag", FLB_NATSIPPING)</div>
      <div>modparam("nathelper", "sipping_from", "<a
          moz-do-not-send="true" href="mailto:sip%3Apinger@kamailio.org">sip:pinger@kamailio.org</a>")</div>
      <div><br>
      </div>
      <div># params needed for NAT traversal in other modules</div>
      <div>modparam("nathelper|registrar", "received_avp",
        "$avp(RECEIVED)")</div>
      <div>modparam("usrloc", "nat_bflag", FLB_NATB)</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div>#!ifdef WITH_TLS</div>
      <div># ----- tls params -----</div>
      <div>modparam("tls", "config", "//etc/kamailio/tls.cfg")</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>modparam("htable", "htable",
        "forw=&gt;size=8;autoexpire=7200;")</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div>#!ifdef WITH_DEBUG</div>
      <div># ----- debugger params -----</div>
      <div>modparam("debugger", "cfgtrace", 1)</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>request_route {</div>
      <div>xlog("L_ALERT","Pakage $rm from $fu (IP:$si:$sp)\n");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        per request initial checks</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(REQINIT);</div>
      <div><br>
      </div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        NAT detection</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(NATDETECT);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(ACKBYE);</div>
      <div><br>
      </div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        handle requests within SIP dialogs</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(WITHINDLG);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("CANCEL"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (t_check_trans())</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>t_relay();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>t_check_trans();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(AUTH);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        record routing for dialog forming requests (in case they are
        routed)</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        - remove preloaded route headers</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>remove_hf("Route");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("INVITE|SUBSCRIBE"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>record_route();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        account only INVITEs</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("INVITE"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>setflag(FLT_ACC);
        # do accounting</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(SIPOUT);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(PRESENCE);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(REGISTRAR);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        ($rU==$null)</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_send_reply("484","Address
        Incomplete");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(PSTN);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(LOCATION);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(RELAY);</div>
      <div>}</div>
      <div><br>
      </div>
      <div>route[RELAY] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("INVITE|SUBSCRIBE")) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>t_on_branch("MANAGE_BRANCH");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>t_on_reply("MANAGE_REPLY");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("INVITE")) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>t_on_failure("MANAGE_FAILURE");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (!t_relay()) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_reply_error();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div>}</div>
      <div><br>
      </div>
      <div>route[REQINIT] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (!mf_process_maxfwd_header("10")) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_send_reply("483","Too
        Many Hops");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><br>
      </div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(!sanity_check("1511",
        "7"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>xlog("Malformed
        SIP message from $si:$sp\n");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>}</div>
      <div><br>
      </div>
      <div># Handle requests within SIP dialogs</div>
      <div>route[WITHINDLG] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (has_totag()) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (loose_route()) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("BYE")) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>setflag(FLT_ACC);
        # do accounting ...</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>setflag(FLT_ACCFAILED);
        # ... even if the transaction fails</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        ( is_method("ACK") ) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        ACK is forwarded statelessy</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(NATMANAGE);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(RELAY);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}
        else {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("SUBSCRIBE") &amp;&amp; uri == myself) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        in-dialog subscribe requests</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(PRESENCE);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        ( is_method("ACK") ) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        ( t_check_trans() ) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>t_relay();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}
        else {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        ACK without matching transaction ... ignore and discard</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_send_reply("404","Not
        here");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>}</div>
      <div><br>
      </div>
      <div># Handle SIP registrations</div>
      <div>route[REGISTRAR] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("REGISTER"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(isflagset(FLT_NATS))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>setbflag(FLB_NATB);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        uncomment next line to do SIP NAT pinging&nbsp;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>##
        setbflag(FLB_NATSIPPING);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (!save("location"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_reply_error();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>}</div>
      <div><br>
      </div>
      <div># USER location service</div>
      <div>route[LOCATION] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>$avp(oexten)
        = $rU;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (!lookup("location")) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>$var(rc)
        = $rc;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(TOVOICEMAIL);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>t_newtran();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>switch
        ($var(rc)) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>case
        -1:</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>case
        -3:</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>send_reply("404",
        "Not Found");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>case
        -2:</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>send_reply("405",
        "Method Not Allowed");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        when routing via usrloc, log the missed calls also</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("INVITE"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>setflag(FLT_ACCMISSED);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>}</div>
      <div><br>
      </div>
      <div># Presence server route</div>
      <div>route[PRESENCE] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(!is_method("PUBLISH|SUBSCRIBE"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span></div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        if presence enabled, this part will not be executed</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("PUBLISH") || $rU==$null)</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_send_reply("404",
        "Not here");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div>}</div>
      <div><br>
      </div>
      <div># Authentication route</div>
      <div>route[AUTH] {</div>
      <div>#!ifdef WITH_AUTH</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("REGISTER"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        authenticate the REGISTER requests (uncomment to enable auth)</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (!www_authorize("$td", "subscriber"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>www_challenge("$td",
        "0");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><br>
      </div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        ($au!=$tU)</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_send_reply("403","Forbidden
        auth ID");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}
        else {</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_IPAUTH</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(allow_source_address())</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        source IP allowed</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        authenticate if from local subscriber</div>
      <div>
        <span class="Apple-tab-span" style="white-space:pre"> </span>if
        (from_uri==myself)</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (!proxy_authorize("$fd", "subscriber")) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>proxy_challenge("$fd",
        "0");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("PUBLISH"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        ($au!=$fU || $au!=$tU) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_send_reply("403","Forbidden
        auth ID");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div>
        <span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        ($au!=$rU) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_send_reply("403","Forbidden
        R-URI");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}
        else {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        ($au!=$fU) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_send_reply("403","Forbidden
        auth ID");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><br>
      </div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>consume_credentials();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        caller authenticated</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}
        else {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        a local destination, otherwise deny, not an open relay here</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (!uri==myself)</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_send_reply("403","Not
        relaying");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>#!endif</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div>}</div>
      <div><br>
      </div>
      <div># Caller NAT detection route</div>
      <div>route[NATDETECT] {</div>
      <div>#!ifdef WITH_NAT</div>
      <div>
        <span class="Apple-tab-span" style="white-space:pre"> </span>force_rport();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (nat_uac_test("19")) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("REGISTER")) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>fix_nated_register();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}
        else {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>fix_nated_contact();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>setflag(FLT_NATS);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>#!endif</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div>}</div>
      <div><br>
      </div>
      <div># RTPProxy control</div>
      <div>route[NATMANAGE] {</div>
      <div>#!ifdef WITH_NAT</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_request()) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(has_totag())
        {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(check_route_param("nat=yes"))
        {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>setbflag(FLB_NATB);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB)))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>rtpproxy_manage();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_request()) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (!has_totag()) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>add_rr_param(";nat=yes");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_reply()) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(isbflagset(FLB_NATB))
        {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>fix_nated_contact();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>#!endif</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div>}</div>
      <div><br>
      </div>
      <div># Routing to foreign domains</div>
      <div>route[SIPOUT] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (!uri==myself)</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>append_hf("P-hint:
        outbound\r\n");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(RELAY);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>}</div>
      <div><br>
      </div>
      <div>route[ACKBYE] {</div>
      <div>#!ifdef WITH_PSTN</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (is_method("BYE|ACK"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>xlog("L_ALERT","AB
        $rm $sht(forw=&gt;$ft) $td");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(($sht(forw=&gt;$ft))=~"MessageCPIM"){</div>
      <div># Direct messages between clients</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>xlog("L_ALERT","AB
        $rm CPIM $td");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(src_ip==$td){</div>
      <div>#I have to rewrite du - messages loop in Kamailio</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>xlog("L_ALERT","ACK,Bye
        Method equalIP");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>$du=$sht(forw=&gt;$ft);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>xlog("L_ALERT","ACK,Bye
        $ft $du");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(RELAY);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>xlog("L_ALERT","ACK,Bye
        Not me");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>#!endif</div>
      <div>return;</div>
      <div>}</div>
      <div>route[PSTNINVITE] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(is_method("INVITE")){</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if($rb=~"message/CPIM"){</div>
      <div># Direct messages between clients</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>$sht(forw=&gt;$ft)="MessageCPIM";</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(LOCATION);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(RELAY);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>#This way I can select from multiple Asterisk servers. I will
        t_relay instead of forward, because Asterisk servers are with
        local IP.</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>ds_select_dst("1","4");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>$sht(forw=&gt;$ft)=$du;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_send_reply("100","Trying");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(RELAY);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit();</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>}</div>
      <div>route[PSTN] {</div>
      <div>#I am using this routine to forward to Asterisks (instead of
        additional one for balancing)</div>
      <div>#!ifdef WITH_PSTN</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        check if PSTN GW IP is defined</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (strempty($sel(cfg_get.pstn.gw_ip))) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>xlog("SCRIPT:
        PSTN rotuing enabled but pstn.gw_ip not defined\n");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(allow_source_address())</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(from_uri!=myself)
        {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>sl_send_reply("403",
        "Not Allowed");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(is_method("MESSAGE"))</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(PSTNINVITE);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(RELAY);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div>#!endif</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div>}</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div>
        # route to voicemail server</div>
      <div>route[TOVOICEMAIL] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>return;</div>
      <div>}</div>
      <div><br>
      </div>
      <div># manage outgoing branches</div>
      <div>branch_route[MANAGE_BRANCH] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>xdbg("new
        branch [$T_branch_idx] to $ru\n");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(NATMANAGE);</div>
      <div>}</div>
      <div><br>
      </div>
      <div># manage incoming replies</div>
      <div>onreply_route[MANAGE_REPLY] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>xdbg("incoming
        reply\n");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if(status=~"[12][0-9][0-9]")</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(NATMANAGE);</div>
      <div>}</div>
      <div><br>
      </div>
      <div># manage failure routing cases</div>
      <div>failure_route[MANAGE_FAILURE] {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(NATMANAGE);</div>
      <div><br>
      </div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (t_is_canceled()) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_BLOCK3XX</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        block call redirect based on 3xx replies.</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (t_check_status("3[0-9][0-9]")) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>t_reply("404","Not
        found");</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>#!endif</div>
      <div><br>
      </div>
      <div>#!ifdef WITH_VOICEMAIL</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        serial forking</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>#
        - route to voicemail on busy or no answer (timeout)</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>if
        (t_check_status("486|408")) {</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>route(TOVOICEMAIL);</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
      <div>#!endif</div>
      <div>}</div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:sr-users@lists.sip-router.org">sr-users@lists.sip-router.org</a>
<a class="moz-txt-link-freetext" href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Daniel-Constantin Mierla -- <a class="moz-txt-link-freetext" href="http://www.asipto.com">http://www.asipto.com</a>
<a class="moz-txt-link-freetext" href="http://linkedin.com/in/miconda">http://linkedin.com/in/miconda</a> -- <a class="moz-txt-link-freetext" href="http://twitter.com/miconda">http://twitter.com/miconda</a></pre>
  </body>
</html>