On 9/14/16 12:00 PM, Harrison, Jason, Vodafone UK wrote:
Hi Dale and others who have responded,

Thanks for the response; the UPDATE does not contain any SDP as it is just for 
a display update as the call is picked up on another phone

What do you mean by "display update"? Are you changing the display name in the To-URI?

As this behaviour is not covered by the RFCs we are between a rock and a hard 
place, however I can get the customer PBX to use a re-INVITE instead of an 
UPDATE, hopefully that will change things

Do you mean that there is no text in any RFC covering this specific case? While I agree there isn't, there also isn't any text that specifically covers any use case. The normative text covers primitives. Most of the requirements pertain to transactions or dialogs. AFAICT the second example violates no requirements. Hence it is to be considered valid. There is no *general* requirement that there be only one transaction at a time within a dialog, and in fact there are many cases where there are more. The key here is that the dialog is known to be established by both ends (confirmed by the PRACK), so that UPDATE is permitted. Beyond that, the UPDATE transaction is independent of the INVITE transaction.

        Thanks,
        Paul

Regards

-----Original Message-----
From: Dale R. Worley [mailto:wor...@ariadne.com]
Sent: 14 September 2016 16:56
To: Harrison, Jason, Vodafone UK
Cc: sip-implementors@lists.cs.columbia.edu
Subject: Re: [Sip-implementors] Query on UAS sending 200 for INVITE before it 
receives a 200 for an UPDATE it sent

When looking at a race condition, it is always worth looking at RFC 5407 ("Example Call Flows of Race 
Conditions in SIP", often abbreviated to "Race Conditions in SIP" or even "Hasebe" 
in honor of the author).  That is the best collection of carefully analyzed race conditions.

I've added to your example notation of the offers and answers, because 
offer/answer processing often controls what is valud and what is not.

"Harrison, Jason, Vodafone UK" <jason.harri...@vodafone.com> writes:
Hi,

I have an issue and I can't identify if the behaviour is wrong:

Here is a working call
Provider               Customer
SBC                        SBC
INVITE (SDP offer 1)-->
<--100 Trying
<--180 Ringing (SDP answer 1)
PRACK -->
<-- 200OK (PRACK)
<-- UPDATE (SDP offer 2)
200OK UPDATE (SDP answer 2) -->
<--200OK (INVITE) (SDP answer 1)
ACK -->

And here is a failed call
Provider               Customer
SBC                        SBC
INVITE (SDP offer 1) -->
<--100 Trying
<--180 Ringing (SDP answer 1)
PRACK -->
<-- 200OK (PRACK)
<-- UPDATE (SDP offer 2)
<--200OK (INVITE) (SDP answer 1)
200OK (UPDATE) (SDP answer 2) -->
ACK -->
BYE -->
<--200OK (BYE)

In the failed call I am being told by the provider that their SBC sent
a BYE because the 200OK for the INVITE was received before it managed
to send the 200OK for the UPDATE, I have checked the RFCs and can't
find if the customer SBC is breaking any rules by sending an 200OK for
the INVITE before it received a response for the UPDATE

This reasoning seems to be rediculous.  The Provider terminates the call 
because it receives one message before it has been able to process the previous 
message that it received?  The only way for the Customer to avoid that would be 
to send messages in lockstep, only sending one message after the response to 
the previous message had been received.

And for that matter, it is easy for the Provider to handle multiple incoming 
messages -- just postpone processing the new message until the previous message 
has been processed.

Dale
_______________________________________________
Sip-implementors mailing list
Sip-implementors@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/sip-implementors


_______________________________________________
Sip-implementors mailing list
Sip-implementors@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/sip-implementors

Reply via email to