[Users] ACK processing

Bogdan-Andrei Iancu bogdan at voice-system.ro
Wed Jul 27 19:19:15 CEST 2005


Hi Michael,

it will be really cool if you could add all the info related to CANCEL 
and ACK routing and tm behaviour into the wiki. All docs from wiki will 
go for sure into cvs and web docs.

thanks and regards,
bogdan

Michael Ulitskiy wrote:

>Hi Bogdan,
>
>Yeap, I've already figured it out by experimenting.
>Thanks a lot for clarification. 
>I couldn't find clear description of this tm module behavior
>anywhere in documentation or on the web.
>I think it's worth to put your replies in this thread in 
>FAQ/documentation/etc. I find it quite confusing figuring it
>out on your own.
>
>Michael
>
>
>On Wednesday 27 July 2005 12:03 pm, you wrote:
>  
>
>>Hi Michael,
>>
>>what to do with broken hop-by-hop ACKs ? :) just drop them, otherwise 
>>they will loop on the server.
>>
>>t_newtran() basically creates a new transaction. If it's ACK and it 
>>matched to an INVITE transaction, it will be silently discarded (so 
>>function will never return to script). If ACk doesn't match, the 
>>function will return; so after t_newtran() you will have only unmatched 
>>ACKs filtered out.
>>
>>so,
>>
>>.....
>>if (is_method("ACK")) { #hop-by-hop ACKs are absorbed here
>>    t_newtran();
>>    # drop broken ACKs
>>    exit;
>>}
>>......
>>
>>
>>should be ok.
>>
>>regards,
>>bogdan
>>
>>Michael Ulitskiy wrote:
>>
>>    
>>
>>>Bogdan,
>>>
>>>Thanks a lot. Your replies are very useful.
>>>Just couple more questions raised by comments.
>>>What would I want to do with broken ACKs? I thought I'd just drop it.
>>>Also how would I distinguish them? I don't really understand how
>>>you use t_newtran(). Don't real ACKs still need to hit t_relay to
>>>finish transaction?
>>>I thought about something like the following, but so far couldn't find
>>>a way to determine if ACK is matching transaction or not:
>>>
>>>if (is_method("ACK")) { #hop-by-hop ACKs are absorbed here
>>>    if (in-transaction ACK) {
>>>       t_relay();
>>>    }
>>>    # lost ACKs are dropped
>>>    # .......
>>>    exit;
>>>}
>>>
>>>I've tried to t_lookup_request() to check if it's in transaction, but it didn't work.
>>>Could you please comment on it?
>>>Thanks,
>>>
>>>Michael
>>>
>>>On Tuesday 26 July 2005 06:55 am, you wrote:
>>> 
>>>
>>>      
>>>
>>>>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
>>>>   
>>>>
>>>>        
>>>>
>
>  
>





More information about the sr-users mailing list