- From: Peter Thatcher <pthatcher@google.com>
- Date: Fri, 4 Sep 2015 21:57:30 -0700
- To: Martin Thomson <martin.thomson@gmail.com>
- Cc: "public-webrtc@w3.org" <public-webrtc@w3.org>
- Message-ID: <CAJrXDUEsVFs3waad5CGpJF-tZv2w=VwS9Y-hx3BJEuXPm=joGQ@mail.gmail.com>
OK, I have changed the PR from PeerConnection.dltsState to PeerConnection.connectionState, with the following logic: Where the state is aggregated as follows: 1. if any of the DtlsTransports or IceTransports are in the failed state => failed 2. else if any of the DtlsTransports or IceTransports are in the connecting state or checking state or disconnected state => connecting 3. else if all of the DtlsTransports and IceTransports are in the new state or closed state => disconnected 4. else if all of the DtlsTransports and IceTransports are in the connected state or or completed state or closed state => connected 5. else => connecting (mix of new and connected and checking and closed) I'm not sure if it's quite right, but it's a start. On Fri, Sep 4, 2015 at 7:37 PM, Martin Thomson <martin.thomson@gmail.com> wrote: > I think that I would agree with @juberti's comments on github for > this. We should look at changing to using a `connectionState` that > encompassed more state rather than providing more knobs that are both > not aggregated enough for the cases you describe and aggregated too > much to be useful for anything else. > > On 4 September 2015 at 18:06, Peter Thatcher <pthatcher@google.com> wrote: > > I've been thinking more about > https://github.com/w3c/webrtc-pc/issues/278 : > > How does the JS know that something is wrong with DTLS, but not ICE? And > > I've come to the conclusion that the problem isn't error reporting. The > > problem is that our PeerConnection "aggregate state" is lacking. > > Right now, PeerConnection has two aggregate state across all > IceTransports: > > PeerConnection.iceconnectonstate and PeerConnection.icegatheringstate. > But > > is has no aggregate state across all DtlsTransports. This means that > > applications that listen to PeerConnection.iceconnectionstate to know if > the > > peers are connected will > > > > 1. Think things are fully connected before they fully are (by at least 2 > > RTTs). No media can flow until DTLS is connected. > > 2. Thnk things are fully connected even when they are not, in the case > that > > DTLS fails to connect but ICE is connected. > > > > > > To fix this, I propose we add one more aggregate state: > > > > partial interface PeerConnection { > > readonly attribute DtlsTransportState dtlsState; > > attribute EventHandler ondtlsstatechange; > > } > > > > Where the state is aggregated as follows: > > 1. if any of the DtlsTransports are in the failed state => failed > > 2. else if any of the DtlsTransports are in the connecting state => > > connecting > > 3. else if all of the DtlsTransports are in the new state or closed > state > > => new > > 4. else if all of the DtlsTransports are in the connected state or > closed > > state => connected > > 5. else => connecting (mix of new and connected) > > > > > > Applications can use it like they are currently are use > iceConnectionState, > > except now they will have a more accurate idea of if things a "fully" > > connected: > > > > pc.ondtlsstatechange = function() { > > if (pc.dtlsstate == "failed") { > > // Uh-oh! > > } else if (pc.dtlsstate == "connected") { > > // Great! > > } else { > > // meh > > } > > } > > > > > > > > For more detail, I have created PR 291 > > (https://github.com/w3c/webrtc-pc/pull/291). >
Received on Saturday, 5 September 2015 04:58:38 UTC