I will follow your indications and after that I will give you feedback about this solution.
Thanks,


On Mon, Mar 10, 2008 at 4:14 PM, Andrei Pelinescu-Onciul <andrei@iptel.org> wrote:
On Mar 10, 2008 at 12:14, Nuno Ribeiro <nribeiro82@gmail.com> wrote:
> Hi Andrei,
>
> Thanks for your availability to help me...
> Note that this situation only occurs if the CANCEL message is originated a
> few moments after the INVITE. I think that the transaction from the INVITE
> is not  yet completely created so when the CANCEL is received it doesn't
> match any transaction (t_lookup_request: no transaction found).
> I send in attachment the wireshark log where you can the network traces that
> you referred.

No, in fact the CANCEL matches and terminates the transaction
(you go INVITE, 100 Trying, INVITE forwarded, CANCEL, 487 to the orig.
INVITE due to the CANCEL and the 200 to the CANCEL).
The problem is when the CANCEL arrives the INVITE transaction has not
received any reply yet (if you look in the dump you'll see an 100 trying
 from .5 long after the CANCEL is received). In ser in this case (CANCEL
 received and no response yet on a branch)  the branch is dropped
 immediately and a "fake" 487 is sent back (the ideea is that most
 likely the UA to which the INVITE was forwarded is dead and it saves a
 lot of resources if we quickly kill the transaction -- unfortunately this
 backfires in your case). The CANCEL is also not forwarded downstream (the
 rfc says that CANCEL should be sent only on replied branches).

So to make a long story short, upgrade to the latest cvs version and set
 modparam("tm", "cancel_b_method", 1). This will keep retransmitting
 the INVITE if no reply was received, even after the CANCEL arrives and
 it will avoid all the above problems (see modules/tm/README |grep
 cancel_b_method for a more detailed description).
If you still have problem, drop me another mail. I'm very interested if
the cancel fix works properly, not only in my testbed. I'm starting to think
that making this the default behaviour might be a good ideea (since it
seems that it causes problems quite frequently). It might even become a
 candidate for a backport to stable.


Andrei

>
> PS: the first message was rejected by the list as the message was to big....
>
> Best Regards,
>
> On Sat, Mar 8, 2008 at 12:39 AM, Andrei Pelinescu-Onciul <andrei@iptel.org>
> wrote:
>
> > On Mar 06, 2008 at 17:45, Nuno Ribeiro <nribeiro82@gmail.com> wrote:
> > > Hi all,
> > >
> > > I'm facing a problem  with "early CANCEL's" such the one described in
> > this
> > > thread. The scenario is the following  one:
> > >
> > > A PSTN call to a SIP phone. When the PSTN decides to cancel the call
> > only a
> > > right after initiating, the PSTN will send the CANCEL message to the SER
> > but
> > > this is discarded and not forwarded to the correct path to the SIP
> > Phone. So
> > > what happens is that we have a ghost call.... The PSTN has already
> > canceled
> > > the call but the SIP phone continues to ring.
> > >
> > > The code that I have in the SER script is really simple and the behavior
> > to
> > > a CANCEL is the same as to a INVITE:
> > >
> > > if(subst_uri('/^sip:(\+[0-9]+)@
> > > 192.168.20.69.*user=phone$/sip:\1@xlab.com/i')){<http://192.168.20.69.*user=phone$/sip:%5C1@xlab.com/i%27%29%29%7B>
> > >              record_route();
> > >              loose_route();
> > >              t_relay_to_udp("192.168.20.5", "5060");
> > >              break;
> > > }
> > > In the log file I see that:
> > > RFC3261 transaction matching failed
> > > t_lookup_request: no transaction found
> > > e2e_cancel: e2e cancel proceeding
> > >
> > >
> > > During this thread I saw that a  CANCEL handling tm option was decided
> > to be
> > > created. Maybe this option can help me to solve the ghost call issue.
> > How
> > > can I change the default behavior ?  this feature is available  from
> > which
> > > SER release ?
> >
> > The option is unmatched_cancel and is present for ser 2.1 (cvs head).
> > However what this does is select between dropping unmatched cancels,
> > forwarding them statelessly or statefully.
> > Older ser versions always forward the cancel statefully, which is what
> > you want in most cases (including yours).
> >
> > It's strage that the cancel doesn't seem to match the invite transaction
> > in your case.
> > If you would send me some networks dumps with the invite and the cancel
> > I could tell you more.
> >
> >
> > Andrei
> >
> >
> > >
> > > Any idea how I can solve this isse?
> > >
> > > Thanks in advance.
> > >
> > > Best Regards
> > >
> > > On Thu, Mar 29, 2007 at 6:19 PM, Jiri Kuthan <jiri@iptel.org> wrote:
> > >
> > > > At 15:58 26/02/2007, Klaus Darilion wrote:
> > > > >FYI: This is the pragmatic approach how openser users handle the
> > problem:
> > > > >
> > > > >1. drop the CANCEL if there is no corresponding INVITE transaction.
> > The
> > > > UAC must retransmit the CANCEL and meanwhile there should be the
> > INVITE
> > > > transaction. (since 1.0)
> > > > >
> > > > >if ( is_method("CANCEL") && !t_check_trans() ) {
> > > > >  # CANCEL without matching INVITE transaction, ignore!
> > > > >  # May happen if the INVITE is slower than the CANCEL.
> > > > >  # Ignore the CANCEL, as the client will retransmit it, and maybe
> > > > >  # the INVITE transaction is already created for the next CANCEL
> > > > >  xlog("L_WARN","$ci CANCEL without matching transaction ...
> > ignore\n");
> > > > >  exit;
> > > > >}
> > > >
> > > > which does not appear really reboot-safe to me. What it can lead to
> > that
> > > > ser reboot
> > > > affects pending calls in that cancels are never forwarded and ringing
> > > > phones will
> > > > never stop ringing -- not very pleasant indeed, is it.
> > > >
> > > > -jiri
> > > >
> > > >
> > > >
> > > > --
> > > > Jiri Kuthan            http://iptel.org/~jiri/<http://iptel.org/%7Ejiri/><
> > http://iptel.org/%7Ejiri/>
> > > >
> > > > _______________________________________________
> > > > Serusers mailing list
> > > > Serusers@lists.iptel.org
> > > > http://lists.iptel.org/mailman/listinfo/serusers
> > > >
> > >
> > >
> > >
> > > --
> > > Nuno Ribeiro
> >
>
>
>
> --
> Nuno Ribeiro





--
Nuno Ribeiro