[Users] ACK processing
Michael Ulitskiy
mdu113 at acedsl.com
Tue Jul 26 18:18:02 CEST 2005
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
>
> 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 Users
mailing list