[Users] ACK processing

Bogdan-Andrei Iancu bogdan at voice-system.ro
Tue Jul 26 12:55:18 CEST 2005


Hi Michael,

that's ok. only two comments:
1) all ACKs are in-dialog: ACKs for negative replies are hop-by-hop and 
are the one absorbed by tm functions; the ACKs for 2xx replies are 
end-to-end and are Route driven.
2) since you may have hop-by-hop ACKs (no route) which doesn't match any 
transaction (broken or lost ACKs), if you want to deal with them 
separately, do like this:
   

if (loose_route()) { #end-2-end ACKs are forwarded here
    #do something 
    t_relay();
    exit;
}
if (is_method("ACK")) { #hop-by-hop ACKs are absorbed here
    t_newtran();
    # deal with broken / lost ACKs
    # .......
    exit;
}


regards,
bogdan

Michael Ulitskiy wrote:

>Thanks, Bogdan. So it's still better to process CANCEL the same as
>INVITE to avoid this race condition.
>My next question is about ACK processing. In my observations if one
>uses statefull processing ACKs are either loose_routed or absorbed by
>t_relay(). In my test scenarios I've never seen otherwise. So, again, my
>question is if the following is OK:
> 
>if (loose_route()) { #in-dialog ACKs are forwarded here
>    do something 
>    t_relay();
>    exit;
>}
>if (is_method("ACK")) { #out-of-dialog ACKs are absorbed here
>    t_relay();
>    exit;
>}
>if (uri==myself) {
>   do lookups that rewrite RURI
>   t_relay();
>}
> 
>Thank you,
> 
>Michael
> 
>  
>
>>On Monday 25 July 2005 07:39 am, you wrote:
>>    
>>
>>>Hi Michael,
>>>
>>>that is correct. just note you may encounter some races between INVITEs 
>>>and CANCELs in the case of a fast CANCEL (CANCEL follows the INVITE 
>>>almost instantly) - when one process is still handling the INVITE (the 
>>>transaction may not be build yet), another process receives the CANCEL 
>>>and it will not be able to match it to a transaction in this case, the 
>>>CANCEL will be forward based on its RURI without any info from INVITE.....
>>>
>>>regards,
>>>bogdan
>>>
>>>Michael Ulitskiy wrote:
>>>
>>>      
>>>
>>>>Hello,
>>>>
>>>>I have a question about CANCEL processing.
>>>>I read on the mailing list that CANCEL will be automatically matched by t_relay
>>>>to transaction it's cancelling, if needed transformation to RURI will be automatically 
>>>>applied and then it will be automatically send to correct destination. 
>>>>I'm experimenting with openser 0.10.x and it seems to be true, but I'd like to confirm 
>>>>that the following is OK:
>>>>
>>>>if (loose_route()) {
>>>>do something
>>>>t_relay();
>>>>break;
>>>>}
>>>>if (is_method("CANCEL")) {
>>>>    t_relay();
>>>>                  break;
>>>>}
>>>>if (uri==myself) {
>>>>do lookups that rewrite RURI
>>>>t_relay();
>>>>}
>>>>
>>>>Thank you,
>>>>
>>>> 
>>>>
>>>>        
>>>>
>>>      
>>>
>
>_______________________________________________
>Users mailing list
>Users at openser.org
>http://openser.org/cgi-bin/mailman/listinfo/users
>
>  
>





More information about the sr-users mailing list