<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    <tt>Hi Dinusha,<br>
      <br>
      Most probably OpenSIPS does not "see" the BYE - this may happen
      because:<br>
      &nbsp;&nbsp;&nbsp; - BYE is not reaching opensips<br>
      &nbsp;&nbsp;&nbsp; - BYE does not have in RR header the "did" cookie <br>
      <br>
      Try to run opensips in full debug (set debug=6) and post the log
      related to the BYE processing, to see what is going on there.<br>
      <br>
      Regards,</tt><br>
    <pre class="moz-signature" cols="72">Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
<a class="moz-txt-link-freetext" href="http://www.opensips-solutions.com">http://www.opensips-solutions.com</a></pre>
    <br>
    On 06/07/2012 11:04 AM, Dinusha Kannangara wrote:
    <blockquote
cite="mid:CADdEbb64coVfejVY4bJWOeGd2HQq=U48mKyuRb_VX7eKThoQ4g@mail.gmail.com"
      type="cite">Hi,
      <br>
      <br>
      I'm new to opensips, and I'm having trouble with dialogs created
      from the load_balancing module not being removed upon receiving
      the BYE when the call is terminated.
      <br>
      I'm using opensips version 1.7.2 and have followed this example as
      well (<a moz-do-not-send="true"
        href="http://www.opensips.org/Resources/DocsTutLoadbalancing"
        target="_top" rel="nofollow">http://www.opensips.org/Resources/DocsTutLoadbalancing</a><br>
      ).
      <br>
      <br>
      Currently I'm testing it on two sip phones which are registered on
      the opensips SIP Router (at times I'm using one sip phone as both
      the caller and callee, rewriting the destination uri
      (automatically done through the load_balance() method) as my IP to
      route the call back to the same sip phone). Either way the dialog
      is not destroyed on bye and Wireshark output shows that I'm
      receiving the 200 OK to both sides and the call gets cut without
      any problem.
      <br>
      <br>
      So, am I missing something on the config file ? Here's my config
      file....<br>
      <br>
      <u>opensips.cfg</u><br>
      <br>
      ####### Global Parameters #########
      <br>
      <br>
      debug=6
      <br>
      log_stderror=yes
      <br>
      log_facility=LOG_LOCAL0
      <br>
      <br>
      fork=yes
      <br>
      children=4
      <br>
      <br>
      /* uncomment the following lines to enable debugging */
      <br>
      <br>
      /* uncomment the next line to disable TCP (default on) */
      <br>
      #disable_tcp=yes
      <br>
      <br>
      /* uncomment the next line to enable the auto temporary
      blacklisting of
      <br>
      &nbsp; &nbsp;not available destinations (default disabled) */
      <br>
      #disable_dns_blacklist=no
      <br>
      <br>
      /* uncomment the next line to enable IPv6 lookup after IPv4 dns
      <br>
      &nbsp; &nbsp;lookup failures (default disabled) */
      <br>
      #dns_try_ipv6=yes
      <br>
      <br>
      /* uncomment the next line to disable the auto discovery of local
      aliases
      <br>
      &nbsp; &nbsp;based on revers DNS on IPs (default on) */
      <br>
      #auto_aliases=no
      <br>
      /* uncomment the following lines to enable TLS support &nbsp;(default
      off) */
      <br>
      #disable_tls = no
      <br>
      #listen = tls:your_IP:5061
      <br>
      #tls_verify_server = 1
      <br>
      #tls_verify_client = 1
      <br>
      #tls_require_client_certificate = 0
      <br>
      #tls_method = TLSv1
      <br>
      #tls_certificate = "//etc/opensips/tls/user/user-cert.pem"
      <br>
      #tls_private_key = "//etc/opensips/tls/user/user-privkey.pem"
      <br>
      #tls_ca_list = "//etc/opensips/tls/user/user-calist.pem"
      <br>
      <br>
      /* default db_url to be used by modules requiring DB connection;
      <br>
      &nbsp; &nbsp;uncomment it if you use any module requiring DB connectivity */
      <br>
      #db_default_url="mysql://opensips:opensipsrw@localhost/opensips"
      <br>
      <br>
      <br>
      port=5060
      <br>
      <br>
      /* uncomment and configure the following line if you want opensips
      to
      <br>
      &nbsp; &nbsp;bind on a specific interface/port/proto (default bind on all
      available) */
      <br>
      #listen=udp:<a moz-do-not-send="true"
        href="http://192.168.1.2:5060">192.168.1.2:5060</a>
      <br>
      &nbsp;
      <br>
      <br>
      <br>
      <br>
      ####### Modules Section ########
      <br>
      <br>
      #set module path
      <br>
      mpath="//lib64/opensips/modules/"
      <br>
      <br>
      /* uncomment next line for MySQL DB support */
      <br>
      loadmodule "db_mysql.so"
      <br>
      loadmodule "signaling.so"
      <br>
      loadmodule "sl.so"
      <br>
      loadmodule "tm.so"
      <br>
      loadmodule "rr.so"
      <br>
      loadmodule "maxfwd.so"
      <br>
      loadmodule "usrloc.so"
      <br>
      loadmodule "registrar.so"
      <br>
      loadmodule "textops.so"
      <br>
      loadmodule "mi_fifo.so"
      <br>
      loadmodule "uri.so"
      <br>
      loadmodule "acc.so"
      <br>
      loadmodule "avpops.so"
      <br>
      loadmodule "dialog.so"
      <br>
      loadmodule "load_balancer.so"
      <br>
      /* uncomment next lines for MySQL based authentication support
      <br>
      &nbsp; &nbsp;NOTE: a DB (like db_mysql) module must be also loaded */
      <br>
      loadmodule "auth.so"
      <br>
      loadmodule "auth_db.so"
      <br>
      /* uncomment next line for aliases support
      <br>
      &nbsp; &nbsp;NOTE: a DB (like db_mysql) module must be also loaded */
      <br>
      #loadmodule "alias_db.so"
      <br>
      /* uncomment next line for multi-domain support
      <br>
      &nbsp; &nbsp;NOTE: a DB (like db_mysql) module must be also loaded
      <br>
      &nbsp; &nbsp;NOTE: be sure and enable multi-domain support in all used
      modules
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(see "multi-module params" section ) */
      <br>
      #loadmodule "domain.so"
      <br>
      /* uncomment the next two lines for presence server support
      <br>
      &nbsp; &nbsp;NOTE: a DB (like db_mysql) module must be also loaded */
      <br>
      #loadmodule "presence.so"
      <br>
      #loadmodule "presence_xml.so"
      <br>
      <br>
      <br>
      # ----------------- setting module-specific parameters
      ---------------
      <br>
      <br>
      <br>
      # ----- mi_fifo params -----
      <br>
      modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
      <br>
      <br>
      <br>
      # ----- rr params -----
      <br>
      # do not append from tag to the RR (no need for this script)
      <br>
      modparam("rr", "append_fromtag", 0)
      <br>
      <br>
      <br>
      # ----- registrar params -----
      <br>
      /* uncomment the next line not to allow more than 10 contacts per
      AOR */
      <br>
      #modparam("registrar", "max_contacts", 10)
      <br>
      # ----- usrloc params -----
      <br>
      modparam("usrloc", "db_mode", &nbsp; 0)
      <br>
      /* uncomment the following lines if you want to enable DB
      persistency
      <br>
      &nbsp; &nbsp;for location entries */
      <br>
      #modparam("usrloc", "db_mode", &nbsp; 2)
      <br>
      #modparam("usrloc", "db_url",
      <br>
      # &nbsp; &nbsp; &nbsp; "mysql://opensips:opensipsrw@localhost/opensips")
      <br>
      <br>
      <br>
      # ----- uri params -----
      <br>
      modparam("uri", "use_uri_table", 0)
      <br>
      <br>
      <br>
      # ----- acc params -----
      <br>
      /* what sepcial events should be accounted ? */
      <br>
      modparam("acc", "early_media", 1)
      <br>
      modparam("acc", "report_cancels", 1)
      <br>
      /* by default ww do not adjust the direct of the sequential
      requests.
      <br>
      &nbsp; &nbsp;if you enable this parameter, be sure the enable
      "append_fromtag"
      <br>
      &nbsp; &nbsp;in "rr" module */
      <br>
      modparam("acc", "detect_direction", 0)
      <br>
      /* account triggers (flags) */
      <br>
      modparam("acc", "failed_transaction_flag", 3)
      <br>
      modparam("acc", "log_flag", 1)
      <br>
      modparam("acc", "log_missed_flag", 2)
      <br>
      /* uncomment the following lines to enable DB accounting also */
      <br>
      modparam("acc", "db_flag", 1)
      <br>
      modparam("acc", "db_missed_flag", 2)
      <br>
      <br>
      #--------load_balance-------#
      <br>
      modparam("load_balancer",
      "db_url","mysql://root:123@localhost/opensips")
      <br>
      <br>
      #---------Dialog-----------#
      <br>
      #modparam("dialog", "dlg_flag", 13)
      <br>
      <br>
      <br>
      # ----- auth_db params -----
      <br>
      /* uncomment the following lines if you want to enable the DB
      based
      <br>
      &nbsp; &nbsp;authentication */
      <br>
      #modparam("auth_db", "calculate_ha1", yes)
      <br>
      #modparam("auth_db", "password_column", "password")
      <br>
      modparam("auth_db", "db_url",
      "mysql://root:123@localhost/opensips")
      <br>
      #modparam("auth_db", "load_credentials", "")
      <br>
      <br>
      <br>
      # ----- alias_db params -----
      <br>
      /* uncomment the following lines if you want to enable the DB
      based
      <br>
      &nbsp; &nbsp;aliases */
      <br>
      #modparam("alias_db", "db_url",
      <br>
      # &nbsp; &nbsp; &nbsp; "mysql://opensips:opensipsrw@localhost/opensips")
      <br>
      <br>
      <br>
      # ----- domain params -----
      <br>
      /* uncomment the following lines to enable multi-domain detection
      <br>
      &nbsp; &nbsp;support */
      <br>
      #modparam("domain", "db_url",
      <br>
      # &nbsp; &nbsp; &nbsp; "mysql://opensips:opensipsrw@localhost/opensips")
      <br>
      #modparam("domain", "db_mode", 1) &nbsp; # Use caching
      <br>
      <br>
      <br>
      # ----- multi-module params -----
      <br>
      /* uncomment the following line if you want to enable multi-domain
      support
      <br>
      &nbsp; &nbsp;in the modules (dafault off) */
      <br>
      #modparam("auth_db|usrloc|uri", "use_domain", 1)
      <br>
      <br>
      <br>
      # ----- presence params -----
      <br>
      /* uncomment the following lines if you want to enable presence */
      <br>
      #modparam("presence|presence_xml", "db_url",
      <br>
      # &nbsp; &nbsp; &nbsp; "mysql://opensips:opensipsrw@localhost/opensips")
      <br>
      #modparam("presence_xml", "force_active", 1)
      <br>
      #modparam("presence", "server_address", "sip:<a
        moz-do-not-send="true" href="http://192.168.1.2:5060">192.168.1.2:5060</a>
      <br>
      &nbsp;
      <br>
      ")
      <br>
      <br>
      <br>
      ####### Routing Logic ########
      <br>
      <br>
      <br>
      # main request routing logic
      <br>
      route{
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp;
      log("\n\n\n----------------------------------------\n\n\n");
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (!mf_process_maxfwd_header("10")) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sl_send_reply("483","Too Many Hops");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (has_totag()) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # sequential request withing a dialog should
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # take the path determined by record-routing
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (loose_route()) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (is_method("BYE")) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setflag(1); # do accounting ...
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setflag(3); # ... even if the
      transaction fails
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if (is_method("INVITE")) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # even if in most of the cases is
      useless, do RR for
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # re-INVITEs alos, as some buggy
      clients do change route set
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # during the dialog.
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record_route();
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # route it out to whatever destination was
      set by loose_route()
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # in $du (destination URI).
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; route(1);
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* uncomment the following lines if you
      want to enable presence */
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ##if (is_method("SUBSCRIBE") &amp;&amp;
      $rd == "your.server.ip.address") {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ## &nbsp; &nbsp; &nbsp;# in-dialog subscribe requests
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ## &nbsp; &nbsp; &nbsp;route(2);
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ## &nbsp; &nbsp; &nbsp;exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ##}
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ( is_method("ACK") ) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ( t_check_trans() ) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # non loose-route, but
      stateful ACK; must be an ACK after
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # a 487 or e.g. 404 from
      upstream server
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t_relay();
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # ACK without matching
      transaction -&gt;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # ignore and discard
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sl_send_reply("404","Not here");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; #initial requests
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; # CANCEL processing
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (is_method("CANCEL"))
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (t_check_trans())
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t_relay();
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; t_check_trans();
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; # preloaded route checking
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (loose_route()) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xlog("L_ERR",
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Attempt to route with preloaded Route's
      [$fu/$tu/$ru/$ci]");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!is_method("ACK"))
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sl_send_reply("403","Preload Route
      denied");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; # record routing
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (!is_method("REGISTER|MESSAGE"))
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record_route();
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; # account only INVITEs
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (is_method("INVITE"))
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; append_hf("P-hint: outbound\r\n");
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log("\n\n\n----------INVITE----------\n\n\n");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; load_balance("1","A");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($retcode&lt;0)
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sl_send_reply("500","Service full");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record_route();
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; route(1);
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      <br>
      &nbsp; &nbsp; &nbsp;&nbsp; <br>
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (is_method("PUBLISH"))
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sl_send_reply("503", "Service Unavailable");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (is_method("REGISTER"))
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
      log("\n\n\n----------------Register-----------------\n\n\n");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!save("location"))
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sl_reply_error();
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if ($rU==NULL) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # request with no Username in RURI
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sl_send_reply("484","Address Incomplete");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; # apply DB based aliases (uncomment to enable)
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; ##alias_db_lookup("dbaliases");
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; # do lookup with method filtering
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (!lookup("location","m")) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switch ($retcode) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case -1:
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case -3:
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t_newtran();
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t_reply("404", "Not Found");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case -2:
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sl_send_reply("405", "Method Not
      Allowed");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; # when routing via usrloc, log the missed calls also
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; setflag(2);
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; route(1);
      <br>
      }
      <br>
      <br>
      <br>
      route[1] {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; # for INVITEs enable some additional helper routes
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (is_method("INVITE")) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t_on_branch("2");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t_on_reply("2");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t_on_failure("1");
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; }
      <br>
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (!t_relay()) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sl_reply_error();
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; };
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      }
      <br>
      branch_route[2] {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; xlog("new branch at $ru\n");
      <br>
      }
      <br>
      <br>
      <br>
      onreply_route[2] {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; xlog("incoming reply\n");
      <br>
      }
      <br>
      <br>
      <br>
      failure_route[1] {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; if (t_was_cancelled()) {
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;
      <br>
      &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;
      <br>
      }<br>
      <br>
      ---------------<br>
      <br>
      I could give you the opensips debug output as well but due to the
      message being too large I have excluded it... if need it please
      let me know and I will reply with it :)<br>
      <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
Users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Users@lists.opensips.org">Users@lists.opensips.org</a>
<a class="moz-txt-link-freetext" href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a>
</pre>
    </blockquote>
  </body>
</html>