- From: Randell Jesup <randell-ietf@jesup.org>
- Date: Fri, 29 Mar 2013 09:00:56 -0400
- To: "public-webrtc@w3.org" <public-webrtc@w3.org>
We're getting ready to do a major update to the Mozilla DataChannel implementation to reflect the results of the Interim and recent IETF meeting. I need a quick answer on the direction to take in the update, as we have some compatibility breaks we must do (wireline protocol changes) and want to minimize the pain for developers. In this change, per the presentation at the Interim that I hope you all paid attention to (but I think everyone was busy worrying about the wireline issues), createDataChannel() would change from: channel = peerconnection.createDataChannel(label, dictionary_object) to channel = peerconnection.createDataChannel(label, protocol, dictionary_object) Note that this breaks backwards compatibility. Now that there are existing (if experimental) applications using this API in both Chrome and Firefox, this will impact those developers (though it's an easy update - but knowing which one to use isn't, since we don't version the API, and I don't want people to have to sniff UAs). I propose instead moving the protocol field into the dictionary (and so people who don't care about it can easily ignore it). In related news, to support external negotiation I propose adding these fields to the dictionary (and I'll note that the dictionary is woefully out of date, supporting in the spec only "reliable") /* If either maxRetransmitTime or maxRetransmitNum are set, it's unreliable, else it's a reliable channel. If both are set it's an error. outOfOrderAllowed can be used with any type of channel. The equivalent of UDP is { outOfOrderAllowed: true, maxRetransmitNum: 0 }. The TCP equivalent is {}. preset is true if the channel is being externally negotiated, and no wireline OpenRequest message should be sent. If preset is true, stream can be optionally used to set a specific SCTP stream to use. If it's false but preset is true, then the application should read the 'stream' attribute from the returned DataChannel and convey it to the other end to pass in via the DataChannelInit dictionary. */ dictionary DataChannelInit { boolean outOfOrderAllowed; unsigned short maxRetransmitTime; unsigned short maxRetransmitNum; DOMString protocol; boolean preset; unsigned short stream; }; Should we include 'reliable' in the dictionary for back-compatibility? Firefox has not implemented 'reliable' up until now, we've had the above (minus protocol and the new negotiation support). If included, it would be shorthand for {} or { outOfOrderAllowed:true, maxRetransmitNum:0 } (depending on value). We'd need verbiage about mixing it with the detailed members however. And I added to the DataChannel webidl: readonly attribute DOMString protocol; readonly attribute unsigned short stream; and had previously added: readonly attribute boolean ordered; And the question of the existing 'reliable' attribute would come up here, though we can synthesize a value for it from the dictionary values easily per above. We could expose the -- Randell Jesup randell-ietf@jesup.org
Received on Friday, 29 March 2013 13:02:57 UTC