- From: cowwoc <cowwoc@bbs.darktech.org>
- Date: Mon, 24 Jun 2013 14:01:09 -0400
- To: Adam Roach <adam@nostrum.com>
- CC: public-webrtc@w3.org
- Message-ID: <51C88965.60606@bbs.darktech.org>
On 24/06/2013 1:53 PM, Adam Roach wrote:
> On 6/24/13 12:39, cowwoc wrote:
>> On 24/06/2013 1:31 PM, Dan Ristic wrote:
>>> I am running into an issue with simultaneous peer connections
>>> between users. The issue is when pairing WebRTC with a presence
>>> service, if user A sees user B and initiates a connection at the
>>> same time that user B sees user A and initiates a connection back
>>> both of them are in offer states. Since they are both in offer
>>> states neither of them can accept the other offer request without
>>> either creating two connections or jumping through hoops to figure
>>> out who is the leader and who is the follower and dropping one of
>>> the requests.
>>>
>>> My question would be if the spec would be able to handle such a case
>>> and if not, what is the best way to get around this issue? I am
>>> pretty much building the jumping through hoops part into my
>>> JavaScript library to avoid this issue and it is proving to be a
>>> hassle of getting the timing right.
>>
>> I ran into a similar problem. I ended up programming the server
>> to prevent this situation. Once a peer sends an offer, the server
>> rejects any offers from the second peer. If the first peer gets
>> disconnected their offer eventually times out and you can retry.
>
> This condition, in which both sides attempt to make a simultaneous
> change to call state, is known as "glare." Handling of glare on
> initial connection setup is something that the IETF and W3C have left
> up to applications.The initial ROAP proposal did include a procedure
> for resolving this kind of situation (see
> http://tools.ietf.org/html/draft-jennings-rtcweb-signaling-01#section-5.4.1),
> but the RTCWEB WG ultimately chose to work on JSEP instead (which
> simply says "[T]he actual mechanism by which these offers and answers
> are communicated to the remote side, including... glare handling, is
> left entirely up to the application.")
>
> That said, leaving it "entirely up to the application" is completely
> compatible with using the approach described by ROAP. At a high level:
> you include a random integer in your initial offer message. If you get
> an offer from the other side before you get an answer, you compare
> your number against the one sent by the other side. If yours is
> smaller, you lose the race: destroy the peerconnection you had
> created, and make a new one to deal with the incoming offer. If yours
> is larger, you win the race: ignore the inbound offer and wait for the
> answer. For the rare chance in which both ends selected the same
> number, both sides send an error and the call fails.
>
> /a
Interesting approach! Coming back to Dan's recent post (that he
handles the problem on the client side), I don't think that this is
something that can be handled exclusively by the peers unless they have
a way to communicate out-of-bound of WebRTC. Meaning, if all you could
do is send back/forth SDP and Ice Candidates, there would be no way for
you to resolve this problem. You'd have to cheat by sticking the
out-of-bound information in the SDP or something.
Gili
Received on Monday, 24 June 2013 18:01:51 UTC