[Users] provisional_reply_timer

Klaus Darilion klaus.mailinglists at pernau.at
Wed Dec 20 11:39:39 CET 2006


Thanks for the info - I've updated the docs.

regards
klaus

Christian Schlatter wrote:
> Klaus Darilion wrote:
>> Hi Christian!
>>
>> Is the behavior identically for all transactions or is there a 
>> difference between INVITE and other transactions?
> 
>  >> - INVITE transactions: FRT initially equals fr_timer and gets set to
>  >> fr_inv_timer after receiving first provisional response
> 
> This is only true for INVITE transactions, all other transactions only 
> use the fr_timer. This makes sense since INVITE transactions normally 
> involve user interaction (ringing).
> 
> The code responsible for that is in /modules/tm/t_reply.c, 
> reply_received(..) function:
> 
> /* update FR/RETR timers on provisional replies */
> if (msg_status < 200 && (restart_fr_on_each_reply ||
>    ((last_uac_status<msg_status) &&
>    ((msg_status >= 180) || (last_uac_status == 0)))
>     ) ) { /* provisional now */
>                 if (is_invite(t)) {
>                         /* invite: change FR to longer FR_INV, do not
>                          * attempt to restart retransmission any more
>                          */
>                         backup_list = set_avp_list(&t->user_avps);
>                         if (!fr_inv_avp2timer(&timer)) {
>                                 DBG("DEBUG:tm:reply_received: 
> FR_INV_TIMER = %d\n", timer);
>                                 set_timer(&uac->request.fr_timer,
>                                         FR_INV_TIMER_LIST, &timer);
>                                 t->flags |= T_NOISY_CTIMER_FLAG;
>                         } else {
>                                 set_timer(& uac->request.fr_timer, 
> FR_INV_TIMER_LIST, 0);
>                         }
>                         set_avp_list(backup_list);
>                 } else {
>                         /* non-invite: restart retransmissions (slow 
> now) */
>                         uac->request.retr_list = RT_T2;
>                         set_timer(&uac->request.retr_timer, RT_T2, 0);
>                 }
>         } /* provisional replies */
> 
> 
> - Christian
> 
>>
>> regards
>> klaus
>>
>> Christian Schlatter wrote:
>>> Ovidiu Sas wrote:
>>>> Hi Klaus,
>>>>
>>>> You can use the fr_timer from the tm module:
>>>> http://openser.org/docs/modules/1.1.x/tm.html#AEN108
>>>>
>>>> If you don't get any reply from the far end, this timer will fire.
>>>
>>> I recently had a look at the timer related source code and that is 
>>> what I wrote down:
>>>
>>> - Each SIP transaction has a final response timer (FRT)
>>>
>>> - SIP transactions fail (failure_route, status 408) when FRT fires
>>>
>>> - TM module exposes final response timers (FRT) fr_timer and 
>>> fr_inv_timer (can be set using AVP)
>>>
>>> - INVITE transactions: FRT initially equals fr_timer and gets set to 
>>> fr_inv_timer after receiving first provisional response
>>>
>>> - setting fr_timer to a low value (e.g. 3s) allows for fast INVITE 
>>> failover
>>>
>>> So I'm setting fr_timer to a low value for local INVITE transactions. 
>>> Local here means sessions between endpoints from our network domain. 
>>> Something along the lines:
>>>
>>> route[0] {
>>>     if (method==“INVITE”) {
>>>         # set fr_timer to 3 seconds
>>>         avp_write("i:3", "$avp(fr_timer)");
>>>         # call FAILURE_DEFAULT_RELAY routing block on transaction 
>>> failure
>>>         t_on_failure("FAILURE_DEFAULT_RELAY");
>>>         t_relay();
>>>         exit;       }
>>> }
>>> failure_route[FAILURE_DEFAULT_RELAY] {
>>>     # status 408 ? transaction timed out
>>>     if (t_check_status("408")) {
>>>         # try next target
>>>         if (ds_next_domain()) {
>>>             t_relay();
>>>         }
>>>     }
>>> }
>>>
>>>
>>> - Christian
>>>
>>>>
>>>>
>>>> Regards,
>>>> Ovidiu Sas
>>>>
>>>> On 12/18/06, Klaus Darilion <klaus.mailinglists at pernau.at> wrote:
>>>>> Hi!
>>>>>
>>>>> i wonder if there is a timer which controls the timeout for 
>>>>> provisional
>>>>> replies.
>>>>>
>>>>> E.g. I want to cancel an INVITE and retry another gateway if the 
>>>>> gateway
>>>>> does not respond with 100 (or 180) in a certain time.
>>>>>
>>>>> regards
>>>>> klaus
>>>>>
>>>>> -- 
>>>>> Klaus Darilion
>>>>> nic.at
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Users mailing list
>>>>> Users at openser.org
>>>>> http://openser.org/cgi-bin/mailman/listinfo/users
>>>>>
>>>>
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users at openser.org
>>>> http://openser.org/cgi-bin/mailman/listinfo/users
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at openser.org
>>> http://openser.org/cgi-bin/mailman/listinfo/users
>>
>>
> 


-- 
Klaus Darilion
nic.at





More information about the Users mailing list