I have a situation where CANCEL messages sent by the caller through
SER are sometimes ignored by the destination switch.
These events are infrequent, and seem to be ignored only if they
are received in a narrow window between the 100 Trying and
the 183 Session Progress or 180 Ringing message. The
destination switch eventually emits a 183/180 and even a 200 OK
as the called party answers the call of a long-departed caller.
I don't believe that this is a race condition, as the called
numbers are sometimes wireless parties, who have 4-10 seconds
of time between 100 Trying/IAM and 180/183/ACM responses, and I
have seen ignored cancels at the beginning and middle of that
lengthy period. So a race condition for that large a period
with such an infrequent occurrence seems unlikely.
The destination (SIP to ISUP gateway) equipment vendor points out
that in the dozen samples of this occurring that the branch tag
of the CANCEL didn't match the one shown in the INVITE, and per
RFC 3261, their decision to ignore the CANCEL seems to be the
right one. In particular, section 17.2.3 criteria 1.
This immediately made me think of SER and its habit of saving
time and memory by not remembering some or all call state
unless you tell it to, via various knobs that are turned off by
default. However, I can't explain why most cancels that arrive
in the same point in the call setup apparently do meet criteria
and only a small number don't. It would seem that SER would
have mismatched branch tags all the time or never, depending on
the knob settings.
Any ideas? Thanks in advance.
Show replies by date