draft-ietf-mmusic-data-channel-sdpneg-02.txt | draft-ietf-mmusic-data-channel-sdpneg-03.txt | |||
---|---|---|---|---|
MMUSIC K. Drage, Ed. | MMUSIC K. Drage, Ed. | |||
Internet-Draft M. Makaraju | Internet-Draft M. Makaraju | |||
Intended status: Standards Track J. Stoetzer-Bradler | Intended status: Standards Track J. Stoetzer-Bradler | |||
Expires: October 12, 2015 Alcatel-Lucent | Expires: January 22, 2016 Alcatel-Lucent | |||
R. Ejzak | R. Ejzak | |||
J. Marcon | J. Marcon | |||
Unaffiliated | Unaffiliated | |||
April 10, 2015 | July 21, 2015 | |||
SDP-based Data Channel Negotiation | SDP-based Data Channel Negotiation | |||
draft-ietf-mmusic-data-channel-sdpneg-02 | draft-ietf-mmusic-data-channel-sdpneg-03 | |||
Abstract | Abstract | |||
The Real-Time Communication in WEB-browsers (RTCWeb) working group is | The Real-Time Communication in WEB-browsers (RTCWeb) working group is | |||
charged to provide protocols to support direct interactive rich | charged to provide protocols to support direct interactive rich | |||
communications using audio, video, and data between two peers' web- | communications using audio, video, and data between two peers' web- | |||
browsers. For the support of data communication, the RTCWeb working | browsers. For the support of data communication, the RTCWeb working | |||
group has in particular defined the concept of bi-directional data | group has in particular defined the concept of bi-directional data | |||
channels over SCTP, where each data channel might be used to | channels over SCTP, where each data channel might be used to | |||
transport other protocols, called sub-protocols. Data channel setup | transport other protocols, called sub-protocols. Data channel setup | |||
can be done using either the internal in-band band (also referred to | can be done using either the in-band Data Channel Establishment | |||
as 'internal' for the rest of the document) Data Channel | Protocol (DCEP) or using some out-of-band non-DCEP protocol. This | |||
Establishment Protocol or some external out-of-band simply referred | ||||
to as 'external negotiation' in the rest of the document . This | ||||
document specifies how the SDP offer/answer exchange can be used to | document specifies how the SDP offer/answer exchange can be used to | |||
achieve such an external negotiation. Even though data channels are | achieve such an out-of-band non-DCEP negotiation. Even though data | |||
designed for RTCWeb use initially they may be used by other protocols | channels are designed for RTCWeb use initially they may be used by | |||
like, but not limited to, the CLUE protocol. This document is | other protocols like, but not limited to, the CLUE protocol. This | |||
intended to be used wherever data channels are used. | document is intended to be used wherever data channels are used. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on October 12, 2015. | This Internet-Draft will expire on January 22, 2016. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
4. Applicability Statement . . . . . . . . . . . . . . . . . . . 4 | 4. Applicability Statement . . . . . . . . . . . . . . . . . . . 4 | |||
5. Data Channels . . . . . . . . . . . . . . . . . . . . . . . . 5 | 5. Data Channels . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
5.1. Stream Identifier Numbering . . . . . . . . . . . . . . . 5 | 5.1. Stream Identifier Numbering . . . . . . . . . . . . . . . 5 | |||
5.2. Generic External Negotiation . . . . . . . . . . . . . . 6 | 5.2. Generic Non-DCEP Negotiation . . . . . . . . . . . . . . 6 | |||
5.2.1. Overview . . . . . . . . . . . . . . . . . . . . . . 6 | 5.2.1. Overview . . . . . . . . . . . . . . . . . . . . . . 6 | |||
5.2.2. Opening a Data Channel . . . . . . . . . . . . . . . 6 | 5.2.2. Opening a Data Channel . . . . . . . . . . . . . . . 6 | |||
5.2.3. Closing a Data Channel . . . . . . . . . . . . . . . 7 | 5.2.3. Closing a Data Channel . . . . . . . . . . . . . . . 8 | |||
6. SDP-based External Negotiation . . . . . . . . . . . . . . . 8 | 6. SDP Offer/Answer Negotiation . . . . . . . . . . . . . . . . 8 | |||
6.1. SDP Syntax . . . . . . . . . . . . . . . . . . . . . . . 8 | 6.1. SDP Syntax . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
6.1.1. SDP Attribute for Data Channel Parameter Negotiation 8 | 6.1.1. SDP Attribute for Data Channel Parameter Negotiation 9 | |||
6.1.1.1. dcmap Attribute . . . . . . . . . . . . . . . . . 8 | 6.1.1.1. dcmap Attribute . . . . . . . . . . . . . . . . . 9 | |||
6.1.1.2. dcmap-stream-id Parameter . . . . . . . . . . . . 10 | 6.1.1.2. dcmap-stream-id Parameter . . . . . . . . . . . . 11 | |||
6.1.1.3. label Parameter . . . . . . . . . . . . . . . . . 10 | 6.1.1.3. label Parameter . . . . . . . . . . . . . . . . . 11 | |||
6.1.1.4. subprotocol Parameter . . . . . . . . . . . . . . 10 | 6.1.1.4. subprotocol Parameter . . . . . . . . . . . . . . 11 | |||
6.1.1.5. max-retr Parameter . . . . . . . . . . . . . . . 10 | 6.1.1.5. max-retr Parameter . . . . . . . . . . . . . . . 11 | |||
6.1.1.6. max-time Parameter . . . . . . . . . . . . . . . 11 | 6.1.1.6. max-time Parameter . . . . . . . . . . . . . . . 12 | |||
6.1.1.7. ordered Parameter . . . . . . . . . . . . . . . . 11 | 6.1.1.7. ordered Parameter . . . . . . . . . . . . . . . . 12 | |||
6.1.2. Sub-Protocol Specific Attributes . . . . . . . . . . 11 | 6.1.2. Sub-Protocol Specific Attributes . . . . . . . . . . 12 | |||
6.2. Procedures . . . . . . . . . . . . . . . . . . . . . . . 12 | 6.2. Procedures . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
6.2.1. Managing Stream Identifiers . . . . . . . . . . . . . 13 | 6.2.1. Managing Stream Identifiers . . . . . . . . . . . . . 14 | |||
6.2.2. Negotiating Data Channel Parameters . . . . . . . . . 13 | 6.2.2. Negotiating Data Channel Parameters . . . . . . . . . 14 | |||
6.2.3. Opening a Data Channel . . . . . . . . . . . . . . . 14 | 6.2.3. Opening a Data Channel . . . . . . . . . . . . . . . 15 | |||
6.2.4. Closing a Data Channel . . . . . . . . . . . . . . . 16 | 6.2.4. Closing a Data Channel . . . . . . . . . . . . . . . 17 | |||
6.2.5. Various SDP Offer/Answer Scenarios and Considerations 17 | 6.2.5. Various SDP Offer/Answer Scenarios and Considerations 18 | |||
7. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 7. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 20 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | |||
9.1. Subprotocol identifiers . . . . . . . . . . . . . . . . . 20 | 9.1. Subprotocol Identifiers . . . . . . . . . . . . . . . . . 21 | |||
9.2. New SDP Attributes . . . . . . . . . . . . . . . . . . . 22 | ||||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 21 | 9.2.1. dcmap . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
11. CHANGE LOG . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 9.2.2. dcsa . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
11. CHANGE LOG . . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
11.1. Changes against 'draft-ietf-mmusic-data-channel- | 11.1. Changes against 'draft-ietf-mmusic-data-channel- | |||
sdpneg-01' . . . . . . . . . . . . . . . . . . . . . . . 21 | sdpneg-02' . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
11.2. Changes against 'draft-ietf-mmusic-data-channel- | 11.2. Changes against 'draft-ietf-mmusic-data-channel- | |||
sdpneg-00' . . . . . . . . . . . . . . . . . . . . . . . 23 | sdpneg-01' . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
11.3. Changes against 'draft-ejzak-mmusic-data-channel- | 11.3. Changes against 'draft-ietf-mmusic-data-channel- | |||
sdpneg-02' . . . . . . . . . . . . . . . . . . . . . . . 26 | sdpneg-00' . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
11.4. Changes against '-01' . . . . . . . . . . . . . . . . . 27 | 11.4. Changes against 'draft-ejzak-mmusic-data-channel- | |||
11.5. Changes against '-00' . . . . . . . . . . . . . . . . . 27 | sdpneg-02' . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 | 11.5. Changes against '-01' . . . . . . . . . . . . . . . . . 29 | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . 28 | 11.6. Changes against '-00' . . . . . . . . . . . . . . . . . 29 | |||
12.2. Informative References . . . . . . . . . . . . . . . . . 28 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 30 | |||
12.2. Informative References . . . . . . . . . . . . . . . . . 31 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 32 | ||||
1. Introduction | 1. Introduction | |||
The RTCWeb working group has defined the concept of bi-directional | The RTCWeb working group has defined the concept of bi-directional | |||
data channels running on top of SCTP/DTLS. RTCWeb leaves it open for | data channels running on top of SCTP/DTLS. RTCWeb leaves it open for | |||
other applications to use data channels and its in-band or out-of- | other applications to use data channels and its in-band DCEP or out- | |||
band protocol for creating them. Each data channel consists of | of-band non-DCEP protocols for creating them. Each data channel | |||
paired SCTP streams sharing the same SCTP Stream Identifier. Data | consists of paired SCTP streams sharing the same SCTP Stream | |||
channels are created by endpoint applications through the WebRTC API, | Identifier. Data channels are created by endpoint applications | |||
or other users of data channel like CLUE, and can be used to | through the WebRTC API, or other users of data channel like CLUE, and | |||
transport proprietary or well-defined protocols, which in the latter | can be used to transport proprietary or well-defined protocols, which | |||
case can be signaled by the data channel "sub-protocol" parameter, | in the latter case can be signaled by the data channel "sub-protocol" | |||
conceptually similar to the WebSocket "sub-protocol". However, apart | parameter, conceptually similar to the WebSocket "sub-protocol". | |||
from the "sub-protocol" value transmitted to the peer, RTCWeb leaves | However, apart from the "sub-protocol" value transmitted to the peer, | |||
it open how endpoint applications can agree on how to instantiate a | RTCWeb leaves it open how endpoint applications can agree on how to | |||
given sub-protocol on a data channel, and whether it is signaled in- | instantiate a given sub-protocol on a data channel, and whether it is | |||
band or out-of-band (or both). In particular, the SDP offer | signaled in-band using DCEP or out-of-band using a non-DCEP protocol | |||
generated by the application includes no channel-specific | (or both). In particular, the SDP offer generated by the application | |||
information. | includes no channel-specific information. | |||
This document defines SDP-based out-of-band negotiation procedures to | This document defines SDP offer/answer negotiation procedures to | |||
establish data channels for transport of well-defined sub-protocols. | establish data channels for transport of well-defined sub-protocols, | |||
to enable out-of-band negotiation. | ||||
2. Conventions | 2. Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
3. Terminology | 3. Terminology | |||
This document uses the following terms: | This document uses the following terms: | |||
Data channel: A WebRTC data channel as specified in | Data channel: A WebRTC data channel as specified in | |||
[I-D.ietf-rtcweb-data-channel]. | [I-D.ietf-rtcweb-data-channel]. | |||
Data channel stack: An entity which, upon application request, | Data channel stack: An entity which, upon application request, | |||
runs data channel protocol to keep track of states, sending and | runs the data channel protocol to keep track of states, sending | |||
receive data. If the application is browser based JavaScript | and receive data. If the application is a browser based | |||
application then this stack resides in the browser. If the | JavaScript application then this stack resides in the browser. If | |||
application is a native application then this stack resides in | the application is a native application then this stack resides in | |||
application and accessible to it via some sort of APIs. | the application and is accessible via some sort of APIs. | |||
Data channel properties: fixed properties assigned to a data | Data channel properties: Fixed properties assigned to a data | |||
channel at the time of its creation. Some of these properties | channel at the time of its creation. Some of these properties | |||
determine the way the data channel stack transmits data on this | determine the way the data channel stack transmits data on this | |||
channel (e.g., stream identifier, reliability, order of | channel (e.g., stream identifier, reliability, order of | |||
delivery...). | delivery...). | |||
DCEP - Data Channel Establishment Protocol defined in | DCEP: Data Channel Establishment Protocol defined in | |||
[I-D.ietf-rtcweb-data-protocol]. | ||||
External negotiation: Data channel negotiation based on SDP offer/ | ||||
answer outlined in this specification. | ||||
Internal negotiation: Data channel negotiation based on the Data | ||||
Channel Establishment Protocol defined in | ||||
[I-D.ietf-rtcweb-data-protocol]. | [I-D.ietf-rtcweb-data-protocol]. | |||
In-band: transmission through the peer-to-peer SCTP association. | In-band: Transmission through the peer-to-peer SCTP association. | |||
In-band negotiation: data channel negotiation based on the Data | ||||
Channel Establishment Protocol defined in | ||||
[I-D.ietf-rtcweb-data-protocol]. | ||||
Out-of-band: transmission through the application signaling path. | Out-of-band: Transmission through the application signaling path. | |||
Peer: From the perspective of one of the agents in a session, its | Peer: From the perspective of one of the agents in a session, its | |||
peer is the other agent. Specifically, from the perspective of | peer is the other agent. Specifically, from the perspective of | |||
the SDP offerer, the peer is the SDP answerer. From the | the SDP offerer, the peer is the SDP answerer. From the | |||
perspective of the SDP answerer, the peer is the SDP offerer. | perspective of the SDP answerer, the peer is the SDP offerer. | |||
Stream identifier: the identifier of the outbound and inbound SCTP | SCTP Stream Sequence Number (SSN): the SCTP stream sequence number | |||
as specified in [RFC4960]. | ||||
Stream identifier: The identifier of the outbound and inbound SCTP | ||||
streams composing a data channel. | streams composing a data channel. | |||
4. Applicability Statement | 4. Applicability Statement | |||
The mechanism in this specification only applies to the Session | The mechanism in this specification only applies to the Session | |||
Description Protocol (SDP) [RFC4566], when used together with the SDP | Description Protocol (SDP) [RFC4566], when used together with the SDP | |||
offer/answer mechanism [RFC3264]. Declarative usage of SDP is out of | offer/answer mechanism [RFC3264]. Declarative usage of SDP is out of | |||
scope of this document, and is thus undefined. | scope of this document, and is thus undefined. | |||
5. Data Channels | 5. Data Channels | |||
This section summarizes how data channels work in general. Note that | This section summarizes how data channels work in general. | |||
the references to 'browser' here is intentional as in this specific | ||||
example the data channel user is a Webrtc enabled browser. | ||||
A WebRTC application creates a data channel via the data channel API, | A WebRTC application creates a data channel by providing a number of | |||
by providing a number of setup parameters (sub-protocol, label, | setup parameters (sub-protocol, label, reliability, order of | |||
reliability, order of delivery, priority). The application also | delivery, priority). The application also specifies if it wants to | |||
specifies if it wants to make use of the in-band negotiation using | make use of the negotiation using the DCEP | |||
the DCEP [I-D.ietf-rtcweb-data-protocol], or if the application | [I-D.ietf-rtcweb-data-protocol], or if the application intends to | |||
intends to perform an "external negotiation" using some other in-band | negotiate data channels using the SDP offer/answer protocol. | |||
or out-of-band mechanism. | ||||
In any case, the SDP offer generated by the browser is per | In any case, the SDP offer generated by the browser is per | |||
[I-D.ietf-mmusic-sctp-sdp]. In brief, it contains one "m" line for | [I-D.ietf-mmusic-sctp-sdp]. In brief, it contains one "m" line for | |||
the SCTP association on top of which data channels will run, and one | the SCTP association on top of which data channels will run: | |||
attribute per protocol assigned to the SCTP ports: | ||||
m=application 54111 UDP/DTLS/SCTP webrtc-datachannel | m=application 54111 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 79.97.215.79 | c=IN IP4 79.97.215.79 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port 5000 | a=sctp-port 5000 | |||
a=setup:actpass | a=setup:actpass | |||
a=connection:new | a=connection:new | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | 4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | |||
Note: A WebRTC browser will only use "m" line format "webrtc- | Note: A WebRTC browser will only use "m" line format "webrtc- | |||
datachannel", and will not use other formats in the "m" line for | datachannel", and will not use other formats in the "m" line for | |||
other protocols such as t38. [I-D.ietf-mmusic-sctp-sdp] supports | other protocols such as t38. [I-D.ietf-mmusic-sctp-sdp] supports | |||
only one SCTP association to be established on top of a DTLS session. | only one SCTP association to be established on top of a DTLS session. | |||
Note: This SDP syntax does not contain any channel-specific | Note: This SDP syntax does not contain any channel-specific | |||
information. | information. | |||
5.1. Stream Identifier Numbering | 5.1. Stream Identifier Numbering | |||
[Editor's note: This entire Section 5.1 could possibly be removed as | ||||
there is another section (Section 6.2.1) which is dedicated to SCTP | ||||
stream id usage.] | ||||
Independently from the requested type of negotiation, the application | Independently from the requested type of negotiation, the application | |||
creating a data channel can either pass to the browser the stream | creating a data channel can either pass to the browser the stream | |||
identifier to assign to the data channel or else let the browser pick | identifier to assign to the data channel or else let the browser pick | |||
one identifier from the ones unused. | one identifier from the ones unused. | |||
To avoid glare situations, each endpoint can moreover own an | To avoid glare situations, each endpoint can moreover own an | |||
exclusive set of stream identifiers, in which case an endpoint can | exclusive set of stream identifiers, in which case an endpoint can | |||
only create a data channel with a stream identifier it owns. | only create a data channel with a stream identifier it owns. | |||
Which set of stream identifiers is owned by which endpoint is | Which set of stream identifiers is owned by which endpoint is | |||
determined by convention or other means. | determined by convention or other means. | |||
For data channels negotiated in-band, one endpoint owns by | For data channels negotiated with the DCEP, one endpoint owns by | |||
convention the even stream identifiers, whereas the other owns the | convention the even stream identifiers, whereas the other owns the | |||
odd stream identifiers, as defined in | odd stream identifiers, as defined in | |||
[I-D.ietf-rtcweb-data-protocol]. | [I-D.ietf-rtcweb-data-protocol]. | |||
For data channels externally negotiated, no convention is defined | For data channels negotiated via some non-DCEP protocol, no | |||
by default. | convention is defined by default. | |||
5.2. Generic External Negotiation | 5.2. Generic Non-DCEP Negotiation | |||
[Editor's note: As this document now focuses on SDP offer/answer | ||||
negotiation only, should this entire Section 5.2 (and all its sub- | ||||
sections) be removed? Parts of the information provided in these | ||||
sub-sections might be moved to Section 6, Section 6.2.1 and | ||||
Section 6.2.3 as indicated below in further editor notes. Another | ||||
option might be to move this section and its sub-section to an | ||||
informative appendix.] | ||||
5.2.1. Overview | 5.2.1. Overview | |||
In-band negotiation only provides for negotiation of data channel | DCEP negotiation only provides for negotiation of data channel | |||
transport parameters and does not provide for negotiation of sub- | transport parameters and does not provide for negotiation of sub- | |||
protocol specific parameters. External negotiation can be defined to | protocol specific parameters. Non-DCEP negotiation can be defined to | |||
allow negotiation of parameters beyond those handled by in-band | allow negotiation of parameters beyond those handled by DCEP | |||
negotiation, e.g., parameters specific to the sub-protocol | negotiation, e.g., parameters specific to the sub-protocol | |||
instantiated on a particular data channel. See Section 6.1.2 for an | instantiated on a particular data channel. See Section 6.1.2 for an | |||
example of such a parameter. | example of such a parameter. | |||
The following procedures are common to all methods of external | [Editor's note: The information in the preceding paragraph might be | |||
moved to Section 6.] | ||||
The following procedures are common to all methods of non-DCEP | ||||
negotiation, whether in-band (communicated using proprietary means on | negotiation, whether in-band (communicated using proprietary means on | |||
an already established data channel) or out-of-band (using SDP or | an already established data channel) or out-of-band (using SDP offer/ | |||
some other protocol associated with the signaling channel). | answer or some other protocol associated with the signaling channel). | |||
[Editor's note: The preceding paragraph could be deleted.] | ||||
5.2.2. Opening a Data Channel | 5.2.2. Opening a Data Channel | |||
In the case of external negotiation, the endpoint application has the | In the case of non-DCEP negotiation, the endpoint application has the | |||
option to fully control the stream identifier assignments. However | option to fully control the stream identifier assignments. However | |||
these assignments have to coexist with the assignments controlled by | these assignments have to coexist with the assignments controlled by | |||
the data channel stack for the in-band negotiated data channels (if | the data channel stack for the DCEP negotiated data channels (if | |||
any). It is the responsibility of the application to ensure | any). It is the responsibility of the application to ensure | |||
consistent assignment of stream identifiers. | consistent assignment of stream identifiers. | |||
[Editor's note: The information in the preceding paragraph could be | ||||
moved to Section 6.2.1.] | ||||
When the application requests the creation of a new data channel to | When the application requests the creation of a new data channel to | |||
be set up via external negotiation, the data channel stack creates | be set up via non-DCEP negotiation, the data channel stack creates | |||
the data channel locally without sending any DATA_CHANNEL_OPEN | the data channel locally without sending any DATA_CHANNEL_OPEN | |||
message in-band, and sets the data channel state to Connecting if the | message in-band [Editor's note: The information in this first part of | |||
SCTP association is not yet established, or sets the data channel | the sentence could be moved to section 6.2.3], and sets the data | |||
state to Open if the SCTP association is already established. The | channel state to Connecting if the SCTP association is not yet | |||
side which starts external negotiation creates data channel using | established, or sets the data channel state to Open if the SCTP | |||
underlying data channel stack API and the data channel is put into | association is already established. The side which starts non-DCEP | |||
open state immediately (assuming ICE, SCTP procedures were already | negotiation creates a data channel using underlying data channel | |||
done). However, the application can't send data on this data channel | stack API and the data channel is put into open state immediately | |||
until external negotiation is complete with the peer. This is | (assuming ICE, SCTP procedures were already done). [Editor's note: | |||
because peer needs to be aware and accept the data channel via | The API related information could be deleted.] However, the | |||
external negotiation. The peer after accepting the data channel | application can't send data on this data channel until non-DCEP | |||
offer can start sending data immediately. This implies that the | negotiation is complete with the peer. This is because the peer | |||
offerer may get data channel message before external negotiation is | needs to be aware and accept the data channel via non-DCEP | |||
complete and the application should be ready to handle it. | negotiation. The peer after accepting the data channel offer can | |||
start sending data immediately. This implies that the offerer may | ||||
get data channel sub-protocol messages before non-DCEP negotiation is | ||||
complete and the application should be ready to handle it. [Editor's | ||||
note: The information in these last four sentences could be moved to | ||||
Section 6.2.3.] | ||||
If the peer rejects the data channel part of the offer then it | If the peer rejects the data channel part of the offer then it | |||
doesn't have to do anything as the data channel was not created using | doesn't have to do anything as the data channel was not created using | |||
the stack. The offerer on the other hand needs to close the data | the stack. The offerer on the other hand needs to close the data | |||
channel that was opened by invoking relevant data channel stack API | channel that was opened by invoking relevant data channel stack API | |||
procedures. | procedures. | |||
[Editor's note: The information in the preceding paragraph could be | ||||
moved to Section 6.2.3 (to a new bullet point there).] | ||||
It is also worth noting that a data channel stack implementation may | It is also worth noting that a data channel stack implementation may | |||
not provide any API to create and close data channels; instead the | not provide any API to create and close data channels; instead the | |||
data channels are used on the fly as needed just by communicating via | data channels are used on the fly as needed just by communicating via | |||
external means or by even having some local configuration/assumptions | non-DCEP means or by even having some local configuration/assumptions | |||
on both the peers. | on both the peers. | |||
The application then externally negotiates the data channel | [Editor's note: The preceding paragraph could be deleted.] | |||
properties and sub-protocol properties with the peer's application. | ||||
The application then negotiates the data channel properties and sub- | ||||
protocol properties with the peer's application using a mechanism | ||||
different from DCEP. | ||||
[Editor's note: The preceding paragraph could be deleted.] | ||||
[ASSUMPTION] The peer MUST then symmetrically create a data channel | [ASSUMPTION] The peer MUST then symmetrically create a data channel | |||
with these negotiated data channel properties. This is the only way | with these negotiated data channel properties. This is the only way | |||
for the peer's data channel stack to know which properties to apply | for the peer's data channel stack to know which properties to apply | |||
when transmitting data on this channel. The data channel stack MUST | when transmitting data on this channel. [Editor's note: The previous | |||
allow data channel creation with any non-conflicting stream | sentence could be deleted.] The data channel stack MUST allow data | |||
identifier so that both peers can create the data channel with the | channel creation with any non-conflicting stream identifier so that | |||
same stream identifier. | both peers can create the data channel with the same stream | |||
identifier. [Editor's note: The information in this sentence could | ||||
be moved to Section 6.2.3.] | ||||
In case the external negotiation is correlated with an SDP offer/ | In case the non-DCEP negotiation is correlated with an SDP offer/ | |||
answer exchange that establishes the SCTP association, the SCTP | answer exchange that establishes the SCTP association, the SCTP | |||
initialization completion triggers a callback from the data channel | initialization completion triggers a callback from the data channel | |||
stack to an application on both the ends to change the data channel | stack to an application on both the ends to change the data channel | |||
state from Connecting to Open. The details of this interface is | state from Connecting to Open. The details of this interface is | |||
specific to the data channel user application. Browser based | specific to the data channel user application. Browser based | |||
applications (could include hybrid apps) will use [WebRtcAPI], while | applications (could include hybrid apps) will use [WebRtcAPI], while | |||
native applications use a compatible API, which is yet to be | native applications use a compatible API, which is yet to be | |||
specified. See Section 6.2.3 for details on when the data channel | specified. See Section 6.2.3 for details on when the data channel | |||
stack can assume the data channel is open, and on when the | stack can assume the data channel is open, and on when the | |||
application can assume the data channel is open. | application can assume the data channel is open. | |||
[Editor's note: The preceding paragraph could be deleted.] | ||||
5.2.3. Closing a Data Channel | 5.2.3. Closing a Data Channel | |||
When the application requests the closing of an externally negotiated | When the application requests the closing of a non-DCEP negotiated | |||
data channel, the data channel stack always performs an in-band SSN | data channel, the data channel stack always performs an SCTP SSN | |||
reset for this channel. | reset for this channel. | |||
Depending upon the method used for external negotiation and the sub- | [Editor's note: The preceding paragraph could be deleted.] | |||
Depending upon the method used for non-DCEP negotiation and the sub- | ||||
protocol associated with the data channel, the closing might in | protocol associated with the data channel, the closing might in | |||
addition be signaled to the peer via external negotiation. | addition be signaled to the peer via non-DCEP negotiation. | |||
6. SDP-based External Negotiation | [Editor's note: The preceding paragraph could be deleted.] | |||
This section defines a method of external negotiation by which two | 6. SDP Offer/Answer Negotiation | |||
This section defines a method of non-DCEP negotiation by which two | ||||
clients can negotiate data channel-specific and sub-protocol-specific | clients can negotiate data channel-specific and sub-protocol-specific | |||
parameters, using the out-of-band SDP offer/answer exchange. This | parameters, using the out-of-band SDP offer/answer exchange. This | |||
SDP extension can only be used with SDP offer/answer model. | SDP extension can only be used with the SDP offer/answer model. | |||
6.1. SDP Syntax | 6.1. SDP Syntax | |||
Two new SDP attributes are defined to support external negotiation of | Two new SDP attributes are defined to support SDP offer/answer | |||
data channels. The first attribute provides for negotiation of | negotiation of data channels. The first attribute provides for | |||
channel-specific parameters. The second attribute provides for | negotiation of channel-specific parameters. The second attribute | |||
negotiation of sub-protocol-specific parameters. | provides for negotiation of sub-protocol-specific parameters. | |||
6.1.1. SDP Attribute for Data Channel Parameter Negotiation | 6.1.1. SDP Attribute for Data Channel Parameter Negotiation | |||
Associated with the SDP "m" line that defines the SCTP association | Associated with the SDP "m" line that defines the SCTP association | |||
for data channels (defined in Section 4), each SDP offer and answer | for data channels (defined in Section 4), each SDP offer and answer | |||
includes one "a=dcmap:" attribute that defines the data channel | includes one "a=dcmap:" attribute that defines the data channel | |||
parameters for each data channel to be negotiated. Each such | parameters for each data channel to be negotiated. Each such | |||
attribute line specifies the following parameters for a data channel: | attribute line specifies the following parameters for a data channel: | |||
SCTP stream identifier, sub-protocol, label, reliability, order of | SCTP stream identifier, sub-protocol, label, reliability, order of | |||
delivery, and priority. | delivery, and priority. | |||
The intention of exchanging these attributes is to create data | The intention of exchanging these attributes is to create data | |||
channels on both the peers with the same set of attributes without | channels on both the peers with the same set of attributes without | |||
actually using [I-D.ietf-rtcweb-data-protocol]. It is assumed that | actually using the DCEP [I-D.ietf-rtcweb-data-protocol]. It is | |||
the data channel properties (reliable/partially reliable, ordered/ | assumed that the data channel properties (reliable/partially | |||
unordered) are suitable per the sub-protocol transport requirements. | reliable, ordered/unordered) are suitable per the sub-protocol | |||
transport requirements. | ||||
6.1.1.1. dcmap Attribute | 6.1.1.1. dcmap Attribute | |||
"a=dcmap:" is a media level attribute having following ABNF syntax. | "a=dcmap:" is a media level attribute having following ABNF syntax. | |||
Formal Syntax: | Formal Syntax: | |||
Name: dcmap | Name: dcmap | |||
Value: dcmap-value | Value: dcmap-value | |||
skipping to change at page 10, line 9 | skipping to change at page 11, line 9 | |||
a=dcmap:0 | a=dcmap:0 | |||
a=dcmap:1 subprotocol="BFCP";max-time=60000 | a=dcmap:1 subprotocol="BFCP";max-time=60000 | |||
a=dcmap:2 subprotocol="MSRP";ordered=true;label="MSRP" | a=dcmap:2 subprotocol="MSRP";ordered=true;label="MSRP" | |||
a=dcmap:3 label="Label 1";ordered=false;max-retr=5 | a=dcmap:3 label="Label 1";ordered=false;max-retr=5 | |||
a=dcmap:4 label="foo%09bar";ordered=true;max-time=15000;max-retr=3 | a=dcmap:4 label="foo%09bar";ordered=true;max-time=15000;max-retr=3 | |||
Note: The last example (a=dcmap:4) shows a 'label' parameter value | Note: The last example (a=dcmap:4) shows a 'label' parameter value | |||
which contains one non-printable 'escaped-char' character (the | which contains one non-printable 'escaped-char' character (the | |||
tabulator character). | tabulator character). | |||
Within an 'a=dcmap' attribute line's 'dcmap-opt' value either only | Within an 'a=dcmap' attribute line's 'dcmap-opt' value either only | |||
one 'maxretr-opt' parameter or one 'maxtime-opt' parameter is | one 'maxretr-opt' parameter or one 'maxtime-opt' parameter MAY be | |||
present. Both MUST NOT be present. | present. Both MUST NOT be present. | |||
6.1.1.2. dcmap-stream-id Parameter | 6.1.1.2. dcmap-stream-id Parameter | |||
The 'dcmap-stream-id' parameter indicates the SCTP stream identifier | The 'dcmap-stream-id' parameter indicates the SCTP stream identifier | |||
within the SCTP association used to form the data channel. | within the SCTP association used to form the data channel. | |||
6.1.1.3. label Parameter | 6.1.1.3. label Parameter | |||
The 'label' parameter indicates the name of the channel. It | The 'label' parameter indicates the name of the channel. It | |||
represents a label that can be used to distinguish, in the context of | represents a label that can be used to distinguish, in the context of | |||
the WebRTC API, an RTCDataChannel object from other RTCDataChannel | the WebRTC API [WebRtcAPI], an RTCDataChannel object from other | |||
objects. This parameter maps to the 'Label' parameter defined in | RTCDataChannel objects. This parameter maps to the 'Label' parameter | |||
[I-D.ietf-rtcweb-data-protocol]. The 'label' parameter is optional. | defined in [I-D.ietf-rtcweb-data-protocol]. The 'label' parameter is | |||
If it is not present, then its value defaults to the empty string. | optional. If it is not present, then its value defaults to the empty | |||
string. | ||||
Note: The empty string may also be explicitly used as 'label' value, | Note: The empty string MAY also be explicitly used as 'label' value, | |||
such that 'label=""' is equivalent to the 'label' parameter not being | such that 'label=""' is equivalent to the 'label' parameter not being | |||
present at all. [I-D.ietf-rtcweb-data-protocol] allows the | present at all. [I-D.ietf-rtcweb-data-protocol] allows the | |||
DATA_CHANNEL_OPEN message's 'Label' value to be an empty string. | DATA_CHANNEL_OPEN message's 'Label' value to be an empty string. | |||
6.1.1.4. subprotocol Parameter | 6.1.1.4. subprotocol Parameter | |||
The 'subprotocol' parameter indicates which protocol the client | The 'subprotocol' parameter indicates which protocol the client | |||
expects to exchange via the channel. 'Subprotocol' is an optional | expects to exchange via the channel. 'Subprotocol' is an optional | |||
parameter. If the 'subprotocol' parameter is not present, then its | parameter. If the 'subprotocol' parameter is not present, then its | |||
value defaults to the empty string. | value defaults to the empty string. | |||
6.1.1.5. max-retr Parameter | 6.1.1.5. max-retr Parameter | |||
This parameter indicates that the data channel is partially reliable. | This parameter indicates that the data channel is partially reliable. | |||
The 'max-retr' parameter indicates the max times a user message will | The 'max-retr' parameter indicates the maximal number a user message | |||
be retransmitted. The max-retr parameter is optional. If the max- | will be retransmitted. The max-retr parameter is optional. If the | |||
retr parameter is not present, then the maximal number of | max-retr parameter is not present, then the maximal number of | |||
retransmissions is determined as per the generic SCTP retransmission | retransmissions is determined as per the generic SCTP retransmission | |||
rules as specified in [RFC4960]. This parameter maps to the 'Number | rules as specified in [RFC4960]. This parameter maps to the 'Number | |||
of RTX' parameter defined in [I-D.ietf-rtcweb-data-protocol]. | of RTX' parameter defined in [I-D.ietf-rtcweb-data-protocol]. | |||
6.1.1.6. max-time Parameter | 6.1.1.6. max-time Parameter | |||
This parameter indicates that the data channel is partially reliable. | This parameter indicates that the data channel is partially reliable. | |||
A user message will no longer be transmitted or retransmitted after a | A user message will no longer be transmitted or retransmitted after a | |||
specified life-time given in milliseconds in the 'max-time' | specified life-time given in milliseconds in the 'max-time' | |||
parameter. The max-time parameter is optional. If the max-time | parameter. The max-time parameter is optional. If the max-time | |||
skipping to change at page 12, line 24 | skipping to change at page 13, line 24 | |||
Syntax: | Syntax: | |||
dcsa-value = stream-id SP attribute | dcsa-value = stream-id SP attribute | |||
attribute = <from-RFC4566> | attribute = <from-RFC4566> | |||
Example: | Example: | |||
a=dcsa:2 accept-types:text/plain | a=dcsa:2 accept-types:text/plain | |||
Note that the above reference to RFC 4566 defines were the attribute | Note that the above reference to RFC 4566 defines where the attribute | |||
definition can be found; it does not provide any limitation on | definition can be found; it does not provide any limitation on | |||
support of attributes defined in other documents in accordance with | support of attributes defined in other documents in accordance with | |||
this attribute definition. | this attribute definition. Note however that not all SDP attributes | |||
are suitable as "a=dcsa:" parameter. [IANA-SDP-Parameters] contains | ||||
the lists of IANA registered session and media level or media level | ||||
only SDP attributes. | ||||
Thus in the example above, the original attribute line "a=accept- | Thus in the example above, the original attribute line "a=accept- | |||
types:text/plain" is represented by the attribute line "a=dcsa:2 | types:text/plain" is represented by the attribute line "a=dcsa:2 | |||
accept-types:text/plain", which specifies that this instance of MSRP | accept-types:text/plain", which specifies that this instance of MSRP | |||
being transported on the sctp association using the data channel with | being transported on the SCTP association using the data channel with | |||
stream id 2 accepts plain text files. | stream id 2 accepts plain text files. | |||
As opposed to the data channel "a=dcmap:" attribute parameters, these | As opposed to the data channel "a=dcmap:" attribute parameters, these | |||
parameters are subject to offer/answer negotiation following the | parameters are subject to offer/answer negotiation following the | |||
procedures defined in the sub-protocol specific documents. | procedures defined in the sub-protocol specific documents. | |||
The same syntax applies to any other SDP attribute required for | The same syntax applies to any other SDP attribute required for | |||
negotiation of this instance of the sub-protocol. | negotiation of this instance of the sub-protocol. | |||
Note: This document does not provide a complete specification of how | Note: This document does not provide a complete specification of how | |||
skipping to change at page 13, line 4 | skipping to change at page 14, line 6 | |||
The same syntax applies to any other SDP attribute required for | The same syntax applies to any other SDP attribute required for | |||
negotiation of this instance of the sub-protocol. | negotiation of this instance of the sub-protocol. | |||
Note: This document does not provide a complete specification of how | Note: This document does not provide a complete specification of how | |||
to negotiate the use of a data channel to transport MSRP. Procedures | to negotiate the use of a data channel to transport MSRP. Procedures | |||
specific to each sub-protocol such as MSRP will be documented | specific to each sub-protocol such as MSRP will be documented | |||
elsewhere. The use of MSRP is only an example of how the generic | elsewhere. The use of MSRP is only an example of how the generic | |||
procedures described herein might apply to a specific sub-protocol. | procedures described herein might apply to a specific sub-protocol. | |||
6.2. Procedures | 6.2. Procedures | |||
6.2.1. Managing Stream Identifiers | 6.2.1. Managing Stream Identifiers | |||
If an SDP offer / answer exchange (could be the initial or a | If an SDP offer/answer exchange (could be the initial or a subsequent | |||
subsequent one) results in a UDP/DTLS/SCTP or TCP/DTLS/SCTP based | one) results in a UDP/DTLS/SCTP or TCP/DTLS/SCTP based media | |||
media description being accepted, and if this SDP offer / answer | description being accepted, and if this SDP offer/answer exchange | |||
exchange results in the establishment of a new SCTP association, then | results in the establishment of a new SCTP association, then the SDP | |||
the SDP offerer owns the even SCTP stream ids of this new SCTP | offerer owns the even SCTP stream ids of this new SCTP association | |||
association and the answerer owns the odd SCTP stream identifiers. | and the answerer owns the odd SCTP stream identifiers. If this "m" | |||
If this "m" line is removed from the signaling session (its port | line is removed from the signaling session (its port number set to | |||
number set to zero), and if usage of this or of a new UDP/DTLS/SCTP | zero), and if usage of this or of a new UDP/DTLS/SCTP or TCP/DTLS/ | |||
or TCP/DTLS/SCTP based "m" line is renegotiated later on, then the | SCTP based "m" line is renegotiated later on, then the even and odd | |||
even and odd SCTP stream identifier ownership is redetermined as well | SCTP stream identifier ownership is redetermined as well as described | |||
as described above. | above. | |||
This specification allows simultaneous use of external and internal | This specification allows simultaneous use of SDP offer/answer and | |||
negotiation. However, a single stream is managed using one method at | DCEP negotiation. However, an SDP offer/answer exchange MUST NOT be | |||
a time. Stream ids that are not currently used in SDP can be used | initiated if the associated SCTP stream is already negotiated via | |||
for internal negotiation. Stream id allocation per SDP based | DCEP. Stream ids that are not currently used in SDP can be used for | |||
external negotiation may not align with DTLS role based allocation. | DCEP negotiation. Stream id allocation per SDP offer/answer | |||
This could cause glare conditions when one side trying to do external | negotiation may not align with DTLS role based allocation. This | |||
negotiation on a stream id while the other end trying to open a data | could cause glare conditions when one side trying to do SDP offer/ | |||
channel on the same stream id using internal negotiation. To avoid | answer negotiation on a stream id while the other end trying to open | |||
these glare conditions this specification recommends that the data | a data channel on the same stream id using DCEP negotiation. To | |||
channel stack user always selects stream ids per above described SDP | avoid these glare conditions this specification recommends that the | |||
offer / answer rule even when internal negotiation is used. To avoid | data channel stack user always selects stream ids per above described | |||
SDP offer/answer rule even when DCEP negotiation is used. To avoid | ||||
glare conditions, it is possible to come up with a different stream | glare conditions, it is possible to come up with a different stream | |||
id allocation scheme, but such schemes are outside the scope of this | id allocation scheme, but such schemes are outside the scope of this | |||
specification. | specification. | |||
6.2.2. Negotiating Data Channel Parameters | 6.2.2. Negotiating Data Channel Parameters | |||
Conveying a reliable data channel is achieved by including neither | Conveying a reliable data channel is achieved by including neither | |||
'max-retr' nor 'max-time' in corresponding SDP offer's or answer's | 'max-retr' nor 'max-time' in corresponding SDP offer's or answer's | |||
a=dcmap attribute line. Conveying a partially reliable data channel | a=dcmap attribute line. Conveying a partially reliable data channel | |||
is achieved by including only one of 'max-retr' or 'max-time'. By | is achieved by including only one of 'max-retr' or 'max-time'. By | |||
definition max-retr and max-time are mutually exclusive, so only one | definition max-retr and max-time are mutually exclusive, so at most | |||
of them can be present in a=dcmap. If an SDP offer contains both of | one of them MAY be present in a=dcmap. If an SDP offer contains both | |||
these parameters then the receiver of such an SDP offer MUST reject | of these parameters then the receiver of such an SDP offer MUST | |||
the SDP offer. If an SDP answer contains both of these parameters | reject the SDP offer. If an SDP answer contains both of these | |||
then the offerer MAY treat it as an error and MAY assume the | parameters then the offerer MAY treat it as an error and MAY assume | |||
associated SDP offer/answer failed and MAY take appropriate recovery | the associated SDP offer/answer failed and MAY take appropriate | |||
actions. These recovery options are outside the scope of this | recovery actions. These recovery options are outside the scope of | |||
specification. | this specification. | |||
The SDP answer SHALL echo the same subprotocol, max-retr, max-time, | The SDP answer SHALL echo the same subprotocol, max-retr, max-time, | |||
ordered parameters, if those were present in the offer, and MAY | ordered parameters, if those were present in the offer, and MAY | |||
include a label parameter. They MAY appear in any order, which could | include a label parameter. They MAY appear in any order, which could | |||
be different from the SDP offer, in the SDP answer. | be different from the SDP offer, in the SDP answer. | |||
When sending a subsequent offer or an answer, and for as long as the | When sending a subsequent offer or an answer, and for as long as the | |||
data channel is still open, the sender MUST replicate the same | data channel is still open, the sender MUST replicate the same | |||
information. | information. | |||
skipping to change at page 14, line 33 | skipping to change at page 15, line 38 | |||
ordered=false;max-retr=<number of retransmissions> | ordered=false;max-retr=<number of retransmissions> | |||
DATA_CHANNEL_PARTIAL_RELIABLE_TIMED | DATA_CHANNEL_PARTIAL_RELIABLE_TIMED | |||
ordered=true;max-time=<lifetime in milliseconds> | ordered=true;max-time=<lifetime in milliseconds> | |||
DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED | DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED | |||
ordered=false;max-time=<lifetime in milliseconds> | ordered=false;max-time=<lifetime in milliseconds> | |||
6.2.3. Opening a Data Channel | 6.2.3. Opening a Data Channel | |||
The procedure for opening a data channel using external negotiation | The procedure for opening a data channel using SDP offer/answer | |||
starts with the agent preparing to send an SDP offer. If a peer | negotiation starts with the agent preparing to send an SDP offer. If | |||
receives an SDP offer before getting to send a new SDP offer with | a peer receives an SDP offer before starting to send a new SDP offer | |||
data channels that are to be externally negotiated, or loses an SDP | with data channels that are to be SDP offer/answer negotiated, or | |||
offer glare resolution procedure in this case, it MUST wait until the | loses an SDP offer glare resolution procedure in this case, it MUST | |||
ongoing SDP offer/answer completes before resuming the external | wait until the ongoing SDP offer/answer completes before resuming the | |||
negotiation procedure. | SDP offer/answer negotiation procedure. | |||
The agent that intends to send an SDP offer to create data channels | The agent that intends to send an SDP offer to create data channels | |||
through SDP-based external negotiation performs the following: | through SDP offer/answer negotiation performs the following: | |||
o Creates data channels using stream identifiers from the owned set | o Creates data channels using stream identifiers from the owned set | |||
(see Section 6.2.1). | (see Section 6.2.1). | |||
o As described in Section 5.2.2, if the SCTP association is not yet | o Generates a new SDP offer. | |||
established, then the newly created data channels are in the | ||||
Connecting state, else if the SCTP association is already | ||||
established, then the newly created data channels are in the Open | ||||
state. | ||||
o Generates a new SDP offer. In the case of browser based | ||||
applications the browser generates the offer via the createOffer() | ||||
API call [I-D.ietf-rtcweb-jsep]. | ||||
o Determines the list of stream identifiers assigned to data | o Determines the list of stream identifiers assigned to data | |||
channels opened through external negotiation. | channels opened through SDP offer/answer negotiation. | |||
o Completes the SDP offer with the dcmap and dcsa attributes needed, | o Completes the SDP offer with the dcmap and dcsa attributes needed, | |||
if any, for each externally-negotiated data channel, as described | if any, for each SDP offer/answer negotiated data channel, as | |||
in Section 6.1 and in Section 6.2.2. | described in Section 6.1 and in Section 6.2.2. | |||
o Sends the SDP offer. | o Sends the SDP offer. | |||
The peer receiving such an SDP offer performs the following: | The peer receiving such an SDP offer performs the following: | |||
o Parses and applies the SDP offer. Note that the typical parser | o Parses and applies the SDP offer. Note that the typical parser | |||
normally ignores unknown SDP attributes, which includes data | normally ignores unknown SDP attributes, which includes data | |||
channel related attributes. | channel related attributes. | |||
o Analyzes the channel parameters and sub-protocol attributes to | o Analyzes the channel parameters and sub-protocol attributes to | |||
determine whether to accept each offered data channel. | determine whether to accept each offered data channel. | |||
o For accepted data channels, it creates peer instances for the data | o For accepted data channels, it creates peer instances for the data | |||
channels with the agent using the channel parameters described in | channels with the agent using the channel parameters described in | |||
the SDP offer. Note that the agent is asked to create data | the SDP offer. Note that the agent is asked to create data | |||
channels with SCTP stream identifiers contained in the SDP offer | channels with SCTP stream identifiers contained in the SDP offer | |||
if the SDP offer is accepted. | if the SDP offer is accepted. | |||
o As described in Section 5.2.2, if the SCTP association is not yet | ||||
established, then the newly created data channels are in the | ||||
Connecting state, else if the SCTP association is already | ||||
established, then the newly created data channels are in the Open | ||||
state. | ||||
o Generates an SDP answer. | o Generates an SDP answer. | |||
o Completes the SDP answer with the dcmap and optional dcsa | o Completes the SDP answer with the dcmap and optional dcsa | |||
attributes needed for each externally-negotiated data channel, as | attributes needed for each SDP offer/answer negotiated data | |||
described in Section 6.1 and in Section 6.2.2. | channel, as described in Section 6.1 and in Section 6.2.2. | |||
o Sends the SDP answer. | o Sends the SDP answer. | |||
The agent receiving such an SDP answer performs the following: | The agent receiving such an SDP answer performs the following: | |||
o Closes any created data channels (whether in Connecting or Open | o Closes any created data channels for which the expected dcmap and | |||
state) for which the expected dcmap and dcsa attributes are not | dcsa attributes are not present in the SDP answer. | |||
present in the SDP answer. | ||||
o Applies the SDP answer. | o Applies the SDP answer. | |||
Any data channels in Connecting state are transitioned to the Open | ||||
state when the SCTP association is established. | ||||
Each agent application MUST wait to send data until it has | Each agent application MUST wait to send data until it has | |||
confirmation that the data channel at the peer is in the Open state. | confirmation that the data channel at the peer is instantiated. For | |||
For WebRTC, this is when both data channel stacks have channel | WebRTC, this is when both data channel stacks have channel parameters | |||
parameters instantiated. This occurs: | instantiated. This occurs: | |||
o At both peers when a data channel is created without an | o At both peers when a data channel is created without an | |||
established SCTP association, as soon as the data channel stacks | established SCTP association, as soon as the SCTP association is | |||
report that the data channel transitions to the Open state from | successfully established. | |||
the Connecting state. | ||||
o At the agent receiving an SDP offer for which there is an | o At the agent receiving an SDP offer for which there is an | |||
established SCTP association, as soon as it creates an externally | established SCTP association, as soon as it creates an SDP offer/ | |||
negotiated data channel in the Open state based on information | answer negotiated data channel based on information signaled in | |||
signaled in the SDP offer. | the SDP offer. | |||
o At the agent sending an SDP offer to create a new externally | o At the agent sending an SDP offer to create a new SDP offer/answer | |||
negotiated data channel for which there is an established SCTP | negotiated data channel for which there is an established SCTP | |||
association, when it receives the SDP answer confirming acceptance | association, when it receives the SDP answer confirming acceptance | |||
of the data channel or when it begins to receive data on the data | of the data channel or when it begins to receive data on the data | |||
channel from the peer, whichever occurs first. | channel from the peer, whichever occurs first. | |||
6.2.4. Closing a Data Channel | 6.2.4. Closing a Data Channel | |||
When the application requests the closing of a data channel that was | When the application requests the closing of a data channel that was | |||
externally negotiated, the data channel stack always performs an in- | negotiated via SDP offer/answer, the data channel stack always | |||
band SSN reset for this channel. | performs an SCTP SSN reset for this channel. | |||
It is specific to the sub-protocol whether this closing MUST in | It is specific to the sub-protocol whether this closing MUST in | |||
addition be signaled to the peer via a new SDP offer/answer exchange. | addition be signaled to the peer via a new SDP offer/answer exchange. | |||
The intention to close a data channel can be signaled by sending a | The intention to close a data channel can be signaled by sending a | |||
new SDP offer which excludes the "a=dcmap:" and "a=dcsa:" attribute | new SDP offer which excludes the "a=dcmap:" and "a=dcsa:" attribute | |||
lines for the data channel. The offerer SHOULD NOT change the port | lines for the data channel. The offerer SHOULD NOT change the port | |||
value for the "m" line (e.g. to zero) when closing a data channel | value for the "m" line (e.g. to zero) when closing a data channel | |||
(unless all data channels are being closed and the SCTP association | (unless all data channels are being closed and the SCTP association | |||
is no longer needed), since this would close the SCTP association and | is no longer needed), since this would close the SCTP association and | |||
skipping to change at page 17, line 17 | skipping to change at page 17, line 51 | |||
If a new SDP offer/answer is used to close data channels then the | If a new SDP offer/answer is used to close data channels then the | |||
data channel(s) SHOULD only be closed by the answerer/offerer after a | data channel(s) SHOULD only be closed by the answerer/offerer after a | |||
successful SDP answer is sent/received. | successful SDP answer is sent/received. | |||
This delayed closure is RECOMMENDED in order to handle cases where | This delayed closure is RECOMMENDED in order to handle cases where | |||
a successful SDP answer is not received, in which case the state | a successful SDP answer is not received, in which case the state | |||
of the session SHOULD be kept per the last successful SDP offer/ | of the session SHOULD be kept per the last successful SDP offer/ | |||
answer. | answer. | |||
If a client receives a data channel close indication (due to inband | If a client receives a data channel close indication (due to inband | |||
SSN reset or some other reason) without associated SDP offer then the | SCTP SSN reset or some other reason) without associated SDP offer | |||
client SHOULD generate an SDP offer which excludes this closed data | then the client SHOULD generate an SDP offer which excludes this | |||
channel. | closed data channel. | |||
The application MUST also close any data channel that was externally | The application MUST also close any data channel that was negotiated | |||
negotiated, for which the stream identifiers are not listed in an | via SDP offer/answer, for which the stream identifiers are not listed | |||
incoming SDP offer. | in an incoming SDP offer. | |||
A closed data channel using local close (SCTP reset), without an | A closed data channel using local close (SCTP SSN reset), without an | |||
additional SDP offer/answer to close it, may be reused for a new data | additional SDP offer/answer to close it, may be reused for a new data | |||
channel. This can only be done via new SDP offer/answer, describing | channel. This can only be done via new SDP offer/answer, describing | |||
the new sub-protocol and its attributes, only after the corresponding | the new sub-protocol and its attributes, only after the corresponding | |||
data channel close acknowledgement is received from the peer (i.e. | data channel close acknowledgement is received from the peer (i.e. | |||
SCTP reset of both incoming and outgoing streams is completed). This | SCTP SSN reset of both incoming and outgoing streams is completed). | |||
restriction is to avoid the race conditions between arrival of "SDP | This restriction is to avoid the race conditions between arrival of | |||
offer which reuses stream" with "SCTP reset which closes outgoing | "SDP offer which reuses stream" with "SCTP SSN reset which closes | |||
stream" at the peer | outgoing stream" at the peer. | |||
6.2.5. Various SDP Offer/Answer Scenarios and Considerations | 6.2.5. Various SDP Offer/Answer Scenarios and Considerations | |||
SDP offer has no a=dcmap attributes | SDP offer has no a=dcmap attributes | |||
* Initial SDP offer: No data channel is negotiated yet. The DTLS | * Initial SDP offer: No data channel is negotiated yet. The DTLS | |||
connection and SCTP association is negotiated and, if agreed, | connection and SCTP association is negotiated and, if agreed, | |||
established as per [I-D.ietf-mmusic-sctp-sdp]. | established as per [I-D.ietf-mmusic-sctp-sdp]. | |||
* Subsequent SDP offer: All the externally negotiated data | * Subsequent SDP offer: All the SDP offer/answer negotiated data | |||
channels are expected be closed now. The DTLS/SCTP association | channels are expected be closed now. The DTLS/SCTP association | |||
remains open for external or internal negotiation of data | remains open for SDP offer/answer or DCEP negotiation of data | |||
channels. | channels. | |||
SDP answer has no a=dcmap attributes | SDP answer has no a=dcmap attributes | |||
* Initial SDP answer: Either the peer does not support dcmap | * Initial SDP answer: Either the peer does not support dcmap | |||
attributes or it rejected all the data channels. In either | attributes or it rejected all the data channels. In either | |||
case offerer closes all the externally negotiated data channels | case the offerer closes all the SDP offer/answer negotiated | |||
that were open at the time of initial offer. The DTLS/SCTP | data channels that were open at the time of initial offer. The | |||
association will still be setup. | DTLS connection and SCTP association will still be setup. | |||
* Subsequent SDP answer: All the externally negotiated data | * Subsequent SDP answer: All the SDP offer/answer negotiated data | |||
channels are expected be closed now. The DTLS/SCTP association | channels are expected be closed now. The DTLS/SCTP association | |||
remains open for future external or internal negotiation of | remains open for future SDP offer/answer or DCEP negotiation of | |||
data channels. | data channels. | |||
SDP offer has no a=dcsa attributes for a data channel. | SDP offer has no a=dcsa attributes for a data channel. | |||
* This is allowed and indicates there are no sub-protocol | * This is allowed and indicates there are no sub-protocol | |||
parameters to convey. | parameters to convey. | |||
SDP answer has no a=dcsa attributes for a data channel. | SDP answer has no a=dcsa attributes for a data channel. | |||
* This is allowed and indicates there are no sub-protocol | * This is allowed and indicates there are no sub-protocol | |||
skipping to change at page 19, line 5 | skipping to change at page 19, line 40 | |||
a=setup:passive | a=setup:passive | |||
a=connection:new | a=connection:new | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | 5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | |||
Figure 1: Example 1 | Figure 1: Example 1 | |||
In the above example the SDP answerer rejected the data channel with | In the above example the SDP answerer rejected the data channel with | |||
stream id 0 either for explicit reasons or because it does not | stream id 0 either for explicit reasons or because it does not | |||
understand the a=dcmap attribute. As a result the offerer will close | understand the a=dcmap attribute. As a result the offerer will close | |||
the data channel created with the external negotiation option. The | the data channel created with the SDP offer/answer negotiation | |||
SCTP association will still be setup over DTLS. At this point the | option. The SCTP association will still be setup over DTLS. At this | |||
offerer or the answerer may use internal negotiation to open data | point the offerer or the answerer may use DCEP negotiation to open | |||
channels. | data channels. | |||
SDP offer: | SDP offer: | |||
m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 10.10.10.1 | c=IN IP4 10.10.10.1 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port 5000 | a=sctp-port 5000 | |||
a=setup:actpass | a=setup:actpass | |||
a=connection:new | a=connection:new | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | 4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | |||
skipping to change at page 19, line 39 | skipping to change at page 20, line 34 | |||
a=setup:passive | a=setup:passive | |||
a=connection:new | a=connection:new | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | 5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | |||
a=dcmap:2 subprotocol="MSRP";label="MSRP" | a=dcmap:2 subprotocol="MSRP";label="MSRP" | |||
a=dcsa:2 accept-types:message/cpim text/plain | a=dcsa:2 accept-types:message/cpim text/plain | |||
a=dcsa:2 path:msrp://bob.example.com:10002/si438dsaodes;dc | a=dcsa:2 path:msrp://bob.example.com:10002/si438dsaodes;dc | |||
Figure 2: Example 2 | Figure 2: Example 2 | |||
In the above example SDP offer contains data channels for BFCP and | In the above example the SDP offer contains data channels for BFCP | |||
MSRP sub-protocols. SDP answer rejected BFCP and accepted MSRP. So, | and MSRP sub-protocols. The SDP answer rejected BFCP and accepted | |||
the offerer should close the data channel for BFCP and both offerer | MSRP. So, the offerer should close the data channel for BFCP and | |||
and answerer may start using MSRP data channel (after SCTP/DTLS | both offerer and answerer may start using the MSRP data channel | |||
association is setup). The data channel with stream id 0 is free and | (after SCTP/DTLS association is setup). The data channel with stream | |||
can be used for future internal or external negotiation. | id 0 is free and can be used for future DCEP or SDP offer/answer | |||
negotiation. | ||||
Continuing on the earlier example in Figure 1. | Continuing on the earlier example in Figure 1. | |||
Subsequent SDP offer: | Subsequent SDP offer: | |||
m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 10.10.10.1 | c=IN IP4 10.10.10.1 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port 5000 | a=sctp-port 5000 | |||
a=setup:actpass | a=setup:actpass | |||
a=connection:existing | a=connection:existing | |||
skipping to change at page 20, line 35 | skipping to change at page 21, line 35 | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | 5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | |||
a=dcmap:4 subprotocol="MSRP";label="MSRP" | a=dcmap:4 subprotocol="MSRP";label="MSRP" | |||
a=dcsa:4 accept-types:message/cpim text/plain | a=dcsa:4 accept-types:message/cpim text/plain | |||
a=dcsa:4 path:msrp://bob.example.com:10002/si438dsaodes;dc | a=dcsa:4 path:msrp://bob.example.com:10002/si438dsaodes;dc | |||
Figure 3: Example 3 | Figure 3: Example 3 | |||
The above example is a continuation of the example in Figure 1. The | The above example is a continuation of the example in Figure 1. The | |||
SDP offer now removes the MSRP data channel with stream id 2, but | SDP offer now removes the MSRP data channel with stream id 2, but | |||
opens a new MSRP data channel with stream id 4. The answerer | opens a new MSRP data channel with stream id 4. The answerer accepts | |||
accepted the entire offer. As a result the offerer closes the | the entire offer. As a result the offerer closes the earlier | |||
earlier negotiated MSRP related data channel and both offerer and | negotiated MSRP related data channel and both offerer and answerer | |||
answerer may start using new the MSRP related data channel. | may start using new the MSRP related data channel. | |||
8. Security Considerations | 8. Security Considerations | |||
No security considerations are envisaged beyond those already | No security considerations are envisaged beyond those already | |||
documented in [RFC4566] | documented in [RFC4566]. | |||
9. IANA Considerations | 9. IANA Considerations | |||
9.1. Subprotocol identifiers | 9.1. Subprotocol Identifiers | |||
Registration of new subprotocol identifiers is performed using the | Registration of new subprotocol identifiers is performed using the | |||
existing IANA table "WebSocket Subprotocol Name Registry". | existing IANA table "WebSocket Subprotocol Name Registry". | |||
The following text should be added following the title of the table. | The following text should be added following the title of the table. | |||
"This table also includes subprotocol identifiers specified for usage | "This table also includes subprotocol identifiers specified for usage | |||
within a WebRTC data channel." | within a WebRTC data channel." | |||
The following reference should be added to under the heading | The following reference should be added to under the heading | |||
reference: "RFC XXXX". | reference: "RFC XXXX". | |||
This document assigns no new values to this table. | This document assigns no new values to this table. | |||
NOTE to RFC Editor: Please replace "XXXX" with the number of this | NOTE to RFC Editor: Please replace "XXXX" with the number of this | |||
RFC. | RFC. | |||
9.2. New SDP Attributes | ||||
9.2.1. dcmap | ||||
[Editor's note: This section still needs to be completed.] | ||||
9.2.2. dcsa | ||||
[Editor's note: This section still needs to be completed.] | ||||
10. Acknowledgments | 10. Acknowledgments | |||
The authors wish to acknowledge the borrowing of ideas from other | The authors wish to acknowledge the borrowing of ideas from other | |||
internet drafts by Salvatore Loreto, Gonzalo Camarillo, Peter Dunkley | internet drafts by Salvatore Loreto, Gonzalo Camarillo, Peter Dunkley | |||
and Gavin Llewellyn, and to thank Christian Groves, Christer | and Gavin Llewellyn, and to thank Roni Even, Christian Groves, | |||
Holmberg, Paul Kyzivat, Jonathan Lennox, and Uwe Rauschenbach for | Christer Holmberg, Paul Kyzivat, Jonathan Lennox, and Uwe | |||
their invaluable comments. | Rauschenbach for their invaluable comments. | |||
11. CHANGE LOG | 11. CHANGE LOG | |||
11.1. Changes against 'draft-ietf-mmusic-data-channel-sdpneg-01' | 11.1. Changes against 'draft-ietf-mmusic-data-channel-sdpneg-02' | |||
o Move of reference [I-D.ietf-rtcweb-jsep] from the list of | ||||
normative references to the list of informative references. | ||||
o Addition of [IANA-SDP-Parameters] to the list of informative | ||||
references and addition of following two sentences to the first | ||||
paragraph after the ABNF definition: "Note however that not all | ||||
SDP attributes are suitable as "a=dcsa:" parameter. | ||||
[IANA-SDP-Parameters] contains the lists of IANA registered | ||||
session and media level or media level only SDP attributes." | ||||
o In the introduction replacement of last sentence "This document | ||||
defines SDP-based out-of-band negotiation procedures to establish | ||||
data channels for transport of well-defined sub-protocols" with | ||||
"This document defines SDP offer/answer negotiation procedures to | ||||
establish data channels for transport of well-defined sub- | ||||
protocols, to enable out-of-band negotiation". | ||||
o Throughout the document replacement of "external negotiation" with | ||||
"SDP offer/answer negotiation" and removal of term "external | ||||
negotiation" from the terminology list in Section 3. | ||||
o Throughout the document replacement of "internal negotiation" with | ||||
"DCEP" and removal of terms "internal negotiation" and "in-band | ||||
negotiation" from the terminology list in Section 3. | ||||
o Addition of "SCTP Stream Sequence Number (SSN)" to the list of | ||||
terms. | ||||
o In Section 6.2.1 replacement of sentence "However, a single stream | ||||
is managed using one method at a time." with "However, an SDP | ||||
offer/answer exchange MUST NOT be initiated if the associated SCTP | ||||
stream is already negotiated via DCEP". | ||||
o In Section 6.2.2 replacement of sentence "By definition max-retr | ||||
and max-time are mutually exclusive, so only one of them can be | ||||
present in a=dcmap" with "By definition max-retr and max-time are | ||||
mutually exclusive, so at most one of them MAY be present in | ||||
a=dcmap". | ||||
o Move of reference [WebRtcAPI] from list of normative references to | ||||
list of informative references. | ||||
o Removal of almost all text parts, which discussed JavaScript or | ||||
other API specific aspects. Such API specific aspects were mainly | ||||
discussed in sub-sections of Section 5 and Section 6. | ||||
11.2. Changes against 'draft-ietf-mmusic-data-channel-sdpneg-01' | ||||
o New Section 4 regarding applicability to SDP offer/answer only. | o New Section 4 regarding applicability to SDP offer/answer only. | |||
o Addition of new Section 9.1 "Subprotocol identifiers" as | o Addition of new Section 9.1 "Subprotocol identifiers" as | |||
subsection of the "IANA Considerations" related Section 9. Also | subsection of the "IANA Considerations" related Section 9. Also | |||
removal of the temporary note "To be completed. As [I-D.ietf- | removal of the temporary note "To be completed. As [I-D.ietf- | |||
rtcweb-data-protocol] this document should refer to IANA's | rtcweb-data-protocol] this document should refer to IANA's | |||
WebSocket Subprotocol Name Registry defined in [RFC6455]." | WebSocket Subprotocol Name Registry defined in [RFC6455]." | |||
o In Section 6.2.2: | o In Section 6.2.2: | |||
skipping to change at page 23, line 31 | skipping to change at page 25, line 44 | |||
* In the last but one paragraph replacement of "must" with "The | * In the last but one paragraph replacement of "must" with "The | |||
application MUST also close...". | application MUST also close...". | |||
o In Section 6.1.2 addition of following note after the formal | o In Section 6.1.2 addition of following note after the formal | |||
definition of the 'a=dcsa' attribute: "Note that the above | definition of the 'a=dcsa' attribute: "Note that the above | |||
reference to RFC 4566 defines were the attribute definition can be | reference to RFC 4566 defines were the attribute definition can be | |||
found; it does not provide any limitation on support of attributes | found; it does not provide any limitation on support of attributes | |||
defined in other documents in accordance with this attribute | defined in other documents in accordance with this attribute | |||
definition." | definition." | |||
11.2. Changes against 'draft-ietf-mmusic-data-channel-sdpneg-00' | 11.3. Changes against 'draft-ietf-mmusic-data-channel-sdpneg-00' | |||
o In Section 3 "WebRTC data channel" was defined as "A bidirectional | o In Section 3 "WebRTC data channel" was defined as "A bidirectional | |||
channel consisting of paired SCTP outbound and inbound streams." | channel consisting of paired SCTP outbound and inbound streams." | |||
Replacement of this definition with "Data channel: A WebRTC data | Replacement of this definition with "Data channel: A WebRTC data | |||
channel as specified in [I-D.ietf-rtcweb-data-channel]", and | channel as specified in [I-D.ietf-rtcweb-data-channel]", and | |||
consistent usage of "data channel" in the remainder of the | consistent usage of "data channel" in the remainder of the | |||
document including the document's headline." | document including the document's headline." | |||
o In Section 5 removal of following note: 'OPEN ISSUE: The syntax in | o In Section 5 removal of following note: 'OPEN ISSUE: The syntax in | |||
[I-D.ietf-mmusic-sctp-sdp] may change as that document progresses. | [I-D.ietf-mmusic-sctp-sdp] may change as that document progresses. | |||
skipping to change at page 24, line 48 | skipping to change at page 27, line 15 | |||
o In Section 6.1.2's second paragraph replacement of "sctp stream | o In Section 6.1.2's second paragraph replacement of "sctp stream | |||
identifier" with "SCTP stream identifier". | identifier" with "SCTP stream identifier". | |||
o In first paragraph of Section 6.2.1 replacement of first two | o In first paragraph of Section 6.2.1 replacement of first two | |||
sentences 'For the SDP-based external negotiation described in | sentences 'For the SDP-based external negotiation described in | |||
this document, the initial offerer based "SCTP over DTLS" owns by | this document, the initial offerer based "SCTP over DTLS" owns by | |||
convention the even stream identifiers whereas the initial | convention the even stream identifiers whereas the initial | |||
answerer owns the odd stream identifiers. This ownership is | answerer owns the odd stream identifiers. This ownership is | |||
invariant for the whole lifetime of the signaling session, e.g. it | invariant for the whole lifetime of the signaling session, e.g. it | |||
does not change if the initial answerer sends a new offer to the | does not change if the initial answerer sends a new offer to the | |||
initial offerer.' with 'If an SDP offer / answer exchange (could | initial offerer.' with 'If an SDP offer/answer exchange (could be | |||
be the initial or a subsequent one) results in a UDP/DTLS/SCTP or | the initial or a subsequent one) results in a UDP/DTLS/SCTP or | |||
TCP/DTLS/SCTP based media description being accepted, and if this | TCP/DTLS/SCTP based media description being accepted, and if this | |||
SDP offer / answer exchange results in the establishment of a new | SDP offer/answer exchange results in the establishment of a new | |||
SCTP association, then the SDP offerer owns the even SCTP stream | SCTP association, then the SDP offerer owns the even SCTP stream | |||
ids of this new SCTP association and the answerer owns the odd | ids of this new SCTP association and the answerer owns the odd | |||
SCTP stream identifiers. If this "m" line is removed from the | SCTP stream identifiers. If this "m" line is removed from the | |||
signaling session (its port number set to zero), and if usage of | signaling session (its port number set to zero), and if usage of | |||
this or of a new UDP/DTLS/SCTP or TCP/DTLS/SCTP based "m" line is | this or of a new UDP/DTLS/SCTP or TCP/DTLS/SCTP based "m" line is | |||
renegotiated later on, then the even and odd SCTP stream | renegotiated later on, then the even and odd SCTP stream | |||
identifier ownership is redetermined as well as described above.' | identifier ownership is redetermined as well as described above.' | |||
o In Section 6.2.3 the first action of an SDP answerer, when | o In Section 6.2.3 the first action of an SDP answerer, when | |||
receiving an SDP offer, was described as "Applies the SDP offer. | receiving an SDP offer, was described as "Applies the SDP offer. | |||
skipping to change at page 26, line 16 | skipping to change at page 28, line 30 | |||
to handle cases where a successful SDP answer is not received, in | to handle cases where a successful SDP answer is not received, in | |||
which case the state of the session SHOULD be kept per the last | which case the state of the session SHOULD be kept per the last | |||
successful SDP offer/answer." | successful SDP offer/answer." | |||
o Although dedicated to "a=dcmap" and "a=dcsa" SDP syntax aspects | o Although dedicated to "a=dcmap" and "a=dcsa" SDP syntax aspects | |||
Section 6.1.1 contained already procedural descriptions related to | Section 6.1.1 contained already procedural descriptions related to | |||
data channel reliability negotiation. Creation of new | data channel reliability negotiation. Creation of new | |||
Section 6.2.2 and moval of reliability negotiation related text to | Section 6.2.2 and moval of reliability negotiation related text to | |||
this new section. | this new section. | |||
11.3. Changes against 'draft-ejzak-mmusic-data-channel-sdpneg-02' | 11.4. Changes against 'draft-ejzak-mmusic-data-channel-sdpneg-02' | |||
o Removal of note "[ACTION ITEM]" from section "subprotocol | o Removal of note "[ACTION ITEM]" from section "subprotocol | |||
parameter". As [I-D.ietf-rtcweb-data-protocol] this document | parameter". As [I-D.ietf-rtcweb-data-protocol] this document | |||
should refer to IANA's WebSocket Subprotocol Name Registry defined | should refer to IANA's WebSocket Subprotocol Name Registry defined | |||
in [RFC6455]. | in [RFC6455]. | |||
o In whole document, replacement of "unreliable" with "partially | o In whole document, replacement of "unreliable" with "partially | |||
reliable", which is used in [I-D.ietf-rtcweb-data-channel] and in | reliable", which is used in [I-D.ietf-rtcweb-data-channel] and in | |||
[I-D.ietf-rtcweb-data-protocol] in most places. | [I-D.ietf-rtcweb-data-protocol] in most places. | |||
skipping to change at page 27, line 19 | skipping to change at page 29, line 32 | |||
o In the "Examples" section, in the first two SDP offer examples in | o In the "Examples" section, in the first two SDP offer examples in | |||
the a=dcmap attribute lines 'label="BGCP"' was replaced with | the a=dcmap attribute lines 'label="BGCP"' was replaced with | |||
'label="BFCP"'. | 'label="BFCP"'. | |||
o In all examples, the "m" line proto value "DTLS/SCTP" was replaced | o In all examples, the "m" line proto value "DTLS/SCTP" was replaced | |||
with "UDP/DTLS/SCTP" and the "a=fmtp" attribute lines were | with "UDP/DTLS/SCTP" and the "a=fmtp" attribute lines were | |||
replaced with "a=max-message-size" attribute lines, as per draft- | replaced with "a=max-message-size" attribute lines, as per draft- | |||
ietf-mmusic-sctp-sdp-12. | ietf-mmusic-sctp-sdp-12. | |||
11.4. Changes against '-01' | 11.5. Changes against '-01' | |||
o Formal syntax for dcmap and dcsa attribute lines. | o Formal syntax for dcmap and dcsa attribute lines. | |||
o Making subprotocol as an optional parameter in dcmap. | o Making subprotocol as an optional parameter in dcmap. | |||
o Specifying disallowed parameter combinations for max-time and max- | o Specifying disallowed parameter combinations for max-time and max- | |||
retr. | retr. | |||
o Clarifications on WebRTC data channel close procedures. | o Clarifications on WebRTC data channel close procedures. | |||
11.5. Changes against '-00' | 11.6. Changes against '-00' | |||
o Revisions to identify difference between internal and external | o Revisions to identify difference between internal and external | |||
negotiation and their usage. | negotiation and their usage. | |||
o Introduction of more generic terminology, e.g. "application" | o Introduction of more generic terminology, e.g. "application" | |||
instead of "browser". | instead of "browser". | |||
o Clarification of how "max-retr and max-time affect the usage of | o Clarification of how "max-retr and max-time affect the usage of | |||
unreliable and reliable WebRTC data channels. | unreliable and reliable WebRTC data channels. | |||
skipping to change at page 28, line 10 | skipping to change at page 30, line 21 | |||
o Removal of the SCTP port number from the a=dcmap and a=dcsa | o Removal of the SCTP port number from the a=dcmap and a=dcsa | |||
attributes as this is now contained in the a=sctp-port attribute, | attributes as this is now contained in the a=sctp-port attribute, | |||
and as draft-ietf-mmusic-sctp-sdp-07 supports only one SCTP | and as draft-ietf-mmusic-sctp-sdp-07 supports only one SCTP | |||
association on top of the DTLS connection. | association on top of the DTLS connection. | |||
12. References | 12. References | |||
12.1. Normative References | 12.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | ||||
<http://www.rfc-editor.org/info/rfc2119>. | ||||
[RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session | [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session | |||
Description Protocol", RFC 4566, July 2006. | Description Protocol", RFC 4566, DOI 10.17487/RFC4566, | |||
July 2006, <http://www.rfc-editor.org/info/rfc4566>. | ||||
[RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model | [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model | |||
with Session Description Protocol (SDP)", RFC 3264, June | with Session Description Protocol (SDP)", RFC 3264, | |||
2002. | DOI 10.17487/RFC3264, June 2002, | |||
<http://www.rfc-editor.org/info/rfc3264>. | ||||
[RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | ||||
Specifications: ABNF", STD 68, RFC 5234, January 2008. | ||||
[I-D.ietf-rtcweb-jsep] | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
Uberti, J., Jennings, C., and E. Rescorla, "Javascript | Specifications: ABNF", STD 68, RFC 5234, | |||
Session Establishment Protocol", draft-ietf-rtcweb-jsep-09 | DOI 10.17487/RFC5234, January 2008, | |||
(work in progress), March 2015. | <http://www.rfc-editor.org/info/rfc5234>. | |||
[I-D.ietf-rtcweb-data-channel] | [I-D.ietf-rtcweb-data-channel] | |||
Jesup, R., Loreto, S., and M. Tuexen, "WebRTC Data | Jesup, R., Loreto, S., and M. Tuexen, "WebRTC Data | |||
Channels", draft-ietf-rtcweb-data-channel-13 (work in | Channels", draft-ietf-rtcweb-data-channel-13 (work in | |||
progress), January 2015. | progress), January 2015. | |||
[I-D.ietf-mmusic-sctp-sdp] | [I-D.ietf-mmusic-sctp-sdp] | |||
Holmberg, C., Loreto, S., and G. Camarillo, "Stream | Holmberg, C., Loreto, S., and G. Camarillo, "Stream | |||
Control Transmission Protocol (SCTP)-Based Media Transport | Control Transmission Protocol (SCTP)-Based Media Transport | |||
in the Session Description Protocol (SDP)", draft-ietf- | in the Session Description Protocol (SDP)", draft-ietf- | |||
mmusic-sctp-sdp-14 (work in progress), March 2015. | mmusic-sctp-sdp-14 (work in progress), March 2015. | |||
[WebRtcAPI] | ||||
Bergkvist, A., Burnett, D., Jennings, C., and A. | ||||
Narayanan, "WebRTC 1.0: Real-time Communication Between | ||||
Browsers", World Wide Web Consortium WD-webrtc-20130910, | ||||
September 2013, | ||||
<http://www.w3.org/TR/2013/WD-webrtc-20130910/>. | ||||
12.2. Informative References | 12.2. Informative References | |||
[I-D.ietf-rtcweb-data-protocol] | [I-D.ietf-rtcweb-data-protocol] | |||
Jesup, R., Loreto, S., and M. Tuexen, "WebRTC Data Channel | Jesup, R., Loreto, S., and M. Tuexen, "WebRTC Data Channel | |||
Establishment Protocol", draft-ietf-rtcweb-data- | Establishment Protocol", draft-ietf-rtcweb-data- | |||
protocol-09 (work in progress), January 2015. | protocol-09 (work in progress), January 2015. | |||
[RFC4960] Stewart, R., "Stream Control Transmission Protocol", RFC | [RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol", | |||
4960, September 2007. | RFC 4960, DOI 10.17487/RFC4960, September 2007, | |||
<http://www.rfc-editor.org/info/rfc4960>. | ||||
[RFC4975] Campbell, B., Mahy, R., and C. Jennings, "The Message | [RFC4975] Campbell, B., Ed., Mahy, R., Ed., and C. Jennings, Ed., | |||
Session Relay Protocol (MSRP)", RFC 4975, September 2007. | "The Message Session Relay Protocol (MSRP)", RFC 4975, | |||
DOI 10.17487/RFC4975, September 2007, | ||||
<http://www.rfc-editor.org/info/rfc4975>. | ||||
[RFC4976] Jennings, C., Mahy, R., and A. Roach, "Relay Extensions | [RFC4976] Jennings, C., Mahy, R., and A. Roach, "Relay Extensions | |||
for the Message Sessions Relay Protocol (MSRP)", RFC 4976, | for the Message Sessions Relay Protocol (MSRP)", RFC 4976, | |||
September 2007. | DOI 10.17487/RFC4976, September 2007, | |||
<http://www.rfc-editor.org/info/rfc4976>. | ||||
[RFC5547] Garcia-Martin, M., Isomaki, M., Camarillo, G., Loreto, S., | [RFC5547] Garcia-Martin, M., Isomaki, M., Camarillo, G., Loreto, S., | |||
and P. Kyzivat, "A Session Description Protocol (SDP) | and P. Kyzivat, "A Session Description Protocol (SDP) | |||
Offer/Answer Mechanism to Enable File Transfer", RFC 5547, | Offer/Answer Mechanism to Enable File Transfer", RFC 5547, | |||
May 2009. | DOI 10.17487/RFC5547, May 2009, | |||
<http://www.rfc-editor.org/info/rfc5547>. | ||||
[RFC6135] Holmberg, C. and S. Blau, "An Alternative Connection Model | [RFC6135] Holmberg, C. and S. Blau, "An Alternative Connection Model | |||
for the Message Session Relay Protocol (MSRP)", RFC 6135, | for the Message Session Relay Protocol (MSRP)", RFC 6135, | |||
February 2011. | DOI 10.17487/RFC6135, February 2011, | |||
<http://www.rfc-editor.org/info/rfc6135>. | ||||
[RFC6455] Fette, I. and A. Melnikov, "The WebSocket Protocol", RFC | [RFC6455] Fette, I. and A. Melnikov, "The WebSocket Protocol", | |||
6455, December 2011. | RFC 6455, DOI 10.17487/RFC6455, December 2011, | |||
<http://www.rfc-editor.org/info/rfc6455>. | ||||
[RFC6714] Holmberg, C., Blau, S., and E. Burger, "Connection | [RFC6714] Holmberg, C., Blau, S., and E. Burger, "Connection | |||
Establishment for Media Anchoring (CEMA) for the Message | Establishment for Media Anchoring (CEMA) for the Message | |||
Session Relay Protocol (MSRP)", RFC 6714, August 2012. | Session Relay Protocol (MSRP)", RFC 6714, | |||
DOI 10.17487/RFC6714, August 2012, | ||||
<http://www.rfc-editor.org/info/rfc6714>. | ||||
[I-D.ietf-rtcweb-jsep] | ||||
Uberti, J., Jennings, C., and E. Rescorla, "Javascript | ||||
Session Establishment Protocol", draft-ietf-rtcweb-jsep-11 | ||||
(work in progress), July 2015. | ||||
[IANA-SDP-Parameters] | ||||
"Session Description Protocol (SDP) Parameters", Internet | ||||
Assigned Numbers Authority Protocol Assignments Session | ||||
Description Protocol (SDP) Parameters, | ||||
<http://www.iana.org/assignments/sdp-parameters/ | ||||
sdp-parameters.xhtml>. | ||||
[WebRtcAPI] | ||||
Bergkvist, A., Burnett, D., Jennings, C., and A. | ||||
Narayanan, "WebRTC 1.0: Real-time Communication Between | ||||
Browsers", World Wide Web Consortium WD-webrtc-20150210, | ||||
February 2015, | ||||
<http://www.w3.org/TR/2015/WD-webrtc-20150210/>. | ||||
Authors' Addresses | Authors' Addresses | |||
Keith Drage (editor) | Keith Drage (editor) | |||
Alcatel-Lucent | Alcatel-Lucent | |||
Quadrant, Stonehill Green, Westlea | Quadrant, Stonehill Green, Westlea | |||
Swindon | Swindon | |||
UK | UK | |||
Email: keith.drage@alcatel-lucent.com | Email: keith.drage@alcatel-lucent.com | |||
End of changes. 109 change blocks. | ||||
307 lines changed or deleted | 408 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |