[OpenSIPS-Users] Request for clarification on tm timers

Flatbush Telecom ftiuser at flatbushtelecom.com
Mon Mar 8 19:46:28 CET 2010


I have a question regarding the final response and how to accelerate failover.

I have studied the documentation and have watched the discussions regarding fr_timer and fr_inv_timer. I do not think I understand the fine points of tm and would appreciated your assistance.

My question is how do I accelerate the final response back to UAC? Right now it takes up to 30 seconds from when I know I have received a negative response to INVITE until my failure_route gets executed. If I do not call failure_route, it still takes up to 30 seconds

Right now when UAC sends an INVITE, fr_timer has a default value of 3. In my onreply_route, fr_inv_timer gets set to 30 when I receive provisional response 100. If there is further progress to a provisional response >= 180, fr_inv_timer gets set to 90. If I receive a negative response, I call failure _route from my onreply_route.

At that point, I know I have received a negative acknowledge but will not signal UAC for another 30 seconds that the call failed.

I have attached appropriate pieces of my config your your review. Thank you very much for any help you can provide.

Mike Montgomery

# ------------lcr params (to get to functionality) ------------
modparam("lcr", "contact_avp", "$avp(i:711)")
modparam("lcr|tm", "fr_inv_timer_avp", "$avp(i:704)")
modparam("lcr", "gw_uri_avp", "$avp(i:709)")
modparam("^auth$|lcr", "rpid_avp", "$avp(i:302)")
modparam("lcr", "ruri_user_avp", "$avp(i:500)")
modparam("lcr", "flags_avp", "$avp(i:712)")
       /* Turning on the regex mode for prefix */
#modparam("lcr", "prefix_mode", 1)
modparam("lcr","fr_inv_timer_next",10)
modparam("lcr|tm","fr_inv_timer",10)
modparam("tm", "fr_timer", 3)
modparam("tm", "onreply_avp_mode", 1)
modparam("tm", "fr_timer_avp", "$avp(i:24)")
modparam("tm", "pass_provisional_replies", 1)
avp_aliases="fr_timer=i:24"
avp_aliases="fr_inv_timer=i:704"
modparam("tm", "restart_fr_on_each_reply", 0)

route[13] {
xlog("L_INFO","enter route [13] RequestURI=$ru RequestUser=$rU Source=$si Method=$rm TO $tu FromURI=$fu FromUser=$fU \n");
    #From an external domain outbound

        if(allow_trusted()) {

                xlog("L_INFO","PRE Strip requested URI = $ru \n");

            prefix2domain("0", "2");

                xlog("L_INFO","Strip prefix >>>> requested URI = $ru \n");

            $avp(s:can_uri) = $ru;

                xlog("L_INFO"," Canonical URI = $avp(s:can_uri) \n");

            revert_uri();

# if no caller ID add dummy callerID

            if ($fU!~"^[0-9]*") {
                uac_replace_from("sip:14436230000@$si");
                xlog("L_INFO","NO CALLERID inserted>>>>> ............ $fu  \n");
            } else {
                xlog("L_INFO","valid CALLERID <<<<< ............ $fu  \n");
            }

            if (!load_gws()) {
                xlog("L_INFO"," load_gws() FAILED >>> gw_uri_avp = $avp(i:709) \n");
                sl_send_reply("503", "Unable to load gateways");
                exit;
            }

               xlog("L_INFO"," load gateway... flags = $avp(i:712) \n");

            if(!next_gw()){
                xlog("L_INFO"," next_gw() FAILED >>> ruri_user_avp = $avp(i:500) \n");
                sl_send_reply("503", "Unable to find a gateway");
                exit;
            }
                xlog("L_INFO"," 1. next gateway... flags = $avp(i:712) \n");

# set provisional response timer
            $avp(fr_timer)=3;

            t_on_reply("2");

            if (!t_relay()) {
                sl_reply_error();
            };
            exit;

        } else {
                sl_send_reply("403", "Forbidden r13");
                exit;
        };
}

onreply_route[2] {
        xlog("L_INFO","enter onreply_route [2] RequestURI=$ru RequestUser=$rU Source=$si Method=$rm TO $tu FromURI=$fu FromUser=$fU \n");

        if(status=~"100"){
           $avp(fr_inv_timer) = 35;
           xlog("L_INFO"," ----- Reply Route 100 Trying = $rs, $rr \n");
        };

        if(status=~"18[0-3]"){
           $avp(fr_inv_timer) = 100;
           xlog("L_INFO"," ----- Reply Route $rs $rr \n");
        };

        if(status=~"[3-6][0-9][0-9]"){
           xlog("L_INFO"," ----- Reply Route  FAILURE status = $rs, $rr \n");
          t_on_failure("2");
        };
    exit;
        }

failure_route[2] {
xlog("L_INFO","enter failure_route [2] Source=$si Method=$rm TO $tu FROM $fu \n");

xlog("L_INFO"," ----- \n");
xlog("L_INFO"," ----- FAILURE status = $rs \n");
xlog("L_INFO"," ----- \n");

    ##--
    ##-- If cancelled, exit.
    ##--
    if (t_was_cancelled()) {
        exit;
    };

     if (!use_next_gw()) {
         t_reply("503", "No gateways available");
          xlog("L_INFO"," failure route NO MORE GATEWAYS 503 back to caller \n");
         exit;
         };

        xlog("L_INFO"," failure route next gateway... dr_ruri= $avp(dr_ruri) ... dr_attrs = $avp(dr_attrs) destination = $dd \n");

        # Set accounting flags again Account INVITE packets
        setflag(5);
        # Set accounting flags again Account Missed calls
        setflag(8);

    t_on_reply("2");

    t_relay();

    exit;
}


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.opensips.org/pipermail/users/attachments/20100308/4fcc5558/attachment-0001.htm 


More information about the Users mailing list