[Users] ACK processing

Michael Ulitskiy mdu113 at acedsl.com
Wed Jul 27 19:10:30 CEST 2005


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 Users mailing list