DataConnection objects

Building on the discussions today in the WebRTC W3 WG meeting:

In PeerConnection, replace

DataChannel createDataChannel (
      [TreatNullAs=EmptyString] DOMString? label,
      optional DataChannelInit? dataChannelDict);

With

DataConnection createDataConnection(short initialStreams);

Add:

interface DataConnection {
     DataChannel createDataChannel (
              [TreatNullAs=EmptyString] DOMString? label,
              optional DataChannelInit? dataChannelDict);
     attribute short maxStreams;
     const unsigned short CONNECTING = 0;
     const unsigned short OPEN = 1;
     const unsigned short CLOSING = 2;
     const unsigned short CLOSED = 3;
     readonly attribute unsigned short readyState;
     [TreatNonCallableAsNull]
              attribute Function?      onopen;
     [TreatNonCallableAsNull]
              attribute Function?      onerror;
     [TreatNonCallableAsNull]
              attribute Function?      onclose;
     void close ();
};

readyState may need to be changed to strings

Calling createDataConnection() before CreateOffer will cause the offer 
to include a DataConnection.  Calling it after the PeerConnection is 
connected will cause a renegotiation.

There can only be one DataConnection per PeerConnection at any time; 
attempting to create a second one will fail.

maxStreams lets you renegotiate the maximum number of simultaneous open 
streams.

Plus appropriate language about what happens if you close/destroy the 
DataConnection (close/disconnect all DataChannels, etc)

Open question: How does this interact with CreateAnswer?  They can call 
createDataConnection and then CreateAnswer, but they need to know that 
the offer asked for a DataConnection.  (Justin, Cullen)?

Open question: createDataChannel before onopen: does it queue?  Given 
we've exposed this object, I'd guess no, and trying to create one when 
not in the open readyState will fail.

Open question: Do we need a global DataConnection priority, or just 
priorities on the individual DataChannels?

-- 
Randell Jesup
randell-ietf@jesup.org

Received on Tuesday, 12 June 2012 08:28:09 UTC