[Serusers] Can't cancel a forwarding call to Asterisk

Paco Hsiao paco at chainleader.com.tw
Tue Sep 12 11:09:14 CEST 2006


Hi all,

I configure ser to forward a call to Asterisk when callee is busy or
unanswered. But, when the call is forwarding and the caller cancels the
call, ser still forward the call to Asterisk and won't cancel the call. How
do I really cancel the call and stop forwarding to Asterisk?

I will be appreciate for any help!

Here are my ser.cfg:

# $Id: nat-rtpproxy.cfg 9 2005-08-19 15:30:55Z /CN=Greger V.
Teigre/emailAddress=greger at onsip.org $
debug=3
fork=yes
log_stderror=no

listen=192.168.10.114           # INSERT YOUR IP ADDRESS HERE
port=5060
children=8

dns=no
rev_dns=no
fifo="/tmp/ser_fifo"
fifo_db_url="mysql://ser:heslo@localhost/ser"

loadmodule "/usr/local/lib/ser/modules/mysql.so"
loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/uri.so"
loadmodule "/usr/local/lib/ser/modules/uri_db.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/avpops.so"
loadmodule "/usr/local/lib/ser/modules/xlog.so"

modparam("auth_db|uri_db|usrloc", "db_url",
"mysql://ser:heslo@localhost/ser")
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")

modparam("nathelper", "natping_interval", 15) 
modparam("nathelper", "ping_nated_only", 1)   
modparam("nathelper", "rtpproxy_sock", "unix:/var/run/rtpproxy.sock")

modparam("usrloc", "db_mode", 2)

modparam("registrar", "nat_flag", 6)

modparam("rr", "enable_full_lr", 1)

modparam("tm", "fr_inv_timer", 20)
modparam("tm", "fr_inv_timer_avp", "inv_timeout")

route {

      # xlog("L_INFO", "<%mb>\n");
      # -----------------------------------------------------------------
      # Sanity Check Section
      # -----------------------------------------------------------------
      if (!mf_process_maxfwd_header("10")) {
             sl_send_reply("483", "Too Many Hops");
             break;
      };

      if (msg:len > max_len) {
             sl_send_reply("513", "Message Overflow");
             break;
      };

      # -----------------------------------------------------------------
      # Record Route Section
      # -----------------------------------------------------------------
      if (method!="REGISTER") {
             record_route();
      };

      if (method=="BYE" || method=="CANCEL") {
             unforce_rtp_proxy();
      } 

      # -----------------------------------------------------------------
      # Loose Route Section
      # -----------------------------------------------------------------
      if (loose_route()) {

             if ((method=="INVITE" || method=="REFER") && !has_totag()) {
                   sl_send_reply("403", "Forbidden");
                   break;
             };

             if (method=="INVITE") {

                   if (!proxy_authorize("","subscriber")) {
                          proxy_challenge("","0");
                          break;
                   } else if (!check_from()) {
                          sl_send_reply("403", "Use From=ID");
                          break;
                   };
             
                   consume_credentials();

                   if (nat_uac_test("19")) {
                          setflag(6);
                          force_rport();
                          fix_nated_contact();
                   };
                   force_rtp_proxy("1");
             };
      
             route(1);
             break;
      };

      # -----------------------------------------------------------------
      # Call Type Processing Section
      # -----------------------------------------------------------------
      if (uri!=myself) {
             route(4);
             route(1);
             break;
      };

      if (method=="ACK") {
             route(1);
             break;
      } else if (method=="CANCEL") {
             route(1);
             break;
      } else if (method=="BYE") {
             route(1);
             break;
      } else if (method=="INVITE") {
             route(3);
             break;
      } else if (method=="REGISTER") {
             route(2);
             break;
      };

      lookup("aliases");
      if (uri!=myself) {
             route(4);
             route(1);
             break;
      };

      if (!lookup("location")) {
             sl_send_reply("404", "User Not Found");
             break;
      };

      route(1);
}

route[1] {

      # -----------------------------------------------------------------
      # Default Message Handler
      # -----------------------------------------------------------------

      t_on_reply("1");

      if (!t_relay()) {
             if (method=="INVITE" && isflagset(6)) {
                   unforce_rtp_proxy();
             };
             sl_reply_error();
      };
}

route[2] {

      # -----------------------------------------------------------------
      # REGISTER Message Handler
      # ----------------------------------------------------------------

      if (!search("^Contact:[ ]*\*") && nat_uac_test("19")) {

             setflag(6);
             fix_nated_register();
             force_rport();
      };

      #sl_send_reply("100", "Trying");

      if (!www_authorize("","subscriber")) {
             www_challenge("","0");
             break;
      };

      if (!check_to()) {
             sl_send_reply("401", "Unauthorized");
             break;
      };

      consume_credentials();

      if (!save("location")) {
             sl_reply_error();
      };
}

route[3] {

      # -----------------------------------------------------------------
      # INVITE Message Handler
      # -----------------------------------------------------------------

      if (!proxy_authorize("","subscriber")) {
             proxy_challenge("","0");
             break;
      } else if (!check_from()) {
             sl_send_reply("403", "Use From=ID");
             break;
      };

      consume_credentials();

      if (nat_uac_test("19")) {
             setflag(6);
      }

      lookup("aliases");
      if (uri!=myself) {
             route(4);
             route(1);
             break;
      };
      
      if (uri=~"^sip:999[0-9]*@") {
             strip(3);
             route(4);
             route(5);
             break;
      };

      if (!lookup("location")) {
             route(4);
             route(5);
             break;
      };

      t_on_failure("1");

      route(4);
      route(1);
}

route[4] {

      # -----------------------------------------------------------------
      # NAT Traversal Section
      # -----------------------------------------------------------------

      if (isflagset(6)) {
             force_rport();
             fix_nated_contact();
             force_rtp_proxy();
      };
}

route[5] {
      
      # -----------------------------------------------------------------
      # PSTN Handler
      # -----------------------------------------------------------------

      rewritehost("192.168.10.124");

      avp_write("i:90", "inv_timeout");

      route(1);
}

onreply_route[1] {

      if (isflagset(6) && status=~"(180)|(183)|2[0-9][0-9]") {
             if (!search("^Content-Length:[ ]*0")) {
                   force_rtp_proxy();
             };
      };

      if (nat_uac_test("1")) {
             fix_nated_contact();
      };
}

failure_route[1] {

      if (t_check_status("487")) {
             unforce_rtp_proxy();
             break;
      }
      if (t_check_status("486") || t_check_status("408")) {
             revert_uri();
             rewritehost("192.168.10.124");
             avp_write("i:90", "inv_timeout");
             append_branch();
             t_relay();
             break;
      };

      unforce_rtp_proxy();
}




More information about the sr-users mailing list