- From: Stefan Håkansson LK <stefan.lk.hakansson@ericsson.com>
- Date: Fri, 24 Jan 2014 10:11:38 +0000
- To: Peter Thatcher <pthatcher@google.com>, "public-orca@w3.org" <public-orca@w3.org>
That picture looks fine.
Two questions:
1. What about sharing: can several SCTPTransports and several
RtpTransports share DTLSTransport? Can several DTLSTransports share
ICETransport?
2. Where would the IdentityProvider attach?
Stefan
On 23/01/14 18:55, "Peter Thatcher" <pthatcher@google.com> wrote:
>A missing piece of the current ORTC API is SCTP data channels. I
>think this part of WebRTC 1.0 is pretty good, we this exception of its
>dependence on SDP and PeerConnection. I propose we add a
>createDataChannel method and a ondatachannel event similar to the one
>on WebRTC 1.0's PeerConnection. But instead of adding it to directly
>to DtlsTransport, we create an SctpTransport which wraps a
>DtlsTransport, like so:
>
>
>[Constructor(RTCDtlsTransport)]
>interface RTCSctpTransport {
> attribute RTCDtlsTransport transport;
>
> static RTCSctpCapabilities getCapabilities();
>
> void start(RTCSctpCapabilities remoteCaps);
> void stop();
>
> DataChannel createDataChannel(RTCDataChannelParameters);
> EventHandler<DataChannel> ondatachannel;
>}
>
>dictionary RTCSctpCapabilities {
> int maxMessageSize;
>}
>
>// Same as WebRTC 1.0 DataChannelInit
>dictionary RTCDataChannelParameters {
> boolean outOfOrderAllowed;
> unsigned short maxRetransmitTime;
> unsigned short maxRetransmitNum;
> DOMString protocol;
> boolean preset;
> unsigned short stream;
>}
>
>This is similar to the good parts of WebRTC 1.0, but also signals
>every thing without SDP, hooks up to DtlsTransport nicely, and gives
>the programmer easy control of which transport to use (shared with
>media or not). Furthermore, it allows future expansion into other
>types of data channels, or data channels built on other types of
>transports.
>
>Here is an example of how it would be used:
>
>function initiate(signaller) {
> var dtls = ...; // See ICE/DTLS example.
> var sctp = new RTCSctpTransport(dtls);
>
> signaller.sendInitiate({
> // ... include ICE/DTLS info from other example.
> sctpCapabilities: RTCSctpTransport.getCapabilities()
> }, function(remote) {
> sctp.start(remote.sctpCapabilities);
> });
>
> var channel = sctp.createDataChannel({...});
> channel.send("foo");
>}
>
>function accept(signaller, remote) {
> var dtls = ...; // See ICE/DTLS example.
> signaller.sendAccept({
> // ... include ICE/DTLS info from other example.
> "sctpCapabilities": RTCSctpTransport.getCapabilities()
> });
>
> var sctp = new RTCSctpTransport(dtls);
> sctp.start(remote.sctpCapabilties);
>
> // Assume in-band signalling. We could also easily add
> // RTCDataChannelParameters into the out-of-band signalling
> // And call .createDataChannel here with negotiated: true.
>
> sctp.ondatachannel = function(channel) {
> channel.onmessage = function(message) {
> if (message == "foo") {
> channel.send("bar");
> }
> }
>}
>
>Altogether, if our proposals for RtpSender, RtpReceiver, IceTransport,
>DtlsTransport, and SctpTransport are accepted, the overall picture
>would look like the one attached.
Received on Friday, 24 January 2014 10:12:08 UTC