[Freeswitch-users] SIP 500 overlapping requests due to race condition

Michael Jerris mike at jerris.com
Mon Jun 23 19:56:08 MSD 2014


Can you open a jira with all this information so we can dig on this a bit more.

Thanks
Mike

On Jun 21, 2014, at 12:26 PM, Phil Quesinberry <philq at qsystemsengineering.com> wrote:

> Digging into this further, I found the following document detailing best
> current practices for handling this condition.  Here is a clip of the
> relevant section from RFC 5407 - Example Call Flows of Race Conditions in
> the
>                   Session Initiation Protocol (SIP)
> 
> http://tools.ietf.org/html/rfc5407
> 
> 
> 
> Hasebe, et al.           Best Current Practice                 [Page 16]
> 
> 
> RFC 5407         Example Call Flows of Race Conditions     December 2008
> 
> 
> 3.1.4.  Callee Receives re-INVITE (Established State)  While in the
>        Moratorium State (Case 1)
> 
>   State  Alice                          Bob  State
>          |                                |
>          |    ini-INVITE w/offer1 F1      |
>          |------------------------------->|
>     Pre  |             180 F2             |  Pre
>          |<-------------------------------|
>     Ear  |                                |  Ear
>          |   200(ini-INV) w/answer1 F3    |
>          |<-------------------------------|
>    Mora  |       ACK F4(packet loss)      |  Mora
>          |-------------------->x          |
>     Est  |                                |
>          | re-INVITE F6      200 F5(=F3)  |
>          |   w/offer2         w/answer1   |
>          |-------------     --------------|
>          |              \ /               |
>          |               X                |
>          |              / \               |
>          |<------------     ------------->|  *race*
>          |                  200(re-INV) F8|
>          | ACK F7(=F4)        w/answer2   |
>          |-------------     --------------|
>          |              \ /               |
>          |               X                |
>          |              / \               |
>          |<------------     ------------->|
>          |         ACK (re-INV) F9        |  Est
>          |------------------------------->|
>          |                                |
>          |                                |
> 
>   This scenario illustrates the race condition that occurs when a UAS
>   in the Moratorium state receives a re-INVITE sent by a UAC in the
>   Established state.
> 
>   The UAS receives a re-INVITE (with offer2) before receiving an ACK
>   for the ini-INVITE (with offer1).  The UAS sends a 200 OK (with
>   answer2) to the re-INVITE (F8) because it has sent a 200 OK (with
>   answer1) to the ini-INVITE (F3, F5) and the dialog has already been
>   established.  (Because F5 is a retransmission of F3, SDP negotiation
>   is not performed here.)
> 
>   As can be seen in Section 3.3.2 below, the 491 response seems to be
>   closely related to session establishment, even in cases other than
>   INVITE crossover.  This example recommends that 200 be sent instead
> 
> 
> 
> Hasebe, et al.           Best Current Practice                 [Page 17]
> 
> 
> RFC 5407         Example Call Flows of Race Conditions     December 2008
> 
> 
>   of 491 because it does not have an influence on the session.
>   However, a 491 response can also lead to the same outcome, so either
>   response can be used.
> 
>   Moreover, if the UAS doesn't receive an ACK for a long time, it
>   should send a BYE and terminate the dialog.  Note that ACK F7 has the
>   same CSeq number as ini-INVITE F1 (see Section 13.2.2.4 of RFC 3261
>   [1]).  The UA should not reject or drop the ACK on grounds of the
>   CSeq number.
> 
> 
> _____________________________________________
> From: Phil Quesinberry 
> Sent: Friday, June 20, 2014 3:49 PM
> To: 'freeswitch-users at lists.freeswitch.org'
> Subject: RE: SIP 500 overlapping requests
> 
> 
> Correction: I meant to say "if FreeSWITCH could be configured to either wait
> up to x milliseconds for an ACKNOWLEDGEMENT to arrive."
> ___________________________________
> From: Phil Quesinberry 
> Sent: Friday, June 20, 2014 3:36 PM
> To: 'freeswitch-users at lists.freeswitch.org'
> Subject: RE: SIP 500 overlapping requests
> 
> 
> As it turns out, my assumption was correct.  We were not receiving an
> acknowledge before the second invite from the carrier.  One of their support
> engineers determined that they had recently enabled acknowledgement logging
> on their proxy/SBC, which apparently delayed transmission of the
> acknowledgement by a millisecond or two, which was enough to cause the
> invite from the server handling the media/call to arrive just slightly
> before the acknowledgement, so FreeSWITCH would tear down the call.  The
> problem was intermittent since the acknowledgement would sometimes arrive
> first.  They disabled acknowledgement logging and the problem went away.
> 
> With this and UDP in mind, it would likely reduce the incidence of dropped
> calls if FreeSWITCH could be configured to either wait up to x milliseconds
> for an invite to arrive, or allow x number of overlapping requests before
> throwing an error.  I saw a post where Tony mentioned that a patch had
> already been crafted to allow overlapping requests in the past, so it seems
> that most of the work has been done.
> 
> __________________________________
> From: Phil Quesinberry 
> Sent: Thursday, June 19, 2014 11:08 AM
> To: 'freeswitch-users at lists.freeswitch.org'
> Subject: SIP 500 overlappting requests
> 
> 
> We're having intermittent problems receiving calls from a particular DID.
> The basic scenario is as follows:
> Carrier sends invite w/SDP
> We respond w/OK and SDP when call is answered
> Carrier sends another invite with incremented sequence number and updated
> SDP (aren't they supposed to ACK/respond before doing this?)
> We send SIP 500 - overlapping requests
> Carrier sends BYE - terminating the call
> 
> Sometimes (rarely) the call completes, most of the time FS sends a 500 and
> doesn't get the call.  This just started happening recently and does not
> occur with any other DIDs, including other DIDs from the same carrier.  I
> updated to the latest stable GIT to see if that might solve the problem but
> I'm pretty sure this is on the carrier's end.  They're trying to blame it on
> us since we're sending the 500 and suggested that we allow overlapping
> requests.
> 
> I'm assuming that their end needs to acknowledge our answer OK/SDP before
> sending their own but if that's the problem then it raises another question
> in my mind: since the SIP transport is generally UDP, what if we don't
> receive their ACK before receiving their subsequent invite/SDP?  This could
> certainly happen and would cause the call to be rejected if the above is
> true.
> 
> I updated to the latest stable GIT last night to rule that out as a possible
> cause of the problem.  Is there a way to get FS to allow a limited number of
> overlapping requests as a possible workaround?
> 
> If someone thinks this looks like it could be an FS bug, I'll file a Jira.
> 
> Here is a trace which shows this happening:
> http://pastebin.freeswitch.org/22769
> 
> Thanks,
> 
> Phil Quesinberry
> Q Systems Engineering, Inc.
> Embedded Hardware/Software Development
> (410) 969-8002
> http://www.qsystemsengineering.com
> 
> 




Join us at ClueCon 2016 Aug 8-12, 2016
More information about the FreeSWITCH-users mailing list