- 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