- From: Adam Roach <adam@nostrum.com>
- Date: Mon, 24 Jun 2013 12:53:19 -0500
- To: cowwoc <cowwoc@bbs.darktech.org>
- CC: public-webrtc@w3.org
- Message-ID: <51C8878F.2000700@nostrum.com>
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
Received on Monday, 24 June 2013 17:53:47 UTC