Subject: Multiple 200 responses?

From: "Alex Doyle" <[email-masked]>
Date: Fri, 13 Aug 1999 11:20:08 -0400

Section 10.3 (TCP) of the spec states ".....there are exceptional
circumstances, where, for example, multiple 200 responses can be generated."

Can anyone give me a real world example (besides client error) where this
might happen?  Should an originating SIP client be able to receive a 200 OK,
use its SDP data, then receive a second 200 OK, and then update to use the
second response's SDP data?

Cheers,
Alex
[email-masked]

---

From: "Adam B. Roach" <[email-masked]>
Date: Fri, 13 Aug 1999 16:11:11 -0500 (CDT)

>might happen?  

I'll give two. By the way, when I say "client" below, I'm referring 
to a UAS/UAC node.

---------------------------------------------------------------------------
Example 1:

Client A sends an INVITE to a forking proxy; it forks the INVITE
to Clients B and C. Client B answers at about the same time as C.
Client B's 200 arrives at the proxy first, so the proxy sends a CANCEL
to Client C (who has already sent his INVITE 200 response). The
proxy forwards Client B's 200 OK to Client A.

Now, when Client C's INVITE 200 OK hits the proxy, what is the
proxy to do? For a variety of reasons, it is most sensible to
forward this 200 to Client A, since Client A is the only entity
that can tear down (or do anything else appropriate to) the session.

Note that Client C will not change session state upon receipt of the
proxy's CANCEL, since he has already sent an INVITE 200.

So Client A has received a 200 OK from *both* Clients B and C.
Both clients think they have a valid session with Client A.

How to handle this?  I'd say that it would be perfectly acceptable 
to send a BYE to the second 200 response. I've discussed this exact 
situation with both Jonathan and Henning, and they both seem to 
think it's a problem, but no solution has been proposed yet...

(It gets even worse if you get two final responses, with the
first one being *600* class, and the second one being *200*
class.)
---------------------------------------------------------------------------
Example 2:

Client A sends a request using TCP to Client B through a proxy.
The proxy contacts Client B using UDP. Client B sends a 200 response
to Client A through the proxy; the 200 response contains a Contact
header pointing to Client B (and, to stave off any arguments, let's say
the contact field explicitly says "transport=udp"). Client A sends
an ACK to Client B using UDP; this ACK is lost in the network. Client
B will then, at some point, retransmit the 200 response.

This 200 response should be identical to the first one (including
SDP), so your question of which SDP to use becomes a moot point.
If they are different than each other, I'd say you'd be perfectly
justified in arbitrarily choosing to use one over the other, since
the other side is exhibiting illegal behavior.

--
Adam Roach, Ericsson Inc. |  Ph: +1 972 583 7594 | 1010 E. Arapaho, MS L-04
[email-masked]   | Fax: +1 972 669 0154 | Richardson, TX 75081 USA

---

From: Jonathan Rosenberg <[email-masked]>
Date: Mon, 16 Aug 1999 18:32:38 -0400

> think it's a problem, but no solution has been proposed yet...

I believe there are several reasonable things to do:

1. Send a BYE to one or the other (although ACK both, see my previous
email)
2. Send a BYE to both (ACK both still)
3. Accept both. The caller is now effectively in two calls (note that
they do share the same Call-ID, though).
4. Accept both, and then turn the resulting two calls into a multi-party
call using the call control stuff.

-Jonathan R.
-- 
Jonathan D. Rosenberg                       Lucent Technologies
Member of Technical Staff                   101 Crawfords Corner Rd.
High Speed Networks Research                Holmdel, NJ 07733
FAX: (732) 834-5379                         Rm. 4C-526
EMAIL: [email-masked]
URL: http://www.cs.columbia.edu/~jdrosen