[Serusers] fr_inv_timer problem when using SIPPS

Klaus Darilion darilion at ict.tuwien.ac.at
Tue Nov 18 13:11:10 CET 2003


Is the c-timer of RFC3261 the same as the fr_inv_timer? Then you're
right:

RC3261
" Update timer C for provisional responses

         For an INVITE transaction, if the response is a provisional
         response with status codes 101 to 199 inclusive (i.e., anything
         but 100), the proxy MUST reset timer C for that client
         transaction.  The timer MAY be reset to a different value, but
         this value MUST be greater than 3 minutes
"

But setting the timer to 3 minutes is much to long for redirection to
voicemail. 

Shouldn't timer-c be activated for all transactions (as stated in the
RFC) and not only for calls which will be redirected to the voicemail?
Therefore, a separate timer for redirection to voicemail would be
necessary. The fr_inv_timer would be set to 3 minutes to cancel
neverending transactions, and a separate fr_inv_voicemail_timer can be
set to e.g. 10 seconds and this timer will not be reset after
provisional responses.

regards, 
Klaus

> -----Original Message-----
> From: Jiri Kuthan [mailto:jiri at iptel.org] 
> Sent: Tuesday, November 18, 2003 12:47 PM
> To: Klaus Darilion; serusers at lists.iptel.org
> Subject: Re: [Serusers] fr_inv_timer problem when using SIPPS
> 
> 
> Thanks, it is very nice to get some real questions :)
> 
> I'm now running in my bed, so I may be confused but I think that
> the spec tells 180s to extend life of transaction context (i.e.,
> extend C-timer). I don't necessarily like it, and I think it was 
> just a too quick result of a discussion which the sip mailing list 
> wanted to complete (roughly during bis-07 time).
> 
> I need to review what SER actually does. Not extending the transaction
> lifetime through 18x should be at least a config option.
> 
> -jiri
> 
> At 12:00 PM 11/18/2003, Klaus Darilion wrote:
> >Hi!
> >
> >I tried voicemail with redirect to the vm-proxy if the user 
> doesn't pick up
> >the phone after 10 seconds. It works fine if I call a kphone 
> user, but not
> >with SIPPS users. SIPPS sends a 180 Ringing every five seconds which
> >probably resets the timer - if I choose timer intervalls 
> shorter than 5
> >seconds it also works with SIPPS.
> >
> >Is this a bug?
> >
> >tried with ser:
> >0.8.12dev-t14
> >0.8.11rc1
> >0.8.11-r1
> >
> >regards,
> >Klaus
> >
> >
> >----------
> >#
> ># $Id: ser.cfg,v 1.21 2003/06/04 13:47:36 jiri 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"
> >alias=obelix.ict.tuwien.ac.at
> ># ------------------ module loading 
> ----------------------------------
> >
> ># Uncomment this if you want to use SQL database
> >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"
> >
> ># Uncomment this if you want digest authentication
> ># mysql.so must be loaded !
> >loadmodule "/usr/local/lib/ser/modules/auth.so"
> >loadmodule "/usr/local/lib/ser/modules/auth_db.so"
> >
> ># load the voicemail module
> >#loadmodule "/usr/local/lib/ser/modules/vm.so"
> >
> ># load the enum module
> >loadmodule "/usr/local/lib/ser/modules/enum.so"
> >
> ># load the group module, to verify if a user forwards to voicemail
> >loadmodule "/usr/local/lib/ser/modules/group.so"
> >
> ># load the nathelper module
> >#loadmodule "/usr/local/lib/ser/modules/nathelper.so"
> >
> ># ----------------- setting module-specific parameters 
> ---------------
> >
> ># -- usrloc params --
> >
> >#modparam("usrloc", "db_mode",   0)
> >
> ># Uncomment this if you want to use SQL database 
> ># for persistent storage and comment the previous line
> >modparam("usrloc", "db_mode", 2)
> >modparam("usrloc", "db_url", "sql://ser:ser2000@localhost/ser")
> >
> ># -- auth params --
> ># Uncomment if you are using auth module
> >#
> >modparam("auth_db", "calculate_ha1", yes)
> >#
> ># If you set "calculate_ha1" parameter to yes (which true in 
> this config), 
> ># uncomment also the following parameter)
> >#
> >modparam("auth_db", "password_column", "password")
> >modparam("auth_db", "db_url", "sql://ser:ser2000@localhost/ser")
> >
> ># -- rr params --
> ># add value to ;lr param to make some broken UAs happy
> >modparam("rr", "enable_full_lr", 1)
> >
> ># -- voicemail params --
> >#modparam("voicemail", "db_url","sql://ser:ser2000@localhost/ser")
> >
> ># -- voicemail params --
> >modparam("group", "db_url","sql://serro:serro2000@localhost/ser")
> >
> ># -- nathelper params --
> >#modparam("nathelper", "natping_interval", 10)
> >
> >modparam("tm", "fr_inv_timer", 8 )
> >modparam("tm", "fr_inv_timer", 8 )
> >
> ># -------------------------  request routing logic 
> -------------------
> >
> ># main routing logic
> >
> >route{
> >
> >        lookup("aliases");
> >        # 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) {
> >        if (len_gt( 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
> >
> >#remove record route for dissipate
> >#if (!(method=="REGISTER")) record_route();
> >        
> >        # 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") {
> >
> ># Uncomment this if you want to use digest authentication
> >#                       if (!www_authorize("obelix.ict.tuwien.ac.at",
> >"subscriber")) {
> >#                               
> www_challenge("obelix.ict.tuwien.ac.at",
> >"0");
> >#                               break;
> >#                       };
> >
> >                        if (!save("location")) {
> >                                sl_reply_error();
> >                        };
> >                        break;
> >                };
> >
> >                # check if number beginns with 00, then 
> convert it into a +
> >                if (uri=~"^sip:00[0-9]*@") {
> >                        # strip booth leading "0"
> >                        strip(2);
> >                        prefix("+");
> >                };
> >                # check if request uri begins with an 
> internation phone
> >number, if yes, try enum to resolve
> >                if (uri=~"sip:\+?[0-9]+ at .*") {
> >                        enum_query("voice");
> >                };
> >        
> >                #mark transaction for voicemail
> >                if (is_user_in("Request-URI", "voicemail")) {
> >                        setflag(4);
> >                };
> >
> >                # native SIP destinations are handled using 
> our USRLOC DB
> >                if (!lookup("location")) {
> >                        # handle user which was not found
> >                        route(4);
> >                        break;
> >                };
> >        };
> >        
> >        #add failure route which should be performed if 
> response code >=300
> >        if  (method=="INVITE" && isflagset(4)) {
> >                t_on_failure("1");
> >        };
> >
> >        # forward to current uri now; use stateful forwarding; that
> >        # works reliably even if we forward from TCP to UDP
> >        if (!t_relay()) {
> >                sl_reply_error();
> >        };
> >
> >}
> >
> >route[4]{
> >
> >        # non-Voip -- just send "off-line"
> >        if (!(method == "INVITE" || method == "ACK" || 
> method == "CANCEL" ||
> >method == "REFER" || method == "BYE")) {
> >                sl_send_reply("404", "Not Found");
> >                break;
> >        };
> >
> >        # not voicemail subscriber
> >        if (!isflagset(4)) { 
> >                sl_send_reply("404", "Not Found and no 
> voicemail turned
> >on");
> >                break;
> >        };
> >
> >        # forward to voicemail now
> >        #rewritehostport("machtnix.ict.tuwien.ac.at:5060");
> >        t_relay_to_udp("machtnix.ict.tuwien.ac.at", "5060");
> >        
> >        #klaus
> >        #forward(machtnix.ict.tuwien.ac.at, 5060)
> >}
> >
> >
> >                        
> >failure_route[1] {
> >  /* XX: note: unsafe if preloaded routes without username used */
> >  revert_uri();
> >        revert_uri();
> >        #rewritehostport("machtnix.ict.tuwien.ac.at:5060");
> >        append_branch();
> >        t_relay_to_udp("machtnix.ict.tuwien.ac.at", "5060");
> >}
> >
> >
> >_______________________________________________
> >Serusers mailing list
> >serusers at lists.iptel.org
> >http://lists.iptel.org/mailman/listinfo/serusers
> 
> --
> Jiri Kuthan            http://iptel.org/~jiri/ 
> 
> 




More information about the sr-users mailing list