Re: [rtcweb] SDP_PRANSWER followed by SDP_OFFER scenario in JSEP

"Ejzak, Richard P (Richard)" <> Wed, 02 May 2012 20:34 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 6E1BA21F85A3 for <>; Wed, 2 May 2012 13:34:26 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -9.598
X-Spam-Status: No, score=-9.598 tagged_above=-999 required=5 tests=[AWL=1.000, BAYES_00=-2.599, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-8]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id hiDfCJoTlZUb for <>; Wed, 2 May 2012 13:34:24 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 2BADB21F85A2 for <>; Wed, 2 May 2012 13:34:24 -0700 (PDT)
Received: from ( []) by (8.13.8/IER-o) with ESMTP id q42KYNGx013008 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for <>; Wed, 2 May 2012 15:34:23 -0500 (CDT)
Received: from ( []) by (8.14.3/8.14.3/GMO) with ESMTP id q42KYNSn009546 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NOT) for <>; Wed, 2 May 2012 15:34:23 -0500
Received: from ([]) by ([]) with mapi; Wed, 2 May 2012 15:34:23 -0500
From: "Ejzak, Richard P (Richard)" <>
To: "" <>
Date: Wed, 02 May 2012 15:34:22 -0500
Thread-Topic: [rtcweb] SDP_PRANSWER followed by SDP_OFFER scenario in JSEP
Thread-Index: Ac0oaJ+1zpQqWNXZSPKSMGFBZndVogABUyaA
Message-ID: <>
References: <> <> <> <> <>
In-Reply-To: <>
Accept-Language: en-US
Content-Language: en-US
acceptlanguage: en-US
Content-Type: multipart/alternative; boundary="_000_6F428EFD2B8C2F49A2FB1317291A76C1136047B763USNAVSXCHMBSA_"
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 2.57 on
X-Scanned-By: MIMEDefang 2.64 on
Subject: Re: [rtcweb] SDP_PRANSWER followed by SDP_OFFER scenario in JSEP
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Real-Time Communication in WEB-browsers working group list <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 02 May 2012 20:34:26 -0000

Thanks for the challenge.

I do agree with Roman that there is considerable overlap between forking and bundle that we should be able to leverage in a solution.

I need a few days to think this through before I am ready to propose anything specific.

BR, Richard

From: [] On Behalf Of Harald Alvestrand
Sent: Wednesday, May 02, 2012 8:35 AM
Subject: Re: [rtcweb] SDP_PRANSWER followed by SDP_OFFER scenario in JSEP

On 05/01/2012 03:57 PM, Ejzak, Richard P (Richard) wrote:
Hi Justin, Partha,
The call flow from Partha is a very reasonable one in the presence of SIP forking.  Let's assume that a first target responded with an SDP answer in a 183 that must be treated as a PRANSWER since other targets have not yet had a chance to respond.  Then the first target sends an UPDATE with offer2.

As far as SIP is concerned, there is no such thing as a PRANSWER.  The first target already responded with an SDP ANSWER and wants to UPDATE with a new offer.
In that case, PRANSWER seems like the wrong semantic.... if you want to support multiple answers, shouldn't you do the cloning before you start accepting answers?

 This is perfectly legitimate and common SIP usage.  PRANSWER is a local construct that should be usable by the application to support more complex offer/answer cases like forking.

You must respond to this offer by cloning the peer connection, closing the clone with an ANSWER identical to the previous PRANSWER and then applying offer2 to the clone (or just applying the offer2 directly with the understanding that the previous transaction is closed).  The original peer connection must revert to the original OFFER state to allow for other targets to respond.

Alternately, the original peer connection can support the first target and a new clone created if there is the potential for other forked responses to the original offer.  Either way can be made to work.

This is a perfectly reasonable SIP use case that explains why we need to be able to clone the peer connection.

could you please propose a semantic for "clone" that allows us to evaluate whether/how it can be implemented?

Especially, I am worried about what the state of the peerconnection has to be before it is cloned, what the state of the peerconnection is after it is cloned, which peerconnection owns the various resources allocated (ports are the obvious part of it), and which peerconnection any streams (local or remote) attached to the peerconnection before the clone are attached to after the clone.

In an earlier thread, I suggested a peerconnection factory that could generate an offer, but required you to manufacture a real peerconnection before applying an answer (any answer).... since I'm not that interested in supporting forking, I haven't pursued that further. Others might want to.

I don't think any of this is impossible. I do think it requires rather precise definitions of what we want before we ask browser developers to do it.