[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