[Serusers] 408 to Caller UA when CANCEL to Callee

Steve Blair blairs at isc.upenn.edu
Fri Sep 16 15:11:32 CEST 2005


Look at the middle of his routing statements. There is the following 
section of code :

      ---- cut here ----

          } else if (uri=~"^sip:500@") {
                       log(1, "Accessing Voicemail\n");
                       setflag(1);
                       rewriteport("5065");                } else if 
(uri=~"^si"^sip:3[0-9]*@203.197.212.208") {
                               # call hunt numbers beginning with 3
                                log(1, "beginning with 3\n");
                               seturi("sip:8001211 at 192.168.1.201");

     --- end cut ----

See the line beginning with "rewriteport("5065")" ?


Iqbal wrote:

> did I miss it...where ?
>
> Steve Blair wrote:
>
>>
>> You config file shows "(uri=~"^si"^sip:3[0-9]*@203.197.212.208") " is 
>> this really
>> what you meant? I think the first "^si" is a typo is it not?
>>
>> -Steve
>>
>> Iqbal wrote:
>>
>>> what happens if you increase your timeout values, i.e send cancel 
>>> before you get the timeout
>>>
>>> Iqbal
>>>
>>> Tulika Pradhan wrote:
>>>
>>>>
>>>> my ser.cfg file is attached below.
>>>>
>>>> any help/pointers for what the problem may be would be great.
>>>>
>>>> the problem comes when i dial anynumber starting with '3'
>>>>
>>>> i want 8001211 to be dialed and if there is failure, then 8001210 
>>>> to be dialed.
>>>>
>>>> thanks,
>>>>
>>>> tulika
>>>>
>>>> #
>>>> # $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
>>>> #
>>>> # simple quick-start config script
>>>> #
>>>>
>>>> # ----------- global configuration parameters ------------------------
>>>>
>>>> #debug=3         # debug level (cmd line: -dddddddddd)
>>>> #fork=yes
>>>> #log_stderror=no        # (cmd line: -E)
>>>>
>>>> /* Uncomment these lines to enter debugging mode
>>>> debug=7
>>>> fork=no
>>>> log_stderror=yes
>>>> */
>>>>
>>>> check_via=no    # (cmd. line: -v)
>>>> dns=no           # (cmd. line: -r)
>>>> rev_dns=no      # (cmd. line: -R)
>>>> #port=5060
>>>> #children=4
>>>> fifo="/tmp/ser_fifo"
>>>>
>>>> # ------------------ module loading ----------------------------------
>>>>
>>>> # Uncomment this if you want to use SQL database
>>>> loadmodule "/usr/lib/ser/modules/mysql.so"
>>>>
>>>> loadmodule "/usr/lib/ser/modules/sl.so"
>>>> loadmodule "/usr/lib/ser/modules/tm.so"
>>>> loadmodule "/usr/lib/ser/modules/rr.so"
>>>> loadmodule "/usr/lib/ser/modules/maxfwd.so"
>>>>                                                                        
>>>> loadmodule "/usr/lib/ser/modules/usrloc.so"
>>>> loadmodule "/usr/lib/ser/modules/registrar.so"
>>>> loadmodule "/usr/lib/ser/modules/acc.so"
>>>>
>>>> # Uncomment this if you want digest authentication
>>>> # mysql.so must be loaded !
>>>> loadmodule "/usr/lib/ser/modules/auth.so"
>>>> loadmodule "/usr/lib/ser/modules/auth_db.so"
>>>> loadmodule "/usr/lib/ser/modules/exec.so"
>>>> loadmodule "/usr/lib/ser/modules/uri.so"
>>>> loadmodule "/usr/lib/ser/modules/textops.so"
>>>> loadmodule "/usr/lib/ser/modules/xlog.so"
>>>> # ----------------- setting module-specific parameters ---------------
>>>>
>>>> # -- usrloc params --
>>>>
>>>> modparam("usrloc", "db_mode", 2)
>>>>
>>>> # -- auth params --
>>>> modparam("auth_db", "db_url", "sql://ser:heslo@localhost/ser")
>>>> modparam("auth_db", "calculate_ha1", 1)
>>>> #
>>>> # If you set "calculate_ha1" parameter to yes (which true in this 
>>>> config),
>>>> # uncomment also the following parameter)
>>>> #
>>>> modparam("auth_db", "password_column", "password")
>>>>
>>>> # -- rr params --
>>>> # add value to ;lr param to make some broken UAs happy
>>>> modparam("rr", "enable_full_lr", 1)
>>>> modparam("acc", "log_level", 1)
>>>> modparam("acc", "db_flag", 1)
>>>> modparam("tm", "fr_inv_timer", 15)
>>>> modparam("tm", "fr_timer", 10)
>>>> # main routing logic
>>>>
>>>> route{
>>>>
>>>>        # initial sanity checks -- messages with
>>>>        # max_forwards==0, or excessively long requests
>>>>        if (!mf_process_maxfwd_header("10")) {
>>>>                sl_send_reply("483","Too Many Hops");
>>>>                break;
>>>>        };
>>>>        if ( msg:len > max_len ) {
>>>>                sl_send_reply("513", "Message too big");
>>>>                break;
>>>>        };
>>>>
>>>>        # we record-route all messages -- to make sure that
>>>>        # subsequent messages will go through our proxy; that's
>>>>        # particularly good if upstream and downstream entities
>>>>        # use different transport protocol        # loose-route 
>>>> processing
>>>>        if (loose_route()) {
>>>>                t_relay();
>>>>                break;
>>>>        };
>>>>
>>>>        # if the request is for other domain use UsrLoc
>>>>        # (in case, it does not work, use the following command
>>>>        # with proper names and addresses in it)
>>>>        #if (uri==myself) {
>>>>        #if(method!=REGISTER) record_route();
>>>>        if (uri==myself) {
>>>>         if (method=="REGISTER") {
>>>>
>>>>                save("location");
>>>>                break;
>>>>         };
>>>>
>>>>         if (method==INVITE) {
>>>>                if (uri=~"^sip:0[0-9]*@") {
>>>>                        log(1, "beginning with 0\n");
>>>>                        rewritehost("192.168.1.201");
>>>>                        rewriteport("5060");
>>>>                        t_relay_to_udp("192.168.1.201","5065");
>>>>                        break;
>>>>                } else if (uri=~"^sip:500@") {
>>>>                        log(1, "Accessing Voicemail\n");
>>>>                        setflag(1);
>>>>                        rewriteport("5065");                } else 
>>>> if (uri=~"^sip:3[0-9]*@203.197.212.208") {
>>>>                                # call hunt numbers beginning with 3
>>>>                                 log(1, "beginning with 3\n");
>>>>                                seturi("sip:8001211 at 192.168.1.201");
>>>>                                append_hf("P-hint: call hunt\r\n");
>>>>                                xlog("L_ERR", "time [%Tf] method 
>>>> <%rm> r-uri <%ru> <%tu>\n");
>>>>                                t_on_failure("1");
>>>>                                t_relay();
>>>>
>>>>                }
>>>>                if (!lookup("location")) {
>>>>                    if (search("(P-hint): call hunt")) {
>>>>                                        log(1, "Call Hunt number not 
>>>> in location- Hangup\n");
>>>>                                        #exec_msg("echo $SIP_OUSER 
>>>> >> /root/temp; echo $SIP_USER >> /root/temp; echo $SIP_OURI >> 
>>>> /root/temp; echo $SIP_RURI >> /root/temp");
>>>>                                        # goto next number
>>>>                                        
>>>> exec_dset("/etc/ser/getnextnumber1 $SIP_OUSER; echo>/dev/null;");
>>>>                                        xlog("L_ERR", "time [%Tf] 
>>>> method <%rm> r-uri <%ru> <%tu>\n");
>>>>                                        t_relay();
>>>>                   } else  {
>>>>                        log(1, "Asterisk forwarding as user not 
>>>> logged in..\n");
>>>>                        rewritehost("192.168.1.201");
>>>>                        rewriteport("5065");
>>>>                        t_relay_to_udp("192.168.1.201","5065");
>>>>                        break;
>>>>                   }
>>>>
>>>>                }
>>>>               t_on_failure("1");
>>>>
>>>>         }
>>>>       }
>>>>       if (!t_relay()) {
>>>>                sl_reply_error();
>>>>       };
>>>> }
>>>>
>>>> failure_route[1] {
>>>>        log(1,"Failure 1\n");
>>>>
>>>>        if (search("(P-hint): call hunt")) {
>>>>                log(1, "Call Hunt number failure - Hangup\n");
>>>>                append_branch("sip:8001210 at 192.168.1.201");
>>>>                t_on_failure("2");
>>>>                xlog("L_ERR", "time [%Tf] method <%rm> r-uri <%ru> 
>>>> <%tu>\n");
>>>>                t_relay();
>>>>        } else {
>>>>                log(1, "Asterisk forwarding ..\n");
>>>>                revert_uri();
>>>>                rewritehostport(192.168.1.201:5065");
>>>>                append_branch();
>>>>                t_relay();
>>>>        }
>>>> }
>>>>
>>>> failure_route[2] {
>>>>        #
>>>>        log (1, "in failure route 2\n");
>>>> }
>>>>
>>>>         }
>>>>       }
>>>>       if (!t_relay()) {
>>>>
>>>>                        t_relay_to_udp("192.168.1.201","5065");
>>>>                        break;
>>>>
>>>>        if (method!="REGISTER") record_route();
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>> From: "Greger V. Teigre" <greger at teigre.com>
>>>>> To: "Tulika Pradhan" <tulikapradhan at hotmail.com>, 
>>>>> <serusers at lists.iptel.org>
>>>>> Subject: Re: [Serusers] 408 to Caller UA when CANCEL to Callee
>>>>> Date: Fri, 16 Sep 2005 08:36:53 +0200
>>>>>
>>>>> Tulika,
>>>>> This is not a function of SER, but your ser.cfg file.  We have 
>>>>> just released a new Getting Started document at onsip.org that you 
>>>>> may use as a reference to identify why your ser.cfg causes a 408 
>>>>> to be sent.
>>>>> g-)
>>>>>
>>>>> Tulika Pradhan wrote:
>>>>>
>>>>>> hi,
>>>>>>
>>>>>> i am facing the following situation.
>>>>>>
>>>>>> UA1 calls a user(UA2)  who does not answer. the control comes to
>>>>>> failure_route where i try another UA (UA3). but as UA3 rings, SER
>>>>>> sends 408 Request timeout to UA1 and call gets disconnected.
>>>>>>
>>>>>> this is the SIP message flow.
>>>>>>
>>>>>> UA1                     SER                      UA2
>>>>>> UA3
>>>>>> INVITE---------------->
>>>>>>                               INVITE-------------->
>>>>>>                                <----------------TRYING
>>>>>>                                <----------------RINGING
>>>>>> <------------------RINGING
>>>>>>
>>>>>>
>>>>>>                              CANCEL-------------->
>>>>>> <---------------------408
>>>>>>
>>>>>> INVITE---------------------------------------->
>>>>>>                               <---------------------487
>>>>>>                              ACK------------------->
>>>>>>                                <-----------------------OK
>>>>>>
>>>>>> <-------------------------------------------TRYING
>>>>>>
>>>>>> <--------------------------------------------RINGING
>>>>>>
>>>>>> (but UA already has got the busy tone) and does not hear this 
>>>>>> ringing.
>>>>>>
>>>>>> if 408 was not sent to UA1, then the call could have been 
>>>>>> established.
>>>>>>
>>>>>> what is going wrong,
>>>>>>
>>>>>> regards,
>>>>>>
>>>>>> tulika
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Serusers mailing list
>>>>>> serusers at lists.iptel.org
>>>>>> http://lists.iptel.org/mailman/listinfo/serusers
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Serusers mailing list
>>>> serusers at lists.iptel.org
>>>> http://lists.iptel.org/mailman/listinfo/serusers
>>>>
>>>> .
>>>>
>>>
>>> _______________________________________________
>>> Serusers mailing list
>>> serusers at lists.iptel.org
>>> http://lists.iptel.org/mailman/listinfo/serusers
>>
>>
>>
>>

-- 
  
ISC Network Engineering
The University of Pennsylvania
3401 Walnut Street, Suite 221A
Philadelphia, PA 19104  


voice: 215-573-8396 

       215-746-8001

fax: 215-898-9348    

sip:blairs at upenn.edu




More information about the sr-users mailing list