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

Harald Alvestrand <> Wed, 02 May 2012 13:35 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id C88A421F8599 for <>; Wed, 2 May 2012 06:35:24 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -110.508
X-Spam-Status: No, score=-110.508 tagged_above=-999 required=5 tests=[AWL=0.090, BAYES_00=-2.599, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-8, USER_IN_WHITELIST=-100]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id in-Y93DRqxxr for <>; Wed, 2 May 2012 06:35:22 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 8D03921F8598 for <>; Wed, 2 May 2012 06:35:22 -0700 (PDT)
Received: from localhost (localhost []) by (Postfix) with ESMTP id 2F70539E112 for <>; Wed, 2 May 2012 15:35:21 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id YEccJ9zEFEAm for <>; Wed, 2 May 2012 15:35:19 +0200 (CEST)
Received: from ( []) by (Postfix) with ESMTPSA id 11AF139E089 for <>; Wed, 2 May 2012 15:35:19 +0200 (CEST)
Message-ID: <>
Date: Wed, 02 May 2012 15:35:18 +0200
From: Harald Alvestrand <>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120412 Thunderbird/11.0.1
MIME-Version: 1.0
References: <> <> <> <>
In-Reply-To: <>
Content-Type: multipart/alternative; boundary="------------070408090808060708040105"
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 13:35:24 -0000

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.