rfc8864xml2.original.xml | rfc8864.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "http://xml.resource.org/authoring/rfc2629.dtd" [ | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse | |||
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | nsus="true" docName="draft-ietf-mmusic-data-channel-sdpneg-28" indexInclude="tru | |||
nce.RFC.2119.xml"> | e" ipr="trust200902" number="8864" prepTime="2021-01-18T22:48:58" scripts="Commo | |||
<!ENTITY RFC3264 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | n,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocIn | |||
nce.RFC.3264.xml"> | clude="true"> | |||
<!ENTITY RFC3629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <link href="https://datatracker.ietf.org/doc/draft-ietf-mmusic-data-channel-sd | |||
nce.RFC.3629.xml"> | pneg-28" rel="prev"/> | |||
<!ENTITY RFC3758 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <link href="https://dx.doi.org/10.17487/rfc8864" rel="alternate"/> | |||
nce.RFC.3758.xml"> | <link href="urn:issn:2070-1721" rel="alternate"/> | |||
<!ENTITY RFC4960 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <front> | |||
nce.RFC.4960.xml"> | <title abbrev="SDP-Based Data Channel Negotiation">Negotiation Data Channels | |||
<!ENTITY RFC4582 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | Using the Session Description Protocol (SDP)</title> | |||
nce.RFC.4582.xml"> | <seriesInfo name="RFC" value="8864" stream="IETF"/> | |||
<!ENTITY RFC4975 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <author initials="K." surname="Drage" fullname="Keith Drage"> | |||
nce.RFC.4975.xml"> | <organization showOnFrontPage="true">Unaffiliated</organization> | |||
<!ENTITY RFC5234 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <address> | |||
nce.RFC.5234.xml"> | <email>drageke@ntlworld.com</email> | |||
<!ENTITY RFC6455 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | </address> | |||
nce.RFC.6455.xml"> | </author> | |||
<!ENTITY RFC6525 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <author initials="M." surname="Makaraju" fullname="Maridi R. Makaraju (Raju) | |||
nce.RFC.6525.xml"> | "> | |||
<!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <organization showOnFrontPage="true">Unaffiliated</organization> | |||
nce.RFC.8174.xml"> | <address> | |||
<!ENTITY DATAREQ SYSTEM "http://xml.resource.org/public/rfc/bibxml3/refer | <email>mmraju@gmail.com</email> | |||
ence.I-D.ietf-rtcweb-data-channel.xml"> | </address> | |||
<!ENTITY DATAPROTO SYSTEM "http://xml.resource.org/public/rfc/bibxml3/ref | </author> | |||
erence.I-D.ietf-rtcweb-data-protocol.xml"> | <author fullname="Richard Ejzak" initials="R." surname="Ejzak"> | |||
<!ENTITY SDPSCTP SYSTEM "http://xml.resource.org/public/rfc/bibxml3/refer | <organization showOnFrontPage="true">Unaffiliated</organization> | |||
ence.I-D.ietf-mmusic-sctp-sdp.xml"> | <address> | |||
<!ENTITY SDPBIS SYSTEM "http://xml.resource.org/public/rfc/bibxml3/refere | <email>richard.ejzak@gmail.com</email> | |||
nce.I-D.draft-ietf-mmusic-rfc4566bis-32.xml"> | </address> | |||
<!ENTITY SDPMUXATTR SYSTEM "http://xml.resource.org/public/rfc/bibxml3/re | </author> | |||
ference.I-D.ietf-mmusic-sdp-mux-attributes.xml"> | <author fullname="Jerome Marcon" initials="J." surname="Marcon"> | |||
<!ENTITY CLUEDATA SYSTEM "http://xml.resource.org/public/rfc/bibxml3/refe | <organization showOnFrontPage="true">Unaffiliated</organization> | |||
rence.I-D.ietf-clue-datachannel.xml"> | <address> | |||
<!ENTITY MSRPDATA SYSTEM "http://xml.resource.org/public/rfc/bibxml3/refe | <email>jeromee.marcon@free.fr</email> | |||
rence.I-D.ietf-mmusic-msrp-usage-data-channel.xml"> | </address> | |||
]> | </author> | |||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | <author initials="R." surname="Even" fullname="Roni Even" role="editor"> | |||
<?rfc toc="yes" ?> | <organization showOnFrontPage="true"/> | |||
<?rfc symrefs="yes" ?> | <address> | |||
<?rfc iprnotified="no" ?> | <email>ron.even.tlv@gmail.com</email> | |||
<?rfc strict="no" ?> | </address> | |||
<?rfc compact="yes" ?> | </author> | |||
<?rfc subcompact="no"?> | <date month="01" year="2021"/> | |||
<?rfc sortrefs="yes" ?> | <abstract pn="section-abstract"> | |||
<rfc category="std" docName="draft-ietf-mmusic-data-channel-sdpneg-28" ipr="trus | <t indent="0" pn="section-abstract-1"> Data channel setup can be done usi | |||
t200902"> | ng either the in-band Data Channel Establishment Protocol (DCEP) or some out-of- | |||
<front> | band non-DCEP protocol. This document specifies how the SDP (Session | |||
<title abbrev="SDP-based Data Channel Negotiation"> | ||||
SDP-based Data Channel Negotiation | ||||
</title> | ||||
<author initials="K. E." surname="Drage" fullname="Keith Drage"> | ||||
<organization>Unaffiliated</organization> | ||||
<address> | ||||
<email>drageke@ntlworld.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="M. R." surname="Makaraju" fullname="Maridi R. M | ||||
akaraju (Raju)"> | ||||
<organization>Nokia</organization> | ||||
<address> | ||||
<postal> | ||||
<street>2000 Lucent Lane</street> | ||||
<city>Naperville</city> | ||||
<region>Illinois</region> | ||||
<country>US</country> | ||||
</postal> | ||||
<email> Raju.Makaraju@nokia.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Richard Ejzak" initials="R.P." surname="Ejzak"> | ||||
<organization>Unaffiliated</organization> | ||||
<address> | ||||
<email>richard.ejzak@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Jerome Marcon" initials="J.M." surname="Marcon" | ||||
> | ||||
<organization>Unaffiliated</organization> | ||||
<address> | ||||
<email>jeromee.marcon@free.fr</email> | ||||
</address> | ||||
</author> | ||||
<author initials="R. E." surname="Even" fullname="Roni Even" role | ||||
="editor"> | ||||
<organization>Huawei</organization> | ||||
<address> | ||||
<email>roni.even@huawei.com</email> | ||||
</address> | ||||
</author> | ||||
<date month="May" year="2019"/> | ||||
<area>ART</area> | ||||
<workgroup>MMUSIC</workgroup> | ||||
<abstract> | ||||
<t> Data channel setup can be done using either the in-b | ||||
and Data Channel Establishment Protocol (DCEP) or using some out-of-band non-DCE | ||||
P protocol. This document specifies how the SDP (Session | ||||
Description Protocol) offer/answer exchange can be used to achieve | Description Protocol) offer/answer exchange can be used to achieve | |||
an out-of-band non-DCEP negotiation for establishing a data channel. | an out-of-band non-DCEP negotiation for establishing a data channel. | |||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | <boilerplate> | |||
<middle> | <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc= | |||
<section title="Introduction" anchor="introduction"> | "exclude" pn="section-boilerplate.1"> | |||
<t> The concept of establishing a bi-directional | <name slugifiedName="name-status-of-this-memo">Status of This Memo</name | |||
> | ||||
<t indent="0" pn="section-boilerplate.1-1"> | ||||
This is an Internet Standards Track document. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.1-2"> | ||||
This document is a product of the Internet Engineering Task Force | ||||
(IETF). It represents the consensus of the IETF community. It has | ||||
received public review and has been approved for publication by | ||||
the Internet Engineering Steering Group (IESG). Further | ||||
information on Internet Standards is available in Section 2 of | ||||
RFC 7841. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.1-3"> | ||||
Information about the current status of this document, any | ||||
errata, and how to provide feedback on it may be obtained at | ||||
<eref target="https://www.rfc-editor.org/info/rfc8864" brackets="non | ||||
e"/>. | ||||
</t> | ||||
</section> | ||||
<section anchor="copyright" numbered="false" removeInRFC="false" toc="excl | ||||
ude" pn="section-boilerplate.2"> | ||||
<name slugifiedName="name-copyright-notice">Copyright Notice</name> | ||||
<t indent="0" pn="section-boilerplate.2-1"> | ||||
Copyright (c) 2021 IETF Trust and the persons identified as the | ||||
document authors. All rights reserved. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.2-2"> | ||||
This document is subject to BCP 78 and the IETF Trust's Legal | ||||
Provisions Relating to IETF Documents | ||||
(<eref target="https://trustee.ietf.org/license-info" brackets="none | ||||
"/>) in effect on the date of | ||||
publication of this document. Please review these documents | ||||
carefully, as they describe your rights and restrictions with | ||||
respect to this document. Code Components extracted from this | ||||
document must include Simplified BSD License text as described in | ||||
Section 4.e of the Trust Legal Provisions and are provided without | ||||
warranty as described in the Simplified BSD License. | ||||
</t> | ||||
</section> | ||||
</boilerplate> | ||||
<toc> | ||||
<section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" p | ||||
n="section-toc.1"> | ||||
<name slugifiedName="name-table-of-contents">Table of Contents</name> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="section-to | ||||
c.1-1"> | ||||
<li pn="section-toc.1-1.1"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref der | ||||
ivedContent="1" format="counter" sectionFormat="of" target="section-1"/>. <xref | ||||
derivedContent="" format="title" sectionFormat="of" target="name-introduction"> | ||||
Introduction</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref der | ||||
ivedContent="2" format="counter" sectionFormat="of" target="section-2"/>. <xref | ||||
derivedContent="" format="title" sectionFormat="of" target="name-conventions">C | ||||
onventions</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.3"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.3.1"><xref der | ||||
ivedContent="3" format="counter" sectionFormat="of" target="section-3"/>. <xref | ||||
derivedContent="" format="title" sectionFormat="of" target="name-terminology">T | ||||
erminology</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4"> | ||||
<t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" form | ||||
at="counter" sectionFormat="of" target="section-4"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-applicability-statement">Applicabi | ||||
lity Statement</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5"> | ||||
<t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" form | ||||
at="counter" sectionFormat="of" target="section-5"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-sdp-data-channel-attributes">SDP D | ||||
ata Channel Attributes</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.5.2"> | ||||
<li pn="section-toc.1-1.5.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent= | ||||
"5.1" format="counter" sectionFormat="of" target="section-5.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-sdp-dcmap-attribute">S | ||||
DP DCMAP Attribute</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.5.2.1.2"> | ||||
<li pn="section-toc.1-1.5.2.1.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.1.1"><xref derived | ||||
Content="5.1.1" format="counter" sectionFormat="of" target="section-5.1.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-dcmap-attr | ||||
ibute-syntax">DCMAP Attribute Syntax</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.1.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.2.1"><xref derived | ||||
Content="5.1.2" format="counter" sectionFormat="of" target="section-5.1.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-dcmap-stre | ||||
am-id-parameter">'dcmap-stream-id' Parameter</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.1.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.3.1"><xref derived | ||||
Content="5.1.3" format="counter" sectionFormat="of" target="section-5.1.3"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-label-para | ||||
meter">'label' Parameter</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.1.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.4.1"><xref derived | ||||
Content="5.1.4" format="counter" sectionFormat="of" target="section-5.1.4"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-subprotoco | ||||
l-parameter">'subprotocol' Parameter</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.1.2.5"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.5.1"><xref derived | ||||
Content="5.1.5" format="counter" sectionFormat="of" target="section-5.1.5"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-max-retr-p | ||||
arameter">'max-retr' Parameter</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.1.2.6"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.6.1"><xref derived | ||||
Content="5.1.6" format="counter" sectionFormat="of" target="section-5.1.6"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-max-time-p | ||||
arameter">'max-time' Parameter</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.1.2.7"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.7.1"><xref derived | ||||
Content="5.1.7" format="counter" sectionFormat="of" target="section-5.1.7"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-ordered-pa | ||||
rameter">'ordered' Parameter</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.1.2.8"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.8.1"><xref derived | ||||
Content="5.1.8" format="counter" sectionFormat="of" target="section-5.1.8"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-priority-p | ||||
arameter">'priority' Parameter</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.1.2.9"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.1.2.9.1"><xref derived | ||||
Content="5.1.9" format="counter" sectionFormat="of" target="section-5.1.9"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-dcmap-mult | ||||
iplexing-category">DCMAP Multiplexing Category</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent= | ||||
"5.2" format="counter" sectionFormat="of" target="section-5.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-sdp-dcsa-attribute">SD | ||||
P DCSA Attribute</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.5.2.2.2"> | ||||
<li pn="section-toc.1-1.5.2.2.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.2.2.1.1"><xref derived | ||||
Content="5.2.1" format="counter" sectionFormat="of" target="section-5.2.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-dcsa-attri | ||||
bute-syntax">DCSA Attribute Syntax</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.5.2.2.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.5.2.2.2.2.1"><xref derived | ||||
Content="5.2.2" format="counter" sectionFormat="of" target="section-5.2.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-dcsa-multi | ||||
plexing-category">DCSA Multiplexing Category</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.6"> | ||||
<t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" form | ||||
at="counter" sectionFormat="of" target="section-6"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-sdp-offer-answer-procedures">SDP O | ||||
ffer/Answer Procedures</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.6.2"> | ||||
<li pn="section-toc.1-1.6.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent= | ||||
"6.1" format="counter" sectionFormat="of" target="section-6.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-managing-stream-identi | ||||
fiers">Managing Stream Identifiers</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent= | ||||
"6.2" format="counter" sectionFormat="of" target="section-6.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-negotiating-data-chann | ||||
el-pa">Negotiating Data Channel Parameters</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.3.1"><xref derivedContent= | ||||
"6.3" format="counter" sectionFormat="of" target="section-6.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-generating-the-initial | ||||
-offe">Generating the Initial Offer for a Data Channel</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.4.1"><xref derivedContent= | ||||
"6.4" format="counter" sectionFormat="of" target="section-6.4"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-generating-the-sdp-ans | ||||
wer">Generating the SDP Answer</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.5"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.5.1"><xref derivedContent= | ||||
"6.5" format="counter" sectionFormat="of" target="section-6.5"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-offerer-processing-of- | ||||
the-s">Offerer Processing of the SDP Answer</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.6"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.6.1"><xref derivedContent= | ||||
"6.6" format="counter" sectionFormat="of" target="section-6.6"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-modifying-the-session" | ||||
>Modifying the Session</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.6.2.6.2"> | ||||
<li pn="section-toc.1-1.6.2.6.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.6.2.1.1"><xref derived | ||||
Content="6.6.1" format="counter" sectionFormat="of" target="section-6.6.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-closing-a- | ||||
data-channel">Closing a Data Channel</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.7"> | ||||
<t indent="0" pn="section-toc.1-1.6.2.7.1"><xref derivedContent= | ||||
"6.7" format="counter" sectionFormat="of" target="section-6.7"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-various-sdp-offer-answ | ||||
er-co">Various SDP Offer/Answer Considerations</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.7"> | ||||
<t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" form | ||||
at="counter" sectionFormat="of" target="section-7"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-examples">Examples</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.8"> | ||||
<t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" form | ||||
at="counter" sectionFormat="of" target="section-8"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-security-considerations">Security | ||||
Considerations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9"> | ||||
<t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" form | ||||
at="counter" sectionFormat="of" target="section-9"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-iana-considerations">IANA Consider | ||||
ations</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.9.2"> | ||||
<li pn="section-toc.1-1.9.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent= | ||||
"9.1" format="counter" sectionFormat="of" target="section-9.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-subprotocol-identifier | ||||
s">Subprotocol Identifiers</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent= | ||||
"9.2" format="counter" sectionFormat="of" target="section-9.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-new-sdp-attributes">Ne | ||||
w SDP Attributes</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.9.2.2.2"> | ||||
<li pn="section-toc.1-1.9.2.2.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.2.2.1.1"><xref derived | ||||
Content="9.2.1" format="counter" sectionFormat="of" target="section-9.2.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-dcmap">dcm | ||||
ap</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.2.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.2.2.2.1"><xref derived | ||||
Content="9.2.2" format="counter" sectionFormat="of" target="section-9.2.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-dcsa">dcsa | ||||
</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.9.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.9.2.3.1"><xref derivedContent= | ||||
"9.3" format="counter" sectionFormat="of" target="section-9.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-registering-attributes | ||||
-for-">Registering Attributes for Use with Data Channels</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.10"> | ||||
<t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" fo | ||||
rmat="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-references">References</xref></t | ||||
> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.10.2"> | ||||
<li pn="section-toc.1-1.10.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.10.2.1.1"><xref derivedContent | ||||
="10.1" format="counter" sectionFormat="of" target="section-10.1"/>. <xref deri | ||||
vedContent="" format="title" sectionFormat="of" target="name-normative-reference | ||||
s">Normative References</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.10.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.10.2.2.1"><xref derivedContent | ||||
="10.2" format="counter" sectionFormat="of" target="section-10.2"/>. <xref deri | ||||
vedContent="" format="title" sectionFormat="of" target="name-informative-referen | ||||
ces">Informative References</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.11"> | ||||
<t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="Append | ||||
ix A" format="default" sectionFormat="of" target="section-appendix.a"/>. <xref | ||||
derivedContent="" format="title" sectionFormat="of" target="name-generic-data-ch | ||||
annel-negoti">Generic Data Channel Negotiation Aspects when Not Using DCEP</xref | ||||
></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.11.2"> | ||||
<li pn="section-toc.1-1.11.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.11.2.1.1"><xref derivedContent | ||||
="A.1" format="counter" sectionFormat="of" target="section-a.1"/>. <xref derive | ||||
dContent="" format="title" sectionFormat="of" target="name-stream-identifier-num | ||||
bering">Stream Identifier Numbering</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.11.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.11.2.2.1"><xref derivedContent | ||||
="A.2" format="counter" sectionFormat="of" target="section-a.2"/>. <xref derive | ||||
dContent="" format="title" sectionFormat="of" target="name-generic-data-channel- | ||||
negotia">Generic Data Channel Negotiation Not Using DCEP</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.11.2.2.2"> | ||||
<li pn="section-toc.1-1.11.2.2.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.11.2.2.2.1.1"><xref derive | ||||
dContent="A.2.1" format="counter" sectionFormat="of" target="section-a.2.1"/>. | ||||
<xref derivedContent="" format="title" sectionFormat="of" target="name-overview" | ||||
>Overview</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.11.2.2.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.11.2.2.2.2.1"><xref derive | ||||
dContent="A.2.2" format="counter" sectionFormat="of" target="section-a.2.2"/>. | ||||
<xref derivedContent="" format="title" sectionFormat="of" target="name-opening-a | ||||
-data-channel">Opening a Data Channel</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.11.2.2.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.11.2.2.2.3.1"><xref derive | ||||
dContent="A.2.3" format="counter" sectionFormat="of" target="section-a.2.3"/>. | ||||
<xref derivedContent="" format="title" sectionFormat="of" target="name-closing-a | ||||
-data-channel-2">Closing a Data Channel</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.12"> | ||||
<t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" form | ||||
at="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent=" | ||||
" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgeme | ||||
nts</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.13"> | ||||
<t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="" form | ||||
at="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent=" | ||||
" format="title" sectionFormat="of" target="name-contributors">Contributors</xre | ||||
f></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.14"> | ||||
<t indent="0" pn="section-toc.1-1.14.1"><xref derivedContent="" form | ||||
at="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent=" | ||||
" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Add | ||||
resses</xref></t> | ||||
</li> | ||||
</ul> | ||||
</section> | ||||
</toc> | ||||
</front> | ||||
<middle> | ||||
<section anchor="introduction" numbered="true" removeInRFC="false" toc="incl | ||||
ude" pn="section-1"> | ||||
<name slugifiedName="name-introduction">Introduction</name> | ||||
<t indent="0" pn="section-1-1"> The concept of establishing a bidirectio | ||||
nal | ||||
data channel running on top of the Stream Control Transmission | data channel running on top of the Stream Control Transmission | |||
Protocol (SCTP) is in | Protocol (SCTP) is discussed in | |||
<xref target="I-D.ietf-rtcweb-data-channel"/> allowing applications to use data | <xref target="RFC8831" format="default" sectionFormat="of" derivedContent="RFC8 | |||
channels. An in-band Data | 831"/>, allowing applications to use data channels. An in-band Data | |||
Channel Establishment Protocol (DCEP) is in <xref target="I-D.ietf-rtcweb-dat | Channel Establishment Protocol (DCEP) is described in <xref target="RFC8832" | |||
a-protocol"/>, | format="default" sectionFormat="of" derivedContent="RFC8832"/>; | |||
however other in-band or out-of-band | however, other in-band or out-of-band | |||
protocols may be used for establishing data channels. Each data | protocols may be used for establishing data channels. Each data | |||
channel consists of paired SCTP streams sharing the same SCTP Stream | channel consists of paired SCTP streams sharing the same SCTP Stream | |||
Identifier. Data channels are created by endpoint applications using | Identifier. Data channels are created by endpoint applications using | |||
the WebRTC API (Application Programming Interface), or other protocols | (1) the WebRTC API (Application Programming Interface) <xref target="WebRtcAP | |||
like CLUE | I" format="default" sectionFormat="of" derivedContent="WebRtcAPI"/> or (2) othe | |||
<xref target="I-D.ietf-clue-datachannel"/>. The protocols can be signaled | r protocols | |||
by the data channel "subprotocol" parameter, conceptually similar to | (e.g., Controlling Multiple Streams for Telepresence (CLUE) | |||
the WebSocket <xref target="RFC5234"/> "subprotocol". However, apart from the | <xref target="RFC8850" format="default" sectionFormat="of" derivedContent="RFC8 | |||
850"/>). The protocols can be signaled | ||||
by the data channel 'subprotocol' parameter, conceptually similar to | ||||
a WebSocket subprotocol as described in <xref target="RFC6455" format="defaul | ||||
t" sectionFormat="of" derivedContent="RFC6455"/>. | ||||
However, apart from the | ||||
"subprotocol" value transmitted to the peer, an endpoint application can agre e on how to instantiate a given | "subprotocol" value transmitted to the peer, an endpoint application can agre e on how to instantiate a given | |||
subprotocol on a data channel, and whether it is signaled in-band | subprotocol on a data channel, and whether it is signaled in-band | |||
using DCEP or out-of-band using a non-DCEP protocol (or both). </t> | using DCEP or out-of-band using a non-DCEP protocol (or both).</t> | |||
<t>This document defines SDP offer/answer <xref target="R | <t indent="0" pn="section-1-2">This document defines Session Description P | |||
FC3264"/> procedures that enable out-of-band negotiation | rotocol (SDP) offer/answer | |||
procedures <xref target="RFC3264" format="default" sectionFormat="of" deri | ||||
vedContent="RFC3264"/> that enable out-of-band negotiation | ||||
for establishing data channels for transport of well-defined subprotocols. | for establishing data channels for transport of well-defined subprotocols. | |||
These procedures are based on generic SDP offer/answer negotiation rules for | These procedures are based on generic SDP offer/answer negotiation rules for | |||
SCTP | SCTP-based media transport as specified in <xref target="RFC8841" format="defaul | |||
based media transport as specified in <xref target="I-D.ietf-mmusic-sctp-sdp" | t" sectionFormat="of" derivedContent="RFC8841"/> for | |||
/> for | the SDP "m=" line proto values UDP/DTLS/SCTP and TCP/DTLS/SCTP. | |||
the SDP "m" line proto values UDP/DTLS/SCTP and TCP/DTLS/SCTP. | </t> | |||
<t indent="0" pn="section-1-3">This document uses MSRP (the Message Sessio | ||||
</t> | n Relay Protocol) <xref target="RFC4975" format="default" sectionFormat="of" der | |||
<t>This document uses MSRP (Message Session Relay Protoco | ivedContent="RFC4975"/> | |||
l) <xref target="RFC4975"/> | and BFCP (the Binary Floor Control Protocol) <xref target="RFC8855" format="d | |||
and BFCP (Binary Floor Control Protocol) <xref target="RFC4582"/> in many of | efault" sectionFormat="of" derivedContent="RFC8855"/> in several examples. It do | |||
the examples. It does not provide a | es not provide a | |||
complete specification of how to negotiate the use of a data channel to trans port | complete specification of how to negotiate the use of a data channel to trans port | |||
MSRP. Procedures specific to each | MSRP. Procedures specific to each | |||
subprotocol would have to be documented elsewhere. For MSRP they are document ed in <xref target="I-D.ietf-mmusic-msrp-usage-data-channel"/> . The use of MSRP in some examples is only to show how the generic | subprotocol would have to be documented elsewhere. For MSRP, they are documen ted in <xref target="RFC8873" format="default" sectionFormat="of" derivedContent ="RFC8873"/>. The use of MSRP in some examples is only to show how the generic | |||
procedures described herein might apply to a specific subprotocol. | procedures described herein might apply to a specific subprotocol. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Conventions"> | <section numbered="true" removeInRFC="false" toc="include" pn="section-2"> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", | <name slugifiedName="name-conventions">Conventions</name> | |||
"SHALL NOT", | <t indent="0" pn="section-2-1">The key words "<bcp14>MUST</bcp14>", "<bcp1 | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED","MAY", and "OPTIONAL | 4>MUST NOT</bcp14>", | |||
" in this | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
document are to be interpreted as described in BCP14 <xref target="RFC2119"/ | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
> | "<bcp14>SHOULD NOT</bcp14>", | |||
<xref target="RFC8174"/> when, and only when, the | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
y | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
appear in all capitals, as shown here. | to be interpreted as described in BCP 14 <xref target="RFC2119" format="def | |||
ault" sectionFormat="of" derivedContent="RFC2119"/> | ||||
</t> | <xref target="RFC8174" format="default" sectionFormat="of" derivedConten | |||
</section> | t="RFC8174"/> when, and only when, they appear in all capitals, | |||
<section title="Terminology" anchor="terminology"> | as shown here.</t> | |||
<t>This document uses the following terms: | </section> | |||
<list style="hanging"> | <section anchor="terminology" numbered="true" removeInRFC="false" toc="inclu | |||
<t>Data channel: A WebRTC data channel as | de" pn="section-3"> | |||
specified in | <name slugifiedName="name-terminology">Terminology</name> | |||
<xref target="I-D.ietf-rtcweb-data-channel"/>.</t> | <t indent="0" pn="section-3-1">This document uses the following terms: | |||
<t>Data channel stack: An entity which, u | </t> | |||
pon application request, | <dl newline="false" spacing="normal" indent="3" pn="section-3-2"> | |||
runs the data channel protocol to keep track of states, sending and receivi | <dt pn="section-3-2.1">Data channel:</dt> | |||
ng | <dd pn="section-3-2.2">A WebRTC data channel as specified in | |||
data. If the application is a browser based JavaScript application | <xref target="RFC8831" format="default" sectionFormat="of" derivedContent=" | |||
RFC8831"/>.</dd> | ||||
<dt pn="section-3-2.3">Data channel stack:</dt> | ||||
<dd pn="section-3-2.4">An entity that, upon application request, | ||||
runs the data channel protocol to keep track of states as well as the | ||||
sending and receiving of data. If the application is a browser-based JavaSc | ||||
ript application, | ||||
then this stack resides in the browser. If the application is a | then this stack resides in the browser. If the application is a | |||
native application then this stack resides in the application and is access | native application, then this stack resides in the application and is acces | |||
ible | sible | |||
via some sort of APIs.</t> | via some sort of API or APIs.</dd> | |||
<t>Data channel properties: Fixed propert | <dt pn="section-3-2.5">Data channel properties:</dt> | |||
ies assigned to a data | <dd pn="section-3-2.6">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 delivery, etc.).</t | channel (e.g., stream identifier, reliability, order of delivery).</dd> | |||
> | <dt pn="section-3-2.7">Data channel subprotocol:</dt> | |||
<t>Data channel subprotocol: The applicat | <dd pn="section-3-2.8">The application protocol that is transported | |||
ion protocol which is transported | ||||
over a single data channel. Data channel subprotocol messages are sent as d ata | over a single data channel. Data channel subprotocol messages are sent as d ata | |||
channel payload over an established data channel. SDP offer/answer exchange can be used | channel payload over an established data channel. An SDP offer/answer excha nge can be used | |||
as specified in this document to negotiate the establishment of data channe ls, | as specified in this document to negotiate the establishment of data channe ls, | |||
corresponding data channel properties, associated data channel subprotocols | corresponding data channel properties, associated data channel subprotocols | |||
and data | , and data | |||
channel subprotocol properties. In this case the data channel subprotocols | channel subprotocol properties. In this case, the data channel subprotocols | |||
may be identified | may be identified | |||
by the values of the "subprotocol" parameters of the SDP "a=dcmap" attribut | by the values of the 'subprotocol' parameters of the SDP "a=dcmap:" attribu | |||
e as | te as | |||
described in <xref target="subprotocol-parameter"/>. Within this document t | described in <xref target="subprotocol-parameter" format="default" sectionF | |||
he term | ormat="of" derivedContent="Section 5.1.4"/>. Within this document, the term | |||
"data channel subprotocol" is often abbreviated as just "subprotocol". | "data channel subprotocol" is often abbreviated as just "subprotocol". | |||
</t> | </dd> | |||
<t>DCEP: Data Channel Establishment Proto | <dt pn="section-3-2.9">DCEP:</dt> | |||
col defined in | <dd pn="section-3-2.10">Data Channel Establishment Protocol, as defined | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>.</t> | in | |||
<t>In-band: Transmission through the peer | <xref target="RFC8832" format="default" sectionFormat="of" derivedContent=" | |||
-to-peer SCTP association.</t> | RFC8832"/>.</dd> | |||
<t>Out-of-band: Transmission through the | <dt pn="section-3-2.11">In-band:</dt> | |||
application signaling path.</t> | <dd pn="section-3-2.12">Transmission through the peer-to-peer SCTP assoc | |||
<t>Peer: From the perspective of one of t | iation.</dd> | |||
he agents in a session, its | <dt pn="section-3-2.13">Out-of-band:</dt> | |||
<dd pn="section-3-2.14">Transmission through the application signaling p | ||||
ath.</dd> | ||||
<dt pn="section-3-2.15">Peer:</dt> | ||||
<dd pn="section-3-2.16">From the perspective of one of the agents in a s | ||||
ession, its | ||||
peer is the other agent. Specifically, from the perspective of the | peer is the other agent. Specifically, from the perspective of the | |||
SDP offerer, the peer is the SDP answerer. From the perspective of | SDP offerer, the peer is the SDP answerer. From the perspective of | |||
the SDP answerer, the peer is the SDP offerer.</t> | the SDP answerer, the peer is the SDP offerer.</dd> | |||
<t>SCTP Stream Sequence Number (SSN): the | <dt pn="section-3-2.17">SCTP Stream Sequence Number (SSN):</dt> | |||
SCTP stream sequence number as specified | <dd pn="section-3-2.18">The SCTP Stream Sequence Number, as specified | |||
in <xref target="RFC4960"/>.</t> | in <xref target="RFC4960" format="default" sectionFormat="of" derivedConten | |||
<t>Stream identifier: The identifier of t | t="RFC4960"/>.</dd> | |||
he outbound and inbound | <dt pn="section-3-2.19">Stream identifier:</dt> | |||
SCTP streams composing a data channel.</t> | <dd pn="section-3-2.20">The identifier of the outbound and inbound | |||
</list> | SCTP streams composing a data channel.</dd> | |||
</t> | </dl> | |||
</section> | </section> | |||
<section title=" Applicability Statement" anchor="appl_statement" | <section anchor="appl_statement" numbered="true" removeInRFC="false" toc="in | |||
> | clude" pn="section-4"> | |||
<t> The mechanism in this document only applies to the Se | <name slugifiedName="name-applicability-statement">Applicability Statement | |||
ssion Description | </name> | |||
Protocol (SDP) <xref target="I-D.ietf-mmusic-rfc4566bis"/> when used together | <t indent="0" pn="section-4-1"> The mechanism described in this document o | |||
with the SDP offer/answer | nly applies to SDP <xref target="RFC8866" format="default" sectionFormat="of" de | |||
mechanism <xref target="RFC3264"/>. Declarative usage of SDP is out of scope | rivedContent="RFC8866"/> when used together with the SDP offer/answer | |||
for this | mechanism <xref target="RFC3264" format="default" sectionFormat="of" derivedC | |||
document, and is thus undefined.</t> | ontent="RFC3264"/>. Declarative usage of SDP is out of scope for this | |||
</section> | document and is thus undefined.</t> | |||
<section title="SDP Data Channel Attributes" anchor="sdp_synt"> | </section> | |||
<t>This section defines two new SDP media-level attribute | <section anchor="sdp_synt" numbered="true" removeInRFC="false" toc="include" | |||
s that can be used together with the SDP Offer/Answer mechanism to negotiate dat | pn="section-5"> | |||
a channel-specific and subprotocol-specific parameters without the usage of DCEP | <name slugifiedName="name-sdp-data-channel-attributes">SDP Data Channel At | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>. The first attribute provides fo | tributes</name> | |||
r negotiation of | <t indent="0" pn="section-5-1">This section defines two new SDP media-leve | |||
channel-specific parameters. The second attribute provides for | l attributes that can be | |||
used together with the SDP Offer/Answer mechanism to negotiate | ||||
data-channel-specific and subprotocol-specific parameters without the | ||||
usage of DCEP <xref target="RFC8832" format="default" sectionFormat="of" d | ||||
erivedContent="RFC8832"/>. The first attribute (<xref target="subsec-sdp-attr-fo | ||||
r-dc-par-neg" format="default" sectionFormat="of" derivedContent="Section 5.1"/> | ||||
) provides for negotiation of | ||||
channel-specific parameters. The second attribute (<xref target="prot_att" | ||||
format="default" sectionFormat="of" derivedContent="Section 5.2"/>) provides for | ||||
negotiation of subprotocol-specific parameters.</t> | negotiation of subprotocol-specific parameters.</t> | |||
<t> | <aside pn="section-5-2"> | |||
Note: Appendix A provides information how data channels work in general and | <t indent="0" pn="section-5-2.1"> | |||
especially summarizes some key aspects, which should be considered | Note: <xref target="generic-out-of-band-aspects" format="default" sectionFormat= | |||
for the negotiation of data channels if DCEP is not used. | "of" derivedContent="Appendix A"/> provides information | |||
</t> | regarding how data channels work in general. In particular, it | |||
<section title="SDP DCMAP Attribute " anchor="subsec-sdp- | summarizes some key aspects that should be considered | |||
attr-for-dc-par-neg"> | for the negotiation of data channels if DCEP is not used.</t> | |||
<t>This section defines a new media level attribu | </aside> | |||
te "a=dcmap:" that defines the data channel parameters for | <section anchor="subsec-sdp-attr-for-dc-par-neg" numbered="true" removeInR | |||
FC="false" toc="include" pn="section-5.1"> | ||||
<name slugifiedName="name-sdp-dcmap-attribute">SDP DCMAP Attribute</name | ||||
> | ||||
<t indent="0" pn="section-5.1-1">This section defines a new media-level | ||||
attribute, "a=dcmap:", that defines the data channel parameters for | ||||
each data channel to be negotiated. </t> | each data channel to be negotiated. </t> | |||
<t>The attribute is used to create bi-directional SCTP data channels | <t indent="0" pn="section-5.1-2">This attribute is used to create bidire ctional SCTP data channels | |||
having the same set of attributes. The data channel properties | having the same set of attributes. The data channel properties | |||
(reliable/partially reliable, ordered/unordered) need to be suitable per the subprotocol transport requirements. | (reliable / partially reliable, ordered/unordered) need to be suitable per th e subprotocol transport requirements. | |||
</t> | </t> | |||
<section title="DCMAP Attribute Syntax" anchor="d | <section anchor="dcmap-attr-definition" numbered="true" removeInRFC="fal | |||
cmap-attr-definition"> | se" toc="include" pn="section-5.1.1"> | |||
<t>"a=dcmap:" is a media level attribute | <name slugifiedName="name-dcmap-attribute-syntax">DCMAP Attribute Synt | |||
having the following ABNF | ax</name> | |||
(Augmented Backus-Naur Form, <xref target="RFC5234"/>) syntax. | <t indent="0" pn="section-5.1.1-1">"a=dcmap:" is a media-level attribu | |||
te having the following | ||||
<figure align="left" title=""> | definition and ABNF (Augmented Backus-Naur Form) syntax <xref target=" | |||
<artwork align="left"><![ | RFC5234" format="default" sectionFormat="of" derivedContent="RFC5234"/>. | |||
CDATA[ | ||||
Formal Syntax: | ||||
Name: dcmap | ||||
Value: dcmap-value | ||||
Usage Level: media | ||||
Charset Dependent: no | ||||
Syntax: | ||||
</t> | ||||
<table anchor="dcmap-attrib" align="center" pn="table-1"> | ||||
<name slugifiedName="name-adcmap-attribute-definition">"a=dcmap:" At | ||||
tribute Definition</name> | ||||
<thead> | ||||
<tr> | ||||
<th colspan="2" align="center" rowspan="1">"a=dcmap:" Attribute< | ||||
/th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left" colspan="1" rowspan="1">Name</td> | ||||
<td align="left" colspan="1" rowspan="1">dcmap</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left" colspan="1" rowspan="1">Value</td> | ||||
<td align="left" colspan="1" rowspan="1">dcmap-value</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left" colspan="1" rowspan="1">Usage Level</td> | ||||
<td align="left" colspan="1" rowspan="1">media</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left" colspan="1" rowspan="1">Charset Dependent</td> | ||||
<td align="left" colspan="1" rowspan="1">No</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t indent="0" pn="section-5.1.1-3">Formal syntax:</t> | ||||
<sourcecode name="abnf-1" type="abnf" markers="false" pn="section-5.1. | ||||
1-4"> | ||||
dcmap-value = dcmap-stream-id | dcmap-value = dcmap-stream-id | |||
[ SP dcmap-opt *(";" dcmap-opt) ] | [ SP dcmap-opt *(";" dcmap-opt) ] | |||
dcmap-opt = ordering-opt / subprotocol-opt / label-opt | dcmap-opt = ordering-opt / subprotocol-opt / label-opt | |||
/ maxretr-opt / maxtime-opt / priority-opt | / maxretr-opt / maxtime-opt / priority-opt | |||
; maxretr-opt and maxtime-opt are mutually exclusive | ; maxretr-opt and maxtime-opt are | |||
; | ; mutually exclusive | |||
dcmap-stream-id = 1*5DIGIT | dcmap-stream-id = 1*5DIGIT | |||
ordering-opt = "ordered=" ordering-value | ordering-opt = "ordered=" ordering-value | |||
ordering-value = "true" / "false" | ordering-value = "true" / "false" | |||
subprotocol-opt = "subprotocol=" quoted-string | subprotocol-opt = "subprotocol=" quoted-string | |||
label-opt = "label=" quoted-string | label-opt = "label=" quoted-string | |||
maxretr-opt = "max-retr=" maxretr-value | maxretr-opt = "max-retr=" maxretr-value | |||
maxretr-value = "0" / integer | maxretr-value = "0" / integer | |||
; number of retransmissions, | ; number of retransmissions, | |||
; less than 2^32, | ; less than 2^32, | |||
; derived from 'Reliability Parameter' of | ; derived from 'Reliability Parameter' [RFC8832] | |||
; [I-D.ietf-rtcweb-data-protocol] | ||||
maxtime-opt = "max-time=" maxtime-value | maxtime-opt = "max-time=" maxtime-value | |||
maxtime-value = "0" / integer | maxtime-value = "0" / integer | |||
; milliseconds, | ; milliseconds, | |||
; less than 2^32, | ; less than 2^32, | |||
; derived from 'Reliability Parameter' of | ; derived from 'Reliability Parameter' [RFC8832] | |||
; [I-D.ietf-rtcweb-data-protocol] | ||||
priority-opt = "priority=" priority-value | priority-opt = "priority=" priority-value | |||
priority-value = "0" / integer | priority-value = "0" / integer | |||
; unsigned integer value indicating the priority of | ; unsigned integer value indicating the priority of | |||
; the data channel, | ; the data channel, | |||
; less than 2^16, | ; less than 2^16, | |||
; derived from 'Priority' of | ; derived from 'Priority' [RFC8832] | |||
; [I-D.ietf-rtcweb-data-protocol] | ||||
quoted-string = DQUOTE *(quoted-char / escaped-char) DQUOTE | quoted-string = DQUOTE *(quoted-char / escaped-char) DQUOTE | |||
quoted-char = SP / quoted-visible | quoted-char = SP / quoted-visible | |||
quoted-visible = %x21 / %x23-24 / %x26-7E ; VCHAR without " or % | quoted-visible = %x21 / %x23-24 / %x26-7E ; VCHAR without " or % | |||
escaped-char = "%" HEXDIG HEXDIG | escaped-char = "%" HEXDIG HEXDIG | |||
DQUOTE = <from-RFC5234> | DQUOTE = <from RFC 5234> | |||
integer = <from-RFC4566> | integer = <from RFC 8866></sourcecode> | |||
<t indent="0" pn="section-5.1.1-5">Examples:</t> | ||||
Examples: | <sourcecode name="sdp-1" type="sdp" markers="false" pn="section-5.1.1- | |||
6"> | ||||
a=dcmap:0 | a=dcmap:0 | |||
a=dcmap:1 subprotocol="bfcp";max-time=60000;priority=512 | a=dcmap:1 subprotocol="bfcp";max-time=60000;priority=512 | |||
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;priority=128 | a=dcmap:3 label="Label 1";ordered=false;max-retr=5;priority=128 | |||
a=dcmap:4 label="foo%09bar";ordered=true;max-time=15000 | a=dcmap:4 label="foo%09bar";ordered=true;max-time=15000</sourcecode> | |||
]]></artwork> | <aside pn="section-5.1.1-7"> | |||
</figure> | <t indent="0" pn="section-5.1.1-7.1">Note: The last example (a=dcmap | |||
</t> | :4) shows a 'label' parameter value | |||
<t> | that contains one nonprintable 'escaped-char' character | |||
<list style="hanging"> | ||||
<t>Note: The last example | ||||
(a=dcmap:4) shows a 'label' parameter value | ||||
which contains one non-printable 'escaped-char' character | ||||
(the tabulator character).</t> | (the tabulator character).</t> | |||
</list> | </aside> | |||
</t> | <t indent="0" pn="section-5.1.1-8">Within an "a=dcmap:" attribute line | |||
<t>Within an 'a=dcmap:' attribute line's | 's 'dcmap-opt' value, only one | |||
'dcmap-opt' value only one | ||||
'maxretr-opt' parameter or one 'maxtime-opt' parameter may be present. | 'maxretr-opt' parameter or one 'maxtime-opt' parameter may be present. | |||
Both MUST NOT be present.</t> | Both parameters <bcp14>MUST NOT</bcp14> be present.</t> | |||
</section> | </section> | |||
<section title="Dcmap-stream-id Parameter" anchor | <section anchor="dcmap-stream-id-param-definition" numbered="true" remov | |||
="dcmap-stream-id-param-definition"> | eInRFC="false" toc="include" pn="section-5.1.2"> | |||
<t>The 'dcmap-stream-id' parameter indica | <name slugifiedName="name-dcmap-stream-id-parameter">'dcmap-stream-id' | |||
tes the SCTP stream identifier | Parameter</name> | |||
<t indent="0" pn="section-5.1.2-1">The 'dcmap-stream-id' parameter ind | ||||
icates the SCTP stream identifier | ||||
within the SCTP association used to form the data channel.</t> | within the SCTP association used to form the data channel.</t> | |||
</section> | </section> | |||
<section title="Label Parameter"> | <section numbered="true" removeInRFC="false" toc="include" pn="section-5 | |||
<t>The 'label' parameter indicates the na | .1.3"> | |||
me of the | <name slugifiedName="name-label-parameter">'label' Parameter</name> | |||
<t indent="0" pn="section-5.1.3-1">The 'label' parameter indicates the | ||||
name of the | ||||
channel. It represents a label that can be used to distinguish, | channel. It represents a label that can be used to distinguish, | |||
in the context of the WebRTC API <xref target="WebRtcAPI"/>, | in the context of the WebRTC API <xref target="WebRtcAPI" format="default " sectionFormat="of" derivedContent="WebRtcAPI"/>, | |||
an RTCDataChannel object from other RTCDataChannel objects. | an RTCDataChannel object from other RTCDataChannel objects. | |||
This parameter maps to the 'Label' parameter defined in | This parameter maps to the 'Label' parameter defined in | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>. | <xref target="RFC8832" format="default" sectionFormat="of" derivedContent ="RFC8832"/>. | |||
The 'label' parameter is optional. If it is not | The 'label' parameter is optional. If it is not | |||
present, then its value defaults to the empty string. | present, then its value defaults to the empty string. | |||
</t> | </t> | |||
<t>In order to communicate with WEbRTC AP | <t indent="0" pn="section-5.1.3-2">In order to communicate with the We | |||
I the label attribute should: | bRTC API, the 'label' parameter | |||
<list style="symbols"> | should | |||
<t>Serialize the WebRTC l | </t> | |||
abel as a UTF-8 string <xref target="RFC3629"/>.</t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section | |||
<t>Treat the UTF-8 serial | -5.1.3-3"> | |||
ization as a series of bytes</t> | <li pn="section-5.1.3-3.1">Serialize the WebRTC label as a UTF-8 str | |||
<t>For each byte in the s | ing <xref target="RFC3629" format="default" sectionFormat="of" derivedContent="R | |||
erialization: | FC3629"/>.</li> | |||
<li pn="section-5.1.3-3.2">Treat the UTF-8 serialization as a series | ||||
<list style="symb | of bytes.</li> | |||
ols"> | <li pn="section-5.1.3-3.3"> | |||
<t>If the | <t indent="0" pn="section-5.1.3-3.3.1">For each byte in the serial | |||
byte can be expressed as a `quoted-char`, do so</t> | ization, | |||
<t>Otherw | </t> | |||
ise, express the byte as an `escaped-char`.</t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="sec | |||
</list> | tion-5.1.3-3.3.2"> | |||
</t> | <li pn="section-5.1.3-3.3.2.1">If the byte can be expressed as a | |||
</list> | 'quoted-char', do so.</li> | |||
</t> | <li pn="section-5.1.3-3.3.2.2">Otherwise, express the byte as an | |||
<t>Note: The empty string MAY also be exp | 'escaped-char'.</li> | |||
licitly used as a 'label' value, | </ul> | |||
</li> | ||||
</ul> | ||||
<aside pn="section-5.1.3-4"> | ||||
<t indent="0" pn="section-5.1.3-4.1">Note: The empty string can also | ||||
be explicitly used as a '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. | present at all. | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/> allows the DATA_CHANNEL_OP EN | <xref target="RFC8832" format="default" sectionFormat="of" derivedContent ="RFC8832"/> allows the DATA_CHANNEL_OPEN | |||
message's 'Label' value to be an empty string.</t> | message's 'Label' value to be an empty string.</t> | |||
</section> | </aside> | |||
<section title="Subprotocol Parameter" anchor="su | </section> | |||
bprotocol-parameter"> | <section anchor="subprotocol-parameter" numbered="true" removeInRFC="fal | |||
<t>The 'subprotocol' parameter indicates | se" toc="include" pn="section-5.1.4"> | |||
which protocol the | <name slugifiedName="name-subprotocol-parameter">'subprotocol' Paramet | |||
er</name> | ||||
<t indent="0" pn="section-5.1.4-1">The 'subprotocol' parameter indicat | ||||
es which protocol the | ||||
client expects to exchange via the channel. | client expects to exchange via the channel. | |||
This parameter maps to the 'Protocol' parameter defined in | This parameter maps to the 'Protocol' parameter defined in | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>. | <xref target="RFC8832" format="default" sectionFormat="of" derivedContent | |||
<xref target="IANA_subproto_ids"/> specifies how new subprotocol paramete | ="RFC8832"/>. | |||
r | <xref target="IANA_subproto_ids" format="default" sectionFormat="of" deri | |||
values are registered. | vedContent="Section 9.1"/> specifies how values for new subprotocol parameters a | |||
re registered. | ||||
'subprotocol' is an optional parameter. | 'subprotocol' is an optional parameter. | |||
If the 'subprotocol' parameter is not present, then its value | If the 'subprotocol' parameter is not present, then its value | |||
defaults to an empty string.</t> | defaults to an empty string.</t> | |||
<t> Note: The empty string MAY also be ex | <aside pn="section-5.1.4-2"> | |||
plicitly used as 'subprotocol' value, | <t indent="0" pn="section-5.1.4-2.1"> Note: The empty string can als | |||
o be | ||||
explicitly used as a 'subprotocol' value, | ||||
such that 'subprotocol=""' is equivalent to the 'subprotocol' parameter n ot being | such that 'subprotocol=""' is equivalent to the 'subprotocol' parameter n ot being | |||
present at all. <xref target="I-D.ietf-rtcweb-data-protocol"/> allows the | present at all. <xref target="RFC8832" format="default" sectionFormat="of | |||
DATA_CHANNEL_OPEN message's 'Subprotocol' value to be an empty string. | " derivedContent="RFC8832"/> allows the | |||
</t> | DATA_CHANNEL_OPEN message's 'Protocol' value to be an empty string. | |||
</section> | </t> | |||
<section title="Max-retr Parameter" anchor="max-r | </aside> | |||
etr-param-definition"> | </section> | |||
<t>This parameter indicates that the data | <section anchor="max-retr-param-definition" numbered="true" removeInRFC= | |||
channel is partially reliable. | "false" toc="include" pn="section-5.1.5"> | |||
<name slugifiedName="name-max-retr-parameter">'max-retr' Parameter</na | ||||
me> | ||||
<t indent="0" pn="section-5.1.5-1">This parameter indicates that the d | ||||
ata channel is partially reliable. | ||||
The 'max-retr' parameter indicates the maximal number of times a user mes sage will | The 'max-retr' parameter indicates the maximal number of times a user mes sage will | |||
be retransmitted. The max-retr parameter is optional. If | be retransmitted. The 'max-retr' parameter is optional. If | |||
the max-retr parameter and the max-time parameter are not present, then r | the 'max-retr' parameter and the 'max-time' parameter are not present, th | |||
eliable | en reliable | |||
transmission is performed as specified in <xref target="RFC4960"/>. | transmission is performed as specified in <xref target="RFC4960" format=" | |||
default" sectionFormat="of" derivedContent="RFC4960"/>. | ||||
This parameter maps to the 'Number of RTX' parameter | This parameter maps to the 'Number of RTX' parameter | |||
defined in <xref target="I-D.ietf-rtcweb-data-protocol"/>.</t> | defined in <xref target="RFC8832" format="default" sectionFormat="of" der | |||
</section> | ivedContent="RFC8832"/>.</t> | |||
<section title="Max-time Parameter"> | </section> | |||
<t> This parameter indicates that the dat | <section numbered="true" removeInRFC="false" toc="include" pn="section-5 | |||
a channel is partially reliable. | .1.6"> | |||
<name slugifiedName="name-max-time-parameter">'max-time' Parameter</na | ||||
me> | ||||
<t indent="0" pn="section-5.1.6-1"> This parameter indicates that the | ||||
data channel is partially reliable. | ||||
A user message will no longer be transmitted or retransmitted after | A user message will no longer be transmitted or retransmitted after | |||
a specified life-time given in milliseconds in the 'max-time' | a specified lifetime, given in milliseconds, in the 'max-time' | |||
parameter. The life-time starts when providing the user message to the pr | parameter. The lifetime starts when providing the user message to the pro | |||
otocol stack. | tocol stack. | |||
The max-time parameter is optional. If the max-retr parameter and the max-time | The 'max-time' parameter is optional. If the 'max-retr' parameter and the 'max- | |||
parameter are not present, then reliable | time' parameter are not present, then reliable | |||
transmission is performed as specified in <xref target="RFC4960"/>. | transmission is performed as specified in <xref target="RFC4960" format=" | |||
default" sectionFormat="of" derivedContent="RFC4960"/>. | ||||
This parameter maps to the 'Lifetime in ms' parameter | This parameter maps to the 'Lifetime in ms' parameter | |||
defined in <xref target="I-D.ietf-rtcweb-data-protocol"/>.</t> | defined in <xref target="RFC8832" format="default" sectionFormat="of" der | |||
</section> | ivedContent="RFC8832"/>.</t> | |||
<section title="Ordered Parameter" anchor="ordere | </section> | |||
d-param-description"> | <section anchor="ordered-param-description" numbered="true" removeInRFC= | |||
<t>The 'ordered' parameter with value "tr | "false" toc="include" pn="section-5.1.7"> | |||
ue" indicates that the receiver will | <name slugifiedName="name-ordered-parameter">'ordered' Parameter</name | |||
> | ||||
<t indent="0" pn="section-5.1.7-1">The 'ordered' parameter with value | ||||
"true" indicates that the receiver will | ||||
dispatch DATA chunks in the data channel to the upper layer | dispatch DATA chunks in the data channel to the upper layer | |||
while preserving the order. The ordered parameter is optional and | while preserving the order. The 'ordered' parameter is optional and | |||
takes two values: "true" for ordered and "false" for unordered delivery | takes two values -- "true" for ordered delivery and "false" for unordered | |||
delivery -- | ||||
with "true" as the default value. | with "true" as the default value. | |||
Any other value is ignored and default "ordered=true" is assumed. | Any other value is ignored, and the default "ordered=true" is assumed. | |||
In the absence of this parameter "ordered=true" is assumed. | In the absence of this parameter, "ordered=true" is assumed. | |||
This parameter maps to | This parameter maps to | |||
the ordered or unordered data channel types as defined in | the ordered or unordered data channel types as defined in | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>.</t> | <xref target="RFC8832" format="default" sectionFormat="of" derivedContent | |||
</section> | ="RFC8832"/>.</t> | |||
<section title="Priority Parameter" anchor="prior | </section> | |||
ity-param-description"> | <section anchor="priority-param-description" numbered="true" removeInRFC | |||
<t>The 'priority' parameter indicates the | ="false" toc="include" pn="section-5.1.8"> | |||
data channel's priority | <name slugifiedName="name-priority-parameter">'priority' Parameter</na | |||
me> | ||||
<t indent="0" pn="section-5.1.8-1">The 'priority' parameter indicates | ||||
the data channel's priority | ||||
relative to the priorities of other data channels, which may | relative to the priorities of other data channels, which may | |||
additionally exist over the same SCTP association. | additionally exist over the same SCTP association. | |||
The 'priority' parameter maps to the 'Priority' parameter defined in | The 'priority' parameter maps to the 'Priority' parameter defined in | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>. | <xref target="RFC8832" format="default" sectionFormat="of" derivedContent ="RFC8832"/>. | |||
The 'priority' parameter is optional. | The 'priority' parameter is optional. | |||
In the absence of this parameter "priority=256" is assumed. | In the absence of this parameter, "priority=256" is assumed. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="DCMAP Multiplexing Category" anch | <section anchor="dcmap-mux-category" numbered="true" removeInRFC="false" | |||
or="dcmap-mux-category"> | toc="include" pn="section-5.1.9"> | |||
<t>The multiplexing category <xref target | <name slugifiedName="name-dcmap-multiplexing-category">DCMAP Multiplex | |||
="I-D.ietf-mmusic-sdp-mux-attributes"/> of the "a=dcmap:" attribute is SPECIAL. | ing Category</name> | |||
</t> | <t indent="0" pn="section-5.1.9-1">The multiplexing category <xref tar | |||
<t>As the usage of multiple SCTP associat | get="RFC8859" format="default" sectionFormat="of" derivedContent="RFC8859"/> of | |||
ions on top of a single DTLS | the "a=dcmap:" attribute is SPECIAL. | |||
association is outside the scope of <xref target="I-D.ietf-mmusic-sctp-sd | </t> | |||
p"/>, | <t indent="0" pn="section-5.1.9-2">As the usage of multiple SCTP assoc | |||
iations on top of a single DTLS | ||||
association is outside the scope of <xref target="RFC8841" format="defaul | ||||
t" sectionFormat="of" derivedContent="RFC8841"/>, | ||||
no "a=dcmap:" attribute multiplexing rules are specified for the UDP/DTLS /SCTP and | no "a=dcmap:" attribute multiplexing rules are specified for the UDP/DTLS /SCTP and | |||
TCP/DTLS/SCTP proto values. | TCP/DTLS/SCTP proto values. | |||
If future extensions of <xref target="I-D.ietf-mmusic-sctp-sdp"/> define how to | If future extensions of <xref target="RFC8841" format="default" sectionFo rmat="of" derivedContent="RFC8841"/> define how to | |||
negotiate multiplexing of multiple SCTP associations on top of a single D TLS | negotiate multiplexing of multiple SCTP associations on top of a single D TLS | |||
association, or how to add multiple SCTP associations to one BUNDLE group , then | association or how to add multiple SCTP associations to one BUNDLE group, then | |||
multiplexing rules for the "a=dcmap:" attribute need to be | multiplexing rules for the "a=dcmap:" attribute need to be | |||
defined as well, for instance in an extension of this SDP offer/answer ba | defined as well -- for instance, in an extension of this specification. | |||
sed data channel | </t> | |||
negotiation specification. | </section> | |||
</t> | </section> | |||
</section> | <section anchor="prot_att" numbered="true" removeInRFC="false" toc="includ | |||
</section> | e" pn="section-5.2"> | |||
<!-- subsec-sdp-attr-for-dc-par-neg --> | <name slugifiedName="name-sdp-dcsa-attribute">SDP DCSA Attribute</name> | |||
<section title="SDP DCSA Attribute" anchor="prot_att"> | <t indent="0" pn="section-5.2-1">In the SDP media description, each data | |||
<t>In the SDP media description, each data channe | channel declaration | |||
l declaration MAY also be followed | <bcp14>MAY</bcp14> also be followed by other SDP attributes, which | |||
by other media level SDP attributes, which are either specifically defined | apply to the corresponding data channel and its subprotocol. Each of | |||
for or | these attributes is represented by one new "a=dcsa:" attribute line | |||
applied to the subprotocol in use. | that references another SDP attribute defined for use with this data | |||
Each of these attributes is represented by one new attribute line, and | channel's subprotocol. Instructions for registering attributes for use | |||
it includes the contents of a media-level SDP attribute already | with a data channel are given in <xref target="IANA-reg-data-channel-att | |||
defined for use with this (sub)protocol in another IETF document. | ribs" format="default" sectionFormat="of" derivedContent="Section 9.3"/>.</t> | |||
Subprotocol specific attributes MAY also be defined for exclusive | <t indent="0" pn="section-5.2-2">Each SDP attribute that is related to t | |||
use with data channel transport, but MUST use the same syntax | he subprotocol and that would normally | |||
described here for other subprotocol related attributes.</t> | be used to negotiate the subprotocol using the SDP offer/answer mechanism | |||
<t>Each SDP attribute, related to the subprotocol | is replaced with | |||
, that would normally | an attribute of the form "a=dcsa:stream-id original‑attribute", | |||
be used to negotiate the subprotocol using SDP offer/answer is replaced wi | where "dcsa" stands for "data channel subprotocol attribute", | |||
th | "stream-id" is the SCTP stream identifier assigned to this subprotocol | |||
an attribute of the form "a=dcsa:stream-id original-attribute", | instance, and "original-attribute" represents the contents of the | |||
where dcsa stands for "data channel subprotocol attribute", | subprotocol-related attribute to be included.</t> | |||
stream-id is the SCTP stream identifier assigned to this subprotocol | <t indent="0" pn="section-5.2-3">The same syntax applies to any other SD | |||
instance, and original-attribute represents the contents of the | P attribute required for | |||
subprotocol related attribute to be included.</t> | ||||
<t>The same syntax applies to any other SDP attri | ||||
bute required for | ||||
negotiation of this instance of the subprotocol.</t> | negotiation of this instance of the subprotocol.</t> | |||
<t>The detailed offer/answer procedures for the d | <t indent="0" pn="section-5.2-4">The detailed offer/answer procedures fo | |||
csa attribute are dependent on the associated sub-protocol. If no offer/answer p | r the dcsa attribute are | |||
rocedures exist for the sub-protocol when used outside of the dcsa attribute, no | dependent on the associated subprotocol. If no offer/answer | |||
specification is needed for use with dcsa. The IANA registration procedures for | procedures exist for the subprotocol when used outside of the dcsa | |||
the WebSocket Subprotocol Name Registry (<xref target="IANA_subproto_ids"/>) do | attribute, no specification is needed for use with dcsa. The IANA | |||
not strictly require a specification of the offer/answer procedures for the sub | (Internet Assigned Numbers Authority) registration procedures for the "W | |||
-protocol when used with dcsa. If the sub-protocol has defined offer/answer proc | ebSocket Subprotocol Name Registry" (<xref target="IANA_subproto_ids" format="de | |||
edures when used outside of dcsa, such a specification is encouraged to ensure i | fault" sectionFormat="of" derivedContent="Section 9.1"/>) do not strictly requir | |||
nteroperability. If the sub-protocol has defined offer/answer procedures when us | e a specification of the offer/answer procedures for the subprotocol when used w | |||
ed outside of dcsa, but no specification exists for the offer/answer procedures | ith dcsa. If the subprotocol has defined offer/answer procedures when used outsi | |||
for the sub-protocol when used with dcsa, implementations SHOULD assume the use | de of dcsa, such a specification is encouraged to ensure interoperability. If th | |||
of the default values for all otherwise-negotiable and applicable sub-protocol p | e subprotocol has defined offer/answer procedures when used outside of dcsa but | |||
arameters. | no specification exists for the offer/answer procedures for the subprotocol when | |||
used with dcsa, implementations <bcp14>SHOULD</bcp14> assume the use of the def | ||||
ault values for all otherwise-negotiable and applicable subprotocol parameters. | ||||
</t> | </t> | |||
<section title="DCSA Syntax" anchor="dcsa-attribu | <section anchor="dcsa-attribute" numbered="true" removeInRFC="false" toc | |||
te"> | ="include" pn="section-5.2.1"> | |||
<t> | <name slugifiedName="name-dcsa-attribute-syntax">DCSA Attribute Syntax | |||
<figure align="left" title=""> | </name> | |||
<artwork align="left"><![ | <t indent="0" pn="section-5.2.1-1">"a=dcsa:" is a media-level attribut | |||
CDATA[ | e having the following definition and | |||
Formal Syntax: | ABNF (Augmented Backus-Naur Form) syntax <xref target="RFC5234" format="default" | |||
sectionFormat="of" derivedContent="RFC5234"/>. | ||||
Name: dcsa | </t> | |||
<table anchor="dcsa-attrib" align="center" pn="table-2"> | ||||
Value: dcsa-value | <name slugifiedName="name-adcsa-attribute-definition">"a=dcsa:" Attr | |||
ibute Definition</name> | ||||
Usage Level: media | <thead> | |||
<tr> | ||||
Charset Dependent: no | <th colspan="2" align="center" rowspan="1">"a=dcsa:" Attribute</ | |||
th> | ||||
Syntax: | </tr> | |||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left" colspan="1" rowspan="1">Name</td> | ||||
<td align="left" colspan="1" rowspan="1">dcsa</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left" colspan="1" rowspan="1">Value</td> | ||||
<td align="left" colspan="1" rowspan="1">dcsa-value</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left" colspan="1" rowspan="1">Usage Level</td> | ||||
<td align="left" colspan="1" rowspan="1">media</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left" colspan="1" rowspan="1">Charset Dependent</td> | ||||
<td align="left" colspan="1" rowspan="1">No</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t indent="0" pn="section-5.2.1-3">Formal syntax:</t> | ||||
<sourcecode name="abnf-2" type="abnf" markers="false" pn="section-5.2. | ||||
1-4"> | ||||
dcsa-value = stream-id SP attribute | dcsa-value = stream-id SP attribute | |||
stream-id = 1*5DIGIT | stream-id = 1*5DIGIT | |||
attribute = <from-RFC4566> | attribute = <from RFC 8866></sourcecode> | |||
<t indent="0" pn="section-5.2.1-5">Example:</t> | ||||
Example: | <sourcecode name="sdp-2" type="sdp" markers="false" pn="section-5.2.1- | |||
6"> | ||||
a=dcmap:2 subprotocol="msrp";ordered=true;label="msrp" | a=dcmap:2 subprotocol="msrp";ordered=true;label="msrp" | |||
a=dcsa:2 accept-types:text/plain | a=dcsa:2 accept-types:text/plain</sourcecode> | |||
]]></artwork> | <t indent="0" pn="section-5.2.1-7">The reference to <xref target="RFC8 | |||
</figure> | 866" format="default" sectionFormat="of" derivedContent="RFC8866"/> defines wher | |||
</t> | e the | |||
<t>Note that the reference to <xref targe | ||||
t="I-D.ietf-mmusic-rfc4566bis"/> defines where the | ||||
attribute definition can be found; | attribute definition can be found; | |||
it does not provide any limitation on support of attributes | it does not provide any limitations on support of attributes | |||
defined in other documents in accordance with this attribute | defined in other documents in accordance with this attribute | |||
definition. Note however that not all SDP attributes are suitable | definition. However, not all SDP attributes are suitable | |||
as a "a=dcsa:" parameter. IANA SDP parameters contains | as an "a=dcsa:" parameter. The registry of IANA SDP parameters contains | |||
the lists of IANA (Internet Assigned Numbers Authority) | the lists of IANA-registered session-level and media-level or | |||
registered session and media level or | media-level-only SDP attributes. | |||
media level only SDP attributes.</t> | </t> | |||
<t>Thus in the example above, the origina | <t indent="0" pn="section-5.2.1-8">Thus, in the example above, the ori | |||
l attribute line | ginal attribute line | |||
"a=accept-types:text/plain" is represented by the attribute line | "a=accept‑types:text/plain" is represented by the attribute line | |||
"a=dcsa:2 accept-types:text/plain", which specifies that this | "a=dcsa:2 accept-types:text/plain", which specifies that this | |||
instance of the MSRP subprotocol being transported on the SCTP association using | instance of the MSRP subprotocol being transported on the SCTP association using | |||
the data channel with stream id 2 accepts | the data channel with stream id 2 accepts | |||
plain text files.</t> | plaintext files.</t> | |||
<t>As opposed to the data channel "a=dcma | <t indent="0" pn="section-5.2.1-9">As opposed to the data channel "a=d | |||
p:" attribute parameters, | cmap:" attribute parameters, | |||
these parameters | these parameters | |||
are subject to offer/answer negotiation following the procedures | are subject to offer/answer negotiation, following the procedures | |||
defined in the subprotocol specific documents.</t> | defined in the subprotocol-specific documents.</t> | |||
<t>It is assumed that in general the usag | <t indent="0" pn="section-5.2.1-10">It is assumed that in general the | |||
es of subprotocol related media | usages of subprotocol-related | |||
level attributes are independent from the subprotocol's transport protocol | media-level attributes are independent from the subprotocol's transport pr | |||
. | otocol. | |||
Such transport protocol independent subprotocol related attributes are | Such transport-protocol-independent subprotocol-related attributes are | |||
used in the same way as defined in the original subprotocol specification, | used in the same way as defined in the original subprotocol specification, | |||
also if the subprotocol is transported over a data channel and if the | also if the subprotocol is transported over a data channel and if the | |||
attribute is correspondingly embedded in a "a=dcsa" attribute. | attribute is correspondingly embedded in an "a=dcsa:" attribute. | |||
</t> | </t> | |||
<t>There may be cases, where the usage of | <t indent="0" pn="section-5.2.1-11">There may be cases where the usage | |||
a subprotocol related media level | of a subprotocol-related | |||
media-level | ||||
attribute depends on the subprotocol's transport protocol. | attribute depends on the subprotocol's transport protocol. | |||
In such cases the subprotocol related usage of the attribute is expected t | In such cases, the subprotocol-related usage of the attribute is expected | |||
o be | to be | |||
described for the data channel transport. A data channel specific usage of | described for the data channel transport. A data-channel-specific usage of | |||
a | a | |||
subprotocol attribute is expected to be specified in the same document tha t | subprotocol attribute is expected to be specified in the same document tha t | |||
registers the subprotocol's identifier for data channel usage as described in | registers the subprotocol's identifier for data channel usage as described in | |||
<xref target="IANA_subproto_ids"/>. | <xref target="IANA_subproto_ids" format="default" sectionFormat="of" deriv | |||
</t> | edContent="Section 9.1"/>. | |||
<t>SDP attributes that are only defined f | </t> | |||
or use at the | </section> | |||
dcsa usage level, SHALL use the dcsa usage level when registering the | <section anchor="dcsa-mux-category" numbered="true" removeInRFC="false" | |||
attribute. If existing media attributes are used in a datachannel | toc="include" pn="section-5.2.2"> | |||
subprotocol specific way, then a new dcsa usage level | <name slugifiedName="name-dcsa-multiplexing-category">DCSA Multiplexin | |||
MUST be defined for the existing media attribute. Where the SDP | g Category</name> | |||
attribute is applicable to a particular subprotocol/s this SHALL also | <t indent="0" pn="section-5.2.2-1">The multiplexing category of the "a | |||
be registered by indicating the applicable subprotocol identifiers | =dcsa:" attribute is SPECIAL. | |||
(see /<xref target="I-D.ietf-mmusic-rfc4566bis"/> section-8.5) along with the | </t> | |||
dcsa usage level. | <t indent="0" pn="section-5.2.2-2">As the usage of multiple SCTP assoc | |||
iations on top of a single DTLS | ||||
</t> | association is outside the scope of <xref target="RFC8841" format="defaul | |||
</section> | t" sectionFormat="of" derivedContent="RFC8841"/>, | |||
<section title="DCSA Multiplexing Category" ancho | ||||
r="dcsa-mux-category"> | ||||
<t>The multiplexing category of the "a=dc | ||||
sa:" attribute is SPECIAL. | ||||
</t> | ||||
<t>As the usage of multiple SCTP associat | ||||
ions on top of a single DTLS | ||||
association is outside the scope of <xref target="I-D.ietf-mmusic-sctp-sd | ||||
p"/>, | ||||
no "a=dcsa:" attribute multiplexing rules are specified for the UDP/DTLS/ SCTP and | no "a=dcsa:" attribute multiplexing rules are specified for the UDP/DTLS/ SCTP and | |||
TCP/DTLS/SCTP proto values. | TCP/DTLS/SCTP proto values. | |||
If future extensions of <xref target="I-D.ietf-mmusic-sctp-sdp"/> define | If future extensions of <xref target="RFC8841" format="default" sectionFo | |||
how to | rmat="of" derivedContent="RFC8841"/> define how to | |||
negotiate multiplexing of multiple SCTP associations on top of a single D TLS | negotiate multiplexing of multiple SCTP associations on top of a single D TLS | |||
association, or how to add multiple SCTP associations to one BUNDLE group , then | association or how to add multiple SCTP associations to one BUNDLE group, then | |||
multiplexing rules for the "a=dcsa:" attribute need to be | multiplexing rules for the "a=dcsa:" attribute need to be | |||
defined as well, for instance in an extension of this SDP based data chan | defined as well -- for instance, in an extension of this specification. | |||
nel | </t> | |||
negotiation specification. | </section> | |||
</t> | </section> | |||
</section> | </section> | |||
</section> | <section anchor="section_procedures" numbered="true" removeInRFC="false" toc | |||
<!-- prot_att --> | ="include" pn="section-6"> | |||
</section> | <name slugifiedName="name-sdp-offer-answer-procedures">SDP Offer/Answer Pr | |||
<!-- sdp_sync --> | ocedures</name> | |||
<section title="SDP Offer/Answer Procedures" anchor="section_proc | <t indent="0" pn="section-6-1">This section defines how data channels can | |||
edures"> | be negotiated using the SDP | |||
<t>This section defines how data channels can be negotiat | ||||
ed using the SDP | ||||
offer/answer mechanism. A given media description can describe multiple | offer/answer mechanism. A given media description can describe multiple | |||
data channels (each represented by a separate SDP dcmap attribute) that | data channels (each represented by a separate SDP dcmap attribute) that | |||
can be created, modified and closed using different offer/answer exchange s. | can be created, modified, and closed using different offer/answer exchang es. | |||
The procedures in this section apply for a given data channel. | The procedures in this section apply for a given data channel. | |||
</t> | </t> | |||
<t>The generic offer/answer procedures for negotiating th | <t indent="0" pn="section-6-2">The generic offer/answer procedures for neg | |||
e SCTP association used to realize data channels are defined in <xref target="I- | otiating the SCTP association used to realize data channels are defined in <xref | |||
D.ietf-mmusic-sctp-sdp"/>. This section only defines the data channel specific p | target="RFC8841" format="default" sectionFormat="of" derivedContent="RFC8841"/> | |||
rocedures.</t> | . This section only defines the data-channel-specific procedures.</t> | |||
<t> “Initial offer” refers to the offer in which a data c | <t indent="0" pn="section-6-3"> "Initial offer" refers to the offer in whi | |||
hannel is opened. It can be the initial offer, or a subsequent offer, of the ass | ch a data channel is | |||
ociated SDP session.</t> | opened. It can be either the initial offer or a subsequent offer of the as | |||
<t>The detailed offer/answer procedures for the dcsa attr | sociated SDP session.</t> | |||
ibute are dependent on the associated sub-protocol see <xref target="prot_att"/> | <t indent="0" pn="section-6-4">The detailed offer/answer procedures for th | |||
. | e dcsa attribute are dependent on the associated subprotocol; see <xref target=" | |||
prot_att" format="default" sectionFormat="of" derivedContent="Section 5.2"/>. | ||||
</t> | </t> | |||
<section title="Managing Stream Identifiers" anchor="id_m | <section anchor="id_mgmt" numbered="true" removeInRFC="false" toc="include | |||
ngt"> | " pn="section-6.1"> | |||
<t> | <name slugifiedName="name-managing-stream-identifiers">Managing Stream I | |||
dentifiers</name> | ||||
In order to avoid SCTP Stream identifier collisio | <t indent="0" pn="section-6.1-1"> | |||
ns, in alignment with <xref target="I-D.ietf-rtcweb-data-protocol"/>, the endpoi | In order to avoid SCTP Stream identifier collisions, in alignment with | |||
nt acting as DTLS client (for | <xref target="RFC8832" format="default" sectionFormat="of" derivedConten | |||
the SCTP association used to realize data channels) MUST use even identifier val | t="RFC8832"/>, the endpoint acting as a DTLS client (for | |||
ues, | the SCTP association used to realize data channels) <bcp14>MUST</bcp14> use even | |||
and the endpoint acting as DTLS server MUST use odd identifier values. </t> | identifier values, | |||
<t>SCTP stream identifiers associated with data c | and the endpoint acting as a DTLS server <bcp14>MUST</bcp14> use odd identifier | |||
hannels that have been negotiated using DCEP MUST NOT be included in SDP offers | values. </t> | |||
and answers. | <t indent="0" pn="section-6.1-2">SCTP stream identifiers associated with | |||
</t> | data channels that have been negotiated using DCEP <bcp14>MUST NOT</bcp14> be i | |||
</section> | ncluded in SDP offers and answers. | |||
<!-- id_mngt --> | </t> | |||
<section title="Negotiating Data Channel Parameters" anch | </section> | |||
or="param_negotiation"> | <section anchor="param_negotiation" numbered="true" removeInRFC="false" to | |||
<t> | c="include" pn="section-6.2"> | |||
The data channel types defined in <xref target="I-D.ietf-rtcweb-data-protocol | <name slugifiedName="name-negotiating-data-channel-pa">Negotiating Data | |||
"/> are | Channel Parameters</name> | |||
mapped to the dcmap SDP attribute parameters in the following manner where "o | <t indent="0" pn="section-6.2-1"> | |||
rdered=true" is the default and may be omitted: | The data channel types defined in <xref target="RFC8832" format="default" sec | |||
tionFormat="of" derivedContent="RFC8832"/> are | ||||
mapped to the dcmap SDP attribute parameters in the following manner, where " | ||||
ordered=true" is the default and may be omitted: | ||||
</t> | </t> | |||
<t> | <sourcecode name="data-channel-items" type="sdp" markers="false" pn="sec | |||
<figure align="left" title=""> | tion-6.2-2"> | |||
<artwork align="left"><![CDATA[ | ||||
DATA_CHANNEL_RELIABLE | DATA_CHANNEL_RELIABLE | |||
ordered=true | ordered=true | |||
DATA_CHANNEL_RELIABLE_UNORDERED | DATA_CHANNEL_RELIABLE_UNORDERED | |||
ordered=false | ordered=false | |||
DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT | DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT | |||
ordered=true;max-retr=<number of retransmissions> | ordered=true;max-retr=<number of retransmissions> | |||
DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED | DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED | |||
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></sourcecode> | |||
]]></artwork> | <t indent="0" pn="section-6.2-3"> | |||
</figure> | By definition, 'max-retr' and 'max-time' are mutually exclusive, | |||
</t> | so both <bcp14>MUST NOT</bcp14> be present in the "a=dcmap:" attribute | |||
<t> | line. If an SDP offer contains both of these parameters, then the | |||
By definition max-retr and max-time are mutually exclusive, | receiver of such an SDP offer <bcp14>MUST</bcp14> reject the SDP offer. If a | |||
so both MUST NOT be present in the "a=dcmap:" attribute | n SDP | |||
line. If an SDP offer contains both of these parameters then the | answer contains both of these parameters, then the offerer <bcp14>MUST</bcp14 | |||
receiver of such an SDP offer MUST reject the SDP offer. If an SDP | > treat | |||
answer contains both of these parameters then the offerer MUST treat | ||||
the associated SDP offer/answer as failed. </t> | the associated SDP offer/answer as failed. </t> | |||
</section> | </section> | |||
<!-- ="Negotiating Data Channel Parameters" --> | <section anchor="opendc" numbered="true" removeInRFC="false" toc="include" | |||
<section title="Generating the Initial Offer for A Data C | pn="section-6.3"> | |||
hannel" anchor="opendc"> | <name slugifiedName="name-generating-the-initial-offe">Generating the In | |||
<t>When an offerer sends an initial offer, in ord | itial Offer for a Data Channel</name> | |||
er to negotiate an SCTP stream for a data channel, the offerer: | <t indent="0" pn="section-6.3-1">When an offerer sends an initial offer, | |||
in order to negotiate an SCTP stream for a data channel, the offerer | ||||
<list style="symbols"> | ||||
<t>SHALL include an SDP dcmap att | ||||
ribute (<xref target="sdp_synt"/> and <xref target="param_negotiation"/>) assoc | ||||
iated with the data channel in the “m=” section representing the SCTP associatio | ||||
n used to realize the data channel; and | ||||
</t> | ||||
<t>MAY include one or more SDP dc | ||||
sa attributes (<xref target="prot_att"/>) associated with the | ||||
data channel. The value of the stream-id part of each attribute SHALL matc | ||||
h the dcmap-stream-id value of the dcmap attribute. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Generating SDP Answer"> | ||||
<t>When an answerer receives an offer that includ | ||||
es an “m=" section for an SCTP association, that describes an SCTP stream for a | ||||
data channel, if the answerer accepts the data channel it: | ||||
<list style="symbols"> | </t> | |||
<t>SHALL include an SDP dcmap att | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6 | |||
ribute (<xref target="sdp_synt"/> and <xref target="param_negotiation"/>) | .3-2"> | |||
<li pn="section-6.3-2.1"> | ||||
<bcp14>SHALL</bcp14> include an SDP dcmap attribute | ||||
(Sections <xref target="subsec-sdp-attr-for-dc-par-neg" format="counte | ||||
r" sectionFormat="of" derivedContent="5.1"/> and <xref target="param_negotiatio | ||||
n" format="counter" sectionFormat="of" derivedContent="6.2"/>) associated with t | ||||
he data channel in the "m=" section representing the SCTP association used to re | ||||
alize the data channel, and | ||||
</li> | ||||
<li pn="section-6.3-2.2"> | ||||
<bcp14>MAY</bcp14> include one or more SDP dcsa attributes (<xref ta | ||||
rget="prot_att" format="default" sectionFormat="of" derivedContent="Section 5.2" | ||||
/>) associated with the | ||||
data channel. The value of the 'stream-id' part of each attribute <bcp14>S | ||||
HALL</bcp14> match the 'dcmap-stream-id' value of the dcmap attribute. | ||||
</li> | ||||
</ul> | ||||
</section> | ||||
<section numbered="true" removeInRFC="false" toc="include" pn="section-6.4 | ||||
"> | ||||
<name slugifiedName="name-generating-the-sdp-answer">Generating the SDP | ||||
Answer</name> | ||||
<t indent="0" pn="section-6.4-1">When an answerer receives an offer that | ||||
includes an "m=" section | ||||
for an SCTP association, the offer describes an SCTP stream for a data c | ||||
hannel, if the answerer accepts the data channel, it | ||||
</t> | ||||
<ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6 | ||||
.4-2"> | ||||
<li pn="section-6.4-2.1"> | ||||
<bcp14>SHALL</bcp14> include an SDP dcmap attribute | ||||
(Sections <xref target="subsec-sdp-attr-for-dc-par-neg" format="counte | ||||
r" sectionFormat="of" derivedContent="5.1"/> and <xref target="param_negotiatio | ||||
n" format="counter" sectionFormat="of" derivedContent="6.2"/>) | ||||
associated | associated | |||
with the data channel in the "m=" section representing the SCTP association used | with the data channel in the "m=" section representing the SCTP association used | |||
to realize the data channel. The value of the dcmap-stream-id, max-retr and max- | to realize the data channel. The value of the 'dcmap-stream-id', 'max-retr', and | |||
time | 'max-time' | |||
values of the dcmap attribute SHALL be identical to the value used for the data | values of the dcmap attribute <bcp14>SHALL</bcp14> be identical to the value use | |||
channel | d for the data channel | |||
in the offer; and | in the offer, and | |||
</li> | ||||
</t> | <li pn="section-6.4-2.2"> | |||
<t>MAY include one or more SDP dc | <bcp14>MAY</bcp14> include one or more SDP dcsa attributes (<xref ta | |||
sa attributes (<xref target="prot_att"/>) associated with the | rget="prot_att" format="default" sectionFormat="of" derivedContent="Section 5.2" | |||
/>) associated with the | ||||
data channel. | data channel. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | </section> | |||
</section> | <section numbered="true" removeInRFC="false" toc="include" pn="section-6.5 | |||
<section title="Offerer Processing of the SDP Answer"> | "> | |||
<t>An offerer receiving an SDP answer performs th | <name slugifiedName="name-offerer-processing-of-the-s">Offerer Processin | |||
e following: | g of the SDP Answer</name> | |||
<t indent="0" pn="section-6.5-1">An offerer receiving an SDP answer perf | ||||
orms the following: | ||||
<list style="symbols"> | </t> | |||
<t>SHALL close any created data c | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6 | |||
hannels as described in | .5-2"> | |||
<xref target="close-dc"/> | <li pn="section-6.5-2.1">It <bcp14>SHALL</bcp14> close any created dat | |||
a channels as described in | ||||
<xref target="close-dc" format="default" sectionFormat="of" derivedConten | ||||
t="Section 6.6.1"/> | ||||
for which the expected "a=dcmap:" attributes are not | for which the expected "a=dcmap:" attributes are not | |||
present in the SDP answer. If the SDP answer has no "a=dcmap" attribute e | present in the SDP answer. If the SDP answer has no "a=dcmap:" attributes | |||
ither the peer does not support "a=dcmap:" attributes or | , either the peer does not support "a=dcmap:" attributes or | |||
it rejected all the data channels. In either case the offerer closes | it rejected all the data channels. In either case, the offerer | |||
all the SDP offered | closes all the data channels offered by SDP that were open at the ti | |||
data channels that were open at the time of offer. | me of the offer. | |||
The DTLS association and SCTP association will still be setup. At th | The DTLS association and SCTP association will still be set up. At t | |||
is | his | |||
point the offerer may use DCEP negotiation <xref target="I-D.ietf-rtcweb-data | point, the offerer may use DCEP negotiation <xref target="RFC8832" format="de | |||
-protocol"/> to open data channels</t> | fault" sectionFormat="of" derivedContent="RFC8832"/> to open data channels.</li> | |||
</list> | </ul> | |||
</t> | <t indent="0" pn="section-6.5-3">Each agent application <bcp14>MUST</bcp | |||
<t>Each agent application MUST wait to send data | 14> wait to send data until it has | |||
until it has | ||||
confirmation that the data channel at the peer is instantiated. | confirmation that the data channel at the peer is instantiated. | |||
For WebRTC, this is when both data channel stacks have channel | For WebRTC, this is when both data channel stacks have channel | |||
parameters instantiated. This occurs: | parameters instantiated and occurs as follows: | |||
<list style="symbols"> | </t> | |||
<t>At both peers when a data chan | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6 | |||
nel is created without a previously | .5-4"> | |||
<li pn="section-6.5-4.1">At both peers when a data channel is created | ||||
without a previously | ||||
established SCTP association, as soon as the SCTP association | established SCTP association, as soon as the SCTP association | |||
is successfully established.</t> | is successfully established.</li> | |||
<t>At the agent receiving an SDP | <li pn="section-6.5-4.2">At the agent receiving an SDP offer for which | |||
offer for which there is an | there is an | |||
established SCTP association, as soon as it creates the | established SCTP association, as soon as it creates the | |||
negotiated data channel based on information | negotiated data channel based on information | |||
signaled in the SDP offer.</t> | signaled in the SDP offer.</li> | |||
<t>At the agent sending an SDP of | <li pn="section-6.5-4.3">At the agent sending an SDP offer to create a | |||
fer to create a new data channel for which there is an established SCTP | new 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 | of the data channel or when it begins to receive data on the | |||
data channel from the peer, whichever occurs first.</t> | data channel from the peer, whichever occurs first.</li> | |||
</list> | </ul> | |||
</t> | </section> | |||
</section> | <section numbered="true" removeInRFC="false" toc="include" pn="section-6.6 | |||
<!-- opendc --> | "> | |||
<section title="Modifying the Session"> | <name slugifiedName="name-modifying-the-session">Modifying the Session</ | |||
<t>When an offer sends a subsequent offer, that i | name> | |||
ncludes information for | <t indent="0" pn="section-6.6-1">When an offerer sends a subsequent offe | |||
r that includes information for | ||||
a previously negotiated data channel, unless the offerer intends to | a previously negotiated data channel, unless the offerer intends to | |||
close the data channel (<xref target="close-dc"/>), the offerer SHALL include the | close the data channel (<xref target="close-dc" format="default" sectionForma t="of" derivedContent="Section 6.6.1"/>), the offerer <bcp14>SHALL</bcp14> inclu de the | |||
previously negotiated SDP attributes and attribute values associated with the | previously negotiated SDP attributes and attribute values associated with the | |||
data channel. The answerer may reject the offer. The means for rejecting an o ffer are dependent on | data channel. The answerer may reject the offer. The means for rejecting an o ffer are dependent on | |||
the higher layer protocol. The offer/answer exchange is atomic; if the answe | the higher-layer protocol. The offer/answer exchange is atomic; if the answe | |||
r is rejected, the session reverts to the state prior to the | r is rejected, the session reverts to the state prior to the | |||
offer <xref target="RFC3264"/>. | offer <xref target="RFC3264" format="default" sectionFormat="of" derivedConte | |||
nt="RFC3264"/>. | ||||
</t> | ||||
<section title="Closing a Data Channel" anchor="c | ||||
lose-dc"> | ||||
<t>In order to close a data channel, the | ||||
endpoint that wants to close | ||||
SHALL send the SCTP SSN reset message <xref target="RFC6525"/>, following the | ||||
procedures in section 6.7 of <xref target="I-D.ietf-rtcweb-data-channel"/>. | ||||
In addition, if the closed data channel was negotiated using the offer/answer me | </t> | |||
chanism <xref target="opendc"/>, the endpoint that closed the data channel SHALL | <section anchor="close-dc" numbered="true" removeInRFC="false" toc="incl | |||
send a subsequent offer in which it either: | ude" pn="section-6.6.1"> | |||
<name slugifiedName="name-closing-a-data-channel">Closing a Data Chann | ||||
el</name> | ||||
<t indent="0" pn="section-6.6.1-1">In order to close a data channel, t | ||||
he endpoint that wants to | ||||
close the data channel | ||||
<bcp14>SHALL</bcp14> send an SCTP SSN Reset message <xref target="RFC6525" fo | ||||
rmat="default" sectionFormat="of" derivedContent="RFC6525"/>, following the proc | ||||
edure in <xref target="RFC8831" sectionFormat="of" section="6.7" format="default | ||||
" derivedLink="https://rfc-editor.org/rfc/rfc8831#section-6.7" derivedContent="R | ||||
FC8831"/>. | ||||
In addition, if the closed data channel was negotiated using the offer/answer | ||||
mechanism (<xref target="opendc" format="default" sectionFormat="of" derivedCont | ||||
ent="Section 6.3"/>), the endpoint that closed the data channel | ||||
<bcp14>SHALL</bcp14> send a subsequent offer in which it does one of the followi | ||||
ng: | ||||
</t> | </t> | |||
<t> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section | |||
<list style="symbols"> | -6.6.1-2"> | |||
<t> | <li pn="section-6.6.1-2.1">Removes the SDP dcmap attribute and SDP d | |||
removes the SDP dcmap attribute and SDP dcsa attributes associated with the c | csa attributes | |||
losed data channel. Once the endpoint receives a successful answer, the SCTP str | associated with the closed data channel. Once the endpoint | |||
eam identifier value can later be used for a new data channel (negotiated using | receives a successful answer, the SCTP stream identifier value can | |||
DCTP or using the offer/answer mechanism); or</t> | later be used for a new data channel (negotiated using either SCTP | |||
<t>after a reset has been | or the offer/answer mechanism), or | |||
performed re-uses the SCTP stream used for the closed data channel for a new da | </li> | |||
ta channel, using the procedures in <xref target="opendc"/>. The offerer SHALL u | <li pn="section-6.6.1-2.2">After a reset has been performed, reuses | |||
se a different SDP dcmap attribute value for the data channel using the same SCT | the SCTP stream used for the closed data channel for a new data channel, followi | |||
P stream. | ng the procedure in <xref target="opendc" format="default" sectionFormat="of" de | |||
rivedContent="Section 6.3"/>. The offerer <bcp14>SHALL</bcp14> use a different S | ||||
</t> | DP dcmap attribute value for the data channel using the same SCTP stream. | |||
</list> | </li> | |||
</t> | </ul> | |||
</section> | </section> | |||
<!-- Closing a Data Channel --> | </section> | |||
</section> | <section anchor="various_SDP_OA_considerations" numbered="true" removeInRF | |||
<section title="Various SDP Offer/Answer Considerations" | C="false" toc="include" pn="section-6.7"> | |||
anchor="various_SDP_OA_considerations"> | <name slugifiedName="name-various-sdp-offer-answer-co">Various SDP Offer | |||
<t> | /Answer Considerations</name> | |||
<list> | <t indent="0" pn="section-6.7-1">An SDP offer or answer has no "a=dcmap: | |||
<t>An SDP offer or answer has no | " attributes but has "a=dcsa:" attributes: | |||
"a=dcmap:" attributes but has "a=dcsa:" attributes. | </t> | |||
<list style="symbols"> | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6 | |||
<t>This is consid | .7-2"> | |||
ered an error case. In this case the receiver of such an | <li pn="section-6.7-2.1">This is considered an error case. In this cas | |||
SDP offer or answer MUST discard this "a=dcsa:" attributes. | e, the receiver of such an | |||
</t> | SDP offer or answer <bcp14>MUST</bcp14> discard the "a=dcsa:" attrib | |||
</list> | utes. | |||
</t> | </li> | |||
<t>SDP offer or answer has an "a= | </ul> | |||
dcsa" attribute, whose subprotocol attribute | <t indent="0" pn="section-6.7-3">An SDP offer or answer has an "a=dcsa:" | |||
is unknown. | attribute whose subprotocol attribute | |||
<list style="symbols"> | is unknown: | |||
<t>The receiver o | </t> | |||
f such an SDP offer or answer SHOULD ignore this | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6 | |||
entire "a=dcsa" attribute line. | .7-4"> | |||
</t> | <li pn="section-6.7-4.1">The receiver of such an SDP offer or answer < | |||
</list> | bcp14>SHOULD</bcp14> ignore this | |||
</t> | entire "a=dcsa:" attribute line. | |||
<t>SDP offer or answer has an "a= | </li> | |||
dcsa" attribute, whose subprotocol attribute | </ul> | |||
is known, but whose subprotocol attribute semantic is not known for the | <t indent="0" pn="section-6.7-5">An SDP offer or answer has an "a=dcsa:" | |||
data channel transport case. | attribute whose subprotocol attribute | |||
<list style="symbols"> | is known but whose subprotocol attribute semantic is not known for the | |||
<t>The receiver o | data channel transport case: | |||
f such an SDP offer or answer SHOULD ignore this | </t> | |||
entire "a=dcsa" attribute line. | <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6 | |||
</t> | .7-6"> | |||
</list> | <li pn="section-6.7-6.1">The receiver of such an SDP offer or answer < | |||
</t> | bcp14>SHOULD</bcp14> ignore this | |||
</list> | entire "a=dcsa:" attribute line. | |||
</t> | </li> | |||
</section> | </ul> | |||
<!-- various SDP offer/answer ... --> | </section> | |||
</section> | </section> | |||
<!-- Procedures --> | <section anchor="examples" numbered="true" removeInRFC="false" toc="include" | |||
<section title="Examples" anchor="examples"> | pn="section-7"> | |||
<figure align="left" title="Example 1" anchor="example1"> | <name slugifiedName="name-examples">Examples</name> | |||
<artwork align="left"><![CDATA[ | <t indent="0" pn="section-7-1"><xref target="example1" format="default" se | |||
SDP offer: | ctionFormat="of" derivedContent="Figure 1"/> shows an example of an SDP offer an | |||
d answer | ||||
where the SDP answerer rejects the data channel | ||||
with stream id 0 either for explicit reasons or because it does not | ||||
understand the "a=dcmap:" attribute. | ||||
As a result, the offerer will close the data channel created with the | ||||
SDP offer/answer negotiation option. | ||||
The SCTP association will still be set up over DTLS. | ||||
At this point, the offerer or the answerer may use DCEP negotiation to open d | ||||
ata | ||||
channels.</t> | ||||
<figure anchor="example1" align="left" suppress-title="false" pn="figure-1 | ||||
"> | ||||
<name slugifiedName="name-example-1">Example 1</name> | ||||
<sourcecode name="example-1-sdp-offer" type="sdp" markers="false" pn="se | ||||
ction-7-2.1"> | ||||
m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP6 2001:db8::3 | c=IN IP6 2001:db8::3 | |||
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=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 | |||
a=tls-id:abc3de65cddef001be82 | a=tls-id:abc3de65cddef001be82 | |||
a=dcmap:0 subprotocol="bfcp";label="bfcp" | a=dcmap:0 subprotocol="bfcp";label="bfcp"</sourcecode> | |||
<sourcecode name="example-1-sdp-answer" type="sdp" markers="false" pn="s | ||||
SDP answer: | ection-7-2.2"> | |||
m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP6 2001:db8::1 | c=IN IP6 2001:db8::1 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port:5002 | a=sctp-port:5002 | |||
a=setup:passive | a=setup:passive | |||
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=tls-id:dcb3ae65cddef0532d42 | a=tls-id:dcb3ae65cddef0532d42</sourcecode> | |||
]]></artwork> | </figure> | |||
</figure> | <t indent="0" pn="section-7-3"><xref target="example2" format="default" se | |||
<t>In the example in <xref target="example1"/> the SDP an | ctionFormat="of" derivedContent="Figure 2"/> shows an example of an SDP offer an | |||
swerer rejected the data channel | d answer | |||
with stream id 0 either for explicit reasons or because it does not | where the SDP offer contains data channels for BFCP and | |||
understand the "a=dcmap:" attribute. | MSRP subprotocols. The SDP answer rejects BFCP and accepts MSRP. | |||
As a result the offerer will close the data channel created with the | So, the offerer closes the data channel for BFCP, and both the offerer | |||
SDP offer/answer negotiation option. | and the answerer may start using the MSRP data channel | |||
The SCTP association will still be setup over DTLS. | (after the SCTP association is set up). | |||
At this point the offerer or the answerer may use DCEP negotiation to open da | The data channel with stream id 0 is free and can be used for future | |||
ta | DCEP or SDP offer/answer negotiation.</t> | |||
channels.</t> | <figure anchor="example2" align="left" suppress-title="false" pn="figure-2 | |||
<figure align="left" title="Example 2" anchor="example2"> | "> | |||
<artwork align="left"><![CDATA[ | <name slugifiedName="name-example-2">Example 2</name> | |||
SDP offer: | <sourcecode name="example-2-sdp-offer" type="sdp" markers="false" pn="se | |||
ction-7-4.1"> | ||||
m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 192.0.2.1 | c=IN IP4 192.0.2.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=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 | |||
a=tls-id:abc3de65cddef001be82 | a=tls-id:abc3de65cddef001be82 | |||
a=dcmap:0 subprotocol="bfcp";label="bfcp" | a=dcmap:0 subprotocol="bfcp";label="bfcp" | |||
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://alice.example.com:10001/2s93i93idj;dc | a=dcsa:2 path:msrp://alice.example.com:10001/2s93i93idj;dc</sourcecode> | |||
<sourcecode name="example-2-sdp-answer" type="sdp" markers="false" pn="s | ||||
SDP answer: | ection-7-4.2"> | |||
m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 192.0.2.2 | c=IN IP4 192.0.2.2 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port:5002 | a=sctp-port:5002 | |||
a=setup:passive | a=setup:passive | |||
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=tls-id:dcb3ae65cddef0532d42 | a=tls-id:dcb3ae65cddef0532d42 | |||
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</sourcecode> | |||
]]></artwork> | </figure> | |||
</figure> | <t indent="0" pn="section-7-5">The example in <xref target="example3" form | |||
<t>In the example in <xref target="example2"/> the SDP of | at="default" sectionFormat="of" derivedContent="Figure 3"/> is a continuation of | |||
fer contains data channels for BFCP | the example in <xref target="example2" format="default" sectionFormat="of" deri | |||
(Binary Floor Control Protocol) and | vedContent="Figure 2"/>. | |||
MSRP subprotocols. The SDP answer rejected BFCP and accepted MSRP. | The SDP offerer now removes the MSRP data channel with stream id 2 | |||
So, the offerer closes the data channel for BFCP and both offerer | but opens a new MSRP data channel with stream id 4. | |||
and answerer may start using the MSRP data channel | The answerer accepts the entire offer. | |||
(after the SCTP association is set up). | As a result, the offerer closes the previously negotiated MSRP-related data c | |||
The data channel with stream id 0 is free and can be used for future | hannel, | |||
DCEP or SDP offer/answer negotiation.</t> | and both the offerer and the answerer may start using the new MSRP-related da | |||
<t>Continuing the example in <xref target="example2"/>.</ | ta | |||
t> | channel.</t> | |||
<figure align="left" title="Example 3" anchor="example3"> | <figure anchor="example3" align="left" suppress-title="false" pn="figure-3 | |||
<artwork align="left"><![CDATA[ | "> | |||
Subsequent SDP offer: | <name slugifiedName="name-example-3">Example 3</name> | |||
<sourcecode name="example-3-sdp-offer" type="sdp" markers="false" pn="se | ||||
ction-7-6.1"> | ||||
m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 192.0.2.1 | c=IN IP4 192.0.2.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=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 | |||
a=tls-id:abc3de65cddef001be82 | a=tls-id:abc3de65cddef001be82 | |||
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://alice.example.com:10001/2s93i93idj;dc | a=dcsa:4 path:msrp://alice.example.com:10001/2s93i93idj;dc</sourcecode> | |||
<sourcecode name="example-3-sdp-answer" type="sdp" markers="false" pn="s | ||||
Subsequent SDP answer: | ection-7-6.2"> | |||
m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 192.0.2.2 | c=IN IP4 192.0.2.2 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port:5002 | a=sctp-port:5002 | |||
a=setup:passive | a=setup:passive | |||
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=tls-id:dcb3ae65cddef0532d42 | a=tls-id:dcb3ae65cddef0532d42 | |||
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</sourcecode> | |||
]]></artwork> | </figure> | |||
</figure> | </section> | |||
<t>The example in <xref target="example3"/> is a continua | <section anchor="sec-cons" numbered="true" removeInRFC="false" toc="include" | |||
tion of the example in <xref target="example2"/>. | pn="section-8"> | |||
The SDP offerer now removes the MSRP data channel with stream id 2, | <name slugifiedName="name-security-considerations">Security Considerations | |||
but opens a new MSRP data channel with stream id 4. | </name> | |||
The answerer accepts the entire offer. | <t indent="0" pn="section-8-1">This document specifies new SDP attributes | |||
As a result the offerer closes the earlier negotiated MSRP related data chann | used in the negotiation of data channel parameters. </t> | |||
el | <t indent="0" pn="section-8-2"> | |||
and both offerer and answerer may start using new the MSRP related data chann | These parameters are negotiated as part of opening an SCTP channel over DTLS as | |||
el.</t> | specified in <xref target="RFC8841" format="default" sectionFormat="of" derivedC | |||
</section> | ontent="RFC8841"/>. Each | |||
<!-- Examples --> | subprotocol may come with its own security considerations that need to be docume | |||
<section title="Security Considerations" anchor="sec-cons"> | nted as part of the subprotocol definition. | |||
<t>This document specifies new SDP attributes used in the | Otherwise, this document does not add any security considerations to those speci | |||
negotiation of the DATA channel parameters. </t> | fied in <xref target="RFC8841" format="default" sectionFormat="of" derivedConten | |||
<t> | t="RFC8841"/>. | |||
These parameter are negotiated as part of opening a SCTP channel over DTLS as sp | </t> | |||
ecified in <xref target="I-D.ietf-mmusic-sctp-sdp"/>. Each | <t indent="0" pn="section-8-3">Error cases such as the use of unknown para | |||
subprotocol may come with it’s own security considerations that need to be docum | meter values or violations | |||
ented as part of the subprotocol definition. | of the odd/even rule (<xref target="id_mgmt" format="default" sectionForma | |||
Otherwise this document does not add any security considerations to the ones spe | t="of" derivedContent="Section 6.1"/>) <bcp14>MUST</bcp14> | |||
cified in <xref target="I-D.ietf-mmusic-sctp-sdp"/> | be handled by closing the corresponding data channel.</t> | |||
</t> | </section> | |||
<t>Error cases like the use of unknown parameter values o | <section anchor="IANA" numbered="true" removeInRFC="false" toc="include" pn= | |||
r violation the odd/even rule MUST | "section-9"> | |||
be handled by closing the corresponding Data Channel.</t> | <name slugifiedName="name-iana-considerations">IANA Considerations</name> | |||
</section> | <section anchor="IANA_subproto_ids" numbered="true" removeInRFC="false" to | |||
<section title="IANA Considerations" anchor="IANA"> | c="include" pn="section-9.1"> | |||
<section title="Subprotocol Identifiers" anchor="IANA_sub | <name slugifiedName="name-subprotocol-identifiers">Subprotocol Identifie | |||
proto_ids"> | rs</name> | |||
<t>Registration of new subprotocol identifiers is | <t indent="0" pn="section-9.1-1">Registration of new subprotocol identif | |||
performed using the existing IANA | iers is performed using the existing IANA | |||
"WebSocket Subprotocol Name Registry" table.</t> | "WebSocket Subprotocol Name Registry" table.</t> | |||
<t>The following text should be added following t | <t indent="0" pn="section-9.1-2">The following text has been added below | |||
he title of the table.</t> | the title of the table.</t> | |||
<t>"This table also includes subprotocol identifi | <t indent="0" pn="section-9.1-3">"This table also includes subprotocol i | |||
ers specified for usage within a | dentifiers specified for usage within a | |||
WebRTC data channel."</t> | WebRTC data channel."</t> | |||
<t>The following reference should be added to und | <t indent="0" pn="section-9.1-4">This document (RFC 8864) has been added | |||
er the heading reference: | to the "Reference" list for | |||
"RFC XXXX".</t> | the registry.</t> | |||
<t>This document assigns no new values to this ta | <t indent="0" pn="section-9.1-5">This document assigns no new values to | |||
ble.</t> | this table.</t> | |||
<t>A subprotocol may simultaneously be defined fo | <t indent="0" pn="section-9.1-6">A subprotocol may simultaneously be def | |||
r data channel transport | ined for data channel transport | |||
and for Websocket transport. | and for WebSocket transport. | |||
In such a case the "Subprotocol Definition" and "Reference" cells in the | In such a case, the "Subprotocol Definition" and "Reference" cells in the | |||
subprotocol's row of the IANA "WebSocket Subprotocol Name Registry" table sh ould | subprotocol's row of the IANA "WebSocket Subprotocol Name Registry" table sh ould | |||
contain two entries. | contain two entries. | |||
One entry in each of these cells should refer to the Websocket related | One entry in each of these cells should refer to the WebSocket-related | |||
subprotocol specification, and the other entry should refer to the data | subprotocol specification, and the other entry should refer to the | |||
channel related subprotocol specification. | data-channel-related subprotocol specification. | |||
</t> | </t> | |||
<t>NOTE to RFC Editor: Please replace "XXXX" with | </section> | |||
the number of this RFC.</t> | <section numbered="true" removeInRFC="false" toc="include" pn="section-9.2 | |||
</section> | "> | |||
<section title="New SDP Attributes"> | <name slugifiedName="name-new-sdp-attributes">New SDP Attributes</name> | |||
<section title="dcmap" anchor="IANA-reg-dcmap"> | <section anchor="IANA-reg-dcmap" numbered="true" removeInRFC="false" toc | |||
<t>NOTE to RFC Editor: Please replace "XX | ="include" pn="section-9.2.1"> | |||
XX" with the number of this RFC.</t> | <name slugifiedName="name-dcmap">dcmap</name> | |||
<t>This document defines a new SDP media- | <t indent="0" pn="section-9.2.1-1">This document defines a new SDP med | |||
level attribute "a=dcmap:" as follows: | ia-level attribute, "a=dcmap:", as follows: | |||
</t> | </t> | |||
<texttable title=""> | <table anchor="dcmap-iana" align="center" pn="table-3"> | |||
<ttcol align="left" width="35%"/> | <name slugifiedName="name-new-adcmap-attribute">New "a=dcmap:" Attri | |||
<ttcol align="left" width="65%"/> | bute</name> | |||
<c>Contact name:</c> | <thead> | |||
<c>IESG</c> | <tr> | |||
<c>Contact email:</c> | <th colspan="2" align="center" rowspan="1">"a=dcmap:"</th> | |||
<c>iesg@ietf.org</c> | </tr> | |||
<c>Attribute name:</c> | </thead> | |||
<c>dcmap</c> | <tbody> | |||
<c>Attribute syntax:</c> | <tr> | |||
<c>As per <xref target="dcmap-att | <td align="left" colspan="1" rowspan="1">Contact name</td> | |||
r-definition"/> | <td align="left" colspan="1" rowspan="1">IESG</td> | |||
</c> | </tr> | |||
<c>Attribute semantics:</c> | <tr> | |||
<c>As per <xref target="dcmap-att | <td align="left" colspan="1" rowspan="1">Contact email</td> | |||
r-definition"/> | <td align="left" colspan="1" rowspan="1">iesg@ietf.org</td> | |||
</c> | </tr> | |||
<c>Usage level:</c> | <tr> | |||
<c>media</c> | <td align="left" colspan="1" rowspan="1">Attribute name</td> | |||
<c>Charset dependent:</c> | <td align="left" colspan="1" rowspan="1">dcmap</td> | |||
<c>No</c> | </tr> | |||
<c>Purpose:</c> | <tr> | |||
<c>Define data channel specific p | <td align="left" colspan="1" rowspan="1">Attribute syntax</td> | |||
arameters</c> | <td align="left" colspan="1" rowspan="1">As per <xref target="dc | |||
<c>Appropriate values:</c> | map-attr-definition" format="default" sectionFormat="of" derivedContent="Section | |||
<c>As per <xref target="dcmap-att | 5.1.1"/> | |||
r-definition"/> | </td> | |||
</c> | </tr> | |||
<c>O/A procedures:</c> | <tr> | |||
<c>As per <xref target="section_p | <td align="left" colspan="1" rowspan="1">Attribute semantics</td | |||
rocedures"/> | > | |||
</c> | <td align="left" colspan="1" rowspan="1">As per <xref target="dc | |||
<c>Mux category:</c> | map-attr-definition" format="default" sectionFormat="of" derivedContent="Section | |||
<c>SPECIAL. See <xref target="dcm | 5.1.1"/> | |||
ap-mux-category"/> | </td> | |||
</c> | </tr> | |||
<c>Reference:</c> | <tr> | |||
<c>RFCXXXX</c> | <td align="left" colspan="1" rowspan="1">Usage level</td> | |||
</texttable> | <td align="left" colspan="1" rowspan="1">media</td> | |||
</section> | </tr> | |||
<section title="dcsa" anchor="IANA-reg-dcsa"> | <tr> | |||
<t>NOTE to RFC Editor: Please replace "XX | <td align="left" colspan="1" rowspan="1">Charset dependent</td> | |||
XX" with the number of this RFC.</t> | <td align="left" colspan="1" rowspan="1">No</td> | |||
<t>This document defines a new SDP media- | </tr> | |||
level attribute "a=dcsa:" as follows: | <tr> | |||
</t> | <td align="left" colspan="1" rowspan="1">Purpose</td> | |||
<texttable title=""> | <td align="left" colspan="1" rowspan="1">To define data-channel- | |||
<ttcol align="left" width="35%"/> | specific parameters</td> | |||
<ttcol align="left" width="65%"/> | </tr> | |||
<c>Contact name:</c> | <tr> | |||
<c>IESG</c> | <td align="left" colspan="1" rowspan="1">Appropriate values</td> | |||
<c>Contact email:</c> | <td align="left" colspan="1" rowspan="1">As per <xref target="dc | |||
<c>iesg@ietf.org</c> | map-attr-definition" format="default" sectionFormat="of" derivedContent="Section | |||
<c>Attribute name:</c> | 5.1.1"/> | |||
<c>dcsa</c> | </td> | |||
<c>Attribute syntax:</c> | </tr> | |||
<c>As per <xref target="dcsa-attr | <tr> | |||
ibute"/> | <td align="left" colspan="1" rowspan="1">O/A procedures</td> | |||
</c> | <td align="left" colspan="1" rowspan="1">SDP offer/answer proced | |||
<c>Attribute semantics:</c> | ures as per <xref target="section_procedures" format="default" sectionFormat="of | |||
<c>As per <xref target="dcsa-attr | " derivedContent="Section 6"/> | |||
ibute"/> | </td> | |||
</c> | </tr> | |||
<c>Usage level:</c> | <tr> | |||
<c>media</c> | <td align="left" colspan="1" rowspan="1">Mux category</td> | |||
<c>Charset dependent:</c> | <td align="left" colspan="1" rowspan="1">SPECIAL. See <xref targ | |||
<c>No</c> | et="dcmap-mux-category" format="default" sectionFormat="of" derivedContent="Sect | |||
<c>Purpose:</c> | ion 5.1.9"/> | |||
<c>Define data channel subprotoco | </td> | |||
l specific attributes</c> | </tr> | |||
<c>Appropriate values:</c> | <tr> | |||
<c>As per <xref target="dcsa-attr | <td align="left" colspan="1" rowspan="1">Reference</td> | |||
ibute"/> | <td align="left" colspan="1" rowspan="1">RFC 8864</td> | |||
</c> | </tr> | |||
<c>O/A procedures:</c> | </tbody> | |||
<c>As per <xref target="section_p | </table> | |||
rocedures"/> | </section> | |||
</c> | <section anchor="IANA-reg-dcsa" numbered="true" removeInRFC="false" toc= | |||
<c>Mux category:</c> | "include" pn="section-9.2.2"> | |||
<c>SPECIAL. See <xref target="dcs | <name slugifiedName="name-dcsa">dcsa</name> | |||
a-mux-category"/> | <t indent="0" pn="section-9.2.2-1">This document defines a new SDP med | |||
</c> | ia-level attribute, "a=dcsa:", as follows: | |||
<c>Reference:</c> | </t> | |||
<c>RFCXXXX</c> | <table anchor="dcsa-iana" align="center" pn="table-4"> | |||
</texttable> | <name slugifiedName="name-new-adcsa-attribute">New "a=dcsa:" Attribu | |||
</section> | te</name> | |||
</section> | <thead> | |||
</section> | <tr> | |||
<section title="Contributors"> | <th colspan="2" align="center" rowspan="1">"a=dcsa:"</th> | |||
<t>Juergen Stoetzer-Bradler co-authored this document.</t | </tr> | |||
> | </thead> | |||
</section> | <tbody> | |||
<section title="Acknowledgments"> | <tr> | |||
<t>The authors wish to acknowledge the borrowing of ideas | <td align="left" colspan="1" rowspan="1">Contact name</td> | |||
from other | <td align="left" colspan="1" rowspan="1">IESG</td> | |||
internet drafts by Salvatore Loreto, Gonzalo Camarillo, Peter Dunkley | </tr> | |||
and Gavin Llewellyn, and to thank Flemming Andreasen, Christian Groves, | <tr> | |||
Gunnar Hellstrom, Paul Kyzivat, Jonathan Lennox, | <td align="left" colspan="1" rowspan="1">Contact email</td> | |||
Uwe Rauschenbach and Roman Shpount for their invaluable comments.</t> | <td align="left" colspan="1" rowspan="1">iesg@ietf.org</td> | |||
<t>Special thanks to Christer Holmberg for helping finish | </tr> | |||
the document and cleaning the SDP offer/answer section.</t> | <tr> | |||
</section> | <td align="left" colspan="1" rowspan="1">Attribute name</td> | |||
<section title="CHANGE LOG"> | <td align="left" colspan="1" rowspan="1">dcsa</td> | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | </tr> | |||
hannel-sdpneg-15'"> | <tr> | |||
<t> | <td align="left" colspan="1" rowspan="1">Attribute syntax</td> | |||
<list style="symbols"> | <td align="left" colspan="1" rowspan="1">As per <xref target="dc | |||
<t>Editorial changes separate se | sa-attribute" format="default" sectionFormat="of" derivedContent="Section 5.2.1" | |||
ctions for offer/answer procedures.</t> | /> | |||
<t>Update security section.</t> | </td> | |||
</list> | </tr> | |||
</t> | <tr> | |||
</section> | <td align="left" colspan="1" rowspan="1">Attribute semantics</td | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | > | |||
hannel-sdpneg-14'"> | <td align="left" colspan="1" rowspan="1">As per <xref target="dc | |||
<t> | sa-attribute" format="default" sectionFormat="of" derivedContent="Section 5.2.1" | |||
<list style="symbols"> | /> | |||
<t>Change "dtls-id" to "tls-id" a | </td> | |||
nd assign 20 octet long values</t> | </tr> | |||
<t>Remove of RFC4566bis draft fro | <tr> | |||
m list of normative references. | <td align="left" colspan="1" rowspan="1">Usage level</td> | |||
</t> | <td align="left" colspan="1" rowspan="1">media</td> | |||
</list> | </tr> | |||
</t> | <tr> | |||
</section> | <td align="left" colspan="1" rowspan="1">Charset dependent</td> | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | <td align="left" colspan="1" rowspan="1">No</td> | |||
hannel-sdpneg-12'"> | </tr> | |||
<t> | <tr> | |||
<list style="symbols"> | <td align="left" colspan="1" rowspan="1">Purpose</td> | |||
<t>Modification of Keith's addres | <td align="left" colspan="1" rowspan="1">To define attributes th | |||
s information. | at are specific to data channel subprotocols</td> | |||
</t> | </tr> | |||
</list> | <tr> | |||
</t> | <td align="left" colspan="1" rowspan="1">Appropriate values</td> | |||
</section> | <td align="left" colspan="1" rowspan="1">As per <xref target="dc | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | sa-attribute" format="default" sectionFormat="of" derivedContent="Section 5.2.1" | |||
hannel-sdpneg-11'"> | /> | |||
<t> | </td> | |||
<list style="symbols"> | </tr> | |||
<t>dcmap-stream-id syntax change | <tr> | |||
to limit size to 5 digits. | <td align="left" colspan="1" rowspan="1">O/A procedures</td> | |||
</t> | <td align="left" colspan="1" rowspan="1">SDP offer/answer proced | |||
<t>Add missing 'x' prefix to quot | ures as per <xref target="section_procedures" format="default" sectionFormat="of | |||
ed-visible syntax. | " derivedContent="Section 6"/> | |||
</t> | </td> | |||
<t>Align SDP offerer and answerer | </tr> | |||
handling when both max-retr and max-time are present. | <tr> | |||
</t> | <td align="left" colspan="1" rowspan="1">Mux category</td> | |||
<t>Use of TEST-NET-1 ip addresses | <td align="left" colspan="1" rowspan="1">SPECIAL. See <xref targ | |||
in examples. | et="dcsa-mux-category" format="default" sectionFormat="of" derivedContent="Secti | |||
</t> | on 5.2.2"/> | |||
<t>Add missing a=dtls-id in one e | </td> | |||
xample. | </tr> | |||
</t> | <tr> | |||
</list> | <td align="left" colspan="1" rowspan="1">Reference</td> | |||
</t> | <td align="left" colspan="1" rowspan="1">RFC 8864</td> | |||
</section> | </tr> | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | </tbody> | |||
hannel-sdpneg-10'"> | </table> | |||
<t> | </section> | |||
<list style="symbols"> | </section> | |||
<t>Removal of the "a=connection" | <section anchor="IANA-reg-data-channel-attribs" numbered="true" removeInRF | |||
attribute lines from all SDP examples. | C="false" toc="include" pn="section-9.3"> | |||
</t> | <name slugifiedName="name-registering-attributes-for-">Registering Attri | |||
</list> | butes for Use with Data Channels</name> | |||
</t> | <t indent="0" pn="section-9.3-1">When a subprotocol is defined for use o | |||
</section> | ver data channels with | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | the SDP offer/answer mechanism, any SDP attributes that may be | |||
hannel-sdpneg-09'"> | negotiated using the "a=dcsa:" attribute <bcp14>MUST</bcp14> be added to | |||
<t> | the IANA | |||
<list style="symbols"> | "attribute-name registry (formerly "att-field")", as specified in | |||
<t>In the introduction: | <xref target="RFC8866" sectionFormat="comma" section="8.2.4" format="def | |||
<list style="symbols"> | ault" derivedLink="https://rfc-editor.org/rfc/rfc8866#section-8.2.4" derivedCont | |||
<t>Replacement of | ent="RFC8866"/>. This | |||
the sentence "The RTCWeb working group has defined the concept of | document specifies that new Usage Levels of the form "dcsa (foo)" | |||
bi-directional data channels running on top of SCTP/DTLS (SCTP over the Dat | (where "foo" is a placeholder for the subprotocol name) should be | |||
agram | registered by documents that specify negotiation of particular | |||
Transport Layer Security protocol)" with "The RTCWeb working group has defi | subprotocols.</t> | |||
ned the | <t indent="0" pn="section-9.3-2">IANA has updated the "attribute-name (f | |||
concept of bi-directional data channels running on top of the Stream Contro | ormerly "att-field")" | |||
l | registry to point to this document.</t> | |||
Transmission Protocol (SCTP)". | </section> | |||
</t> | </section> | |||
<t>Addition of fo | </middle> | |||
llowing sentences to the second paragraph: "These procedures are | <back> | |||
based on generic SDP offer/answer negotiation rules for SCTP | <references pn="section-10"> | |||
based media transport as specified in <xref target="I-D.ietf-mmusic-sctp-sd | <name slugifiedName="name-references">References</name> | |||
p"/> for | <references pn="section-10.1"> | |||
the SDP "m" line proto values UDP/DTLS/SCTP and TCP/DTLS/SCTP. | <name slugifiedName="name-normative-references">Normative References</na | |||
In the future, data channels could be defined over other SCTP based protoco | me> | |||
ls, such as | <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | |||
SCTP over IP. However, corresponding potential other "m" line proto values | 119" quoteTitle="true" derivedAnchor="RFC2119"> | |||
are not | <front> | |||
considered in this document." | <title>Key words for use in RFCs to Indicate Requirement Levels</tit | |||
</t> | le> | |||
</list> | <author initials="S." surname="Bradner" fullname="S. Bradner"> | |||
</t> | <organization showOnFrontPage="true"/> | |||
<t>Replacement of "DTLS connectio | </author> | |||
n" with "DTLS association" throughout the document. | <date year="1997" month="March"/> | |||
</t> | <abstract> | |||
<t>In sections <xref target="dcma | <t indent="0">In many standards track documents several words are | |||
p-mux-category"/> and | used to signify the requirements in the specification. These words are often ca | |||
<xref target="dcsa-mux-category"/> removal of the sentences "This document al | pitalized. This document defines these words as they should be interpreted in IE | |||
so | TF documents. This document specifies an Internet Best Current Practices for th | |||
does not specify multiplexing rules for this attribute for SCTP or | e Internet Community, and requests discussion and suggestions for improvements.< | |||
SCTP/DTLS proto values". | /t> | |||
</t> | </abstract> | |||
<t>In the text related to "Subseq | </front> | |||
uent SDP answer" in section | <seriesInfo name="BCP" value="14"/> | |||
<xref target="various_SDP_OA_considerations"/> replacement of "The DTLS/SCTP | <seriesInfo name="RFC" value="2119"/> | |||
association remains open ..." with "The SCTP association remains open ...". | <seriesInfo name="DOI" value="10.17487/RFC2119"/> | |||
</t> | </reference> | |||
<t>In the text after the second S | <reference anchor="RFC3264" target="https://www.rfc-editor.org/info/rfc3 | |||
DP answer in section | 264" quoteTitle="true" derivedAnchor="RFC3264"> | |||
<xref target="examples"/> replacement of "... (after SCTP/DTLS association is | <front> | |||
setup)" | <title>An Offer/Answer Model with Session Description Protocol (SDP) | |||
with "... (after the SCTP association is set up)". | </title> | |||
</t> | <author initials="J." surname="Rosenberg" fullname="J. Rosenberg"> | |||
<t>Addition of draft-ietf-mmusic- | <organization showOnFrontPage="true"/> | |||
dtls-sdp to the list of informative | </author> | |||
references. | <author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne | |||
</t> | "> | |||
<t>Addition of "a=dtls-id" attrib | <organization showOnFrontPage="true"/> | |||
ute lines to the SDP offer/answer examples in | </author> | |||
<xref target="examples"/>. | <date year="2002" month="June"/> | |||
</t> | <abstract> | |||
</list> | <t indent="0">This document defines a mechanism by which two entit | |||
</t> | ies can make use of the Session Description Protocol (SDP) to arrive at a common | |||
</section> | view of a multimedia session between them. In the model, one participant offer | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | s the other a description of the desired session from their perspective, and the | |||
hannel-sdpneg-08'"> | other participant answers with the desired session from their perspective. Thi | |||
<t> | s offer/answer model is most useful in unicast sessions where information from b | |||
<list style="symbols"> | oth participants is needed for the complete view of the session. The offer/answ | |||
<t>Addition of definition of "dat | er model is used by protocols like the Session Initiation Protocol (SIP). [STAN | |||
a channel subprotocol" to | DARDS-TRACK]</t> | |||
<xref target="terminology"/> as proposed on the MMUSIC list, | </abstract> | |||
https://www.ietf.org/mail-archive/web/mmusic/current/msg15827.html. | </front> | |||
</t> | <seriesInfo name="RFC" value="3264"/> | |||
<t>Addition of RFC4566bis draft | <seriesInfo name="DOI" value="10.17487/RFC3264"/> | |||
to list of normative references. | </reference> | |||
</t> | <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3 | |||
<t>Updates of tables in <xref tar | 629" quoteTitle="true" derivedAnchor="RFC3629"> | |||
get="IANA-reg-dcmap"/> and | <front> | |||
<xref target="IANA-reg-dcsa"/> as per section 8.2.4 | <title>UTF-8, a transformation format of ISO 10646</title> | |||
of RFC4566bis draft. | <author initials="F." surname="Yergeau" fullname="F. Yergeau"> | |||
</t> | <organization showOnFrontPage="true"/> | |||
<t>Addition of new "new-usage-lev | </author> | |||
el">. | <date year="2003" month="November"/> | |||
</t> | <abstract> | |||
</list> | <t indent="0">ISO/IEC 10646-1 defines a large character set called | |||
</t> | the Universal Character Set (UCS) which encompasses most of the world's writing | |||
</section> | systems. The originally proposed encodings of the UCS, however, were not compa | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | tible with many current applications and protocols, and this has led to the deve | |||
hannel-sdpneg-07'"> | lopment of UTF-8, the object of this memo. UTF-8 has the characteristic of pres | |||
<t> | erving the full US-ASCII range, providing compatibility with file systems, parse | |||
<list style="symbols"> | rs and other software that rely on US-ASCII values but are transparent to other | |||
<t>Addition of two new paragraphs | values. This memo obsoletes and replaces RFC 2279.</t> | |||
to <xref target="dcsa-attribute"/> regarding | </abstract> | |||
subprotocol attribute relationship with transport protocol. | </front> | |||
</t> | <seriesInfo name="STD" value="63"/> | |||
<t>Addition of a note to <xref ta | <seriesInfo name="RFC" value="3629"/> | |||
rget="IANA_subproto_ids"/> regarding subprotocols | <seriesInfo name="DOI" value="10.17487/RFC3629"/> | |||
simultaneously defined for data channel and Websocket usage. | </reference> | |||
</t> | <reference anchor="RFC4960" target="https://www.rfc-editor.org/info/rfc4 | |||
<t>Addition of two further SDP of | 960" quoteTitle="true" derivedAnchor="RFC4960"> | |||
fer/answer considerations to | <front> | |||
<xref target="various_SDP_OA_considerations"/> regarding unknown subprotocol | <title>Stream Control Transmission Protocol</title> | |||
attributes and known subprotocol attributes with unknown data channel transp | <author initials="R." surname="Stewart" fullname="R. Stewart" role=" | |||
ort | editor"> | |||
related semantic. | <organization showOnFrontPage="true"/> | |||
</t> | </author> | |||
</list> | <date year="2007" month="September"/> | |||
</t> | <abstract> | |||
</section> | <t indent="0">This document obsoletes RFC 2960 and RFC 3309. It d | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | escribes the Stream Control Transmission Protocol (SCTP). SCTP is designed to t | |||
hannel-sdpneg-06'"> | ransport Public Switched Telephone Network (PSTN) signaling messages over IP net | |||
<t> | works, but is capable of broader applications.</t> | |||
<list style="symbols"> | <t indent="0">SCTP is a reliable transport protocol operating on t | |||
<t>Changes addressing Christian G | op of a connectionless packet network such as IP. It offers the following servi | |||
roves's WGLC review comments raised in | ces to its users:</t> | |||
http://www.ietf.org/mail-archive/web/mmusic/current/msg15357.html and | <t indent="0">-- acknowledged error-free non-duplicated transfer | |||
http://www.ietf.org/mail-archive/web/mmusic/current/msg15359.html. | of user data,</t> | |||
</t> | <t indent="0">-- data fragmentation to conform to discovered path | |||
</list> | MTU size,</t> | |||
</t> | <t indent="0">-- sequenced delivery of user messages within multi | |||
</section> | ple streams, with an option for order-of-arrival delivery of individual user mes | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | sages,</t> | |||
hannel-sdpneg-05'"> | <t indent="0">-- optional bundling of multiple user messages into | |||
<t> | a single SCTP packet, and</t> | |||
<list style="symbols"> | <t indent="0">-- network-level fault tolerance through supporting | |||
<t>In IANA registration <xref tar | of multi-homing at either or both ends of an association.</t> | |||
get="IANA-reg-dcmap"/> and | <t indent="0"> The design of SCTP includes appropriate congestion | |||
<xref target="IANA-reg-dcsa"/> replacement of contact name and e-mail address | avoidance behavior and resistance to flooding and masquerade attacks. [STANDARD | |||
with "MMUSIC Chairs" and "mmusic-chairs@ietf.org". | S-TRACK]</t> | |||
</t> | </abstract> | |||
<t>In <xref target="dcsa-attribut | </front> | |||
e"/> replacement of "Thus in the example above, the | <seriesInfo name="RFC" value="4960"/> | |||
original attribute line "a=accept- | <seriesInfo name="DOI" value="10.17487/RFC4960"/> | |||
types:text/plain" is represented by the attribute line "a=dcsa:2 | </reference> | |||
accept-types:text/plain", which specifies that this instance of MSRP | <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5 | |||
being transported on the SCTP association using the data channel with | 234" quoteTitle="true" derivedAnchor="RFC5234"> | |||
stream id 2 accepts plain text files." with "... which specifies that this | <front> | |||
instance of the MSRP subprotocol being transported ...". | <title>Augmented BNF for Syntax Specifications: ABNF</title> | |||
</t> | <author initials="D." surname="Crocker" fullname="D. Crocker" role=" | |||
<t>The last paragraph of <xref ta | editor"> | |||
rget="dcsa-attribute"/> started with | <organization showOnFrontPage="true"/> | |||
"Note: This document does not provide a complete specification ...". | </author> | |||
Removal of "Note:" and move of this paragraph to the introduction in | <author initials="P." surname="Overell" fullname="P. Overell"> | |||
<xref target="introduction"/> as last paragraph. | <organization showOnFrontPage="true"/> | |||
</t> | </author> | |||
<t> | <date year="2008" month="January"/> | |||
<xref target="prot_att"/> | <abstract> | |||
's headline was "Subprotocol Specific Attributes". | <t indent="0">Internet technical specifications often need to defi | |||
Change of this headline to "Other Media Level Attributes" and adaptations of | ne a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF | |||
the first | ), called Augmented BNF (ABNF), has been popular among many Internet specificati | |||
paragraph of this section and the first paragraph of <xref target="dcsa-attri | ons. The current specification documents ABNF. It balances compactness and simp | |||
bute"/> | licity with reasonable representational power. The differences between standard | |||
in order to clarify that not only those attributes may be | BNF and ABNF involve naming rules, repetition, alternatives, order-independence | |||
encapsulated in a "dcsa" attribute, which are specifically defined for the | , and value ranges. This specification also supplies additional rule definition | |||
subprotocol, but that also other attributes may be encapsulated if | s and encoding for a core lexical analyzer of the type common to several Interne | |||
they are related to the specific subprotocol instance. | t specifications. [STANDARDS-TRACK]</t> | |||
</t> | </abstract> | |||
<t>Move of the last but one parag | </front> | |||
raph of <xref target="dcsa-attribute"/> starting with | <seriesInfo name="STD" value="68"/> | |||
"The same syntax applies to ..." right in front of the formal syntax definiti | <seriesInfo name="RFC" value="5234"/> | |||
on of the | <seriesInfo name="DOI" value="10.17487/RFC5234"/> | |||
"dcsa" attribute. | </reference> | |||
</t> | <reference anchor="RFC6525" target="https://www.rfc-editor.org/info/rfc6 | |||
<t>Modifications of the text in < | 525" quoteTitle="true" derivedAnchor="RFC6525"> | |||
xref target="dcmap-mux-category"/> and | <front> | |||
<xref target="dcsa-mux-category"/> in order not to explicitly restrict usage | <title>Stream Control Transmission Protocol (SCTP) Stream Reconfigur | |||
of the | ation</title> | |||
"a=dcmap:" and "a=dcsa:" attributes to "m" lines with proto values "UDP/DTLS/ | <author initials="R." surname="Stewart" fullname="R. Stewart"> | |||
SCTP" | <organization showOnFrontPage="true"/> | |||
or "TCP/DTLS/SCTP". | </author> | |||
</t> | <author initials="M." surname="Tuexen" fullname="M. Tuexen"> | |||
</list> | <organization showOnFrontPage="true"/> | |||
</t> | </author> | |||
</section> | <author initials="P." surname="Lei" fullname="P. Lei"> | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | <organization showOnFrontPage="true"/> | |||
hannel-sdpneg-04'"> | </author> | |||
<t> | <date year="2012" month="February"/> | |||
<list style="symbols"> | <abstract> | |||
<t>In <xref target="subprotocol-p | <t indent="0">Many applications that use the Stream Control Transm | |||
arameter"/> the first (and only) paragraph was | ission Protocol (SCTP) want the ability to "reset" a stream. The intention of r | |||
"The 'subprotocol' parameter indicates which protocol the | esetting a stream is to set the numbering sequence of the stream back to 'zero' | |||
client expects to exchange via the channel. | with a corresponding notification to the application layer that the reset has be | |||
'subprotocol' is an optional parameter. | en performed. Applications requiring this feature want it so that they can "reu | |||
If the 'subprotocol' parameter is not present, then its value | se" streams for different purposes but still utilize the stream sequence number | |||
defaults to the empty string." | so that the application can track the message flows. Thus, without this feature | |||
Replacement of this paragraph with following two paragraphs: | , a new use of an old stream would result in message numbers greater than expect | |||
<list style="symbols"> | ed, unless there is a protocol mechanism to "reset the streams back to zero". T | |||
<t> The 'subproto | his document also includes methods for resetting the transmission sequence numbe | |||
col' parameter indicates which protocol the | rs, adding additional streams, and resetting all stream sequence numbers. [STAN | |||
client expects to exchange via the channel. | DARDS-TRACK]</t> | |||
This parameter maps to the 'Protocol' parameter defined in | </abstract> | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>. | </front> | |||
<xref target="IANA_subproto_ids"/> specifies how new subprotocol parameter | <seriesInfo name="RFC" value="6525"/> | |||
values are registered. | <seriesInfo name="DOI" value="10.17487/RFC6525"/> | |||
'subprotocol' is an optional parameter. | </reference> | |||
If the 'subprotocol' parameter is not present, then its value | <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | |||
defaults to the empty string. | 174" quoteTitle="true" derivedAnchor="RFC8174"> | |||
</t> | <front> | |||
<t>Note: The empt | <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | |||
y string MAY also be explicitly used as 'subprotocol' value, | tle> | |||
such that 'subprotocol=""' is equivalent to the 'subprotocol' parameter no | <author initials="B." surname="Leiba" fullname="B. Leiba"> | |||
t being | <organization showOnFrontPage="true"/> | |||
present at all. <xref target="I-D.ietf-rtcweb-data-protocol"/> allows the | </author> | |||
DATA_CHANNEL_OPEN message's 'subprotocol' value to be an empty string. | <date year="2017" month="May"/> | |||
</t> | <abstract> | |||
</list> | <t indent="0">RFC 2119 specifies common key words that may be used | |||
</t> | in protocol specifications. This document aims to reduce the ambiguity by cla | |||
<t>Addition of <xref target="I-D. | rifying that only UPPERCASE usage of the key words have the defined special mea | |||
ietf-mmusic-sdp-mux-attributes"/> | nings.</t> | |||
to list the of normative references. | </abstract> | |||
</t> | </front> | |||
<t>Addition of dcmap attribute sp | <seriesInfo name="BCP" value="14"/> | |||
ecific IANA registration | <seriesInfo name="RFC" value="8174"/> | |||
<xref target="IANA-reg-dcmap"/>. | <seriesInfo name="DOI" value="10.17487/RFC8174"/> | |||
</t> | </reference> | |||
<t>Addition of dcsa attribute spe | <reference anchor="RFC8831" target="https://www.rfc-editor.org/info/rfc8 | |||
cific IANA registration | 831" quoteTitle="true" derivedAnchor="RFC8831"> | |||
<xref target="IANA-reg-dcsa"/>. | <front> | |||
</t> | <title>WebRTC Data Channels</title> | |||
<t>Addition of new <xref target=" | <author initials="R" surname="Jesup" fullname="Randell Jesup"> | |||
dcmap-mux-category"/> describing the mux category | <organization showOnFrontPage="true"/> | |||
of the dcmap SDP attribute. This section and the new "a=dcsa:" attribute rel | </author> | |||
ated | <author initials="S" surname="Loreto" fullname="Salvatore Loreto"> | |||
mux category section are similar to the "Mux Category" sections of | <organization showOnFrontPage="true"/> | |||
the "a=sctp-port:" and "a=max-message-size:" attributes in | </author> | |||
<xref target="I-D.ietf-mmusic-sctp-sdp"/>. | <author initials="M" surname="Tüxen" fullname="Michael Tüxen"> | |||
</t> | <organization showOnFrontPage="true"/> | |||
<t>Addition of new <xref target=" | </author> | |||
dcsa-mux-category"/> describing the mux category | <date month="January" year="2021"/> | |||
of the dcsa SDP attribute. | </front> | |||
</t> | <seriesInfo name="RFC" value="8831"/> | |||
</list> | <seriesInfo name="DOI" value="10.17487/RFC8831"/> | |||
</t> | </reference> | |||
</section> | <reference anchor="RFC8832" target="https://www.rfc-editor.org/info/rfc8 | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | 832" quoteTitle="true" derivedAnchor="RFC8832"> | |||
hannel-sdpneg-03'"> | <front> | |||
<t> | <title>WebRTC Data Channel Establishment Protocol</title> | |||
<list style="symbols"> | <author initials="R." surname="Jesup" fullname="Randell Jesup"> | |||
<t>In <xref target="introduction" | <organization showOnFrontPage="true"/> | |||
/> replacement of | </author> | |||
"RTCWeb leaves it open for other applications to use data channels and its in | <author initials="S." surname="Loreto" fullname="Salvatore Loreto"> | |||
-band | <organization showOnFrontPage="true"/> | |||
DCEP or out-of-band non-DCEP protocols for creating them" with | </author> | |||
"... to use data channels and its in-band DCEP or other in-band or out-of-ban | <author initials="M" surname="Tüxen" fullname="Michael Tüxen"> | |||
d | <organization showOnFrontPage="true"/> | |||
protocols for creating them". | </author> | |||
Additionally replacement of | <date month="January" year="2021"/> | |||
"In particular, the SDP offer generated by the application | </front> | |||
includes no channel-specific information" with | <seriesInfo name="RFC" value="8832"/> | |||
"... generated by the RTCweb data channel stack includes | <seriesInfo name="DOI" value="10.17487/RFC8832"/> | |||
no channel-specific information". | </reference> | |||
</t> | <reference anchor="RFC8841" target="https://www.rfc-editor.org/info/rfc8 | |||
<t>Move of former section 5 ("Dat | 841" quoteTitle="true" derivedAnchor="RFC8841"> | |||
a Channels") to new | <front> | |||
<xref target="generic-out-of-band-aspects"/> and removal of JavaScript API sp | <title>Session Description Protocol (SDP) Offer/Answer Procedures fo | |||
ecific | r Stream Control Transmission Protocol (SCTP) over Datagram Transport Layer Secu | |||
discussions from this moved text (like mentioning of data channel stack speci | rity (DTLS) Transport</title> | |||
fic | <author initials="C." surname="Holmberg" fullname="Christer Holmberg | |||
states). Therefore former section 6 ("SDP Offer/Answer Negotiation") is now | "> | |||
<xref target="sdp_synt"/>. | <organization showOnFrontPage="true"/> | |||
</t> | </author> | |||
<t>In <xref target="sdp_synt"/>: | <author initials="R." surname="Shpount" fullname="Roman Shpount"> | |||
<list style="symbols"> | <organization showOnFrontPage="true"/> | |||
<t>Relacement of | </author> | |||
<xref target="sdp_synt"/>'s | <author initials="S." surname="Loreto" fullname="Salvatore Loreto"> | |||
first paragraph | <organization showOnFrontPage="true"/> | |||
"This section defines a method of non-DCEP negotiation by which two | </author> | |||
clients can negotiate data channel-specific and subprotocol-specific | <author initials="G." surname="Camarillo" fullname="Gonzalo Camarill | |||
parameters, using the out-of-band SDP offer/answer exchange. This | o"> | |||
SDP extension can only be used with the SDP offer/answer model." with | <organization showOnFrontPage="true"/> | |||
"This section defines an SDP extension by which | </author> | |||
two clients can negotiate data channel-specific and subprotocol-specific | <date month="January" year="2021"/> | |||
parameters without using DCEP <xref target="I-D.ietf-rtcweb-data-protocol"/ | </front> | |||
>. | <seriesInfo name="RFC" value="8841"/> | |||
This SDP extension only defines usage in the context of SDP offer/answer." | <seriesInfo name="DOI" value="10.17487/RFC8841"/> | |||
</t> | </reference> | |||
<t>Addition of ne | <reference anchor="RFC8859" target="https://www.rfc-editor.org/info/rfc8 | |||
w paragraph: | 859" quoteTitle="true" derivedAnchor="RFC8859"> | |||
"<xref target="generic-out-of-band-aspects"/> provides information how data | <front> | |||
channels | <title>A Framework for Session Description Protocol (SDP) Attributes | |||
work in general and especially summarizes some key aspects, which should be | When Multiplexing</title> | |||
considered for the negotiation of data channels if DCEP is not used." | <author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar | |||
</t> | "> | |||
</list> | <organization showOnFrontPage="true"/> | |||
</t> | </author> | |||
<t>In <xref target="subsec-sdp-at | <date month="January" year="2021"/> | |||
tr-for-dc-par-neg"/> replacement of "The intention of | </front> | |||
exchanging these attributes is to create data channels on both the peers with | <seriesInfo name="RFC" value="8859"/> | |||
the same | <seriesInfo name="DOI" value="10.17487/RFC8859"/> | |||
set of attributes without actually using the DCEP | </reference> | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>" with "The intention in exchan | <reference anchor="RFC8866" target="https://www.rfc-editor.org/info/rfc8 | |||
ging | 866" quoteTitle="true" derivedAnchor="RFC8866"> | |||
these attributes is to create, on two peers, without use of DCEP | <front> | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>, | <title>SDP: Session Description Protocol</title> | |||
matched pairs of oppositely directed data channels having the same set of att | <author initials="A" surname="Begen" fullname="Ali Begen"> | |||
ributes". | <organization showOnFrontPage="true"/> | |||
</t> | </author> | |||
<t>In <xref target="max-retr-para | <author initials="P" surname="Kyzivat" fullname="Paul Kyzivat"> | |||
m-definition"/> replacement of "The 'max-retr' | <organization showOnFrontPage="true"/> | |||
parameter indicates the maximal number a user message will be retransmitted" | </author> | |||
with "The | <author initials="C" surname="Perkins" fullname="Colin Perkins"> | |||
'max-retr' parameter indicates the maximal number of times a user message wil | <organization showOnFrontPage="true"/> | |||
l | </author> | |||
be retransmitted". | <author initials="M" surname="Handley" fullname="Mark Handley"> | |||
</t> | <organization showOnFrontPage="true"/> | |||
<t>In <xref target="id_mngt"/> re | </author> | |||
placement of "However, an SDP offer/answer exchange | <date month="January" year="2021"/> | |||
MUST NOT be initiated if the associated SCTP stream is already negotiated via | </front> | |||
DCEP" | <seriesInfo name="RFC" value="8866"/> | |||
with "However, an SCTP stream MUST NOT be referenced in a dcmap or dcsa | <seriesInfo name="DOI" value="10.17487/RFC8866"/> | |||
attribute of an SDP offer/answer exchange if the associated SCTP stream has a | </reference> | |||
lready | </references> | |||
been negotiated via DCEP". | <references pn="section-10.2"> | |||
</t> | <name slugifiedName="name-informative-references">Informative References | |||
<t>In the examples in <xref targe | </name> | |||
t="examples"/> addition of the previously missing | <reference anchor="RFC4975" target="https://www.rfc-editor.org/info/rfc4 | |||
colons to the "a=sctp-port" attribute lines. | 975" quoteTitle="true" derivedAnchor="RFC4975"> | |||
</t> | <front> | |||
</list> | <title>The Message Session Relay Protocol (MSRP)</title> | |||
</t> | <author initials="B." surname="Campbell" fullname="B. Campbell" role | |||
</section> | ="editor"> | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | <organization showOnFrontPage="true"/> | |||
hannel-sdpneg-02'"> | </author> | |||
<t> | <author initials="R." surname="Mahy" fullname="R. Mahy" role="editor | |||
<list style="symbols"> | "> | |||
<t>Move of reference draft-ietf-r | <organization showOnFrontPage="true"/> | |||
tcweb-jsep from the list of normative | </author> | |||
references to the list of informative references. Remover in -07 since not ref | <author initials="C." surname="Jennings" fullname="C. Jennings" role | |||
erenced</t> | ="editor"> | |||
<t>Addition of IANA SDP parameter | <organization showOnFrontPage="true"/> | |||
s to the list of informative | </author> | |||
references | <date year="2007" month="September"/> | |||
and addition of following two sentences to the first paragraph after the ABNF | <abstract> | |||
definition: "Note however that not all SDP attributes are suitable | <t indent="0">This document describes the Message Session Relay Pr | |||
as "a=dcsa:" parameter. IANA SDP parameters contains | otocol, a protocol for transmitting a series of related instant messages in the | |||
the lists of IANA registered session and media level or | context of a session. Message sessions are treated like any other media stream | |||
media level only SDP attributes."</t> | when set up via a rendezvous or session creation protocol such as the Session In | |||
<t>In the introduction replacemen | itiation Protocol. [STANDARDS-TRACK]</t> | |||
t of last sentence | </abstract> | |||
"This document defines SDP-based out-of-band negotiation procedures | </front> | |||
to establish data channels for transport of well-defined subprotocols" | <seriesInfo name="RFC" value="4975"/> | |||
with | <seriesInfo name="DOI" value="10.17487/RFC4975"/> | |||
"This document defines SDP offer/answer negotiation procedures | </reference> | |||
to establish data channels for transport of well-defined subprotocols, | <reference anchor="RFC6455" target="https://www.rfc-editor.org/info/rfc6 | |||
to enable out-of-band negotiation". | 455" quoteTitle="true" derivedAnchor="RFC6455"> | |||
</t> | <front> | |||
<t>Throughout the document replac | <title>The WebSocket Protocol</title> | |||
ement of "external negotiation" with | <author initials="I." surname="Fette" fullname="I. Fette"> | |||
"SDP offer/answer negotiation" and removal of term "external negotiation" from | <organization showOnFrontPage="true"/> | |||
the | </author> | |||
terminology list in <xref target="terminology"/>.</t> | <author initials="A." surname="Melnikov" fullname="A. Melnikov"> | |||
<t> Throughout the document repla | <organization showOnFrontPage="true"/> | |||
cement of "internal negotiation" with | </author> | |||
"DCEP" and removal of terms "internal negotiation" and "in-band negotiation" | <date year="2011" month="December"/> | |||
from the terminology list in <xref target="terminology"/>.</t> | <abstract> | |||
<t>Addition of "SCTP Stream Seque | <t indent="0">The WebSocket Protocol enables two-way communication | |||
nce Number (SSN)" to the list of terms.</t> | between a client running untrusted code in a controlled environment to a remote | |||
<t>In <xref target="id_mngt"/> re | host that has opted-in to communications from that code. The security model us | |||
placement of sentence | ed for this is the origin-based security model commonly used by web browsers. T | |||
"However, a single stream is managed using one method at a time." with | he protocol consists of an opening handshake followed by basic message framing, | |||
"However, an SDP offer/answer exchange MUST NOT be initiated | layered over TCP. The goal of this technology is to provide a mechanism for bro | |||
if the associated SCTP stream is already negotiated via DCEP".</t> | wser-based applications that need two-way communication with servers that does n | |||
<t>In <xref target="param_negotia | ot rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or < | |||
tion"/> replacement of sentence | iframe>s and long polling). [STANDARDS-TRACK]</t> | |||
"By definition max-retr and max-time are mutually exclusive, so only one of | </abstract> | |||
them can be present in a=dcmap" with | </front> | |||
"By definition max-retr and max-time are mutually exclusive, | <seriesInfo name="RFC" value="6455"/> | |||
so aBoth MUST NOT be present in a=dcmap".</t> | <seriesInfo name="DOI" value="10.17487/RFC6455"/> | |||
<t>Move of reference <xref target | </reference> | |||
="WebRtcAPI"/> from list of normative references | <reference anchor="RFC8850" target="https://www.rfc-editor.org/info/rfc8 | |||
to list of informative references.</t> | 850" quoteTitle="true" derivedAnchor="RFC8850"> | |||
<t>Removal of almost all text par | <front> | |||
ts, which discussed JavaScript or other API specific | <title>Controlling Multiple Streams for Telepresence (CLUE) Protocol | |||
aspects. Such API specific aspects were mainly discussed in sub-sections of Se | Data Channel</title> | |||
ction 5 | <author initials="C." surname="Holmberg" fullname="Christer Holmberg | |||
and <xref target="sdp_synt"/> | "> | |||
of draft-ietf-mmusic-data-channel-sdpneg-02.</t> | <organization showOnFrontPage="true"/> | |||
</list> | </author> | |||
</t> | <date month="January" year="2021"/> | |||
</section> | </front> | |||
<section title="Changes against 'draft-ietf-mmusic-data-c | <seriesInfo name="RFC" value="8850"/> | |||
hannel-sdpneg-01'"> | <seriesInfo name="DOI" value="10.17487/RFC8850"/> | |||
<t> | </reference> | |||
<list style="symbols"> | <reference anchor="RFC8855" target="https://www.rfc-editor.org/info/rfc8 | |||
<t>New <xref target="appl_stateme | 855" quoteTitle="true" derivedAnchor="RFC8855"> | |||
nt"/> regarding applicability to | <front> | |||
SDP offer/answer only.</t> | <title>The Binary Floor Control Protocol (BFCP)</title> | |||
<t>Addition of new <xref target=" | <author initials="G." surname="Camarillo" fullname="Gonzalo Camarill | |||
IANA_subproto_ids"/> "Subprotocol identifiers" as | o"> | |||
subsection of the "IANA Considerations" related <xref target="IANA"/>. | <organization showOnFrontPage="true"/> | |||
Also removal of the temporary note | </author> | |||
"To be completed. As [I-D.ietf-rtcweb-data-protocol] this document should re | <author initials="K." surname="Drage" fullname="Keith Drage"> | |||
fer to | <organization showOnFrontPage="true"/> | |||
IANA's WebSocket Subprotocol Name Registry defined in <xref target="RFC6455"/ | </author> | |||
>"</t> | <author initials="T." surname="Kristensen" fullname="Tom Kristensen" | |||
<t> In <xref target="param_negoti | > | |||
ation"/>: | <organization showOnFrontPage="true"/> | |||
<list style="symbols"> | </author> | |||
<t>In the first p | <author initials="J." surname="Ott" fullname="Jörg Ott"> | |||
aragraph | <organization showOnFrontPage="true"/> | |||
replacement of the sentence "If an SDP offer | </author> | |||
contains both of these parameters then such an SDP offer will be rejected." | <author initials="C." surname="Eckel" fullname="Charles Eckel"> | |||
with "If | <organization showOnFrontPage="true"/> | |||
an SDP offer contains both of these parameters then the receiver of such an | </author> | |||
SDP | <date month="January" year="2021"/> | |||
offer MUST reject the SDP offer." </t> | </front> | |||
<t>In the second | <seriesInfo name="RFC" value="8855"/> | |||
paragraph | <seriesInfo name="DOI" value="10.17487/RFC8855"/> | |||
capitalization of "shall" and "may" such that both sentences now read: | </reference> | |||
"The SDP answer SHALL echo the same subprotocol, max-retr, max-time, | <reference anchor="RFC8873" target="https://www.rfc-editor.org/info/rfc8 | |||
ordered parameters, if those were present in the offer, and MAY include | 873" quoteTitle="true" derivedAnchor="RFC8873"> | |||
a label parameter. They MAY appear in any order, which could be | <front> | |||
different from the SDP offer, in the SDP answer."</t> | <title>Message Session Relay Protocol (MSRP) over Data Channels</tit | |||
<t>In the third p | le> | |||
aragraph | <author initials="JM." surname="Recio" fullname="Jose Recio" role="e | |||
replacement of the sentence | ditor"> | |||
"The same information MUST be replicated without changes in any subsequent | <organization showOnFrontPage="true"/> | |||
offer or | </author> | |||
answer, as long as the data channel is still opened at the time of offer or | <author initials="C" surname="Holmberg" fullname="Christer Holmberg" | |||
answer | > | |||
generation." with | <organization showOnFrontPage="true"/> | |||
"When sending a subsequent offer or an answer, and for as long as the data | </author> | |||
channel | <date month="January" year="2021"/> | |||
is still open, the sender MUST replicate the same information.".</t> | </front> | |||
</list> | <seriesInfo name="RFC" value="8873"/> | |||
</t> | <seriesInfo name="DOI" value="10.17487/RFC8873"/> | |||
<t>In <xref target="param_negotia | </reference> | |||
tion"/> the mapping of data channel types defined in | <reference anchor="T38" target="https://www.itu.int/rec/T-REC-T.38-20151 | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/> to the SDP "a=dcmap" attribute | 1-I/en" quoteTitle="true" derivedAnchor="T38"> | |||
parameters were illustrated using example "a=dcmap" attribute lines. | <front> | |||
Replacement of these example "a=dcmap" attribute lines with just the "a=dcmap | <title>Procedures for real-time Group 3 facsimile communication over | |||
" | IP networks</title> | |||
attribute parameters being relevant for the channel type.</t> | <author> | |||
<t>In <xref target="various_SDP_O | <organization showOnFrontPage="true">International Telecommunicati | |||
A_considerations"/> the description of bullet | on Union</organization> | |||
point "SDP offer has no a=dcmap attributes - Initial SDP offer:" was | </author> | |||
"Initial SDP offer: No data channel negotiated yet." | <date month="November" year="2015"/> | |||
Replacement of this description with | </front> | |||
"Initial SDP offer: No data channel is negotiated yet. | <seriesInfo name="ITU-T Recommendation" value="T.38"/> | |||
The DTLS connection and SCTP association is | </reference> | |||
negotiated and, if agreed, established as per | <reference anchor="WebRtcAPI" target="https://www.w3.org/TR/webrtc/" quo | |||
<xref target="I-D.ietf-mmusic-sctp-sdp"/>."</t> | teTitle="true" derivedAnchor="WebRtcAPI"> | |||
<t>In <xref target="various_SDP_O | <front> | |||
A_considerations"/> in both bullet points related to | <title>WebRTC 1.0: Real-time Communication Between Browsers</title> | |||
"Subsequent SDP offer" and "Subsequent SDP answer" replacement of | <author initials="C." surname="Jennings" fullname="Cullen Jennings"> | |||
"All the externally negotiated data channels must be closed now." with | <organization showOnFrontPage="true"/> | |||
"All the externally negotiated data channels are expected to be closed now.". | </author> | |||
</t> | <author initials="H." surname="Boström" fullname="Henrik Boström"> | |||
<t>In <xref target="ext_open"/>'s | <organization showOnFrontPage="true"/> | |||
sixth paragraph | </author> | |||
replacement of the two occurrences of "must" with "MUST".</t> | <author initials="J-I." surname="Bruaroey" fullname="Jan-Ivar Bruaro | |||
<t>In <xref target="dcmap-attr-de | ey"> | |||
finition"/> in the definition of the ABNF rule | <organization showOnFrontPage="true"/> | |||
"dcmap-opt" there was a comment saying that | </author> | |||
"Only maxretr-opt or maxtime-opt is present. Both MUST NOT be present." | <date/> | |||
Removal of the second normative sentence and instead addition of following ne | </front> | |||
w | <refcontent>W3C Proposed Recommendation</refcontent> | |||
paragraph to the end of this section: | </reference> | |||
"Within an 'a=dcmap' attribute line's 'dcmap-opt' value only one | </references> | |||
'maxretr-opt' parameter or one 'maxtime-opt' parameter is present. | </references> | |||
Both MUST NOT be present."</t> | <section anchor="generic-out-of-band-aspects" numbered="true" removeInRFC="f | |||
<t>In <xref target="ordered-param | alse" toc="include" pn="section-appendix.a"> | |||
-description"/> replacement of the first sentence | <name slugifiedName="name-generic-data-channel-negoti">Generic Data Channe | |||
"The 'ordered' parameter with value "true" indicates that DATA chunks in the | l Negotiation Aspects when Not Using DCEP</name> | |||
channel | <t indent="0" pn="section-appendix.a-1">This appendix summarizes how data | |||
MUST be dispatched to the upper layer by the receiver while preserving the or | channels work in general and discusses | |||
der." | some key aspects that should be considered for the out-of-band negotiation of | |||
with | data | |||
"The 'ordered' parameter with value "true" indicates that the receiver MUST d | ||||
ispatch | ||||
DATA chunks in the data channel to the upper layer while preserving the order | ||||
.".</t> | ||||
<t>In <xref target="opendc"/>'s f | ||||
irst paragraph replacement of the one occurrence of | ||||
"must" with "..., it MUST wait until ...".</t> | ||||
<t>In <xref target="close-dc"/>: | ||||
<list style="symbols"> | ||||
<t>In the second | ||||
paragraph replacement of "must" with "... whether this closing MUST | ||||
in addition ..."</t> | ||||
<t>In the third p | ||||
aragraph replacement of the sentence | ||||
"The port value for the "m" line SHOULD NOT be changed (e.g., to zero) | ||||
when closing a data channel ..." with | ||||
"The offerer SHOULD NOT change the port value for the "m" line (e.g., to ze | ||||
ro) when | ||||
closing a data channel ...".</t> | ||||
<t>In the last bu | ||||
t two paragraph replacement of the sentence | ||||
"... then an SDP offer which excludes this closed data channel SHOULD be ge | ||||
nerated." | ||||
with | ||||
"... then the client SHOULD generate an SDP offer which excludes this close | ||||
d data | ||||
channel.".</t> | ||||
<t>In the last bu | ||||
t one paragraph replacement of "must" with | ||||
"The application MUST also close...".</t> | ||||
</list> | ||||
</t> | ||||
<t>In <xref target="prot_att"/> a | ||||
ddition of following note after the formal definition | ||||
of the 'a=dcsa' attribute: | ||||
"Note that the above reference to RFC 4566 defines were the | ||||
attribute definition can be found; | ||||
it does not provide any limitation on support of attributes | ||||
defined in other documents in accordance with this attribute | ||||
definition."</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-00'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>In <xref target="terminology"/ | ||||
> "WebRTC data channel" was defined as | ||||
"A bidirectional channel consisting of paired | ||||
SCTP outbound and inbound streams." | ||||
Replacement of this definition with | ||||
"Data channel: A WebRTC data channel as specified in | ||||
<xref target="I-D.ietf-rtcweb-data-channel"/>", and consistent usage | ||||
of "data channel" in the remainder of the document including the | ||||
document's headline."</t> | ||||
<t>In Section 5 removal of follow | ||||
ing note: | ||||
'OPEN ISSUE: The syntax in <xref target="I-D.ietf-mmusic-sctp-sdp"/> may | ||||
change as that document progresses. In particular we expect | ||||
"webrtc-datachannel" to become a more general term.'</t> | ||||
<t>Consistent usage of '"m" line' | ||||
in whole document as per RFC4566.</t> | ||||
<t>In <xref target="subsec-sdp-at | ||||
tr-for-dc-par-neg"/> | ||||
removal of the example dcmap attribute line | ||||
'a=dcmap:2 subprotocol="bfcp";label="channel 2' as there are already | ||||
four examples right after the ABNF rules in | ||||
<xref target="dcmap-attr-definition"/>. | ||||
Corresponding removal of following related note: | ||||
"Note: This document does not provide a complete specification | ||||
of how to negotiate the use of a WebRTC data channel to transport BFCP. | ||||
Procedures specific to each subprotocol such as BFCP will be | ||||
documented elsewhere. The use of BFCP is only an example of how | ||||
the generic procedures described herein might apply to a specific | ||||
subprotocol."</t> | ||||
<t>In <xref target="subsec-sdp-at | ||||
tr-for-dc-par-neg"/> | ||||
removal of following note: | ||||
"Note: This attribute is derived from attribute "webrtc-DataChannel", | ||||
which was defined in old version 03 of the | ||||
following draft, but which was removed along with any support for SDP | ||||
external negotiation in subsequent versions: | ||||
<xref target="I-D.ietf-mmusic-sctp-sdp"/>."</t> | ||||
<t>Insertion of following new sen | ||||
tence to the beginning of | ||||
<xref target="dcmap-attr-definition"/>: | ||||
"dcmap is a media level attribute having following ABNF syntax:"</t> | ||||
<t>Insertion of new <xref target= | ||||
"dcmap-stream-id-param-definition"/> | ||||
containing the dcmap-stream-id specifying sentence, which previously | ||||
was placed right before the formal ABNF rules. | ||||
Removal of the sentence 'Stream is a mandatory | ||||
parameter and is noted directly after the "a=dcmap:" attribute's | ||||
colon' as this information is part of the ABNF specification.</t> | ||||
<t>In <xref target="dcmap-attr-de | ||||
finition"/> modification of the | ||||
'ordering-value' values from "0" or "1" to "true" or "false". | ||||
Corresponding text modifications in <xref target="ordered-param-description"/ | ||||
>.</t> | ||||
<t>In <xref target="dcmap-attr-de | ||||
finition"/> the ABNF definition of "quoted-string" | ||||
referred to rule name "escaped-char", which was not defined. | ||||
Instead a rule with name "escaped" was defined. Renamed that rule's name | ||||
to "escaped-char".</t> | ||||
<t>Insertion of a dedicated note | ||||
right after the "a=dcmap:4" attribute example | ||||
in <xref target="dcmap-attr-definition"/> regarding the non-printable | ||||
"escaped-char" character within the "label" value.</t> | ||||
<t>In <xref target="prot_att"/>'s | ||||
second paragraph replacement of | ||||
"sctp stream identifier" with "SCTP stream identifier".</t> | ||||
<t>In first paragraph of <xref ta | ||||
rget="id_mngt"/> replacement of first two sentences | ||||
'For the SDP-based external negotiation described in this document, | ||||
the initial offerer based "SCTP over DTLS" owns by convention the | ||||
even stream identifiers whereas the initial answerer owns the odd stream | ||||
identifiers. This ownership is 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 initial offerer.' | ||||
with | ||||
'If an SDP offer/answer exchange | ||||
(could be the initial or a subsequent one) | ||||
results in a UDP/DTLS/SCTP or TCP/DTLS/SCTP based media description being | ||||
accepted, and if this SDP offer/answer exchange results in the | ||||
establishment of a new SCTP association, then the SDP offerer owns the | ||||
even SCTP stream ids of this new SCTP association and the answerer owns | ||||
the odd SCTP stream identifiers. | ||||
If this "m" line is removed from the 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 renegotiated later on, | ||||
then the even and odd SCTP stream identifier | ||||
ownership is redetermined as well as described above.'</t> | ||||
<t>In <xref target="opendc"/> the | ||||
first action of an SDP answerer, | ||||
when receiving an SDP offer, was described as | ||||
"Applies the SDP offer. Note that the browser ignores data channel | ||||
specific attributes in the SDP." | ||||
Replacement of these two sentences with | ||||
"Parses and applies the SDP offer. Note that the typical parser | ||||
normally ignores unknown SDP attributes, which includes data | ||||
channel related attributes."</t> | ||||
<t>In <xref target="opendc"/> the | ||||
second sentence of the third | ||||
SDP answerer action was | ||||
"Note that the browser is asked to create data | ||||
channels with stream identifiers not "owned" by the agent.". | ||||
Replacement of this sentence with | ||||
"Note that the agent is asked to | ||||
create data channels with SCTP stream identifiers | ||||
contained in the SDP offer if the SDP offer is accepted."</t> | ||||
<t>In <xref target="close-dc"/> t | ||||
he third paragraph began with | ||||
"A data channel can be closed by sending a new SDP offer which | ||||
excludes the dcmap and dcsa attribute lines for the data channel. | ||||
The port value for the m line SHOULD NOT be changed (e.g., to zero) | ||||
when closing a data channel (unless all data channels are being | ||||
closed and the SCTP association is no longer needed), since this | ||||
would close the SCTP association and impact all of the data channels. | ||||
If the answerer accepts the SDP offer then it MUST also exclude the | ||||
corresponding attribute lines in the answer. ..." | ||||
Replacement of this part with | ||||
"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 lines for the data channel. | ||||
The port value for the "m" line SHOULD NOT be changed (e.g., to zero) | ||||
when closing a data channel (unless all data channels are being | ||||
closed and the SCTP association is no longer needed), since this | ||||
would close the SCTP association and impact all of the data channels. | ||||
If the answerer accepts the SDP offer then it MUST close those data channels | ||||
whose "a=dcmap:" and "a=dcsa:" attribute lines were excluded from the receive | ||||
d | ||||
SDP offer, unless those data channels were already closed, | ||||
and it MUST also exclude the | ||||
corresponding attribute lines in the answer."</t> | ||||
<t>In <xref target="close-dc"/> t | ||||
he hanging text after the third paragraph was | ||||
"This delayed close is to handle cases where a successful SDP | ||||
answer is not received, in which case the state of session should | ||||
be kept per the last successful SDP offer/answer." | ||||
Replacement of this sentence with | ||||
"This delayed closure is RECOMMENDED in order | ||||
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 | ||||
successful SDP offer/answer."</t> | ||||
<t>Although dedicated to "a=dcmap | ||||
" and "a=dcsa" SDP syntax aspects | ||||
<xref target="subsec-sdp-attr-for-dc-par-neg"/> contained already | ||||
procedural descriptions related to data channel reliability negotiation. | ||||
Creation of new <xref target="param_negotiation"/> and moval of | ||||
reliability negotiation related text to this new section.</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ejzak-mmusic-data- | ||||
channel-sdpneg-02'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Removal of note "ACTION ITEM" | ||||
from section "subprotocol parameter". | ||||
As <xref target="I-D.ietf-rtcweb-data-protocol"/> this document should refer | ||||
to IANA's | ||||
WebSocket Subprotocol Name Registry defined in <xref target="RFC6455"/> | ||||
</t> | ||||
<t>In whole document, replacement | ||||
of "unreliable" with "partially reliable", | ||||
which is used in <xref target="I-D.ietf-rtcweb-data-channel"/> and in | ||||
<xref target="I-D.ietf-rtcweb-data-protocol"/> in most places.</t> | ||||
<t>Clarification of the semantic | ||||
if the "max-retr" parameter is not present in | ||||
an "a=dcmap" attribute line. In section "max-retr parameter" the sentence | ||||
"The max-retr parameter is optional with default value unbounded" | ||||
was replaced with "The max-retr parameter is optional. If | ||||
the max-retr parameter is not present, then the maximal number of | ||||
retransmissions is determined as per the generic SCTP retransmission | ||||
rules as specified in <xref target="RFC4960"/>".</t> | ||||
<t>Clarification of the semantic | ||||
if the "max-time" parameter is not present in | ||||
an "a=dcmap" attribute line. In section "max-time parameter" the sentence | ||||
"The max-time parameter is optional with default value unbounded" | ||||
was replaced with "The max-time parameter is optional. If | ||||
the max-time parameter is not present, then the generic SCTP | ||||
retransmission timing rules apply as specified in <xref target="RFC4960"/>".< | ||||
/t> | ||||
<t>In section "label parameter" t | ||||
he sentence "Label is a mandatory parameter." | ||||
was removed and following new sentences (including the note) were added: | ||||
"The 'label' parameter is 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, | ||||
such that 'label=""' is equivalent to the 'label' parameter not being | ||||
present at all. | ||||
<xref target="I-D.ietf-rtcweb-data-protocol"/> allows the DATA_CHANNEL_OPEN | ||||
message's 'Label' value to be an empty string."</t> | ||||
<t>In section "subprotocol parame | ||||
ter" the sentence | ||||
"subprotocol is a mandatory parameter." was replaced with | ||||
"'subprotocol' is an optional | ||||
parameter. If the 'subprotocol' parameter is not present, then its | ||||
value defaults to the empty string."</t> | ||||
<t>In the "Examples" section, in | ||||
the first two SDP offer examples in | ||||
the "a=dcmap" attribute lines 'label="BGCP"' was replaced with 'label="bfcp"' | ||||
.</t> | ||||
<t>In all examples, the "m" line | ||||
proto value "DTLS/SCTP" was replaced with | ||||
"UDP/DTLS/SCTP" and the "a=fmtp" attribute lines were replaced with | ||||
"a=max-message-size" attribute lines, as per draft-ietf-mmusic-sctp-sdp-12.</ | ||||
t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against '-01'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Formal syntax for dcmap and dc | ||||
sa attribute lines. </t> | ||||
<t>Making subprotocol as an optio | ||||
nal parameter in dcmap. </t> | ||||
<t>Specifying disallowed paramete | ||||
r combinations for max-time and max-retr. </t> | ||||
<t>Clarifications on WebRTC data | ||||
channel close procedures. </t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against '-00'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> Revisions to identify differe | ||||
nce between internal and external | ||||
negotiation and their usage.</t> | ||||
<t>Introduction of more generic t | ||||
erminology, e.g. "application" instead of | ||||
"browser".</t> | ||||
<t>Clarification of how "max-retr | ||||
and max-time affect the usage of | ||||
unreliable and reliable WebRTC data channels.</t> | ||||
<t>Updates of examples to take in | ||||
to account the SDP syntax changes | ||||
introduced with draft-ietf-mmusic-sctp-sdp-07.</t> | ||||
<t>Removal of the SCTP port numbe | ||||
r from the "a=dcmap" and "a=dcsa" attributes | ||||
as this is now contained in the a=sctp-port attribute, | ||||
and as draft-ietf-mmusic-sctp-sdp-07 supports only one SCTP association | ||||
on top of the DTLS connection.</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
</section> | ||||
</middle> | ||||
<back> | ||||
<references title="Normative References"> | ||||
&RFC2119; | ||||
&RFC4960; | ||||
&RFC8174; | ||||
&RFC3264; | ||||
&RFC5234; | ||||
&RFC6525; | ||||
&RFC3629; | ||||
&DATAREQ; | ||||
&SDPBIS; | ||||
&SDPSCTP; | ||||
&SDPMUXATTR; | ||||
&DATAPROTO; | ||||
</references> | ||||
<references title="Informative References"> | ||||
&RFC4582; | ||||
&RFC4975; | ||||
&RFC6455; | ||||
&CLUEDATA; | ||||
&MSRPDATA; | ||||
<reference anchor="WebRtcAPI" target="https://www.w3.org/ | ||||
TR/2018/CR-webrtc-20180927/"> | ||||
<front> | ||||
<title> | ||||
WebRTC 1.0: Real-time Communication Between Browsers | ||||
</title> | ||||
<author initials="A." surname="Bergkvist" | ||||
fullname="Adam Bergkvist"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="D." surname="Burnett" f | ||||
ullname="Daniel Burnett"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C." surname="Jennings" | ||||
fullname="Cullen Jennings"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="A." surname="Narayanan" | ||||
fullname="Anant Narayanan"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="B." surname="Aboba" ful | ||||
lname="Bernard Aboba"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="T." surname="Brandstett | ||||
er" fullname="Taylor Brandstetter"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J." surname="Bruaroey" | ||||
fullname="Jan-Ivar Bruaroey"> | ||||
<organization/> | ||||
</author> | ||||
<date month="September" day="27" year="20 | ||||
18"/> | ||||
</front> | ||||
<seriesInfo name="World Wide Web Consortium CR" v | ||||
alue="CR-webrtc-20180927"/> | ||||
<format type="HTML" target="https://www.w3.org/TR | ||||
/2018/CR-webrtc-20180927"/> | ||||
</reference> | ||||
</references> | ||||
<section title="Generic Data Channel Negotiation Aspects When Not | ||||
Using DCEP" anchor="generic-out-of-band-aspects"> | ||||
<t>This appendix summarizes how data channels work in gen | ||||
eral and discusses | ||||
some key aspects, which should be considered for the out-of-band negotiation | ||||
of data | ||||
channels if DCEP is not used.</t> | channels if DCEP is not used.</t> | |||
<t>A WebRTC application creates a data channel | <t indent="0" pn="section-appendix.a-2">A WebRTC application creates a dat a channel | |||
by providing a number of setup parameters (subprotocol, label, | by providing a number of setup parameters (subprotocol, label, | |||
maximal number of retransmissions, maximal retransmission time, order of deli very, | maximal number of retransmissions, maximal retransmission time, order of deli very, | |||
priority). The application also specifies | priority). The application also specifies whether | |||
if it wants to make use of the negotiation using the DCEP | it wants to make use of the negotiation using DCEP | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>, or if the application | <xref target="RFC8832" format="default" sectionFormat="of" derivedContent="RF | |||
C8832"/> or | ||||
intends to negotiate data channels using the SDP offer/answer protocol.</t> | intends to negotiate data channels using the SDP offer/answer protocol.</t> | |||
<t>In any case, the SDP offer generated by the applicatio | <t indent="0" pn="section-appendix.a-3">In any case, the SDP offer generat | |||
n is per | ed by the application is per | |||
<xref target="I-D.ietf-mmusic-sctp-sdp"/>. In brief, it contains one | <xref target="RFC8841" format="default" sectionFormat="of" derivedContent="RF | |||
"m" line for the SCTP association on top of which data channels will run:</t> | C8841"/>. In brief, it contains one | |||
<figure align="left" title=""> | "m=" line for the SCTP association on top of which the data channels will run | |||
<artwork align="left"><![CDATA[ | : | |||
</t> | ||||
<sourcecode name="app-a-sdp-example" type="sdp" markers="false" pn="sectio | ||||
n-appendix.a-4"> | ||||
m=application 54111 UDP/DTLS/SCTP webrtc-datachannel | m=application 54111 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 192.0.2.1 | c=IN IP4 192.0.2.1 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port:5000 | a=sctp-port:5000 | |||
a=tls-id:abc3de65cddef001be82 | a=tls-id:abc3de65cddef001be82 | |||
a=setup:actpass | a=setup:actpass | |||
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</sourcecode> | |||
]]></artwork> | <aside pn="section-appendix.a-5"> | |||
</figure> | <t indent="0" pn="section-appendix.a-5.1">Note: A WebRTC application wil | |||
<t>Note: A WebRTC application will only use "m" line form | l only use the "m=" line format "webrtc-datachannel" | |||
at "webrtc-datachannel", | and will not use other formats in the "m=" line for other protocols | |||
and will not use other formats in the "m" line for other protocols | such as T.38 <xref target="T38" format="default" sectionFormat="of" derivedCo | |||
such as t38. | ntent="T38"/>. | |||
<xref target="I-D.ietf-mmusic-sctp-sdp"/> supports only one SCTP | <xref target="RFC8841" format="default" sectionFormat="of" derivedContent="RF | |||
C8841"/> supports only one SCTP | ||||
association to be established on top of a DTLS association. | association to be established on top of a DTLS association. | |||
</t> | </t> | |||
<t>Note: The above SDP media description does not contain | </aside> | |||
any channel-specific | <aside pn="section-appendix.a-6"> | |||
<t indent="0" pn="section-appendix.a-6.1">Note: The above SDP media desc | ||||
ription does not contain any channel-specific | ||||
information.</t> | information.</t> | |||
<section title="Stream Identifier Numbering" anchor="si_n | </aside> | |||
um"> | <section anchor="si_num" numbered="true" removeInRFC="false" toc="include" | |||
<t>Independently from the requested type of negot | pn="section-a.1"> | |||
iation, the application | <name slugifiedName="name-stream-identifier-numbering">Stream Identifier | |||
creating a data channel can either pass the stream identifier to the data ch | Numbering</name> | |||
annel stack to assign | <t indent="0" pn="section-a.1-1">Independently from the requested type o | |||
to the data channel or else let the data channel stack pick | f negotiation, the application | |||
creating a data channel can either (1) pass the stream identifier to the dat | ||||
a channel stack to assign | ||||
to the data channel or (2) let the data channel stack pick | ||||
one identifier from the unused ones.</t> | one identifier from the unused ones.</t> | |||
<t>To avoid glare situations <xref target="RFC326 4"/>, each endpoint can moreover own an | <t indent="0" pn="section-a.1-2">Moreover, to avoid glare situations <xr ef target="RFC3264" format="default" sectionFormat="of" derivedContent="RFC3264" />, each endpoint can 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.</t> | only create a data channel with a stream identifier it owns.</t> | |||
<t>Which set of stream identifiers is owned by wh ich endpoint is | <t indent="0" pn="section-a.1-3">Which set of stream identifiers is owne d by which endpoint is | |||
determined by convention or other means. | determined by convention or other means. | |||
<list style="hanging"> | </t> | |||
<t>Note:For data channels negotia | <aside pn="section-a.1-4"> | |||
ted with the DCEP, one endpoint owns by | <t indent="0" pn="section-a.1-4.1">Note: For data channels negotiated | |||
with 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 | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>.</t> | <xref target="RFC8832" format="default" sectionFormat="of" derivedContent= | |||
<t>Note:For data channels negotia | "RFC8832"/>.</t> | |||
ted via different protocol from DCEP, | </aside> | |||
<aside pn="section-a.1-5"> | ||||
<t indent="0" pn="section-a.1-5.1">Note: For data channels negotiated | ||||
via a protocol other than DCEP, | ||||
no convention is defined by default.</t> | no convention is defined by default.</t> | |||
</list> | </aside> | |||
</t> | </section> | |||
</section> | <section anchor="sec-gen-ext-neg" numbered="true" removeInRFC="false" toc= | |||
<section title="Generic Data Channel Negotiation Not Usin | "include" pn="section-a.2"> | |||
g DCEP" anchor="sec-gen-ext-neg"> | <name slugifiedName="name-generic-data-channel-negotia">Generic Data Cha | |||
<section title="Overview"> | nnel Negotiation Not Using DCEP</name> | |||
<t>DCEP negotiation only provides for neg | <section numbered="true" removeInRFC="false" toc="include" pn="section-a | |||
otiation of data channel | .2.1"> | |||
transport parameters and does not provide for negotiation of subprotocol | <name slugifiedName="name-overview">Overview</name> | |||
specific parameters. DCEP-less data channel negotiation can be defined to | <t indent="0" pn="section-a.2.1-1">DCEP negotiation only provides for | |||
negotiation of data channel | ||||
transport parameters and does not provide for negotiation of | ||||
subprotocol-specific parameters. Non-DCEP data channel negotiation can be d | ||||
efined to | ||||
allow negotiation of parameters beyond those handled by DCEP, | allow negotiation of parameters beyond those handled by DCEP, | |||
e.g., parameters specific to the subprotocol instantiated on a | e.g., parameters specific to the subprotocol instantiated on a | |||
particular data channel.</t> | particular data channel.</t> | |||
<t>The following procedures are common to all methods of data channel | <t indent="0" pn="section-a.2.1-2">The following procedures are common to all methods of data channel | |||
negotiation not using DCEP, whether in-band (communicated using proprietary means on | negotiation not using DCEP, whether in-band (communicated using proprietary means on | |||
an already established data channel) or out-of-band (using SDP offer/answer | an already-established data channel) or out-of-band (using the SDP | |||
or | offer/answer mechanism or | |||
some other protocol associated with the signaling channel).</t> | some other protocol associated with the signaling channel).</t> | |||
</section> | </section> | |||
<section title="Opening a Data Channel" anchor="e | <section anchor="ext_open" numbered="true" removeInRFC="false" toc="incl | |||
xt_open"> | ude" pn="section-a.2.2"> | |||
<t>In the case of DCEP-less negotiation, | <name slugifiedName="name-opening-a-data-channel">Opening a Data Chann | |||
the endpoint application has the | el</name> | |||
option to fully control the stream identifier assignments. However | <t indent="0" pn="section-a.2.2-1">In the case of non-DCEP negotiation | |||
, the endpoint application has the | ||||
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 DCEP negotiated data channels (if | the data channel stack for data channels negotiated using DCEP (if | |||
any). It is the responsibility of the application to ensure consistent | any). It is the responsibility of the application to ensure consistent | |||
assignment of stream identifiers.</t> | assignment of stream identifiers.</t> | |||
<t>When the application requests the crea | <t indent="0" pn="section-a.2.2-2">When the application requests that | |||
tion of a new data channel to | the creation of a new data channel | |||
be set up via DCEP-less 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 message | the data channel locally without sending any DATA_CHANNEL_OPEN messages | |||
in-band. | in-band. | |||
However, even if the ICE (Interactive Connectivity Establishment), | However, even if the ICE (Interactive Connectivity Establishment), | |||
DTLS and SCTP procedures were already successfully | DTLS, and SCTP procedures were already successfully | |||
completed, the application can't send data on this data channel until the | completed, the application can't send data on this data channel until the | |||
negotiation is complete with the peer. This is because the peer needs | negotiation with the peer is complete. This is because the peer needs | |||
to be aware of and accept the usage of this data channel. The | to be aware of and accept the usage of this data channel. The | |||
peer, after accepting the data channel offer, can start sending data | peer, after accepting the data channel offer, can start sending data | |||
immediately. This implies that the offerer may receive data channel | immediately. This implies that the offerer may receive data channel | |||
subprotocol messages | subprotocol messages | |||
before the negotiation is complete and the application should be | before the negotiation is complete, and the application should be | |||
ready to handle it.</t> | ready to handle it.</t> | |||
<t>If the peer rejects the data channel p | <t indent="0" pn="section-a.2.2-3">If the peer rejects the data channe | |||
art of the offer then it | l 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.</t> | procedures.</t> | |||
<t>It is also worth noting that a data ch | <t indent="0" pn="section-a.2.2-4">It is also worth noting that a data | |||
annel stack implementation may | channel stack implementation may | |||
not provide any API to create and close data channels; instead the | not provide any APIs to create and close data channels; instead, the | |||
data channels may be used on the fly as needed just by communicating | data channels may be used on the fly as needed, just by communicating | |||
via non-DCEP means or by even having some local configuration/assumptions | via non-DCEP means or even by having some local configuration/assumptions | |||
on both the peers.</t> | on both of the peers.</t> | |||
<t>The application then negotiates the da | <t indent="0" pn="section-a.2.2-5">The application then negotiates the | |||
ta channel | data channel | |||
properties and subprotocol properties with the peer's application | properties and subprotocol properties with the peer's application | |||
using a mechanism different from DCEP.</t> | using a mechanism different from DCEP.</t> | |||
<t>The peer then symmetrically creates a data channel | <t indent="0" pn="section-a.2.2-6">The peer then symmetrically creates 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. | when transmitting data on this channel. | |||
The data channel stack must | The data channel stack must | |||
allow data channel creation with any non-conflicting stream identifier | allow data channel creation with any nonconflicting stream identifier | |||
so that both peers can create the data channel with the same | so that both peers can create the data channel with the same | |||
stream identifier. | stream identifier. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Closing a Data Channel"> | <section numbered="true" removeInRFC="false" toc="include" pn="section-a | |||
<t>When the application requests the clos | .2.3"> | |||
ing of a | <name slugifiedName="name-closing-a-data-channel-2">Closing a Data Cha | |||
nnel</name> | ||||
<t indent="0" pn="section-a.2.3-1">When the application requests the c | ||||
losing of a | ||||
data channel negotiated without DCEP, | data channel negotiated without DCEP, | |||
the data channel stack always performs an SCTP SSN | the data channel stack always performs an SCTP SSN | |||
reset for this channel.</t> | Reset for this channel.</t> | |||
<t>Depending upon the method used for DCE | <t indent="0" pn="section-a.2.3-2">Depending upon the method used for | |||
P-less negotiation and the | non-DCEP negotiation and the | |||
subprotocol associated with the data channel, the closing might in | subprotocol associated with the data channel, the closing of the data chann | |||
addition be signaled to the peer via SDP offer/answer negotiation.</t> | el might also be signaled to the peer via SDP offer/answer negotiation.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<!-- sec-gen-ext-neg --> | </section> | |||
</section> | <section anchor="acknowledgements" numbered="false" removeInRFC="false" toc= | |||
<!-- generic-out-of-band-aspects --> | "include" pn="section-appendix.b"> | |||
</back> | <name slugifiedName="name-acknowledgements">Acknowledgements</name> | |||
<t indent="0" pn="section-appendix.b-1">The authors wish to acknowledge th | ||||
e borrowing of ideas from other | ||||
draft documents by <contact fullname="Salvatore Loreto"/>, <contact fullname= | ||||
"Gonzalo Camarillo"/>, <contact fullname="Peter Dunkley"/>, and | ||||
<contact fullname="Gavin Llewellyn"/>. The authors also wish to thank <contac | ||||
t fullname="Flemming Andreasen"/>, <contact fullname="Christian Groves"/>, | ||||
<contact fullname="Gunnar Hellström"/>, <contact fullname="Paul Kyzivat"/> | ||||
, <contact fullname="Jonathan Lennox"/>, | ||||
<contact fullname="Uwe Rauschenbach"/>, and <contact fullname="Roman Shpount" | ||||
/> for their invaluable comments.</t> | ||||
<t indent="0" pn="section-appendix.b-2">Special thanks to <contact fullnam | ||||
e="Christer Holmberg"/> for helping | ||||
finish the document and cleaning up <xref target="section_procedures" form | ||||
at="default" sectionFormat="of" derivedContent="Section 6"/>. | ||||
</t> | ||||
</section> | ||||
<section anchor="contributors" numbered="false" removeInRFC="false" toc="inc | ||||
lude" pn="section-appendix.c"> | ||||
<name slugifiedName="name-contributors">Contributors</name> | ||||
<t indent="0" pn="section-appendix.c-1"><contact fullname="Juergen Stoetze | ||||
r-Bradler"/> made significant | ||||
contributions to this document and should be considered a coauthor.</t> | ||||
</section> | ||||
<section anchor="authors-addresses" numbered="false" removeInRFC="false" toc | ||||
="include" pn="section-appendix.d"> | ||||
<name slugifiedName="name-authors-addresses">Authors' Addresses</name> | ||||
<author initials="K." surname="Drage" fullname="Keith Drage"> | ||||
<organization showOnFrontPage="true">Unaffiliated</organization> | ||||
<address> | ||||
<email>drageke@ntlworld.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="M." surname="Makaraju" fullname="Maridi R. Makaraju (Raj | ||||
u)"> | ||||
<organization showOnFrontPage="true">Unaffiliated</organization> | ||||
<address> | ||||
<email>mmraju@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Richard Ejzak" initials="R." surname="Ejzak"> | ||||
<organization showOnFrontPage="true">Unaffiliated</organization> | ||||
<address> | ||||
<email>richard.ejzak@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Jerome Marcon" initials="J." surname="Marcon"> | ||||
<organization showOnFrontPage="true">Unaffiliated</organization> | ||||
<address> | ||||
<email>jeromee.marcon@free.fr</email> | ||||
</address> | ||||
</author> | ||||
<author initials="R." surname="Even" fullname="Roni Even" role="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
<address> | ||||
<email>ron.even.tlv@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 121 change blocks. | ||||
1918 lines changed or deleted | 2086 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |