rfc8847xml2.original.xml | rfc8847.xml | |||
---|---|---|---|---|
<?xml version="1.0"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<?rfc toc="yes" ?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" | |||
<?rfc compact="yes" ?> | docName="draft-ietf-clue-protocol-19" number="8847" submissionType="IETF" c | |||
<?rfc subcompact="no"?> | onsensus="true" category="exp" ipr="trust200902" obsoletes="" updates="" xml:lan | |||
<?rfc sortrefs="yes" ?> | g="en" tocInclude="true" sortRefs="true" symRefs="true" version="3"> | |||
<?rfc symrefs="yes" ?> | <!-- xml2rfc v2v3 conversion 2.38.1 --> | |||
<?rfc rfcedstyle="yes" ?> | <front> | |||
<rfc docName="draft-ietf-clue-protocol-19" submissionType="IETF" | <title abbrev="CLUE"> | |||
consensus="yes" category="exp" ipr="trust200902"> | ||||
<front> | ||||
<title abbrev="draft-ietf-clue-protocol-19"> | ||||
Protocol for Controlling Multiple Streams for Telepresence (CLUE) | Protocol for Controlling Multiple Streams for Telepresence (CLUE) | |||
</title> | </title> | |||
<author initials="R." surname="Presta" fullname="Roberta Presta"> | <seriesInfo name="RFC" value="8847"/> | |||
<organization>University of Napoli</organization> | <author initials="R." surname="Presta" fullname="Roberta Presta"> | |||
<address> | <organization>University of Napoli</organization> | |||
<postal> | <address> | |||
<street>Via Claudio 21</street> | <postal> | |||
<code>80125</code> | <street>Via Claudio 21</street> | |||
<city>Napoli</city> | <code>80125</code> | |||
<country>Italy</country> | <city>Napoli</city> | |||
</postal> | <country>Italy</country> | |||
<email>roberta.presta@unina.it</email> | </postal> | |||
</address> | <email>roberta.presta@unina.it</email> | |||
</author> | </address> | |||
<author initials="S." surname="P. Romano" fullname="Simon Pietro Romano"> | </author> | |||
<organization>University of Napoli</organization> | <author initials="S P." surname="Romano" fullname="Simon Pietro Romano"> | |||
<address> | <organization>University of Napoli</organization> | |||
<postal> | <address> | |||
<street>Via Claudio 21</street> | <postal> | |||
<code>80125</code> | <street>Via Claudio 21</street> | |||
<city>Napoli</city> | <code>80125</code> | |||
<country>Italy</country> | <city>Napoli</city> | |||
</postal> | <country>Italy</country> | |||
<email>spromano@unina.it</email> | </postal> | |||
</address> | <email>spromano@unina.it</email> | |||
</author> | </address> | |||
<date month="July" year="2019"/> | </author> | |||
<area>ART</area> | <date month="January" year="2021"/> | |||
<workgroup>CLUE Working Group</workgroup> | ||||
<!-- [rfced] Please insert any keywords (beyond those that appear in | ||||
the title) for use on http://www.rfc-editor.org/rfcsearch.html. --> | ||||
<keyword>CLUE</keyword> | ||||
<keyword>Telepresence</keyword> | ||||
<keyword>Protocol</keyword> | ||||
<keyword>Framework</keyword> | ||||
<abstract> | ||||
<t> | ||||
<!-- | ||||
The CLUE protocol is an application protocol conceived for the | ||||
description and negotiation of a CLUE telepresence session. | ||||
The design of the CLUE protocol takes into account the | ||||
requirements and the framework defined, respectively, in | ||||
<xref target="I-D.ietf-clue-framework"/> and | ||||
<xref target="RFC7262"/>. | ||||
The companion document <xref target="I-D.ietf-clue-signaling"/> delves | ||||
into CLUE signaling details, as well as on the SIP/SDP session | ||||
establishment phase. | ||||
CLUE messages flow upon the CLUE data channel, based on reliable and | ||||
ordered SCTP over DTLS transport, as described in | ||||
<xref target="I-D.ietf-clue-datachannel"/>. | ||||
Message details, together with the behavior of CLUE Participants | ||||
acting as Media Providers and/or Media Consumers, are herein discussed. | ||||
--> | ||||
The CLUE protocol is an application protocol conceived for the | <keyword>CLUE</keyword> | |||
description and negotiation of a telepresence session. | <keyword>Telepresence</keyword> | |||
The design of the CLUE protocol takes into account the | <keyword>Protocol</keyword> | |||
requirements and the framework defined within the IETF CLUE working | <keyword>Framework</keyword> | |||
group. | <abstract> | |||
A companion document delves into CLUE signaling details, as well as on | <t> | |||
the SIP/SDP session establishment phase. | The Controlling Multiple Streams for Telepresence (CLUE) protocol is an | |||
application protocol conceived for the description and negotiation of a | ||||
telepresence session. The design of the CLUE protocol takes into account the | ||||
requirements and the framework defined within the IETF CLUE Working Group. A | ||||
companion document, RFC 8848, delves into CLUE signaling details as well as | ||||
the SIP / Session Description Protocol (SDP) session establishment phase. | ||||
CLUE messages flow over the CLUE data channel, based on reliable and | CLUE messages flow over the CLUE data channel, based on reliable and | |||
ordered SCTP over DTLS transport. | ordered SCTP-over-DTLS transport. ("SCTP" stands for "Stream Control | |||
Transmission Protocol".) | ||||
Message details, together with the behavior of CLUE Participants | Message details, together with the behavior of CLUE Participants | |||
acting as Media Providers and/or Media Consumers, are herein discussed. | acting as Media Providers and/or Media Consumers, are herein discussed. | |||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | ||||
<middle> | <section anchor="sec-intro" numbered="true" toc="default"> | |||
<!-- Introduction --> | <name>Introduction</name> | |||
<section title="Introduction" anchor="sec-intro"> | <t> | |||
<t> | The Controlling Multiple Streams for Telepresence (CLUE) protocol is an applicat | |||
The CLUE protocol is an application protocol used | ion protocol used | |||
by two CLUE Participants to enhance the experience of a multimedia | by two CLUE Participants to enhance the experience of a multimedia | |||
telepresence session. | telepresence session. | |||
The main goals of the CLUE protocol are: | The main goals of the CLUE protocol are as follows: | |||
<list style="numbers"> | </t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<li> | ||||
enabling a Media Provider (MP) to properly announce its current | enabling a Media Provider (MP) to properly announce its current | |||
telepresence capabilities to a Media Consumer (MC) in terms of available | telepresence capabilities to a Media Consumer (MC) in terms of available | |||
media captures, groups of encodings, simultaneity constraints and other | media captures, groups of encodings, simultaneity constraints, and other | |||
information defined in <xref target="I-D.ietf-clue-framework"/>; | information defined in <xref target="RFC8845" format="default"/>. | |||
</t> | </li> | |||
<t>enabling an MC to request the desired multimedia streams from the | <li>enabling an MC to request the desired multimedia streams from the | |||
offering MP.</t> | offering MP.</li> | |||
</list> | </ol> | |||
</t> | <t> | |||
<t> | CLUE-capable endpoints are connected by means of the CLUE data channel -- | |||
CLUE-capable endpoints are connected by means of the CLUE data channel, | an SCTP-over-DTLS channel that is opened and established as described | |||
an SCTP over DTLS channel that is opened and established as described | in <xref target="RFC8848" format="default"/> and | |||
in <xref target="I-D.ietf-clue-signaling"/> and | <xref target="RFC8850" format="default"/>. ("SCTP" stands for "Stream Control | |||
<xref target="I-D.ietf-clue-datachannel"/>. | Transmission Protocol".) | |||
CLUE protocol messages flowing over such a channel are detailed in this | CLUE protocol messages flowing over such a channel are detailed in this | |||
document, both syntactically and semantically. | document, both syntactically and semantically. | |||
</t> | </t> | |||
<t> | <t> | |||
In <xref target="sec-overview"/> we provide a general overview of the | In <xref target="sec-overview" format="default"/>, we provide a general overview | |||
of the | ||||
CLUE protocol. | CLUE protocol. | |||
CLUE protocol messages are detailed in <xref target="sec-messages"/>. | CLUE protocol messages are detailed in <xref target="sec-messages" format="defau | |||
The CLUE Protocol state machines are introduced in | lt"/>. | |||
<xref target="sec-sm"/>. | The CLUE protocol state machines are introduced in | |||
<xref target="sec-sm" format="default"/>. | ||||
Versioning and extensions are discussed | Versioning and extensions are discussed | |||
in <xref target="sec-versioning"/> and <xref target="sec-ext"/>, | in Sections <xref target="sec-versioning" format="counter"/> and <xref targ | |||
respectively. The XML schema defining the CLUE messages is reported in | et="sec-ext" format="counter"/>, | |||
<xref target="sec-schema"/>. | respectively. The XML schema <xref target="W3C.REC-xml-20081126"/> | |||
</t> | defining the CLUE messages is provided in | |||
</section> | <xref target="sec-schema" format="default"/>. | |||
<!-- Terminology --> | ||||
<section title="Terminology" anchor="sec-teminology"> | ||||
<t> This document refers to the same terminology used in | ||||
<xref target="I-D.ietf-clue-framework"/> and in | ||||
<xref target="RFC7262"/>. | ||||
We briefly recall herein some of the main terms used in the document. | ||||
The definition of "CLUE Participant" herein proposed is not imported | ||||
from any of the above documents. | ||||
</t> | </t> | |||
<t> | </section> | |||
<list style="hanging"> | <section anchor="sec-teminology" numbered="true" toc="default"> | |||
<t hangText="Capture Encoding:">A specific encoding of a Media Capture, | <name>Terminology</name> | |||
to be sent via RTP <xref target="RFC3550"/>.</t> | <t>This document refers to terminology that is also used in | |||
<t hangText="CLUE Participant (CP):"> An entity able to use the CLUE | <xref target="RFC8845" format="default"/> and | |||
<xref target="RFC7262" format="default"/>. | ||||
For convenience, we list those terms below. The definition of "CLUE | ||||
Participant", as also listed below, originates from this document.</t> | ||||
<dl newline="false" spacing="normal"> | ||||
<dt>Capture Encoding:</dt> | ||||
<dd>A specific encoding of a Media Capture, | ||||
to be sent via RTP <xref target="RFC3550" format="default"/>.</dd> | ||||
<dt>CLUE Participant (CP):</dt> | ||||
<dd> An entity able to use the CLUE | ||||
protocol within a telepresence session. | protocol within a telepresence session. | |||
It can be an endpoint or an MCU (Multipoint Control Unit) able to use the | It can be an endpoint or an MCU (Multipoint Control Unit) able to use the | |||
CLUE protocol. | CLUE protocol. | |||
</t> | </dd> | |||
<dt>CLUE-capable device:</dt> | ||||
<t hangText="CLUE-capable device:"> | <dd> | |||
A device that supports the CLUE data channel | A device that (1) supports the CLUE data channel | |||
<xref target="I-D.ietf-clue-datachannel"/>, the CLUE protocol | <xref target="RFC8850" format="default"/>, the CLUE protocol, | |||
and the principles of CLUE negotiation, and seeks CLUE-enabled calls. | and the principles of CLUE negotiation and (2) seeks CLUE-enabled calls. | |||
</t> | </dd> | |||
<dt>Endpoint:</dt> | ||||
<t hangText="Endpoint:">A CLUE-capable device that is the logical point | <dd>A CLUE-capable device that is the logical point | |||
of final termination through receiving, decoding and rendering, and/or | of final termination through receiving, decoding, and rendering, and/or | |||
initiation through capturing, encoding, and sending of media | initiation through the capturing, encoding, and sending of media | |||
streams. An endpoint consists of one or more physical devices | streams. An endpoint consists of one or more physical devices | |||
that source and sink media streams, and exactly one | that source and sink media streams, and exactly one | |||
<xref target="RFC4353"/> | participant (as described in <xref target="RFC4353" format="default"/>) | |||
Participant (which, in turn, includes exactly one <xref target="RFC3261" /> User | that, in turn, includes exactly one user agent <xref target="RFC3261" | |||
Agent). | format="default"/>. Endpoints can be anything from multiscreen/multicamera | |||
Endpoints can be anything from multiscreen/multicamera rooms to | rooms to handheld devices. | |||
handheld devices. | </dd> | |||
</t> | <dt>Multipoint Control Unit (MCU):</dt> | |||
<dd>A CLUE-capable device that connects | ||||
<t hangText="Multipoint Control Unit (MCU):">a CLUE-capable device that connects | ||||
two or more endpoints together into one single multimedia | two or more endpoints together into one single multimedia | |||
conference <xref target="RFC7667"/>. | conference <xref target="RFC7667" format="default"/>. | |||
An MCU includes an <xref target="RFC4353"/>-like Mixer, | An MCU includes a mixer (as defined in <xref target="RFC4353" format="default"/> | |||
without the <xref target="RFC4353"/> requirement to send media to each | ), | |||
participant.</t> | without the requirement per <xref target="RFC4353" format="default"/> to send me | |||
dia to each | ||||
<t hangText="Media:"> Any data that, after suitable encoding, can be | participant.</dd> | |||
conveyed over RTP, including audio, video or timed text.</t> | <dt>Media:</dt> | |||
<t hangText="Media Capture:">a source of Media, such as from one or more | <dd>Any data that, after suitable encoding, can be | |||
Capture Devices or constructed from other Media streams.</t> | conveyed over RTP, including audio, video, or timed text.</dd> | |||
<t hangText="Media Consumer (MC):">A CLUE Participant (i.e., an Endpoint | <dt>Media Capture:</dt> | |||
or an MCU) able to receive Capture Encodings.</t> | <dd>A source of media -- for example, from one or more | |||
<t hangText="Media Provider (MP):">A CLUE Participant (i.e., an Endpoint | Capture Devices or constructed from other Media streams.</dd> | |||
or an MCU) able to send Capture Encodings.</t> | <dt>Media Consumer (MC):</dt> | |||
<t hangText="Stream:">a Capture Encoding sent from a Media Provider to | <dd>A CP (i.e., an Endpoint | |||
a Media Consumer via RTP <xref target="RFC3550"/>.</t> | or an MCU) able to receive Capture Encodings.</dd> | |||
</list> | <dt>Media Provider (MP):</dt> | |||
</t> | <dd>A CP (i.e., an Endpoint | |||
</section> | or an MCU) able to send Capture Encodings.</dd> | |||
<dt>Stream:</dt> | ||||
<section title="Conventions"> | <dd>A Capture Encoding sent from an MP to | |||
an MC via RTP <xref target="RFC3550" format="default"/>.</dd> | ||||
<t> | </dl> | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | </section> | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | <section numbered="true" toc="default"> | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | <name>Conventions</name> | |||
described in BCP 14 <xref target="RFC2119"></xref> | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
<xref target="RFC8174"></xref> when, and only when, they | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
appear in all capitals, as shown here. | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
"<bcp14>SHOULD NOT</bcp14>", | ||||
<!-- | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | to be interpreted as described in BCP 14 <xref target="RFC2119"/> | |||
document are to be interpreted as described in BCP 14, RFC 2119 | <xref target="RFC8174"/> when, and only when, they appear in all capitals, | |||
<xref target="RFC2119"></xref>. | as shown here.</t> | |||
</section> | ||||
</t> | <section anchor="sec-overview" numbered="true" toc="default"> | |||
</section> | <name>Overview of the CLUE Protocol</name> | |||
<t> | ||||
<!-- Overview of the protocol architecture --> | ||||
<section | ||||
title="Overview of the CLUE protocol" | ||||
anchor="sec-overview"> | ||||
<t> | ||||
The CLUE protocol is conceived to enable CLUE telepresence sessions. | The CLUE protocol is conceived to enable CLUE telepresence sessions. | |||
It is designed in order to address SDP limitations in terms of the | It is designed to address Session Description Protocol (SDP) limitations in term s of the | |||
description of some information about the multimedia streams that are | description of some information about the multimedia streams that are | |||
involved in a real-time multimedia conference. | involved in a real-time multimedia conference. | |||
Indeed, by simply using SDP it is not possible to convey information | Indeed, by simply using SDP, it is not possible to convey information | |||
about the features of the flowing multimedia streams that are needed | about the features of the flowing multimedia streams that are needed | |||
to enable a "being there" rendering experience. | to enable a "being there" rendering experience. | |||
Such information is contained in the CLUE framework document | Such information is contained in the CLUE framework document | |||
<xref target="I-D.ietf-clue-framework"/> | <xref target="RFC8845" format="default"/> | |||
and formally defined and described in the CLUE data model document | and formally defined and described in the CLUE data model document | |||
<xref target="I-D.ietf-clue-data-model-schema"/>. | <xref target="RFC8846" format="default"/>. | |||
The CLUE protocol represents the mechanism for the exchange of | The CLUE protocol represents the mechanism for the exchange of | |||
telepresence information between CLUE Participants. | telepresence information between CPs. | |||
It mainly provides the messages to enable a Media Provider to advertise | It mainly provides the messages to enable an MP to advertise | |||
its telepresence capabilities and to enable a Media Consumer to select | its telepresence capabilities and to enable an MC to select | |||
the desired telepresence options. | the desired telepresence options. | |||
</t> | </t> | |||
<t> | <t> | |||
The CLUE protocol, as defined in the following, is a stateful, | The CLUE protocol, as defined in this document and further described below, | |||
client-server, XML-based application protocol. | is a stateful client-server XML-based application protocol. | |||
CLUE protocol messages flow on a reliable and ordered SCTP over DTLS | CLUE protocol messages flow on a reliable and ordered SCTP-over-DTLS | |||
transport channel connecting two CLUE Participants. | transport channel connecting two CPs. | |||
Messages carry information taken from the XML-based CLUE data model | Messages carry information taken from the XML-based CLUE data model | |||
(<xref target="I-D.ietf-clue-data-model-schema"/>). | <xref target="RFC8846" format="default"/>. | |||
Three main communication phases can be identified: | Three main communication phases can be identified: | |||
<list style="numbers"> | ||||
<t> | ||||
Establishment of the CLUE data channel: in this phase, the CLUE data | ||||
channel setup takes place. If it completes successfully, the CPs are | ||||
able to communicate and start the initiation phase. | ||||
</t> | </t> | |||
<t> | <dl newline="true" spacing="normal"> | |||
Negotiation of the CLUE protocol version and extensions (initiation phase): | <dt>Establishment of the CLUE data channel:</dt> | |||
the CPs connected via the CLUE data channel agree on the version and on | <dd>In this phase, the CLUE data | |||
the extensions to be used during the telepresence session. Special CLUE | channel setup takes place. If it completes successfully, the CPs are | |||
able to communicate and start the initiation phase.</dd> | ||||
<dt>Negotiation of the CLUE protocol version and extensions (initiation phase):< | ||||
/dt> | ||||
<dd>The CPs connected via the CLUE data channel agree on the protocol version an | ||||
d extensions to be used during the telepresence session. Special CLUE | ||||
messages are used for such a task ('options' and 'optionsResponse'). | messages are used for such a task ('options' and 'optionsResponse'). | |||
The version and extensions negotiation can be performed once during the | The negotiation of the version and extensions can be performed once during the | |||
CLUE session and only at this stage. | CLUE session and only at this stage. | |||
At the end of that basic negotiation, each CP starts its activity as a | At the end of that basic negotiation, each CP starts its activity as a | |||
CLUE MP and/or CLUE MC. | CLUE MP and/or CLUE MC.</dd> | |||
</t> | <dt>Description and negotiation of CLUE telepresence capabilities:</dt> | |||
<t> | <dd>In this | |||
CLUE telepresence capabilities description and negotiation: in this | ||||
phase, the MP-MC dialogues take place on the data channel by means of | phase, the MP-MC dialogues take place on the data channel by means of | |||
the CLUE protocol messages. | the CLUE protocol messages.</dd> | |||
</t> | </dl> | |||
</list> | <t> | |||
</t> | As soon as the channel is ready, the CPs must agree on the | |||
<t> | ||||
As soon as the channel is ready, the CLUE Participants must agree on the | ||||
protocol version and extensions to be used within the telepresence session. | protocol version and extensions to be used within the telepresence session. | |||
CLUE protocol version numbers are characterized by a major version | CLUE protocol version numbers are characterized by a major version | |||
number (single digit) and a minor version number (single digit), both | number and a minor version number, both unsigned integers, separated by a dot. | |||
unsigned integers, separated by a dot. | While minor version numbers denote backward-compatible changes in the | |||
While minor version numbers denote backward compatible changes in the | ||||
context of a given major version, different major version numbers | context of a given major version, different major version numbers | |||
generally indicate a lack of interoperability between the protocol | generally indicate a lack of interoperability between the protocol | |||
implementations. | implementations. | |||
In order to correctly establish a CLUE dialogue, the involved CPs must | In order to correctly establish a CLUE dialogue, the involved CPs must | |||
have in common a major version number (see <xref target="sec-versioning"/> | have in common a major version number (see <xref target="sec-versioning" format= "default"/> | |||
for further details). | for further details). | |||
The subset of the extensions that are allowed | The subset of the extensions that are allowed | |||
within the CLUE session is also determined in the initiation phase. | within the CLUE session is also determined in the initiation phase. | |||
It includes only the extensions that are supported by | It includes only the extensions that are supported by | |||
both parties. | both parties. | |||
A mechanism for the negotiation of the CLUE protocol version and | A mechanism for the negotiation of the CLUE protocol version and | |||
extensions is part of the initiation phase. | extensions is part of the initiation phase. | |||
According to such a solution, the CP that is the CLUE Channel | According to such a solution, the CP that is the CLUE Channel | |||
Initiator (CI) issues a proper CLUE message ('options') | Initiator (CI) issues a proper CLUE message ('options') | |||
to the CP that is the Channel Receiver (CR) specifying the supported | to the CP that is the Channel Receiver (CR), specifying the supported | |||
version and extensions. | version and extensions. | |||
The CR then answers by selecting the subset of the CI extensions | The CR then answers by selecting the subset of the CI extensions | |||
that it is able to support and determines the protocol version to | that it is able to support and determines the protocol version to | |||
be used. | be used. | |||
</t> | </t> | |||
<t> | <t> | |||
After the negotiation phase is completed, CLUE Participants describe | After the negotiation phase is completed, CPs describe | |||
and agree on the media flows to be exchanged. | and agree on the media flows to be exchanged. | |||
In many cases CPs will seek to both transmit and receive media. Hence | In many cases, CPs will seek to both transmit and receive media. Hence, | |||
in a call between two CPs, A and B, there would be two separate message | in a call between two CPs (e.g., CPs A and B), there would be two separate messa | |||
ge | ||||
exchange sequences, as follows: | exchange sequences, as follows: | |||
</t> | </t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<list style="numbers"> | <li>the one needed to describe and set up the media streams sent from | |||
<t>the one needed to describe and set up the media streams sent from | A to B, i.e., the dialogue between A's MP side and B's MC side.</li> | |||
A to B, i.e., the dialogue between A's Media Provider side and B's Media | <li>the one needed to describe and set up the media streams sent from B | |||
Consumer side</t> | to A, i.e., the dialogue between B's MP side and A's MC side.</li> | |||
<t>the one needed to describe and set up the media streams sent from B | </ol> | |||
to A, i.e., the dialogue between B's Media Provider side and A's Media | <t> | |||
Consumer side</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
CLUE messages for the media session description and negotiation are | CLUE messages for the media session description and negotiation are | |||
designed by considering the MP side as the server side of the | designed by considering the MP side to be the server side of the | |||
protocol, since it produces and provides media streams, and the MC | protocol, since it produces and provides media streams, and the MC | |||
side as the client side of the protocol, since it requests and receives | side as the client side of the protocol, since it requests and receives | |||
media streams. | media streams. | |||
The messages that are exchanged to set up the telepresence media | The messages that are exchanged to set up the telepresence media | |||
session are described by focusing on a single MP-MC dialogue. | session are described by focusing on a single MP-MC dialogue. | |||
</t> | </t> | |||
<t> | <t> | |||
The MP first advertises its available media captures and encoding | The MP first advertises its available media captures and encoding | |||
capabilities to the MC, as well as its simultaneity constraints, | capabilities to the MC, as well as its simultaneity constraints, | |||
according to the information model defined in | according to the information model defined in | |||
<xref target="I-D.ietf-clue-framework"/>. | <xref target="RFC8845" format="default"/>. | |||
The CLUE message conveying the MP's multimedia offer is the | The CLUE message conveying the MP's multimedia offer is the | |||
'advertisement' message. | 'advertisement' message. | |||
Such message leverages the XML data model definitions provided in | Such a message leverages the XML data model definitions provided in | |||
<xref target="I-D.ietf-clue-data-model-schema"/>. | <xref target="RFC8846" format="default"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
The MC selects the desired streams of the MP by using the 'configure' | The MC selects the desired streams of the MP by using the 'configure' | |||
message, which makes reference to the information carried in the | message, which makes reference to the information carried in the | |||
previously received 'advertisement'. | previously received 'advertisement'. | |||
</t> | </t> | |||
<t> | <t> | |||
Besides 'advertisement' and 'configure', | Besides 'advertisement' and 'configure', | |||
other messages have been conceived in order to provide all the needed | other messages have been conceived in order to provide all needed | |||
mechanisms and operations. Such messages are detailed in the | mechanisms and operations. Such messages are detailed in the | |||
following sections. | following sections. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec-messages" numbered="true" toc="default"> | ||||
<section title="Protocol messages" anchor="sec-messages"> | <name>Protocol Messages</name> | |||
<t> | <t> | |||
CLUE protocol messages are textual, XML-based messages that enable the | CLUE protocol messages are textual XML-based messages that enable the | |||
configuration of the telepresence session. | configuration of the telepresence session. | |||
The formal definition of such messages is provided in the XML Schema | The formal definition of such messages is provided in the XML schema | |||
provided at the end of this document (<xref target="sec-schema"/>). | in <xref target="sec-schema" format="default"/>. | |||
This section includes non-normative excerpts of the schema to aid in | This section includes non-normative excerpts of the schema to aid in | |||
describing it. | describing it. | |||
</t> | </t> | |||
<t> | <t> | |||
The XML definitions of the CLUE information provided in | The XML definitions of the CLUE information provided in | |||
<xref target="I-D.ietf-clue-data-model-schema"/> are included | <xref target="RFC8846" format="default"/> are included | |||
within some CLUE protocol messages | within some CLUE protocol messages | |||
(namely the 'advertisement' and the 'configure' messages), in | (namely the 'advertisement' and 'configure' messages), in | |||
order to use the concepts defined in <xref target="I-D.ietf-clue-framework"/>. | order to use the concepts defined in <xref target="RFC8845" format="default"/>. | |||
</t> | ||||
<t> | ||||
The CLUE protocol messages are the following: | ||||
</t> | </t> | |||
<t> | <t> | |||
<list style="symbols"> | The CLUE protocol messages are as follows: | |||
<t>options</t> | ||||
<t>optionsResponse</t> | ||||
<t>advertisement</t> | ||||
<t>ack</t> | ||||
<t>configure</t> | ||||
<t>configureResponse</t> | ||||
</list> | ||||
</t> | </t> | |||
<t> | <ul spacing="normal"> | |||
<li>options</li> | ||||
<li>optionsResponse</li> | ||||
<li>advertisement</li> | ||||
<li>ack</li> | ||||
<li>configure</li> | ||||
<li>configureResponse</li> | ||||
</ul> | ||||
<t> | ||||
While the 'options' and 'optionsResponse' messages are exchanged in the | While the 'options' and 'optionsResponse' messages are exchanged in the | |||
initiation phase between the CPs, the other messages are involved in | initiation phase between the CPs, the other messages are involved in | |||
MP-MC dialogues. Please note that the word "dialog" in this document is | MP-MC dialogues. Please note that the word "dialogue" as used in this document i s | |||
not related to SIP's usage of the same term. It refers to message exchange | not related to SIP's usage of the same term. It refers to message exchange | |||
sequences between a CLUE Media Provider and a Clue Media Consumer. | sequences between a CLUE MP and a Clue MC. | |||
</t> | </t> | |||
<t> | <t> | |||
Each CLUE message inherits a basic structure depicted in the following | Each CLUE message inherits a basic structure, as depicted in the following | |||
excerpt (<xref target="fig:message"/>): | excerpt (<xref target="fig_message" format="default"/>): | |||
</t> | </t> | |||
<t> | <figure anchor="fig_message"> | |||
<figure align="center" | <name>Structure of a CLUE Message</name> | |||
title = "Structure of a CLUE message" anchor="fig:message"> | <sourcecode name="" type="xml"><![CDATA[ | |||
<artwork> | ||||
<![CDATA[ | ||||
<xs:complexType name="clueMessageType" abstract="true"> | <xs:complexType name="clueMessageType" abstract="true"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="clueId" type="xs:string" minOccurs="0"/> | <xs:element name="clueId" type="xs:string" minOccurs="0"/> | |||
<xs:element name="sequenceNr" type="xs:positiveInteger"/> | <xs:element name="sequenceNr" type="xs:positiveInteger"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:attribute name="protocol" type="xs:string" fixed="CLUE" | <xs:attribute name="protocol" type="xs:string" fixed="CLUE" | |||
use="required"/> | use="required"/> | |||
<xs:attribute name="v" type="versionType" use="required"/> | <xs:attribute name="v" type="versionType" use="required"/> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- VERSION TYPE --> | <!-- VERSION TYPE --> | |||
<xs:simpleType name="versionType"> | <xs:simpleType name="versionType"> | |||
<xs:restriction base="xs:string"> | <xs:restriction base="xs:string"> | |||
<xs:pattern value="[1-9][0-9]*\.[0-9]+" /> | <xs:pattern value="[1-9][0-9]*\.[0-9]+" /> | |||
</xs:restriction> | </xs:restriction> | |||
</xs:simpleType> | </xs:simpleType>]]></sourcecode> </figure> | |||
]]> | <t> | |||
</artwork> | The information contained in each CLUE message is as follows: | |||
</figure> | ||||
</t> | ||||
<t> | ||||
The information contained in each CLUE message is: | ||||
</t> | </t> | |||
<t> | <dl spacing="normal"> | |||
<list style="symbols"> | <dt>clueId:</dt><dd>An optional XML element containing the identifier (i | |||
<t>clueId: an optional XML element containing the identifier (in the form of a | n the form of a | |||
generic string) of the CP within the telepresence system;</t> | generic string) of the CP within the telepresence system.</dd> | |||
<t>sequenceNr: an XML element containing the local message sequence | <dt>sequenceNr:</dt><dd>An XML element containing the local message sequ | |||
ence | ||||
number. | number. | |||
The sender MUST increment the sequence numbers by one for each new | The sender <bcp14>MUST</bcp14> increment the sequence number by one for each new | |||
message sent, | message sent, and | |||
the receiver MUST remember the most recent sequence number received and | the receiver <bcp14>MUST</bcp14> remember the most recent sequence number receiv | |||
ed and | ||||
send back | send back | |||
a 402 error if it receives a message with an unexpected sequence number | a 402 error if it receives a message with an unexpected sequence number | |||
(e.g., sequence number gap, repeated sequence number, sequence number | (e.g., sequence number gap, repeated sequence number, sequence number | |||
too small). | too small). | |||
The initial sequence number can be chosen randomly by each party;</t> | The initial sequence number can be chosen randomly by each party.</dd> | |||
<t>protocol: a mandatory attribute set to "CLUE", identifying the | <dt>protocol:</dt><dd>A mandatory attribute set to "CLUE", identifying t | |||
procotol the messages refer to;</t> | he | |||
<t>v: a mandatory attribute carrying the version of the protocol. | protocol the messages refer to.</dd> | |||
The content of the "v" attribute is composed by the major version number | <dt>v:</dt><dd>A mandatory attribute carrying the version of the protoco | |||
l. | ||||
The content of the "v" attribute is composed of the major version number | ||||
followed by a dot and then by the minor version number of the CLUE | followed by a dot and then by the minor version number of the CLUE | |||
protocol in use. The major number cannot be "0" and, if it is more than | protocol in use. The major number cannot be "0", and if it is more than | |||
one digit, it cannot start with a "0". | one digit, it cannot start with a "0". | |||
Allowed values are of this kind are, e.g., "1.3", "2.0", "20.44" etc. | Allowed values of this kind are "1.3", "2.0", "20.44", etc. | |||
This document describes version 1.0. | This document describes version 1.0.</dd> | |||
</t> | </dl> | |||
</list> | <t> | |||
</t> | ||||
<t> | ||||
Each CP is responsible for creating and updating up to three independent | Each CP is responsible for creating and updating up to three independent | |||
streams of sequence numbers in messages it sends: (i) one for the | streams of sequence numbers in messages it sends: (i) one for the | |||
messages sent in the initiation phase, (ii) one for the messages sent as | messages sent in the initiation phase, (ii) one for the messages sent as | |||
MP (if it is acting as a MP), and (iii) one for the messages sent as MC | an MP (if it is acting as an MP), and (iii) one for the messages sent as an MC | |||
(if it is acting as a MC). | (if it is acting as an MC). | |||
</t> | </t> | |||
<t> | <t> | |||
In particular, CLUE response messages ('optionsResponse', 'ack', 'configureRespo nse') | In particular, CLUE response messages ('optionsResponse', 'ack', 'configureRespo nse') | |||
derive from a base type, inheriting from the clueMessageType, which is defined a s follows | derive from a base type, inheriting from the clueMessageType, which is defined a s follows | |||
(<xref target="fig:clue_response"/>): | (<xref target="fig_clue_response" format="default"/>): | |||
</t> | </t> | |||
<figure anchor="fig_clue_response"> | ||||
<t> | <name>Structure of CLUE Response Messages</name> | |||
<figure align="center" | <sourcecode name="" type="xml"><![CDATA[ | |||
title = "Structure of CLUE response messages" | ||||
anchor="fig:clue_response"> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<xs:complexType name="clueResponseType"> | <xs:complexType name="clueResponseType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueMessageType"> | <xs:extension base="clueMessageType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="responseCode" type="responseCodeType"/> | <xs:element name="responseCode" type="responseCodeType"/> | |||
<xs:element name="reasonString" type="xs:string" minOccurs="0"/> | <xs:element name="reasonString" type="xs:string" minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType>]]></sourcecode> </figure> | |||
]]> | <t> | |||
</artwork> | The elements <responseCode> and <reasonString> are populated as deta | |||
</figure> | iled in | |||
</t> | <xref target="sec-resp-codes" format="default"/>. | |||
</t> | ||||
<t> | <section anchor="subsec-options" numbered="true" toc="default"> | |||
The elements <responseCode> and <reasonString> get populated as deta | <name>'options'</name> | |||
iled in | <t> | |||
<xref target="sec-resp-codes"/> | The 'options' message is sent by the CP that is the CI | |||
to the CP that is the CR as soon as the CLUE data channel is ready. | ||||
</t> | ||||
<section title="options" anchor="subsec-options"> | ||||
<t> | ||||
The 'options' message is sent by the CLUE Participant that is the | ||||
Channel Initiator to the CLUE Participant that is | ||||
the Channel Receiver as soon as the CLUE data channel is ready. | ||||
Besides the information envisioned in the basic structure, it specifies: | Besides the information envisioned in the basic structure, it specifies: | |||
</t> | </t> | |||
<t> | <dl spacing="normal"> | |||
<list style="symbols"> | <dt><mediaProvider>:</dt> | |||
<t><mediaProvider>: a mandatory boolean field set to "true" if the CP is | <dd>A mandatory boolean field set to "true" if the CP is | |||
able to act as a MP</t> | able to act as an MP.</dd> | |||
<t><mediaConsumer>: a mandatory boolean field set to "true" if the CP is | <dt><mediaConsumer>:</dt> | |||
able to act as a MC</t> | <dd>A mandatory boolean field set to "true" if the CP is | |||
<t><supportedVersions>: the list of the supported versions</t> | able to act as an MC.</dd> | |||
<t><supportedExtensions>: the list of the supported extensions</t> | <dt><supportedVersions>:</dt> | |||
</list> | <dd>The list of supported versions.</dd> | |||
</t> | <dt><supportedExtensions>:</dt> | |||
<t> | <dd>The list of supported extensions.</dd> | |||
The XML Schema of such a message is reported below | </dl> | |||
(<xref target="fig:options"/>): | <t> | |||
The XML schema of such a message is shown below | ||||
(<xref target="fig_options" format="default"/>): | ||||
</t> | </t> | |||
<t> | <figure anchor="fig_options"> | |||
<figure align="center" | <name>Structure of a CLUE 'options' Message</name> | |||
title = "Structure of CLUE 'options' message" anchor="fig:options"> | <sourcecode name="" type="xml"><![CDATA[ | |||
<artwork> | ||||
<![CDATA[ | ||||
<!-- CLUE OPTIONS --> | <!-- CLUE OPTIONS --> | |||
<xs:complexType name="optionsMessageType"> | <xs:complexType name="optionsMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueMessageType"> | <xs:extension base="clueMessageType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="mediaProvider" type="xs:boolean" /> | <xs:element name="mediaProvider" type="xs:boolean" /> | |||
<xs:element name="mediaConsumer" type="xs:boolean" /> | <xs:element name="mediaConsumer" type="xs:boolean" /> | |||
<xs:element name="supportedVersions" type="versionsListType" | <xs:element name="supportedVersions" type="versionsListType" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
<xs:element name="supportedExtensions" type="extensionsListType" | <xs:element name="supportedExtensions" | |||
minOccurs="0"/> | type="extensionsListType" | |||
minOccurs="0"/> | ||||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- VERSIONS LIST TYPE --> | <!-- VERSIONS LIST TYPE --> | |||
<xs:complexType name="versionsListType"> | <xs:complexType name="versionsListType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="version" type="versionType" minOccurs="1" | <xs:element name="version" type="versionType" minOccurs="1" | |||
maxOccurs="unbounded"/> | maxOccurs="unbounded"/> | |||
<xs:any namespace="##other" processContents="lax" minOccurs="0"/> | <xs:any namespace="##other" processContents="lax" minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- EXTENSIONS LIST TYPE --> | <!-- EXTENSIONS LIST TYPE --> | |||
<xs:complexType name="extensionsListType"> | <xs:complexType name="extensionsListType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="extension" type="extensionType" minOccurs="1" | <xs:element name="extension" type="extensionType" minOccurs="1" | |||
maxOccurs="unbounded"/> | maxOccurs="unbounded"/> | |||
<xs:any namespace="##other" processContents="lax" minOccurs="0"/> | <xs:any namespace="##other" processContents="lax" minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- EXTENSION TYPE --> | <!-- EXTENSION TYPE --> | |||
<xs:complexType name="extensionType"> | <xs:complexType name="extensionType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="name" type="xs:string" /> | <xs:element name="name" type="xs:string" /> | |||
<xs:element name="schemaRef" type="xs:anyURI" /> | <xs:element name="schemaRef" type="xs:anyURI" /> | |||
<xs:element name="version" type="versionType" /> | <xs:element name="version" type="versionType" /> | |||
<xs:any namespace="##other" processContents="lax" minOccurs="0"/> | <xs:any namespace="##other" processContents="lax" minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:complexType> | </xs:complexType>]]></sourcecode> </figure> | |||
]]> | <t> | |||
</artwork> | <supportedVersions> contains the list of versions that are | |||
</figure> | ||||
</t> | ||||
<t> | ||||
<supportedVersions> contains the list of the versions that are | ||||
supported by the CI, | supported by the CI, | |||
each one represented in a child <version> element. | each one represented in a child <version> element. | |||
The content of each <version> element is a string made by the | The content of each <version> element is a string made of the | |||
major version number | major version number | |||
followed by a dot and then by the minor version number (e.g., 1.3 or | followed by a dot and then by the minor version number (e.g., 1.3 or | |||
2.4). | 2.4). | |||
Exactly one <version> element MUST be provided | Exactly one <version> element <bcp14>MUST</bcp14> be provided | |||
for each major version supported, containing the maximum minor version | for each major version supported, containing the maximum minor version | |||
number of such a version, since all minor versions are backward | number of such a version, since all minor versions are backward | |||
compatible. | compatible. | |||
If no <supportedVersions> is carried within the 'options' message, | If no <supportedVersions> is carried within the 'options' message, | |||
the CI supports only the version declared in the "v" attribute | the CI supports only the version declared in the "v" attribute | |||
and all the versions having the same major version number and lower | and all the versions having the same major version number and lower | |||
minor version number. | minor version number. | |||
For example, if the "v" attribute has a value of "3.4" and there is no | For example, if the "v" attribute has a value of "3.4" and there is no | |||
<supportedVersions> tag in the 'options' message, | <supportedVersions> element in the 'options' message, | |||
it means the CI supports only major version 3 with | it means the CI supports only major version 3 with | |||
all the minor versions comprised between 3.0 and 3.4, with version 3.4 | all minor versions from 3.0 through 3.4. If <supportedVersions> is provide | |||
included. | d, | |||
If a <supportedVersion> is provided, | at least one <version> element <bcp14>MUST</bcp14> be included. | |||
at least one <version> tag MUST be included. | In this case, the "v" attribute <bcp14>SHOULD</bcp14> be set to the largest mino | |||
In this case, the "v" attribute SHOULD be set to the largest minor | r | |||
version of the smallest major version advertised in the | version of the smallest major version advertised in the | |||
<supportedVersions> list. | <supportedVersions> list. | |||
Indeed, the intention behind the "v" attribute is that some | Indeed, the intention behind the "v" attribute is that some | |||
implementation that receives a version number in the "v" field | implementation that receives a version number in the "v" field | |||
with a major number higher than it understands is supposed to | with a major number higher than it understands is supposed to | |||
close the connection, since it runs a risk of misinterpreting | close the connection, since it runs a risk of misinterpreting | |||
the contents of messages. | the contents of messages. | |||
The minor version is less useful in this context, | The minor version is less useful in this context, | |||
since minor versions are defined to be both backwards and | since minor versions are defined to be both backward and | |||
forwards compatible, but it is more useful to know the highest | forward compatible and the value can in any case be parsed out of the | |||
<version> list. It is more useful to know the highest | ||||
minor version supported than some random minor version, as it | minor version supported than some random minor version, as it | |||
indicates the full feature set that is supported. | indicates the full feature set that is supported. | |||
The reason why it is less useful is that the value can in any | ||||
case be parsed out of the <version> list. | ||||
</t> | </t> | |||
<t> | ||||
<t> | ||||
The <supportedExtensions> element specifies the list of extensions | The <supportedExtensions> element specifies the list of extensions | |||
supported by the CI. | supported by the CI. | |||
If there is no <supportedExtensions> in the 'options' message, the CI | If there is no <supportedExtensions> in the 'options' message, the CI | |||
does not support anything other than what is envisioned in the versions | does not support anything other than what is envisioned in the versions | |||
it supports. | it supports. | |||
For each extension, an <extension> element is provided. | For each extension, an <extension> element is provided. | |||
An extension is characterized by a name, an XML schema of reference where | An extension is characterized by a name, an XML schema of reference where | |||
the extension is defined, and the version of the protocol which the extension | the extension is defined, and the version of the protocol that the extension | |||
refers to. | refers to. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="subsec-options-response" numbered="true" toc="default"> | ||||
<section title="optionsResponse" anchor="subsec-options-response"> | <name>'optionsResponse'</name> | |||
<t> | ||||
<t> | The 'optionsResponse' (<xref target="fig_options_response" format="default"/>) | |||
The 'optionsResponse' (<xref target="fig:options_response"/>) | ||||
is sent by a CR to a CI as a reply to the 'options' | is sent by a CR to a CI as a reply to the 'options' | |||
message. | message. | |||
The 'optionsResponse' contains | The 'optionsResponse' contains | |||
a mandatory response code and a reason string indicating | a mandatory response code and a reason string indicating | |||
the processing result of the 'options' message. | the processing result of the 'options' message. | |||
If the responseCode is between 200 and 299 inclusive, | If the responseCode is between 200 and 299 inclusive, | |||
the response MUST also include <mediaProvider>, | the response <bcp14>MUST</bcp14> also include <mediaProvider>, | |||
<mediaConsumer>, <version> and <commonExtensions> | <mediaConsumer>, <version>, and <commonExtensions> | |||
elements; it MAY include them for any other response code. | elements; it <bcp14>MAY</bcp14> include them for any other response | |||
<mediaProvider> and <mediaConsumer> | code. <mediaProvider> and <mediaConsumer> | |||
elements (which are of a boolean nature) are associated with the | elements (which are of a boolean nature) are associated with the | |||
supported roles (in terms of, respectively MP and MC), | supported roles (in terms of the MP and the MC, respectively), | |||
similarly to what the CI does in the 'options' message. | similarly to what the CI does in the 'options' message. | |||
The <version> field indicates the highest commonly supported | The <version> element indicates the highest commonly supported | |||
version number. | version number. | |||
The content of the <version> | The content of the <version> | |||
element MUST be a string made of the major version number | element <bcp14>MUST</bcp14> be a string made of the major version number | |||
followed by a dot and then by the minor version number (e.g., 1.3 or | followed by a dot and then by the minor version number (e.g., 1.3 or | |||
2.4). | 2.4). | |||
Finally, the commonly supported extensions are copied in the | Finally, the commonly supported extensions are copied in the | |||
<commonExtensions> field. | <commonExtensions> element. | |||
</t> | </t> | |||
<t> | <figure anchor="fig_options_response"> | |||
<figure align="center" | <name>Structure of a CLUE 'optionsResponse' Message</name> | |||
title = "Structure of CLUE 'optionsResponse' message" | <sourcecode name="" type="xml"><![CDATA[ | |||
anchor="fig:options_response"> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<!-- CLUE 'optionsResponse' --> | <!-- CLUE 'optionsResponse' --> | |||
<xs:complexType name="optionsResponseMessageType"> | <xs:complexType name="optionsResponseMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueResponseType"> | <xs:extension base="clueResponseType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="mediaProvider" type="xs:boolean" | <xs:element name="mediaProvider" type="xs:boolean" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
<xs:element name="mediaConsumer" type="xs:boolean" | <xs:element name="mediaConsumer" type="xs:boolean" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
<xs:element name="version" type="versionType" minOccurs="0"/> | <xs:element name="version" type="versionType" minOccurs="0"/> | |||
<xs:element name="commonExtensions" type="extensionsListType" | <xs:element name="commonExtensions" type="extensionsListType" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType>]]></sourcecode> </figure> | |||
]]> | <t> | |||
</artwork> | Upon reception of the 'optionsResponse', the version to be used is the one | |||
</figure> | provided in the <version> element of the message. | |||
</t> | The subsequent CLUE messages <bcp14>MUST</bcp14> use such a version number in th | |||
<t> | e "v" | |||
Upon reception of the 'optionsResponse' the version to be used is the one | attribute. The allowed extensions in the CLUE dialogue are those | |||
provided in the <version> tag of the message. | indicated in the <commonExtensions> element of the 'optionsResponse' messa | |||
The following CLUE messages MUST use such a version number in the "v" | ge. | |||
attribute. | ||||
The allowed extensions in the CLUE dialogue are those | ||||
indicated in the <commonExtensions> of the 'optionsResponse' message. | ||||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="subsec-adv" numbered="true" toc="default"> | ||||
<section title="advertisement" anchor="subsec-adv"> | <name>'advertisement'</name> | |||
<t> | <t> | |||
The 'advertisement' message is used by each MP to advertise the | The 'advertisement' message is used by each MP to advertise the | |||
available media captures and related information to the corresponding MC. | available media captures and related information to the corresponding MC. | |||
The MP sends an 'advertisement' to the MC as soon as it is ready after the | The MP sends an 'advertisement' to the MC as soon as it is ready after the | |||
successful completion of the initiation phase, i.e., as soon as the | successful completion of the initiation phase, i.e., as soon as the | |||
version and the extensions of the CLUE protocol are agreed between the CPs. | CPs have agreed on the version and extensions of the CLUE protocol. | |||
During a single CLUE session, an MP may send new 'advertisement' messages to rep lace | During a single CLUE session, an MP may send new 'advertisement' messages to rep lace | |||
the previous advertisement, if, for instance, its CLUE | the previous advertisement if, for instance, its CLUE | |||
telepresence media capabilities change mid-call. A new 'advertisement' completel | telepresence media capabilities change mid&nbhy;call. A new 'advertisement' comp | |||
y | letely | |||
replaces the previous 'advertisement'. | replaces the previous 'advertisement'. | |||
</t> | </t> | |||
<t> | <t> | |||
The 'advertisement' structure is defined in the schema excerpt below | The 'advertisement' structure is defined in the schema excerpt below | |||
(<xref target="fig:adv"/>). | (<xref target="fig_adv" format="default"/>). | |||
The 'advertisement' contains elements compliant with the CLUE data model that | The 'advertisement' contains elements compliant with the CLUE data model that | |||
characterize the MP's telepresence offer. | characterize the MP's telepresence offer. | |||
Namely, such elements are: | Namely, such elements are the list of</t> | |||
the list of the media captures (<mediaCaptures>), | <ul spacing="normal"> | |||
of the encoding groups (<encodingGroups>), | <li>media captures (<mediaCaptures>),</li> | |||
of the capture scenes (<captureScenes>), | <li>encoding groups (<encodingGroups>),</li> | |||
of the simultaneous sets (<simultaneousSets>), | <li>capture scenes (<captureScenes>),</li> | |||
of the global views (<globalViews>), | <li>simultaneous sets (<simultaneousSets>),</li> | |||
and of the represented participants (<people>). | <li>global views (<globalViews>), and</li> | |||
Each of them is fully described in the CLUE framework document | <li>represented participants (<people>).</li> | |||
and formally defined in the CLUE data model document. | </ul> | |||
</t> | ||||
<t> | <t>Each of them is fully described in the CLUE framework document | |||
<figure align="center" | <xref target="RFC8845" format="default"/> and formally defined in the CLUE | |||
title = "Structure of CLUE 'advertisement' message" | data model document <xref target="RFC8846" format="default"/>. | |||
anchor="fig:adv"> | </t> | |||
<artwork> | <figure anchor="fig_adv"> | |||
<![CDATA[ | <name>Structure of a CLUE 'advertisement' Message</name> | |||
<sourcecode name="" type="xml"><![CDATA[ | ||||
<!-- CLUE ADVERTISEMENT MESSAGE TYPE --> | <!-- CLUE ADVERTISEMENT MESSAGE TYPE --> | |||
<xs:complexType name="advertisementMessageType"> | <xs:complexType name="advertisementMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueMessageType"> | <xs:extension base="clueMessageType"> | |||
<xs:sequence> | <xs:sequence> | |||
<!-- mandatory --> | <!-- mandatory --> | |||
<xs:element name="mediaCaptures" type="dm:mediaCapturesType"/> | <xs:element name="mediaCaptures" | |||
<xs:element name="encodingGroups" type="dm:encodingGroupsType"/> | type="dm:mediaCapturesType"/> | |||
<xs:element name="captureScenes" type="dm:captureScenesType"/> | <xs:element name="encodingGroups" | |||
type="dm:encodingGroupsType"/> | ||||
<xs:element name="captureScenes" | ||||
type="dm:captureScenesType"/> | ||||
<!-- optional --> | <!-- optional --> | |||
<xs:element name="simultaneousSets" | <xs:element name="simultaneousSets" | |||
type="dm:simultaneousSetsType" minOccurs="0"/> | type="dm:simultaneousSetsType" minOccurs="0"/> | |||
<xs:element name="globalViews" type="dm:globalViewsType" | <xs:element name="globalViews" type="dm:globalViewsType" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
<xs:element name="people" type="dm:peopleType" minOccurs="0"/> | <xs:element name="people" | |||
type="dm:peopleType" minOccurs="0"/> | ||||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType>]]></sourcecode> </figure> | |||
]]> | </section> | |||
</artwork> | <section anchor="sec-adv-ack" numbered="true" toc="default"> | |||
</figure> | <name>'ack'</name> | |||
</t> | <t> | |||
</section> | ||||
<section title="ack" anchor="sec-adv-ack"> | ||||
<t> | ||||
The 'ack' message | The 'ack' message | |||
is sent by a MC to a MP to acknowledge an 'advertisement' message. | is sent by an MC to an MP to acknowledge an 'advertisement' message. | |||
As it can be seen from the message schema provided in the following | As can be seen from the message schema provided in the following | |||
excerpt (<xref target="fig:adv_ack"/>), | excerpt (<xref target="fig_adv_ack" format="default"/>), | |||
the 'ack' contains a response code and may contain a reason string | the 'ack' contains a response code and may contain a reason string | |||
for describing the processing result of the 'advertisement'. | for describing the processing result of the 'advertisement'. | |||
The <advSequenceNr> carries the sequence number of | The <advSequenceNr> element carries the sequence number of the | |||
'advertisement' message the 'ack' refers to. | 'advertisement' message the 'ack' refers to. | |||
</t> | </t> | |||
<t> | <figure anchor="fig_adv_ack"> | |||
<figure align="center" | <name>Structure of a CLUE 'ack' Message</name> | |||
title = "Structure of CLUE 'ack' message" | <sourcecode name="" type="xml"><![CDATA[ | |||
anchor="fig:adv_ack"> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<!-- 'ack' MESSAGE TYPE --> | <!-- 'ack' MESSAGE TYPE --> | |||
<xs:complexType name="advAcknowledgementMessageType"> | <xs:complexType name="advAcknowledgementMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueResponseType"> | <xs:extension base="clueResponseType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="advSequenceNr" type="xs:positiveInteger"/> | <xs:element name="advSequenceNr" type="xs:positiveInteger"/> | |||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType>]]></sourcecode> </figure> | |||
]]> | </section> | |||
</artwork> | <section anchor="sec-conf" numbered="true" toc="default"> | |||
</figure> | <name>'configure'</name> | |||
</t> | <t> | |||
</section> | The 'configure' message is sent from an MC to an MP | |||
<section title="configure" anchor="sec-conf"> | ||||
<t> | ||||
The 'configure' message is sent from a MC to a MP | ||||
to list the advertised captures the MC wants to receive. | to list the advertised captures the MC wants to receive. | |||
The MC MUST send a 'configure' after the reception of an 'advertisement', as wel l as each | The MC <bcp14>MUST</bcp14> send a 'configure' after the reception of an 'adverti sement', as well as each | |||
time it wants to request other captures that have been previously advertised by | time it wants to request other captures that have been previously advertised by | |||
the MP. | the MP. | |||
The content of the 'configure' message is shown below (<xref target="fig:conf"/> ). | The content of the 'configure' message is shown below (<xref target="fig_conf" f ormat="default"/>). | |||
</t> | </t> | |||
<t> | <figure anchor="fig_conf"> | |||
<figure align="center" | <name>Structure of a CLUE 'configure' Message</name> | |||
title = "Structure of CLUE 'configure' message" | <sourcecode name="" type="xml"><![CDATA[ | |||
anchor="fig:conf"> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<!-- CLUE 'configure' MESSAGE TYPE --> | <!-- CLUE 'configure' MESSAGE TYPE --> | |||
<xs:complexType name="configureMessageType"> | <xs:complexType name="configureMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueMessageType"> | <xs:extension base="clueMessageType"> | |||
<xs:sequence> | <xs:sequence> | |||
<!-- mandatory fields --> | <!-- mandatory fields --> | |||
<xs:element name="advSequenceNr" type="xs:positiveInteger"/> | <xs:element name="advSequenceNr" type="xs:positiveInteger"/> | |||
<xs:element name="ack" type="successResponseCodeType" | <xs:element name="ack" type="successResponseCodeType" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
<xs:element name="captureEncodings" | <xs:element name="captureEncodings" | |||
type="dm:captureEncodingsType" minOccurs="0"/> | type="dm:captureEncodingsType" minOccurs="0"/> | |||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType>]]></sourcecode> </figure> | |||
]]> | <t> | |||
</artwork> | ||||
</figure> | ||||
</t> | ||||
<t> | ||||
The <advSequenceNr> element contains the sequence number of | The <advSequenceNr> element contains the sequence number of | |||
the 'advertisement' message the 'configure' refers to. | the 'advertisement' message the 'configure' refers to. | |||
</t> | </t> | |||
<t> | <t> | |||
The optional <ack> element, when present, contains a success | The optional <ack> element, when present, contains a success | |||
response code, as defined in <xref target="sec-resp-codes"/>. | response code, as defined in <xref target="sec-resp-codes" format="default"/>. | |||
It indicates that the 'configure' message also acknowledges | It indicates that the 'configure' message also acknowledges | |||
with success the referred advertisement ('configure' + 'ack' message). | with success the referred advertisement ('configure+ack' message). | |||
The <ack> element MUST NOT be present if an 'ack' message | The <ack> element <bcp14>MUST NOT</bcp14> be present if an 'ack' message | |||
(associated with the advertisement carrying that specific sequence | (associated with the advertisement carrying that specific sequence | |||
number) has been already sent back to the MP. | number) has already been sent back to the MP. | |||
</t> | </t> | |||
<t> | <t> | |||
The most important content of the 'configure' message is the list of the | The most important content of the 'configure' message is the list of | |||
capture encodings provided in the <captureEncodings> element | capture encodings provided in the <captureEncodings> element | |||
(see <xref target="I-D.ietf-clue-data-model-schema"/> for the | (see <xref target="RFC8846" format="default"/> for the | |||
definition of <captureEncodings>). | definition of <captureEncodings>). | |||
Such an element contains a sequence of capture encodings, | Such an element contains a sequence of capture encodings, | |||
representing the streams to be instantiated. | representing the streams to be instantiated. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="sec-conf-resp" numbered="true" toc="default"> | |||
<section title="configureResponse" anchor="sec-conf-resp"> | <name>'configureResponse'</name> | |||
<t> | <t> | |||
The 'configureResponse' message is sent from the MP to | The 'configureResponse' message is sent from the MP to | |||
the MC to communicate | the MC to communicate | |||
the processing result of requests carried in the previously received | the processing result of requests carried in the previously received | |||
'configure' message. | 'configure' message. | |||
It contains (<xref target="fig:conf_resp"/>) a response code (and | As shown in <xref target="fig_conf_resp" format="default"/>, it contains a | |||
optionally a reason string) indicating either the | response code (and, optionally, a reason string) indicating either the | |||
success or the failure (along with failure details) of a 'configure' request | success or failure (along with failure details) of the 'configure' request | |||
processing. | processing. | |||
Following, the <confSequenceNr> field contains | The <confSequenceNr> element that follows contains | |||
the sequence number of the 'configure' message the response refers to. | the sequence number of the 'configure' message the response refers to. | |||
There is no partial execution of commands. As an example, | There is no partial execution of commands. As an example, | |||
if a MP is able to understand all the selected capture encodings except | if an MP is able to understand all the selected capture encodings except | |||
one, then the whole command fails and nothing is instantiated. | one, then the whole command fails and nothing is instantiated. | |||
</t> | </t> | |||
<figure anchor="fig_conf_resp"> | ||||
<t> | <name>Structure of a CLUE 'configureResponse' Message</name> | |||
<sourcecode name="" type="xml"><![CDATA[ | ||||
<figure align="center" | ||||
title = "Structure of CLUE 'configureResponse' message" | ||||
anchor="fig:conf_resp"> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<!-- 'configureResponse' MESSAGE TYPE --> | <!-- 'configureResponse' MESSAGE TYPE --> | |||
<xs:complexType name="configureResponseMessageType"> | <xs:complexType name="configureResponseMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueResponseType"> | <xs:extension base="clueResponseType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="confSequenceNr" type="xs:positiveInteger" /> | <xs:element name="confSequenceNr" | |||
type="xs:positiveInteger" /> | ||||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax" /> | <xs:anyAttribute namespace="##other" processContents="lax" /> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType>]]></sourcecode> </figure> | |||
]]> | </section> | |||
</artwork> | <section anchor="sec-resp-codes" numbered="true" toc="default"> | |||
</figure> | <name>Response Codes and Reason Strings</name> | |||
</t> | <t> | |||
</section> | ||||
<section title="Response codes and reason strings" anchor="sec-resp-codes"> | ||||
<t> | ||||
Response codes are defined as a sequence of three digits. | Response codes are defined as a sequence of three digits. | |||
A well-defined meaning is associated with the first digit. | A well-defined meaning is associated with the first digit. | |||
Response codes beginning with "2" are associated with successful | Response codes beginning with "2" are associated with successful | |||
responses. | responses. | |||
Response codes that do not begin with either "2" or "1" indicate an | Response codes that do not begin with either "2" or "1" indicate an | |||
error response, i.e., that an error occurred while processing a CLUE | error response, i.e., that an error occurred while processing a CLUE | |||
request. | request. | |||
In particular, response codes beginning with "3" indicate problems | In particular, response codes beginning with "3" indicate problems | |||
with the XML content of the message ("Bad syntax", "Invalid value", | with the XML content of the message ("Bad syntax", "Invalid value", | |||
etc.), while response codes beginning with "4" refer to problems | etc.), while response codes beginning with "4" refer to problems | |||
related to CLUE protocol semantics ("Invalid sequencing", "Version not | related to CLUE protocol semantics ("Invalid sequencing", "Version not | |||
supported", etc.). | supported", etc.). | |||
200, 300 and 400 codes are the most generic ones in their respective categories | 200, 300, and 400 codes are the most generic codes in their respective categori | |||
. | es. | |||
Further response codes can be either defined in future versions of the | Further response codes can be defined either in future versions of the | |||
protocol, or defined by leveraging the extension mechanism. | protocol or by leveraging the extension mechanism. | |||
In both cases, the new response codes MUST be registered with IANA. | In both cases, the new response codes <bcp14>MUST</bcp14> be registered with IA | |||
NA. | ||||
Such new response | Such new response | |||
codes MUST NOT override the ones here defined and they MUST | codes <bcp14>MUST NOT</bcp14> override the codes defined in this document, and they <bcp14>MUST</bcp14> | |||
respect the semantics of the first code digit. | respect the semantics of the first code digit. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
This document does not define response codes starting with "1", and such | This document does not define response codes starting with "1", and such | |||
response codes are not allowed to appear in major version 1 of the CLUE | response codes are not allowed to appear in major version 1 of the CLUE | |||
protocol. The range from 100 to 199 inclusive is reserved for future | protocol. The range from 100 to 199 inclusive is reserved for future | |||
major versions of the protocol to define response codes for delayed or | major versions of the protocol to define response codes for delayed or | |||
incomplete operations if necessary. Response codes starting with "5" | incomplete operations, if necessary. Response codes starting with "5" | |||
through "9" are reserved for future major versions of the protocol to | through "9" are reserved for future major versions of the protocol to | |||
define new classes of response, and are not allowed in major version 1 | define new classes of responses and are not allowed in major version 1 | |||
of the CLUE protocol. | of the CLUE protocol. | |||
Response codes starting with "0" are not allowed. | Response codes starting with "0" are not allowed. | |||
</t> | </t> | |||
<t> | ||||
<t> | The response codes and reason strings defined for use with version 1 of the | |||
The response codes and strings defined for use with version 1 of the | CLUE protocol are listed in <xref target="clue-resp-codes-table" format="default | |||
CLUE protocol are listed in <xref target="fig:codes"/>. | "/>. | |||
The "Description" text contained in the table can be sent in the | The "Description" text contained in the table can be sent in the | |||
<reasonString> element of a response message. Implementations can | <reasonString> element of a response message. Implementations can | |||
(and are encouraged to) include more specific descriptions of the error | (and are encouraged to) include descriptions of the error | |||
condition, if possible. | condition that are more specific, if possible. | |||
</t> | </t> | |||
<t> | <table anchor="clue-resp-codes-table"> | |||
<figure align="center" | <name>CLUE Response Codes</name> | |||
title = "CLUE response codes" | <thead> | |||
anchor="fig:codes"> | <tr> | |||
<artwork> | <th>Response Code</th> | |||
<![CDATA[ | <th>Reason String</th> | |||
<th align="center">Description</th> | ||||
+-----------------+----------------------+--------------------------+ | </tr> | |||
| | | | | </thead> | |||
| Response code | Reason string | Description | | <tbody> | |||
| | | | | <tr> | |||
+-----------------+----------------------+--------------------------+ | <td>200</td> | |||
| | | | | <td>Success</td> | |||
| 200 | Success | The request has been | | <td>The request has been successfully processed.</td> | |||
| | | successfully processed. | | </tr> | |||
| | | | | <tr> | |||
+-----------------+----------------------+--------------------------+ | <td>300</td> | |||
| | | | | <td>Low-level request error</td> | |||
| 300 | Low-level request | A generic low-level | | <td>A generic low-level request error has occurred.</td> | |||
| | error. | request error has | | </tr> | |||
| | | occurred. | | <tr> | |||
| | | | | <td>301</td> | |||
+-----------------+----------------------+--------------------------+ | <td>Bad syntax</td> | |||
| | | | | <td>The XML syntax of the message is not correct.</td> | |||
| 301 | Bad syntax | The XML syntax of the | | </tr> | |||
| | | message is not correct. | | <tr> | |||
+-----------------+----------------------+--------------------------+ | <td>302</td> | |||
| | | | | <td>Invalid value</td> | |||
| 302 | Invalid value | The message | | <td>The message contains an invalid parameter value.</td> | |||
| | | contains an invalid | | </tr> | |||
| | | parameter value. | | <tr> | |||
+-----------------+----------------------+--------------------------+ | <td>303</td> | |||
| | | | | <td>Conflicting values</td> | |||
| 303 | Conflicting values | The message | | <td>The message contains values that cannot be used together.</td> | |||
| | | contains values that | | </tr> | |||
| | | cannot be used together.| | <tr> | |||
+-----------------+----------------------+--------------------------+ | <td>400</td> | |||
| | | | | <td>Semantic errors</td> | |||
| 400 | Semantic errors | Semantic errors in the | | <td>The received CLUE protocol message contains semantic errors.</td> | |||
| | | received CLUE protocol | | </tr> | |||
| | | message. | | <tr> | |||
| | | | | <td>401</td> | |||
+-----------------+----------------------+--------------------------+ | <td>Version not supported</td> | |||
| | | | | <td>The protocol version used in the message is not supported.</td> | |||
| 401 | Version not supported| The protocol version | | </tr> | |||
| | | used in the message | | <tr> | |||
| | | is not supported. | | <td>402</td> | |||
| | | | | <td>Invalid sequencing</td> | |||
+-----------------+----------------------+--------------------------+ | <td>The received message contains an unexpected sequence number (e.g., | |||
| | | | | sequence number gap, repeated sequence number, or sequence number | |||
| 402 | Invalid sequencing | Sequence number gap; | | outdated).</td> | |||
| | | repeated sequence number;| | </tr> | |||
| | | sequence number outdated.| | <tr> | |||
+-----------------+----------------------+--------------------------+ | <td>403</td> | |||
| | | | | <td>Invalid identifier</td> | |||
| 403 | Invalid identifier | The clueId used in | | <td>The clueId used in the message is invalid or unknown.</td> | |||
| | | the message is | | </tr> | |||
| | | not valid or unknown. | | <tr> | |||
+-----------------+----------------------+--------------------------+ | <td>404</td> | |||
| | | The sequence number of | | <td>Advertisement expired</td> | |||
| 404 | advertisement | the advertisement the | | <td>The sequence number of the advertisement the 'configure' message refer | |||
| | Expired | configure refers to is | | s to is out of date.</td> | |||
| | | out of date. | | </tr> | |||
+-----------------+----------------------+--------------------------+ | <tr> | |||
| | | | | <td>405</td> | |||
| 405 | Subset choice not | The subset choice is not | | <td>Subset choice not allowed</td> | |||
| | allowed | allowed for the specified| | <td>The subset choice is not allowed for the specified Multiple Content Ca | |||
| | | Multiple Content Capture | | pture.</td> | |||
+-----------------+----------------------+--------------------------+ | </tr> | |||
</tbody> | ||||
]]> | </table> | |||
</artwork> | </section> | |||
</figure> | </section> | |||
</t> | ||||
</section> | ||||
</section><!-- protocol messages --> | ||||
<section title="Protocol state machines" anchor="sec-sm"> | ||||
<t> | ||||
<section anchor="sec-sm" numbered="true" toc="default"> | ||||
<name>Protocol State Machines</name> | ||||
<t> | ||||
The CLUE protocol is an application protocol used between two CPs | The CLUE protocol is an application protocol used between two CPs | |||
in order to properly configure a multimedia telepresence session. | in order to properly configure a multimedia telepresence session. | |||
CLUE protocol messages flow over the CLUE Data Channel, | CLUE protocol messages flow over the CLUE data channel, | |||
a DTLS/SCTP channel established as depicted in | an SCTP-over-DTLS channel established as depicted in | |||
<xref target="I-D.ietf-clue-datachannel"/>. | <xref target="RFC8850" format="default"/>. | |||
We herein discuss the state machines associated with the | ||||
We herein discuss the state machines associated, respectively, with the | CP (<xref target="fig_protocol_participant" format="default"/>), | |||
CLUE Participant (<xref target="fig:protocol_participant"/>), with | the MP role (<xref target="fig_protocol_provider" format="default"/> in <xref ta | |||
the MC role (<xref target="fig:protocol_provider"/>) and with the | rget="sec-mp"/>), and the | |||
MP role (<xref target="fig:protocol_consumer"/>). | MC role (<xref target="fig_protocol_consumer" format="default"/> in <xref | |||
target="sec-mc"/>), respectively. | ||||
Endpoints often wish to both send and receive media, i.e., act as both | Endpoints often wish to both send and receive media, i.e., act as both an | |||
MP and MC. | MP and an MC. | |||
As such there will often be two sets of messages flowing in opposite | As such, there will often be two sets of messages flowing in opposite | |||
directions; the state machines of these two flows do not interact with | directions; the state machines of these two flows do not interact with | |||
each other. | each other. | |||
Only the CLUE application logic is considered. | Only the CLUE application logic is considered. | |||
The interaction of CLUE protocol and SDP negotiations for the media | The interaction of CLUE protocol and SDP negotiations for the media | |||
streams exchanged is treated in <xref target="I-D.ietf-clue-signaling"/>. | streams exchanged is discussed in <xref target="RFC8848" format="default"/>. | |||
</t> | </t> | |||
<t> | <figure anchor="fig_protocol_participant"> | |||
The main state machines focus on the behavior of the CLUE Participant | <name>CLUE Participant State Machine</name> | |||
(CP) acting as a CLUE Channel Initiator/Receiver (CI/CR). | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+----+ | ||||
+---------------------->|IDLE|<----------------------------+ | ||||
| +-+--+ | | ||||
| | | | ||||
| | start | | ||||
| | channel | | ||||
| v | | ||||
| channel error / +--------+ | | ||||
| session ends | CHANNEL| | | ||||
+----------------------+ SETUP | | | ||||
| +--+-----+ | | ||||
| | | | ||||
| | channel | | ||||
| | established | | ||||
| channel error / v OPTIONS phase | | ||||
| session ends +-------+ failure | | ||||
+-----------------------+OPTIONS+--------------------------+ | ||||
| +-+-----+ | ||||
| | | ||||
| | OPTIONS phase | ||||
| | success | ||||
| v | ||||
| channel error / +---------+ | ||||
| session ends | ACTIVE | | ||||
+----------------------+ | | ||||
| +----+ +------------------+ | ||||
| | MP | | send/receive | | ||||
| +----+ | CLUE messages | | ||||
| |<-----------------+ | ||||
| +----+ | | ||||
| | MC | | | ||||
| +----+ | | ||||
| | | ||||
+---------+]]></artwork> </figure> | ||||
<t> | ||||
The main state machines focus on the behavior of the CP acting as a CLUE CI/CR. | ||||
</t> | </t> | |||
<t> | <t> | |||
The initial state is the IDLE one. | The initial state is the IDLE state. | |||
When in the IDLE state, the CLUE data channel is not established and | When in the IDLE state, the CLUE data channel is not established and | |||
no CLUE-controlled media are exchanged between the two considered | no CLUE-controlled media are exchanged between the two | |||
CLUE-capable devices (if there is an ongoing exchange of media streams, | CLUE-capable devices in question (if there is an ongoing exchange of media strea | |||
such media streams are not currently CLUE-controlled). | ms, | |||
such media streams are not currently CLUE controlled). | ||||
</t> | </t> | |||
<t> | <t> | |||
When the CLUE data channel sets up ("start channel"), | When the CLUE data channel is set up ("start channel"), | |||
the CP moves from the IDLE state to the CHANNEL SETUP state. | the CP moves from the IDLE state to the CHANNEL SETUP state. | |||
</t> | </t> | |||
<t> | <t> | |||
If the CLUE data channel is successfully set up ("channel established"), | If the CLUE data channel is successfully set up ("channel established"), | |||
the CP moves from the CHANNEL SETUP state to the OPTIONS state. | the CP moves from the CHANNEL SETUP state to the OPTIONS state. | |||
Otherwise if "channel error", it moves back to the IDLE state. | Otherwise, if a "channel error" occurs, it moves back to the IDLE state. | |||
The same transition happens if the CLUE-enabled | The same transition happens if the CLUE-enabled | |||
telepresence session ends ("session ends"), i.e., when an | telepresence session ends ("session ends"), i.e., when an | |||
SDP negotiation for removing the CLUE data channel is performed. | SDP negotiation for removing the CLUE data channel is performed. | |||
</t> | </t> | |||
<t> | <t> | |||
When in the OPTIONS state, the CP addresses the initiation phase where | When in the OPTIONS state, the CP addresses the initiation phase where | |||
both parts agree on the version and on the extensions to be used in the | both parts agree on the version and extensions to be used in the | |||
subsequent CLUE messages exchange phase. | subsequent CLUE message exchange phase. | |||
If the CP is the Channel Initiator (CI), it sends an 'options' message and | If the CP is the CI, it sends an 'options' message and | |||
waits for the 'optionsResponse' message. | waits for the 'optionsResponse' message. | |||
If the CP is the Channel Receiver (CR), it waits for the 'options' message | If the CP is the CR, it waits for the 'options' message | |||
and, as soon as it arrives, replies with the 'optionsResponse' message. | and, as soon as it arrives, replies with the 'optionsResponse' message. | |||
If the negotiation is successfully completed ("OPTIONS phase success"), | If the negotiation is successfully completed ("OPTIONS phase success"), | |||
the CP moves from the OPTIONS state to the ACTIVE state. | the CP moves from the OPTIONS state to the ACTIVE state. | |||
If the initiation phase fails ("OPTIONS phase failure"), the CP moves | If the initiation phase fails ("OPTIONS phase failure"), the CP moves | |||
from the OPTIONS state to the IDLE state. | from the OPTIONS state to the IDLE state. | |||
The initiation phase might fail because of one of the following reasons: | The initiation phase might fail for one of the following reasons: | |||
<list style="numbers"> | ||||
<t> the CI receives an 'optionsResponse' with an error response code</t> | ||||
<t> the CI does not receive any 'optionsResponse' and a timeout error | ||||
is raised</t> | ||||
<t> the CR does not receive any 'options' and a timeout error is raised </t> | ||||
</list> | ||||
</t> | </t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<li>The CI receives an 'optionsResponse' with an error response code.</l | ||||
i> | ||||
<li>The CI does not receive any 'optionsResponse', and a timeout error | ||||
is raised.</li> | ||||
<li>The CR does not receive any 'options', and a timeout error is raised | ||||
.</li> | ||||
</ol> | ||||
<t> | ||||
When in the ACTIVE state, the CP starts the envisioned sub-state | When in the ACTIVE state, the CP starts the envisioned sub-state | |||
machines (i.e., the MP state machine and the MC state machine) | machines (i.e., the MP state machine and the MC state machine) | |||
according to the roles it plays in the telepresence sessions. | according to the roles it plays in the telepresence sessions. | |||
Such roles have been previously declared in the 'options' and | Such roles have been previously declared in the 'options' and | |||
'optionsResponse' messages involved in the initiation phase | 'optionsResponse' messages involved in the initiation phase | |||
(see OPTIONS sections <xref target="subsec-options"/> and | (see Sections <xref target="subsec-options" format="counter"/> and | |||
<xref target="subsec-options-response"/> for the details). | <xref target="subsec-options-response" format="counter"/> for details). | |||
When in the ACTIVE state, the CP delegates the sending and | When in the ACTIVE state, the CP delegates the sending and | |||
the processing of the CLUE messages to the appropriate MP/MC | processing of the CLUE messages to the appropriate MP/MC | |||
sub-state machines. | sub-state machines. | |||
If the CP receives a further 'options'/'optionsResponse' message, | If the CP receives a further 'options'/'optionsResponse' message, | |||
it MUST ignore the message and stay in the ACTIVE state. | it <bcp14>MUST</bcp14> ignore the message and stay in the ACTIVE state. | |||
</t> | ||||
<!-- | ||||
<t> | ||||
The CP moves from the ACTIVE state to the IDLE one when the | ||||
sub-state machines that had been activated are in the relative | ||||
TERMINATED state (see sections <xref target="sec-mp"/> | ||||
and <xref target="sec-mc"/>). | ||||
</t> | ||||
--> | ||||
<t> | ||||
<figure | ||||
align="center" | ||||
title = "CLUE Participant state machine" | ||||
anchor="fig:protocol_participant"> | ||||
<artwork> | ||||
<![CDATA[ | ||||
+----+ | ||||
+---------------------->|IDLE|<----------------------------+ | ||||
| +-+--+ | | ||||
| | | | ||||
| | start | | ||||
| | channel | | ||||
| v | | ||||
| channel error/ +--------+ | | ||||
| session ends | CHANNEL| | | ||||
+----------------------+ SETUP | | | ||||
| +--+-----+ | | ||||
| | | | ||||
| | channel | | ||||
| | established | | ||||
| channel error/ v OPTIONS phase | | ||||
| session ends +-------+ failure | | ||||
+-----------------------+OPTIONS+--------------------------+ | ||||
| +-+-----+ | ||||
| | | ||||
| | OPTIONS phase | ||||
| | success | ||||
| v | ||||
| channel error/ +---------+ | ||||
| session ends | ACTIVE | | ||||
+----------------------+ | | ||||
| +----+ +------------------+ | ||||
| | MP | | send/receive | | ||||
| +----+ | CLUE messages | | ||||
| |<-----------------+ | ||||
| +----+ | | ||||
| | MC | | | ||||
| +----+ | | ||||
| | | ||||
+---------+ | ||||
]]> | ||||
</artwork> | ||||
</figure> | ||||
</t> | </t> | |||
<section anchor="sec-mp" numbered="true" toc="default"> | ||||
<section title="Media Provider's state machine" anchor="sec-mp"> | <name>Media Provider's State Machine</name> | |||
<t> | <t> | |||
As soon as the sub-state machine of the MP | As soon as the sub-state machine of the MP | |||
(<xref target="fig:protocol_provider"/>) is activated, it is in | (<xref target="fig_protocol_provider" format="default"/>) is activated, it is in | |||
the ADV state. | the ADV state. | |||
In the ADV state, the MP prepares the 'advertisement' message | In the ADV state, the MP prepares the 'advertisement' message | |||
reflecting its actual telepresence capabilities. | reflecting its actual telepresence capabilities. | |||
</t> | </t> | |||
<t> | <figure anchor="fig_protocol_provider"> | |||
<name>Media Provider's State Machine</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
+-----+ | ||||
+------------>| ADV |<-------------------+ | ||||
| +-+---+ | | ||||
| advertisement| NACK received | | ||||
| sent| | | ||||
| v | | ||||
changed| +--------+ | | ||||
telepresence+-------------+WAIT FOR+-----------------+ | ||||
settings| +----------+ ACK | | ||||
| |configure +-+------+ | ||||
| | +ack | | ||||
| |received |ack received | ||||
| | v | ||||
| | +--------+ | ||||
+-------------+WAIT FOR| | ||||
| | | CONF | | ||||
| | +-+------+<-----------------------------+ | ||||
| | | | | ||||
| | |configure received | | ||||
| | v | | ||||
| +--------->+---------+ error configureResponse sent| | ||||
+-------------+CONF |-----------------------------+ | ||||
| +--------->|RESPONSE + | ||||
| | +---------+ | ||||
| | | | ||||
| | |successful | ||||
| | |configureResponse | ||||
| | |sent | ||||
| | | | ||||
| | | | ||||
| |configure | | ||||
| |received v | ||||
| | +-----------+ | ||||
| +----------+ESTABLISHED| | ||||
+-------------+-----------+]]></artwork> </figure> | ||||
<t> | ||||
After the 'advertisement' has been sent ("advertisement sent"), | After the 'advertisement' has been sent ("advertisement sent"), | |||
the MP moves from the ADV state to the WAIT FOR ACK state. If an | the MP moves from the ADV state to the WAIT FOR ACK state. If an | |||
'ack' message with a successful response code arrives | 'ack' message with a successful response code arrives | |||
("ack received"), the MP moves to the WAIT FOR CONF state. | ("ack received"), the MP moves to the WAIT FOR CONF state. | |||
If a NACK arrives (i.e., an 'ack' message with an error response | If a NACK arrives (i.e., an 'ack' message with an error response | |||
code), the MP moves back to the ADV state for preparing a new | code), the MP moves back to the ADV state for preparation of a new | |||
'advertisement'. | 'advertisement'. | |||
When in the WAIT FOR ACK state, if a 'configure' message with the | When in the WAIT FOR ACK state, if a 'configure' message with the | |||
<ack> element set to TRUE arrives ("configure+ack received"), | <ack> element set to "200" arrives ("configure+ack received"), | |||
the MP goes directly to the CONF RESPONSE state. | the MP goes directly to the CONF RESPONSE state. | |||
'configure+ack' messages referring to out-of-date (i.e., having | 'configure+ack' messages referring to out-of-date (i.e., having | |||
a sequence number less than the highest generated so far) | a sequence number less than the highest generated so far) | |||
advertisements MUST be ignored, i.e., they do not trigger any | advertisements <bcp14>MUST</bcp14> be ignored, i.e., they do not trigger any | |||
state transition. If the telepresence settings of the MP change | state transition. If the telepresence settings of the MP change | |||
while in the WAIT FOR ACK state ("changed telepresence settings"), | while in the WAIT FOR ACK state ("changed telepresence settings"), | |||
the MP switches from the WAIT FOR ACK state to the ADV state to | the MP switches from the WAIT FOR ACK state to the ADV state to | |||
create a new 'advertisement'. | create a new 'advertisement'. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
When in the WAIT FOR CONF state, the MP listens to the channel for a | When in the WAIT FOR CONF state, the MP listens to the channel for a | |||
'configure' request coming from the MC. When a 'configure' arrives | 'configure' request coming from the MC. When a 'configure' arrives | |||
("configure received"), the MP switches to the CONF RESPONSE state. | ("configure received"), the MP switches to the CONF RESPONSE state. | |||
If the telepresence settings change in the | If the telepresence settings change in the | |||
meanwhile ("changed telepresence settings"), the MP moves from the | meantime ("changed telepresence settings"), the MP moves from the | |||
WAIT FOR CONF back to the ADV state to create the new 'advertisement' | WAIT FOR CONF state back to the ADV state to create the new 'advertisement' | |||
to be sent to the MC.</t><t> | to be sent to the MC.</t> | |||
<t> | ||||
The MP in the CONF RESPONSE state processes the received 'configure' | The MP in the CONF RESPONSE state processes the received 'configure' | |||
in order to produce a 'configureResponse' message. If the MP | in order to produce a 'configureResponse' message. If the MP | |||
successfully processes the MC's configuration, then it sends a 200 | successfully processes the MC's configuration, then it sends a 200 | |||
'configureResponse' ("success configureResponse sent") and moves to | 'configureResponse' ("successful configureResponse sent") and moves to | |||
the ESTABLISHED state. If there are errors in the 'configure' | the ESTABLISHED state. If there are errors in the 'configure' | |||
processing, then the MP issues a 'configureResponse' carrying an | processing, then the MP issues a 'configureResponse' carrying an | |||
error response code and it goes back to the | error response code and goes back to the | |||
WAIT FOR CONF state to wait for a new configuration request. | WAIT FOR CONF state to wait for a new configuration request. | |||
Finally, if there are changes in the MP's telepresence | Finally, if there are changes in the MP's telepresence | |||
settings ("changed telepresence settings"), the MP switches to the | settings ("changed telepresence settings"), the MP switches to the | |||
ADV state. | ADV state. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
The MP in the ESTABLISHED state has successfully negotiated the media | The MP in the ESTABLISHED state has successfully negotiated the media | |||
streams with the MC by means of the CLUE messages. If there are | streams with the MC by means of the CLUE messages. If there are | |||
changes in the MP's telepresence settings ("changed telepresence | changes in the MP's telepresence settings ("changed telepresence | |||
settings"), the MP moves back to the ADV state. In the ESTABLISHED | settings"), the MP moves back to the ADV state. In the ESTABLISHED | |||
state, the CLUE-controlled media streams of the session are those | state, the CLUE-controlled media streams of the session are those | |||
described in the last successfully processed 'configure' message. | described in the last successfully processed 'configure' message. | |||
</t> | </t> | |||
<t>Messages not shown for a state do not cause the state to change.</t> | <t>Messages not shown for a state do not cause the state to change.</t> | |||
<t> | </section> | |||
<figure | <section anchor="sec-mc" numbered="true" toc="default"> | |||
align="center" | <name>Media Consumer's State Machine</name> | |||
title = "Media Provider's state machine" | <t> | |||
anchor="fig:protocol_provider"> | ||||
<artwork> | ||||
<![CDATA[ | ||||
+-----+ | ||||
+------------>| ADV |<-------------------+ | ||||
| +-+---+ | | ||||
| advertisement| NACK received | | ||||
| sent| | | ||||
| v | | ||||
changed| +--------+ | | ||||
telepresence+-------------+WAIT FOR+-----------------+ | ||||
settings| +----------+ ACK | | ||||
| |configure +-+------+ | ||||
| | + ack | | ||||
| |received |ack received | ||||
| | v | ||||
| | +--------+ | ||||
+-------------+WAIT FOR| | ||||
| | | CONF | | ||||
| | +-+------+<-----------------------------+ | ||||
| | | | | ||||
| | |configure received | | ||||
| | v | | ||||
| +--------->+---------+ error configureResponse sent| | ||||
+-------------+CONF |-----------------------------+ | ||||
| +--------->|RESPONSE + | ||||
| | +---------+ | ||||
| | | | ||||
| | |success | ||||
| | |configureResponse | ||||
| | |sent | ||||
| | | | ||||
| | | | ||||
| |configure | | ||||
| |received v | ||||
| | +-----------+ | ||||
| +----------+ESTABLISHED| | ||||
+-------------+-----------+ | ||||
]]> | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
</section> | ||||
<section title="Media Consumer's state machine" anchor="sec-mc"> | ||||
<t> | ||||
As soon as the sub-state machine of the MC | As soon as the sub-state machine of the MC | |||
(<xref target="fig:protocol_consumer"/>) is activated, it is in the | (<xref target="fig_protocol_consumer" format="default"/>) is activated, it is in the | |||
WAIT FOR ADV state. | WAIT FOR ADV state. | |||
An MC in the WAIT FOR ADV state is waiting for an 'advertisement' coming from th e | An MC in the WAIT FOR ADV state is waiting for an 'advertisement' coming from th e | |||
MP. If the 'advertisement' arrives ("ADV received"), the MC reaches the ADV | MP. If the 'advertisement' arrives ("ADV received"), the MC moves to the ADV | |||
PROCESSING state. | PROCESSING state. | |||
Otherwise, the MC stays in the WAIT FOR ADV state. | Otherwise, the MC stays in the WAIT FOR ADV state. | |||
</t> | </t> | |||
<t> | <figure anchor="fig_protocol_consumer"> | |||
In the ADV PROCESSING state, the 'advertisement' is parsed by the MC. | <name>Media Consumer's State Machine</name> | |||
If the 'advertisement' is successfully processed, there are two | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
possibilities. In the former case, the MC issues a successful 'ack' | ||||
message to the MP ("ACK sent") and moves to the CONF state. This | ||||
typically happens when the MC needs some more time to produce the | ||||
'configure' message associated with the received 'advertisement'. In | ||||
the latter case, the MC is able to immediately prepare and send back | ||||
to the MP a 'configure' message. Such a message will have the <ack> | ||||
field set to "200" ("configure+ack sent") and will allow the MC to | ||||
move directly to the WAIT FOR CONF RESPONSE state. | ||||
</t> | ||||
<t> | ||||
If the ADV processing is unsuccessful (bad syntax, missing XML | ||||
elements, etc.), the MC sends a NACK message (i.e., an 'ack' with | ||||
an error response code) to the MP and optionally further describes | ||||
the problem via a proper reason phrase. In this way ("NACK sent"), | ||||
the MC switches back to the WAIT FOR ADV | ||||
state, waiting for a new 'advertisement'. | ||||
</t> | ||||
<t> | ||||
When in the CONF state, the MC prepares the 'configure' request to be | ||||
issued to the MP on the basis of the previously ack-ed | ||||
'advertisement'. When the 'configure' has been sent ("configure | ||||
sent"), the MC moves to the WAIT FOR CONF RESPONSE state. If a new | ||||
'advertisement' arrives in the meanwhile ("advertisement received"), | ||||
the MC goes back to the ADV PROCESSING state. | ||||
</t> | ||||
<t> | ||||
In the WAIT FOR CONF RESPONSE state, the MC waits for the MP's | ||||
response to the issued 'configure' or 'configure+ack'. If a 200 | ||||
'configureResponse' message is received ("successful | ||||
configureResponse received"), it means that the MP and the MC have | ||||
successfully agreed on the media streams to be shared. Then, the MC | ||||
can move to the ESTABLISHED state. On the other hand, if an error | ||||
response is received ("error configureResponse received"), | ||||
the MC moves back to the CONF state to prepare a new | ||||
'configure' request. If a new 'advertisement' is received in the WAIT | ||||
FOR CONF RESPONSE state, the MC switches to the ADV PROCESSING state. | ||||
</t> | ||||
<t> | ||||
When the MC is in the ESTABLISHED state, the telepresence session | ||||
configuration has been set up at the CLUE application level according | ||||
to the MC's preferences. Both the MP and the MC have agreed on (and | ||||
are aware of) the CLUE-controlled media streams to be exchanged | ||||
within the call. While in the ESTABLISHED state, it might happen | ||||
that the MC decides to change something in the call settings. The MC | ||||
then issues a new 'configure' ("configure sent") and goes to wait for | ||||
the new 'configureResponse' in the WAIT FOR CONF RESPONSE state. On | ||||
the other hand, in the ESTABLISHED state, if a new 'advertisement' | ||||
arrives from the MP ("advertisement received"), it means that | ||||
something has changed on the MP's side. The MC then moves to the ADV | ||||
PROCESSING state. | ||||
</t> | ||||
<t>Messages not shown for a state do not cause the state to change.</t> | ||||
<t> | ||||
<figure | ||||
align="center" | ||||
title = "Media Consumer's state machine" | ||||
anchor="fig:protocol_consumer"> | ||||
<artwork> | ||||
<![CDATA[ | ||||
+----------+ | +----------+ | |||
| WAIT FOR | | | WAIT FOR | | |||
| ADV | | | ADV | | |||
+----+-----+<--------+ | +----+-----+<--------+ | |||
| | | | | | |||
advertisement| NACK sent| | advertisement| NACK sent| | |||
received| | | received| | | |||
v | | v | | |||
+-----------+--------+ | +-----------+--------+ | |||
| ADV + | | ADV + | |||
skipping to change at line 1352 ¶ | skipping to change at line 1146 ¶ | |||
| | CONF RESPONSE+ | | | | CONF RESPONSE+ | | |||
| +-------+-------+ | | | +-------+-------+ | | |||
| | | | | | | | |||
| | | | | | | | |||
| |successful | | | |successful | | |||
| |configureResponse | | | |configureResponse | | |||
| |received | | | |received | | |||
|configure v | | |configure v | | |||
|sent +-----------+ advertisement received| | |sent +-----------+ advertisement received| | |||
+------------+ESTABLISHED+-----------------------+ | +------------+ESTABLISHED+-----------------------+ | |||
+-----------+ | +-----------+]]></artwork> </figure> | |||
]]> | <t> | |||
</artwork> | In the ADV PROCESSING state, the 'advertisement' is parsed by the MC. | |||
</figure> | If the 'advertisement' is successfully processed, two scenarios are | |||
possible. In the first case, the MC issues a successful 'ack' | ||||
</t> | message to the MP ("ack sent") and moves to the CONF state. This | |||
</section> | typically happens when the MC needs some more time to produce the | |||
'configure' message associated with the received 'advertisement'. In | ||||
</section> | the latter case, the MC is able to immediately prepare and send back | |||
to the MP a 'configure' message. Such a message will have the <ack> | ||||
<section title="Versioning" | element set to "200" ("configure+ack sent") and will allow the MC to | |||
anchor="sec-versioning"> | move directly to the WAIT FOR CONF RESPONSE state. | |||
<t> | </t> | |||
<t> | ||||
If the processing of the 'advertisement' is unsuccessful (bad syntax, missing XM | ||||
L | ||||
elements, etc.), the MC sends a NACK message (i.e., an 'ack' with | ||||
an error response code) to the MP and, optionally, further describes | ||||
the problem via a proper reason phrase. In this scenario ("NACK sent"), | ||||
the MC switches back to the WAIT FOR ADV | ||||
state and waits for a new 'advertisement'. | ||||
</t> | ||||
<t> | ||||
When in the CONF state, the MC prepares the 'configure' request to be | ||||
issued to the MP on the basis of the previously acked | ||||
'advertisement'. When the 'configure' has been sent ("configure | ||||
sent"), the MC moves to the WAIT FOR CONF RESPONSE state. If a new | ||||
'advertisement' arrives in the meantime ("advertisement received"), | ||||
the MC goes back to the ADV PROCESSING state. | ||||
</t> | ||||
<t> | ||||
In the WAIT FOR CONF RESPONSE state, the MC waits for the MP's | ||||
response to the issued 'configure' or 'configure+ack'. If a 200 | ||||
'configureResponse' message is received ("successful | ||||
configureResponse received"), it means that the MP and the MC have | ||||
successfully agreed on the media streams to be shared. Then, the MC | ||||
can move to the ESTABLISHED state. On the other hand, if an error | ||||
response is received ("error configureResponse received"), | ||||
the MC moves back to the CONF state to prepare a new | ||||
'configure' request. If a new 'advertisement' is received in the WAIT | ||||
FOR CONF RESPONSE state, the MC switches to the ADV PROCESSING state. | ||||
</t> | ||||
<t> | ||||
When the MC is in the ESTABLISHED state, the telepresence session | ||||
configuration has been set up at the CLUE application level according | ||||
to the MC's preferences. Both the MP and the MC have agreed on (and | ||||
are aware of) the CLUE-controlled media streams to be exchanged | ||||
within the call. While in the ESTABLISHED state, the MC might | ||||
decide to change something in the call settings; in this case, the MC | ||||
then issues a new 'configure' ("configure sent") and moves to the | ||||
WAIT FOR CONF RESPONSE state to wait for the new 'configureResponse'. | ||||
On the other hand, if the MC is in the ESTABLISHED state and | ||||
a new 'advertisement' ("advertisement received") arrives from the MP, | ||||
it means that something has changed on the MP's side; the MC then moves | ||||
to the ADV PROCESSING state. | ||||
</t> | ||||
<t>Messages not shown for a state do not cause the state to change.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="sec-versioning" numbered="true" toc="default"> | ||||
<name>Versioning</name> | ||||
<t> | ||||
CLUE protocol messages are XML messages compliant to the CLUE protocol XML schem a | CLUE protocol messages are XML messages compliant to the CLUE protocol XML schem a | |||
<xref target="I-D.ietf-clue-data-model-schema"/>. | <xref target="RFC8846" format="default"/>. | |||
The version of the protocol corresponds to the version of the schema. | The version of the protocol corresponds to the version of the schema. | |||
Both client and server have to test the compliance of the received messages with | Both the client and the server have to test the compliance of the received messa ges with | |||
the XML schema of the CLUE protocol. | the XML schema of the CLUE protocol. | |||
If the compliance is not verified, the message cannot be processed further. | If the compliance is not verified, the message cannot be processed further. | |||
</t> | </t> | |||
<t> | <t> | |||
Client and server cannot communicate if they do not share exactly | The client and server cannot communicate if they do not share exactly | |||
the same XML schema. | the same XML schema. | |||
Such a schema is associated with the CLUE URN | Such a schema is associated with the CLUE URN | |||
"urn:ietf:params:xml:ns:clue-protocol". | "urn:ietf:params:xml:ns:clue-protocol". | |||
If all CLUE-enabled devices use that schema | If all CLUE-enabled devices use that schema, | |||
there will be no interoperability problems due to schema issues. | there will be no interoperability problems due to schema issues. | |||
</t> | </t> | |||
<t>This document defines XML schema version 1.0. The version usage is | <t>This document defines version 1.0 of the CLUE protocol schema, using XM | |||
similar in philosophy to XMPP (<xref target="RFC6120"/>). | L schema version 1.0 <xref target="W3C.REC-xml-20081126"/>. The version usage is | |||
similar in philosophy to the Extensible Messaging and Presence Protocol (XMPP) < | ||||
xref target="RFC6120" format="default"/>. | ||||
A version number has major and minor components, each a non-negative integer. | A version number has major and minor components, each a non-negative integer. | |||
Major version changes denote non-interoperable changes. | Changes to the major version denote non-interoperable changes. | |||
Minor version changes denote schema changes that are backward compatible | Changes to the minor version denote schema changes that are backward compatible | |||
by ignoring unknown XML elements, or other backward compatible changes. | by ignoring unknown XML elements or other backward-compatible changes. | |||
</t><t> | </t> | |||
The minor versions of the XML schema MUST be backward compatible, | <t> | |||
not only in terms of schema but also semantically and procedurally as well. | The minor versions of the XML schema <bcp14>MUST</bcp14> be backward compatible, | |||
not only in terms of the schema but semantically and procedurally as well. | ||||
This means that they should define further features and functionality besides | This means that they should define further features and functionality besides | |||
those defined in the previous versions, in an incremental way, without impacting | those defined in the previous versions, in an incremental way, without impacting | |||
the basic rules defined in the previous version of the schema. | the basic rules defined in the previous version of the schema. | |||
In this way, if a MP is able to speak, e.g., version 1.5 of the protocol while t he | In this way, if an MP is able to "speak", for example, version 1.5 of the protoc ol while the | |||
MC only understands version 1.4, | MC only understands version 1.4, | |||
the MP should have no problem in reverting the dialogue back to version 1.4 | the MP should have no problem in reverting the dialogue back to version 1.4 | |||
without exploiting 1.5 features and functionality. | without exploiting 1.5 features and functionality. | |||
Version 1.4 is | Version 1.4 is | |||
the one to be spoken and has to appear in the "v" | the one to be spoken and has to appear in the "v" | |||
attribute of the subsequent CLUE messages. | attribute of the subsequent CLUE messages. | |||
In other words, in this example, the MP | In other words, in this example, the MP | |||
MUST use version 1.4. | <bcp14>MUST</bcp14> use version 1.4. | |||
This said, and coherently with the general IETF | That said, and in keeping with the general IETF | |||
"protocol robustness principle" stating that | protocol "robustness principle" stating that | |||
"an implementation must be conservative in its sending behavior, | an implementation must be conservative in its sending behavior | |||
and liberal in its receiving behavior" <xref target="RFC1122"/>, | and liberal in its receiving behavior <xref target="RFC1122" format="default"/>, | |||
CLUE Participants | CPs | |||
MUST ignore unknown elements or attributes that are not envisioned | <bcp14>MUST</bcp14> ignore unknown elements or attributes that are not envisione | |||
d | ||||
in the negotiated protocol version and related extensions. | in the negotiated protocol version and related extensions. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="sec-ext" numbered="true" toc="default"> | |||
<name>Extensions</name> | ||||
<section title="Extensions" | <t> | |||
anchor="sec-ext"> | ||||
<t> | ||||
Although the standard version of the CLUE protocol XML schema is designed | Although the standard version of the CLUE protocol XML schema is designed | |||
to thoroughly cope with the requirements emerging from the application domain, | to thoroughly cope with the requirements emerging from the application domain, | |||
new needs might arise and extensions can be designed. | new needs might arise, and new extensions can then be designed. | |||
Extensions specify information and behaviors | Extensions specify information and behaviors | |||
that are not described in a certain version of the protocol and specified | that are not described in a certain version of the protocol and specified | |||
in the related RFC document. Such information and behaviors can be optionally | in the related RFC document. Such information and behaviors can be optionally | |||
used in a CLUE dialogue and MUST be negotiated in the CLUE initiation phase. | used in a CLUE dialogue and <bcp14>MUST</bcp14> be negotiated in the CLUE initia tion phase. | |||
They can relate to: | They can relate to: | |||
</t> | </t> | |||
<ol spacing="normal" type="1"> | ||||
<t> | <li> | |||
<list style="numbers"> | ||||
<t> | ||||
new information, to be carried in the existing messages. | new information, to be carried in the existing messages. | |||
For example, more fields may be added within an existing message; | For example, more fields may be added within an existing message. | |||
</t> | </li> | |||
<t> | <li> | |||
new messages. | new messages. | |||
This is the case if there is no proper message for a certain task, | This is the case if there is no proper message for a certain task, | |||
so a brand new CLUE message needs to be defined. | so a brand new CLUE message needs to be defined. | |||
</t> | </li> | |||
</list> | </ol> | |||
</t> | <t> | |||
As to the first category of extensions, it is possible to distinguish between | ||||
<t> | ||||
As to the first type of extensions, it is possible to distinguish between | ||||
protocol-specific and data model information. | protocol-specific and data model information. | |||
Indeed, CLUE messages are envelopes carrying both: | Indeed, CLUE messages are envelopes carrying both of the following: | |||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> (i) XML elements defined within the CLUE protocol XML schema itself | ||||
(protocol-specific information)</t> | ||||
<t> (ii) other XML elements compliant to the CLUE data model schema | ||||
(data model information)</t> | ||||
</list> | ||||
</t> | </t> | |||
<ol spacing="normal"> | ||||
<t> | <li>XML elements defined within the CLUE protocol XML schema itself | |||
(protocol-specific information).</li> | ||||
<li>other XML elements compliant to the CLUE data model schema | ||||
(data model information).</li> | ||||
</ol> | ||||
<t> | ||||
When new protocol-specific information is needed somewhere in the protocol | When new protocol-specific information is needed somewhere in the protocol | |||
messages, it can be added in place of the <any> elements and | messages, it can be added in place of the <any> elements and | |||
<anyAttribute> elements envisioned by the protocol schema. | <anyAttribute> elements envisioned by the protocol schema. | |||
The policy currently defined in the protocol schema for handling | The policy currently defined in the protocol schema for handling | |||
<any> and <anyAttribute> elements is: | <any> and <anyAttribute> elements is as follows: | |||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> elementFormDefault="qualified"</t> | ||||
<t> attributeFormDefault="unqualified"</t> | ||||
</list> | ||||
</t> | </t> | |||
<ul spacing="normal"> | ||||
<t> | <li> elementFormDefault="qualified"</li> | |||
<li> attributeFormDefault="unqualified"</li> | ||||
</ul> | ||||
<t> | ||||
The new information must be qualified by namespaces | The new information must be qualified by namespaces | |||
other than "urn:ietf:params:xml:ns:clue-protocol" (the protocol URN) | other than "urn:ietf:params:xml:ns:clue-protocol" (the protocol URN) | |||
and "urn:ietf:params:xml:ns:clue-info" (the data model URN). | and "urn:ietf:params:xml:ns:clue-info" (the data model URN). | |||
Elements or attributes from unknown namespaces MUST be ignored. | Elements or attributes from unknown namespaces <bcp14>MUST</bcp14> be ignored. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
The other matter concerns data model information. | The other matter concerns data model information. | |||
Data model information is defined by the XML schema associated | Data model information is defined by the XML schema associated | |||
with the URN "urn:ietf:params:xml:ns:clue-info". | with the URN "urn:ietf:params:xml:ns:clue-info". | |||
Also for the XML elements defined in such a schema there are extensibility issue s. | Note that there are also extensibility issues for the XML elements defined in su ch a schema. | |||
Those issues are overcome by using <any> and <anyAttribute> | Those issues are overcome by using <any> and <anyAttribute> | |||
placeholders. | placeholders. | |||
New information within data model elements can be added in place | New information within data model elements can be added in place | |||
of <any> and <anyAttribute> schema elements, as long as they are pro perly namespace qualified. | of <any> and <anyAttribute> schema elements, as long as they are pro perly namespace qualified. | |||
</t> | </t> | |||
<t>On the other hand (second type of extensions), "extra" CLUE protocol messages | <t>On the other hand (the second category of extensions), "extra" CLUE pro | |||
, | tocol messages, | |||
i.e., messages not envisioned in the latest standard version of the schema, can | i.e., messages not envisioned in the latest standard version of the schema, migh | |||
be needed. | t be needed. | |||
In that case, the messages and the associated behavior should be defined in | In that case, the messages and the associated behavior should be defined in | |||
external documents that both communication parties must be aware of. | external documents that both communication parties must be aware of. | |||
</t> | </t> | |||
<t> | <t> | |||
As reported in <xref target="fig:extension"/>, the | As shown in <xref target="fig_extension" format="default"/>, the | |||
fields of the <extension> element (either new information | fields of the <extension> element (either new information | |||
or new messages) take the following values: | or new messages) take the following values: | |||
</t> | </t> | |||
<ul spacing="normal"> | ||||
<t> | <li>a name.</li> | |||
<list style="symbols"> | <li>an external XML schema defining the XML information and/or the XML | |||
<t>a name;</t> | messages representing the extension.</li> | |||
<t>an external XML Schema defining the XML information and/or the XML | <li>the major standard version of the protocol that the extension | |||
messages representing the extension;</t> | refers to.</li> | |||
<t>the major standard version of the protocol that the extension | </ul> | |||
refers to.</t> | <figure anchor="fig_extension"> | |||
</list> | <name>The <extension> Element</name> | |||
</t> | <sourcecode name="" type="xml"><![CDATA[ | |||
<t> | ||||
<figure | ||||
align="center" | ||||
title = "The <extension> element" | ||||
anchor="fig:extension"> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<xs:complexType name="extensionType"> | <xs:complexType name="extensionType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="name" type="xs:string" /> | <xs:element name="name" type="xs:string" /> | |||
<xs:element name="schemaRef" type="xs:anyURI"/> | <xs:element name="schemaRef" type="xs:anyURI"/> | |||
<xs:element name="version" type="versionType"/> | <xs:element name="version" type="versionType"/> | |||
<xs:any namespace="##other" processContents="lax" minOccurs="0"/> | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | ||||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:complexType> | </xs:complexType>]]></sourcecode> </figure> | |||
]]> | <t> | |||
</artwork> | The above-described <extension> element is carried within | |||
</figure> | ||||
</t> | ||||
<t> | ||||
The above described <extension> element is carried within | ||||
the 'options' and 'optionsResponse' messages to | the 'options' and 'optionsResponse' messages to | |||
represent the extensions supported both by the CI and the CR. | represent the extensions supported by both the CI and the CR. | |||
</t> | </t> | |||
<t> | ||||
<t> | Extensions <bcp14>MUST</bcp14> be defined in a separate XML schema file and | |||
Extensions MUST be defined in a separate XML schema file and | <bcp14>MUST</bcp14> be provided with a companion document describing their seman | |||
MUST be provided with a companion document describing their semantics | tics | |||
and use. | and use. | |||
</t> | </t> | |||
<section anchor="sec-extension-example" numbered="true" toc="default"> | ||||
<section title="Extension example" anchor="sec-extension-example"> | <name>Extension Example</name> | |||
<t> | <t> | |||
An example of extension might be a "new" capture attribute (i.e., a | An example of an extension might be a "new" capture attribute (i.e., a | |||
capture attribute that is not envisioned in the current standard | capture attribute that is not envisioned in the current standard | |||
defining the CLUE data model in | defining the CLUE data model in | |||
<xref target="I-D.ietf-clue-data-model-schema"/>) needed to further | <xref target="RFC8846" format="default"/>) needed to further | |||
describe a video capture. | describe a video capture. | |||
</t> | </t> | |||
<t> | <t> | |||
The CLUE data model document (<xref target="I-D.ietf-clue-data-model-schema"/>) | The CLUE data model document <xref target="RFC8846" format="default"/> | |||
envisions the possibility of adding this kind of | envisions the possibility of adding this kind of | |||
"extra" information in the description of a video capture. | "extra" information in the description of a video capture. | |||
For the sake of convenience, the XML definition of a video capture taken | For convenience, the XML definition of a video capture taken | |||
from <xref target="I-D.ietf-clue-data-model-schema"/> is | from <xref target="RFC8846" format="default"/> is | |||
reported in <xref target="fig:video_capture"/> below. | shown in <xref target="fig_video_capture" format="default"/> below. | |||
</t> | </t> | |||
<figure | <figure anchor="fig_video_capture"> | |||
align="center" | <name>XML Definition of a CLUE Video Capture</name> | |||
title = "XML definition of a CLUE video capture" | <sourcecode name="" type="xml"><![CDATA[ | |||
anchor="fig:video_capture"> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<!-- VIDEO CAPTURE TYPE --> | <!-- VIDEO CAPTURE TYPE --> | |||
<xs:complexType name="videoCaptureType"> | <xs:complexType name="videoCaptureType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="tns:mediaCaptureType"> | <xs:extension base="tns:mediaCaptureType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:any namespace="##other" processContents="lax" minOccurs="0" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0" | ||||
maxOccurs="unbounded"/> | maxOccurs="unbounded"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType>]]></sourcecode> </figure> | |||
]]> | <t> | |||
</artwork> | ||||
</figure> | ||||
<t> | ||||
According to such a definition, a video capture might have, | According to such a definition, a video capture might have, | |||
after the set of the generic media capture attributes, | after the set of generic media capture attributes, | |||
a set of new attributes defined elsewhere, i.e., | a set of new attributes defined elsewhere, i.e., | |||
in an XML schema defining an extension. | in an XML schema defining an extension. | |||
The XML schema defining the extension might look like the following | The XML schema defining the extension might look like the following | |||
(<xref target="fig:xml_extension"/>): | (<xref target="fig_xml_extension" format="default"/>): | |||
</t> | </t> | |||
<figure | ||||
align="center" | ||||
title = "XML schema defining an extension" | ||||
anchor="fig:xml_extension"> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<figure anchor="fig_xml_extension"> | ||||
<name>XML Schema Defining an Extension</name> | ||||
<sourcecode name="" type="xml"><![CDATA[ | ||||
<?xml version="1.0" encoding="UTF-8" ?> | <?xml version="1.0" encoding="UTF-8" ?> | |||
<xs:schema version="1.0" | <xs:schema version="1.0" | |||
targetNamespace="http://example.extensions.com/myVideoExtensions" | targetNamespace="https://example.extensions.com/myVideoExtensions" | |||
xmlns:xs="http://www.w3.org/2001/XMLSchema" | xmlns:xs="https://www.w3.org/2001/XMLSchema" | |||
xmlns="http://example.extensions.com/myVideoExtensions" | xmlns="https://example.extensions.com/myVideoExtensions" | |||
elementFormDefault="qualified" | elementFormDefault="qualified" | |||
attributeFormDefault="unqualified"> | attributeFormDefault="unqualified"> | |||
<!-- | <!-- | |||
This is the new element to be put in place of the <any> | This is the new element to be put in place of the <any> | |||
element in the video capture definition | element in the video capture definition | |||
of the CLUE data model schema | of the CLUE data model schema | |||
--> | --> | |||
<xs:element name="myVideoExtension"> | ||||
<xs:complexType> | ||||
<xs:sequence> | ||||
<xs:element ref="newVideoAttribute1"/> | ||||
<xs:element ref="newVideoAttribute2"/> | ||||
</xs:sequence> | ||||
</xs:complexType> | ||||
</xs:element> | ||||
<xs:element name="newVideoAttribute1" type="xs:string"/> | ||||
<xs:element name = "newVideoAttribute2" type = "xs:boolean"/> | <xs:element name="myVideoExtension"> | |||
</xs:schema> | <xs:complexType> | |||
<xs:sequence> | ||||
<xs:element ref="newVideoAttribute1"/> | ||||
<xs:element ref="newVideoAttribute2"/> | ||||
</xs:sequence> | ||||
</xs:complexType> | ||||
</xs:element> | ||||
]]> | <xs:element name="newVideoAttribute1" type="xs:string"/> | |||
</artwork> | ||||
</figure> | ||||
<t> | <xs:element name = "newVideoAttribute2" type = "xs:boolean"/> | |||
</xs:schema>]]></sourcecode> </figure> | ||||
<t> | ||||
By using the extension above, a video capture can be further described | By using the extension above, a video capture can be further described | |||
in the advertisement using the <myVideoExtension> | in the advertisement using the <myVideoExtension> | |||
element containing two extra information (<newVideoAttribute1> | element containing two extra pieces of information (<newVideoAttribute1> | |||
and <newVideoAttribute2>) | and <newVideoAttribute2>), | |||
besides using the attributes envisioned for a generic media capture. | besides using the attributes envisioned for a generic media capture. | |||
As stated in this document, | As stated in this document, | |||
both participants must be aware of the extension schema and | both participants must be aware of the extension schema and | |||
related semantics to use such an extension and must negotiate | related semantics to use such an extension and must negotiate | |||
it via the 'options' and 'optionsResponse' mechanism. | it via the 'options' and 'optionsResponse' messages. | |||
</t> | ||||
</section> | ||||
</section> | ||||
<section title="XML Schema" anchor="sec-schema"> | ||||
<t> | ||||
NOTE TO THE RFC-Editor: Please replace "data-model-schema-19.xsd" with | ||||
the right schema location for the CLUE data model schema document | ||||
(which is still to be defined at the time of this writing) | ||||
in this section prior to publication as an RFC. | ||||
</t> | </t> | |||
</section> | ||||
<t> | </section> | |||
In this section, the XML schema defining the CLUE messages is provided | <section anchor="sec-schema" numbered="true" toc="default"> | |||
(<xref target="fig:clue_schema"/>). | <name>XML Schema</name> | |||
<t> | ||||
The XML schema defining the CLUE messages is provided below | ||||
(<xref target="fig_clue_schema" format="default"/>). | ||||
</t> | </t> | |||
<t> | ||||
<figure | ||||
align="center" | ||||
title = "Schema defining CLUE messages" | ||||
anchor="fig:clue_schema"> | ||||
<artwork> | <figure anchor="fig_clue_schema"> | |||
<![CDATA[ | <name>Schema Defining CLUE Messages</name> | |||
<sourcecode name="" type="xml"><![CDATA[ | ||||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" | <xs:schema xmlns:xs="https://www.w3.org/2001/XMLSchema" | |||
xmlns="urn:ietf:params:xml:ns:clue-protocol" | xmlns="urn:ietf:params:xml:ns:clue-protocol" | |||
xmlns:dm="urn:ietf:params:xml:ns:clue-info" | xmlns:dm="urn:ietf:params:xml:ns:clue-info" | |||
xmlns:tns="urn:ietf:params:xml:ns:clue-protocol" | version="1.0" | |||
version="1.0" | targetNamespace="urn:ietf:params:xml:ns:clue-protocol" | |||
targetNamespace="urn:ietf:params:xml:ns:clue-protocol" | elementFormDefault="qualified" | |||
elementFormDefault="qualified" | attributeFormDefault="unqualified"> | |||
attributeFormDefault="unqualified"> | ||||
<!-- Import data model schema --> | <!-- Import data model schema --> | |||
<xs:import namespace="urn:ietf:params:xml:ns:clue-info" | <xs:import namespace="urn:ietf:params:xml:ns:clue-info"/> | |||
schemaLocation="clue-data-model-schema-19.xsd" /> | ||||
<!-- ELEMENT DEFINITIONS --> | <!-- ELEMENT DEFINITIONS --> | |||
<xs:element name="options" type="optionsMessageType" /> | <xs:element name="options" type="optionsMessageType" /> | |||
<xs:element name="optionsResponse" type="optionsResponseMessageType"/> | <xs:element name="optionsResponse" | |||
type="optionsResponseMessageType"/> | ||||
<xs:element name="advertisement" type="advertisementMessageType"/> | <xs:element name="advertisement" type="advertisementMessageType"/> | |||
<xs:element name="ack" type="advAcknowledgementMessageType"/> | <xs:element name="ack" type="advAcknowledgementMessageType"/> | |||
<xs:element name="configure" type="configureMessageType"/> | <xs:element name="configure" type="configureMessageType"/> | |||
<xs:element name="configureResponse" | <xs:element name="configureResponse" | |||
type="configureResponseMessageType"/> | type="configureResponseMessageType"/> | |||
<!-- CLUE MESSAGE TYPE --> | <!-- CLUE MESSAGE TYPE --> | |||
<xs:complexType name="clueMessageType" abstract="true"> | <xs:complexType name="clueMessageType" abstract="true"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="clueId" type="xs:string" minOccurs="0" /> | <xs:element name="clueId" type="xs:string" minOccurs="0" /> | |||
<xs:element name="sequenceNr" type="xs:positiveInteger" /> | <xs:element name="sequenceNr" type="xs:positiveInteger" /> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:attribute name="protocol" type="xs:string" fixed="CLUE" | <xs:attribute name="protocol" type="xs:string" fixed="CLUE" | |||
use="required" /> | use="required" /> | |||
<xs:attribute name="v" type="versionType" use="required" /> | <xs:attribute name="v" type="versionType" use="required" /> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- CLUE RESPONSE TYPE --> | <!-- CLUE RESPONSE TYPE --> | |||
<xs:complexType name="clueResponseType"> | <xs:complexType name="clueResponseType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueMessageType"> | <xs:extension base="clueMessageType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="responseCode" type="responseCodeType" /> | <xs:element name="responseCode" type="responseCodeType" /> | |||
<xs:element name="reasonString" type="xs:string" | <xs:element name="reasonString" type="xs:string" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- VERSION TYPE --> | <!-- VERSION TYPE --> | |||
<xs:simpleType name="versionType"> | <xs:simpleType name="versionType"> | |||
<xs:restriction base="xs:string"> | <xs:restriction base="xs:string"> | |||
<xs:pattern value="[1-9][0-9]*\.[0-9]+" /> | <xs:pattern value="[1-9][0-9]*\.[0-9]+" /> | |||
</xs:restriction> | </xs:restriction> | |||
</xs:simpleType> | </xs:simpleType> | |||
skipping to change at line 1728 ¶ | skipping to change at line 1516 ¶ | |||
<xs:pattern value="2[0-9][0-9]" /> | <xs:pattern value="2[0-9][0-9]" /> | |||
</xs:restriction> | </xs:restriction> | |||
</xs:simpleType> | </xs:simpleType> | |||
<!-- CLUE OPTIONS --> | <!-- CLUE OPTIONS --> | |||
<xs:complexType name="optionsMessageType"> | <xs:complexType name="optionsMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueMessageType"> | <xs:extension base="clueMessageType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="mediaProvider" type="xs:boolean"/> | <xs:element name="mediaProvider" type="xs:boolean"/> | |||
<xs:element name="mediaConsumer" type="xs:boolean"/> | <xs:element name="mediaConsumer" type="xs:boolean"/> | |||
<xs:element name="supportedVersions" type="versionsListType" | <xs:element name="supportedVersions" | |||
minOccurs="0" /> | type="versionsListType" | |||
minOccurs="0" /> | ||||
<xs:element name="supportedExtensions" | <xs:element name="supportedExtensions" | |||
type="extensionsListType" minOccurs="0"/> | type="extensionsListType" minOccurs="0"/> | |||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- VERSIONS LIST TYPE --> | <!-- VERSIONS LIST TYPE --> | |||
<xs:complexType name="versionsListType"> | <xs:complexType name="versionsListType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="version" type="versionType" minOccurs="1" | <xs:element name="version" type="versionType" minOccurs="1" | |||
maxOccurs="unbounded"/> | maxOccurs="unbounded"/> | |||
<xs:any namespace="##other" processContents="lax" minOccurs="0"/> | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | ||||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax" /> | <xs:anyAttribute namespace="##other" processContents="lax" /> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- EXTENSIONS LIST TYPE --> | <!-- EXTENSIONS LIST TYPE --> | |||
<xs:complexType name="extensionsListType"> | <xs:complexType name="extensionsListType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="extension" type="extensionType" minOccurs="1" | <xs:element name="extension" type="extensionType" | |||
maxOccurs="unbounded"/> | minOccurs="1" | |||
<xs:any namespace="##other" processContents="lax" minOccurs="0"/> | maxOccurs="unbounded"/> | |||
<xs:any namespace="##other" processContents="lax" | ||||
minOccurs="0"/> | ||||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax" /> | <xs:anyAttribute namespace="##other" processContents="lax" /> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- EXTENSION TYPE --> | <!-- EXTENSION TYPE --> | |||
<xs:complexType name="extensionType"> | <xs:complexType name="extensionType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="name" type="xs:string" /> | <xs:element name="name" type="xs:string" /> | |||
<xs:element name="schemaRef" type="xs:anyURI" /> | <xs:element name="schemaRef" type="xs:anyURI" /> | |||
<xs:element name="version" type="versionType" /> | <xs:element name="version" type="versionType" /> | |||
<xs:any namespace="##other" processContents="lax" minOccurs="0"/> | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | ||||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- CLUE 'optionsResponse' --> | <!-- CLUE 'optionsResponse' --> | |||
<xs:complexType name="optionsResponseMessageType"> | <xs:complexType name="optionsResponseMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueResponseType"> | <xs:extension base="clueResponseType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="mediaProvider" type="xs:boolean" | <xs:element name="mediaProvider" type="xs:boolean" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
<xs:element name="mediaConsumer" type="xs:boolean" | <xs:element name="mediaConsumer" type="xs:boolean" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
<xs:element name="version" type="versionType" minOccurs="0"/> | <xs:element name="version" type="versionType" | |||
<xs:element name="commonExtensions" type="extensionsListType" | minOccurs="0"/> | |||
minOccurs="0"/> | <xs:element name="commonExtensions" | |||
type="extensionsListType" minOccurs="0"/> | ||||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- CLUE ADVERTISEMENT MESSAGE TYPE --> | <!-- CLUE ADVERTISEMENT MESSAGE TYPE --> | |||
<xs:complexType name="advertisementMessageType"> | <xs:complexType name="advertisementMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueMessageType"> | <xs:extension base="clueMessageType"> | |||
<xs:sequence> | <xs:sequence> | |||
<!-- mandatory --> | <!-- mandatory --> | |||
<xs:element name="mediaCaptures" type="dm:mediaCapturesType"/> | <xs:element name="mediaCaptures" | |||
type="dm:mediaCapturesType"/> | ||||
<xs:element name="encodingGroups" | <xs:element name="encodingGroups" | |||
type="dm:encodingGroupsType"/> | type="dm:encodingGroupsType"/> | |||
<xs:element name="captureScenes" type="dm:captureScenesType"/> | <xs:element name="captureScenes" | |||
type="dm:captureScenesType"/> | ||||
<!-- optional --> | <!-- optional --> | |||
<xs:element name="simultaneousSets" | <xs:element name="simultaneousSets" | |||
type="dm:simultaneousSetsType" minOccurs="0"/> | type="dm:simultaneousSetsType" minOccurs="0"/> | |||
<xs:element name="globalViews" type="dm:globalViewsType" | <xs:element name="globalViews" type="dm:globalViewsType" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
<xs:element name="people" type="dm:peopleType" minOccurs="0"/> | <xs:element name="people" | |||
type="dm:peopleType" minOccurs="0"/> | ||||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- 'ack' MESSAGE TYPE --> | <!-- 'ack' MESSAGE TYPE --> | |||
<xs:complexType name="advAcknowledgementMessageType"> | <xs:complexType name="advAcknowledgementMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueResponseType"> | <xs:extension base="clueResponseType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="advSequenceNr" type="xs:positiveInteger"/> | <xs:element name="advSequenceNr" | |||
type="xs:positiveInteger"/> | ||||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- CLUE 'configure' MESSAGE TYPE --> | <!-- CLUE 'configure' MESSAGE TYPE --> | |||
<xs:complexType name="configureMessageType"> | <xs:complexType name="configureMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueMessageType"> | <xs:extension base="clueMessageType"> | |||
<xs:sequence> | <xs:sequence> | |||
<!-- mandatory fields --> | <!-- mandatory fields --> | |||
<xs:element name="advSequenceNr" type="xs:positiveInteger"/> | <xs:element name="advSequenceNr" | |||
type="xs:positiveInteger"/> | ||||
<xs:element name="ack" type="successResponseCodeType" | <xs:element name="ack" type="successResponseCodeType" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
<xs:element name="captureEncodings" | <xs:element name="captureEncodings" | |||
type="dm:captureEncodingsType" minOccurs="0"/> | type="dm:captureEncodingsType" minOccurs="0"/> | |||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType> | |||
<!-- 'configureResponse' MESSAGE TYPE --> | <!-- 'configureResponse' MESSAGE TYPE --> | |||
<xs:complexType name="configureResponseMessageType"> | <xs:complexType name="configureResponseMessageType"> | |||
<xs:complexContent> | <xs:complexContent> | |||
<xs:extension base="clueResponseType"> | <xs:extension base="clueResponseType"> | |||
<xs:sequence> | <xs:sequence> | |||
<xs:element name="confSequenceNr" type="xs:positiveInteger"/> | <xs:element name="confSequenceNr" | |||
type="xs:positiveInteger"/> | ||||
<xs:any namespace="##other" processContents="lax" | <xs:any namespace="##other" processContents="lax" | |||
minOccurs="0"/> | minOccurs="0"/> | |||
</xs:sequence> | </xs:sequence> | |||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | |||
</xs:extension> | </xs:extension> | |||
</xs:complexContent> | </xs:complexContent> | |||
</xs:complexType> | </xs:complexType> | |||
</xs:schema> | </xs:schema>]]></sourcecode> </figure> | |||
]]> | </section> | |||
</artwork> | <section numbered="true" toc="default"> | |||
</figure> | <name>Call Flow Example</name> | |||
</t> | <t> | |||
</section> | This section describes the CLUE protocol messages exchanged in the following | |||
call flow. For simplicity, only one direction of media is shown, as the other d | ||||
<section title="Call flow example"> | irection is | |||
<t> | ||||
In this section the CLUE protocol messages exchanged in the following call flow | ||||
are detailed. | ||||
Only one direction of media is shown for simplicity, as the other direction is | ||||
precisely symmetric. | precisely symmetric. | |||
</t> | </t> | |||
<t> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<figure> | +-----+ +-----+ | |||
<artwork> | | | | | | |||
<![CDATA[ | | CP1 | | CP2 | | |||
+-----+ +-----+ | | | | | | |||
| | | | | +--+--+ +--+--+ | |||
| CP1 | | CP2 | | | | | |||
| | | | | | 1. options | | |||
+--+--+ +--+--+ | +-------------------->| | |||
| | | | | | |||
| 1.options | | | | | |||
+----------------->| | |2. optionsResponse | | |||
| | | |<--------------------+ | |||
| | | | | | |||
|2.optionsResponse | | | | | |||
|<-----------------+ | |3. advertisement | | |||
| | | +-------------------->| | |||
| | | | | | |||
| 3.advertisement | | | | | |||
+----------------->| | |4. configure+ack | | |||
| | | |<--------------------+ | |||
| | | | | | |||
|4.configure+ack | | | | | |||
|<-----------------+ | |5. configureResponse | | |||
| | | +-------------------->| | |||
| | | | | | |||
|5.confResponse | | | | | |||
+----------------->| | |6. advertisement | | |||
| | | +-------------------->| | |||
| | | | | | |||
|6.advertisement | | | | | |||
+----------------->| | | 7. ack | | |||
| | | |<--------------------+ | |||
| | | | | | |||
| 7.ack | | | | | |||
|<-----------------+ | |8. configure | | |||
| | | |<--------------------+ | |||
| | | | | | |||
| 8.configure | | | | | |||
|<-----------------+ | |9. configureResponse | | |||
| | | +-------------------->| | |||
| | | | | | |||
| 9.confResponse | | | | | |||
+----------------->| | . . | |||
| | | . . | |||
| | | . .]]></artwork> | |||
. . | ||||
. . | <t> | |||
. . | Two CPs, CP1 and CP2, have successfully set up the CLUE channel according to | |||
]]> | <xref target="RFC8850" format="default"/>. | |||
</artwork> | CP1 is the CI, and CP2 is the CR. | |||
</figure> | ||||
</t> | ||||
<t> | ||||
Two CLUE Participants, CP1 and CP2, have successfully set up the CLUE channel ac | ||||
cording to | ||||
document <xref target="I-D.ietf-clue-datachannel"/>. | ||||
CP1 is the Channel Initiator (CI) and CP2 is the Channel Receiver (CR). | ||||
</t> | </t> | |||
<t> | ||||
The initiation phase starts (negotiation of the CLUE protocol version and extens | <ul spacing="normal"> | |||
ions). | <li>The initiation phase starts (negotiation of the CLUE protocol version and ex | |||
CP1, as the CI, sends to CP2 an 'options' message specifying the supported versi | tensions). | |||
ons and extensions (<xref target="opt-example"/>). | CP1, as the CI, sends to CP2 an 'options' message specifying the supported versi | |||
CP1 supports: (i) version 1.4 with extensions E1, E2 and E3, (ii) version 2.7 wi | ons and extensions (<xref target="opt-example" format="default"/>). | |||
th extensions E4 and E5. | CP1 supports (i) version 1.4 with extensions E1, E2, and E3 and (ii) versio | |||
Because of such capabilities, CP1 sends an 'options' message with the 'v' attrib | n 2.7 with extensions E4 and E5. | |||
ute set to 1.4 and specifies explicitly all the supported versions | Because of such capabilities, CP1 sends an 'options' message with the "v" | |||
attribute set to "1.4" and explicitly specifies all the supported versions | ||||
and extensions in the corresponding fields of the 'options' message. | and extensions in the corresponding fields of the 'options' message. | |||
In the 'options' message, CP1 specifies also that it intends to act both as a MP | In the 'options' message, CP1 also specifies that it intends to act as both an M | |||
and as a MC. | P and an MC.</li> | |||
</t> | <li>CP2 supports versions 3.0, 2.9, and 1.9 of the CLUE protocol, each version w | |||
<t> | ithout any extensions. | |||
CP2 supports version 3.0, version 2.9 and version 1.9 of the CLUE protocol, each | ||||
version without any extension. | ||||
Version 2.7 is the best common choice. | Version 2.7 is the best common choice. | |||
Given the received 'options' message, CP2 answers with an 'optionsResponse' mess | Given the received 'options' message, CP2 answers with an 'optionsResponse' mess | |||
age in which it specifies only version 2.7 as the agreed version | age in which it specifies only version 2.7 as the agreed-upon version | |||
of the CLUE protocol to be used, leaving blank the extensions part of the messag | of the CLUE protocol to be used, leaving blank the extensions part of the messag | |||
e to say that no extension will be used in the CLUE session | e to say that no extensions will be used in the CLUE session | |||
(<xref target="optRes-example"/>). | (<xref target="optRes-example" format="default"/>). | |||
In the 'optionsResponse' message, CP2 specifies also that it intends to act both | In the 'optionsResponse' message, CP2 also specifies that it intends to act as b | |||
as a MP and as a MC. | oth an MP and an MC.</li> | |||
</t> | </ul> | |||
<t> | ||||
<t> | After the initiation phase is completed, CP1 and CP2 start their activity as | |||
After the initiation phase is completed, CP1 and CP2 start their activity as MP | the MP and the MC, respectively. | |||
and as MC. | For the sake of simplicity, the rest of the call flow focuses only on the dialog | |||
For the sake of simplicity, the following call flow focuses only on the dialogue | ue between MP | |||
between MP | ||||
CP1 and MC CP2. | CP1 and MC CP2. | |||
</t> | </t> | |||
<t> | <ul spacing="normal"> | |||
CP1 advertises a telepresence configuration like the one described in | <li>CP1 advertises a telepresence configuration like the one described in | |||
<xref target="I-D.ietf-clue-data-model-schema"/>, Sec. Sample XML File, where th | <xref target="RFC8846" sectionFormat="comma" section="27"/>, | |||
ere are | where there are | |||
(i) three main video streams captured by three cameras, the central one capable | (i) three main video streams captured by three cameras, with the central camera | |||
of capturing a zoomed-out view of the overall telepresence room, | capable of capturing a zoomed-out view of the overall telepresence room, | |||
(ii) a multi-content capture of the loudest segment of the room, and | (ii) a multicontent capture of the loudest segment of the room, and | |||
(iii) one audio capture for the audio of the whole room (<xref target="adv-exam | (iii) one audio capture for the audio of the whole room (<xref | |||
ple"/>). | target="adv-example" format="default"/>). | |||
</t> | </li> | |||
<t> | <li>CP2 receives CP1's 'advertisement' message and, after processing it, sends | |||
CP2 receives CP1's 'advertisement' message and, after processing it, sends back | back to CP1 a 'configure+ack' message in which it declares its interest in the | |||
to CP1 a 'configure + ack' message where it declares to be interested only in th | multicontent capture and the audio capture only (<xref target="confAck-example" | |||
e | format="default"/>).</li> | |||
multi-content capture and in the audio capture (<xref target="confAck-example"/ | <li>CP1 answers CP2's 'configure+ack' message with a 'configureResponse' | |||
>). | message that includes a 200 (Success) response code to accept all of CP2's reque | |||
</t> | sts | |||
<t> | (<xref target="confRes-example" format="default"/>).</li> | |||
CP1 answers to CP2's 'configure + ack' message with a 'configureResponse' | <li>To reflect the changes in its telepresence offer, CP1 issues a new 'advertis | |||
message including a response code '200 - Success' to accept all CP2's requests | ement' message to CP2 | |||
(<xref target="confRes-example"/>). | (<xref target="adv2-example" format="default"/>), this time also adding a compo | |||
</t> | sed | |||
<t> | capture made of a big picture representing the current speaker and two picture-i | |||
To reflect the changes in its telepresence offer, CP1 issues a new 'advertisemen | n-picture boxes representing the previous speakers | |||
t' message to CP2 | (see <xref target="RFC8846" sectionFormat="comma" section="28"/> for | |||
(<xref target="adv2-example"/>), this time adding also a composed | more details regarding the telepresence description).</li> | |||
capture made by a big picture representing the current speaker and two picture-i | <li>CP2 acknowledges the second 'advertisement' message with an 'ack' message ( | |||
n-picture boxes representing the previous speakers | <xref target="ack-example" format="default"/>).</li> | |||
(see more details about the telepresence description in <xref target="I-D.ietf-c | <li>Later in the session, CP2 changes the requested media streams from CP1 by se | |||
lue-data-model-schema"/>, Sec. MCC example). | nding to CP1 a 'configure' message replacing the | |||
</t> | ||||
<t> | ||||
CP2 acknowledges the second 'advertisement' message with an 'ack' message (<xre | ||||
f target="ack-example"/>). | ||||
</t> | ||||
<t> | ||||
In a second moment, CP2 changes the requested media streams from CP1 by sending | ||||
to CP1 a 'configure' message replacing the | ||||
previously selected video streams with the new composed media streams advertised by CP1 | previously selected video streams with the new composed media streams advertised by CP1 | |||
(<xref target="conf-example"/>). Media from the previous configuration continue | (<xref target="conf-example" format="default"/>). | |||
to | Media streams from the previous configuration continue to | |||
flow during the reconfiguration process. | flow during the reconfiguration process.</li> | |||
</t> | <li>Finally, CP1 accepts CP2's latest request with a 'configureResponse' message | |||
<t> | (<xref target="confRes2-example" format="default"/>).</li> | |||
Finally, CP1 accept the last requests of CP2 with a 'confResponse' message (<xr | </ul> | |||
ef target="confRes2-example"/>)</t> | ||||
<t> | <t>We would also like to point out that in the depicted flow three distinct sequ | |||
We also remark that in the depicted flow three distinct sequence number spaces p | ence number spaces per sender are involved | |||
er sender are involved | (two of which appear in the snippets, since we only show one direction of media) | |||
(two of which appear in the snippets since we only show one direction of media). | . The discontinuity | |||
The discontinuity | between the sequence number values in Sections <xref target="optRes-example | |||
between the sequence number values in <xref target="optRes-example"/> and <xref | " format="counter"/> and <xref target="adv-example" format="counter"/> | |||
target="adv-example"/> | ||||
is hence correct. | is hence correct. | |||
</t> | </t> | |||
<section title="CLUE message nr. 1: 'options'" anchor="opt-example"> | <section anchor="opt-example" numbered="true" toc="default"> | |||
<t> | <name>CLUE Message No. 1: 'options'</name> | |||
<figure> | <sourcecode name="" type="xml"><![CDATA[ | |||
<artwork> | ||||
<![CDATA[ | ||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<options xmlns="urn:ietf:params:xml:ns:clue-protocol" | <options xmlns="urn:ietf:params:xml:ns:clue-protocol" | |||
xmlns:ns2="urn:ietf:params:xml:ns:clue-info" | xmlns:ns2="urn:ietf:params:xml:ns:clue-info" | |||
xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="urn:ietf:params:xml:ns:clue-protocol | ||||
http://wpage.unina.it/spromano/clue-protocol-17-schema-file.xsd" | ||||
protocol="CLUE" v="1.4"> | protocol="CLUE" v="1.4"> | |||
<clueId>CP1</clueId> | <clueId>CP1</clueId> | |||
<sequenceNr>51</sequenceNr> | <sequenceNr>51</sequenceNr> | |||
<mediaProvider>true</mediaProvider> | <mediaProvider>true</mediaProvider> | |||
<mediaConsumer>true</mediaConsumer> | <mediaConsumer>true</mediaConsumer> | |||
<supportedVersions> | <supportedVersions> | |||
<version>1.4</version> | <version>1.4</version> | |||
<version>2.7</version> | <version>2.7</version> | |||
</supportedVersions> | </supportedVersions> | |||
<supportedExtensions> | <supportedExtensions> | |||
<extension> | <extension> | |||
<name>E1</name> | <name>E1</name> | |||
<schemaRef>URL_E1</schemaRef> | <schemaRef>URL_E1</schemaRef> | |||
<version>1.4</version> | <version>1.4</version> | |||
</extension> | </extension> | |||
<extension> | <extension> | |||
<name>E2</name> | <name>E2</name> | |||
<schemaRef>URL_E2</schemaRef> | <schemaRef>URL_E2</schemaRef> | |||
<version>1.4</version> | <version>1.4</version> | |||
</extension> | </extension> | |||
<extension> | <extension> | |||
<name>E3</name> | <name>E3</name> | |||
<schemaRef>URL_E3</schemaRef> | <schemaRef>URL_E3</schemaRef> | |||
<version>1.4</version> | <version>1.4</version> | |||
</extension> | </extension> | |||
<extension> | <extension> | |||
<name>E4</name> | <name>E4</name> | |||
<schemaRef>URL_E4</schemaRef> | <schemaRef>URL_E4</schemaRef> | |||
<version>2.7</version> | <version>2.7</version> | |||
</extension> | </extension> | |||
<extension> | <extension> | |||
<name>E5</name> | <name>E5</name> | |||
<schemaRef>URL_E5</schemaRef> | <schemaRef>URL_E5</schemaRef> | |||
<version>2.7</version> | <version>2.7</version> | |||
</extension> | </extension> | |||
</supportedExtensions> | </supportedExtensions> | |||
</options> | </options>]]></sourcecode> | |||
]]> | </section> | |||
</artwork> | <section anchor="optRes-example" numbered="true" toc="default"> | |||
</figure> | <name>CLUE Message No. 2: 'optionsResponse'</name> | |||
</t> | <sourcecode name="" type="xml"><![CDATA[ | |||
</section> | ||||
<section title="CLUE message nr. 2: 'optionsResponse'" anchor="optRes-example"> | ||||
<t> | ||||
<figure> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<optionsResponse xmlns="urn:ietf:params:xml:ns:clue-protocol" | <optionsResponse xmlns="urn:ietf:params:xml:ns:clue-protocol" | |||
xmlns:ns2="urn:ietf:params:xml:ns:clue-info" | xmlns:ns2="urn:ietf:params:xml:ns:clue-info" | |||
xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="urn:ietf:params:xml:ns:clue-protocol | ||||
http://wpage.unina.it/spromano/clue-protocol-17-schema-file.xsd" | ||||
protocol="CLUE" v="1.4"> | protocol="CLUE" v="1.4"> | |||
<clueId>CP2</clueId> | <clueId>CP2</clueId> | |||
<sequenceNr>62</sequenceNr> | <sequenceNr>62</sequenceNr> | |||
<responseCode>200</responseCode> | <responseCode>200</responseCode> | |||
<reasonString>Success</reasonString> | <reasonString>Success</reasonString> | |||
<mediaProvider>true</mediaProvider> | <mediaProvider>true</mediaProvider> | |||
<mediaConsumer>true</mediaConsumer> | <mediaConsumer>true</mediaConsumer> | |||
<version>2.7</version> | <version>2.7</version> | |||
</optionsResponse> | </optionsResponse>]]></sourcecode> | |||
]]> | </section> | |||
</artwork> | <section anchor="adv-example" numbered="true" toc="default"> | |||
</figure> | <name>CLUE Message No. 3: 'advertisement'</name> | |||
</t> | <sourcecode name="" type="xml"><![CDATA[ | |||
</section> | ||||
<section title="CLUE message nr. 3: 'advertisement'" anchor="adv-example"> | ||||
<t> | ||||
<figure> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<ns2:advertisement xmlns="urn:ietf:params:xml:ns:clue-info" | <ns2:advertisement xmlns="urn:ietf:params:xml:ns:clue-info" | |||
xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | |||
xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="urn:ietf:params:xml:ns:clue-protocol | ||||
http://wpage.unina.it/spromano/clue-protocol-17-schema-file.xsd" | ||||
protocol="CLUE" v="2.7"> | protocol="CLUE" v="2.7"> | |||
<ns2:clueId>CP1</ns2:clueId> | <ns2:clueId>CP1</ns2:clueId> | |||
<ns2:sequenceNr>11</ns2:sequenceNr> | <ns2:sequenceNr>11</ns2:sequenceNr> | |||
<ns2:mediaCaptures> | <ns2:mediaCaptures> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="audioCaptureType" captureID="AC0" | xsi:type="audioCaptureType" captureID="AC0" | |||
mediaType="audio"> | mediaType="audio"> | |||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureOrigin> | <captureOrigin> | |||
<capturePoint> | <capturePoint> | |||
<x>0.0</x> | <x>0.0</x> | |||
<y>0.0</y> | <y>0.0</y> | |||
<z>10.0</z> | <z>10.0</z> | |||
</capturePoint> | </capturePoint> | |||
skipping to change at line 2116 ¶ | skipping to change at line 1882 ¶ | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>room</view> | <view>room</view> | |||
<capturedPeople> | <capturedPeople> | |||
<personIDREF>alice</personIDREF> | <personIDREF>alice</personIDREF> | |||
<personIDREF>bob</personIDREF> | <personIDREF>bob</personIDREF> | |||
<personIDREF>ciccio</personIDREF> | <personIDREF>ciccio</personIDREF> | |||
</capturedPeople> | </capturedPeople> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC0" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC0" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureOrigin> | <captureOrigin> | |||
<capturePoint> | <capturePoint> | |||
<x>-2.0</x> | <x>-2.0</x> | |||
<y>0.0</y> | <y>0.0</y> | |||
<z>10.0</z> | <z>10.0</z> | |||
</capturePoint> | </capturePoint> | |||
</captureOrigin> | </captureOrigin> | |||
<captureArea> | <captureArea> | |||
skipping to change at line 2163 ¶ | skipping to change at line 1930 ¶ | |||
</description> | </description> | |||
<priority>1</priority> | <priority>1</priority> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>individual</view> | <view>individual</view> | |||
<capturedPeople> | <capturedPeople> | |||
<personIDREF>ciccio</personIDREF> | <personIDREF>ciccio</personIDREF> | |||
</capturedPeople> | </capturedPeople> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC1" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC1" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureOrigin> | <captureOrigin> | |||
<capturePoint> | <capturePoint> | |||
<x>0.0</x> | <x>0.0</x> | |||
<y>0.0</y> | <y>0.0</y> | |||
<z>10.0</z> | <z>10.0</z> | |||
</capturePoint> | </capturePoint> | |||
</captureOrigin> | </captureOrigin> | |||
<captureArea> | <captureArea> | |||
skipping to change at line 2210 ¶ | skipping to change at line 1978 ¶ | |||
</description> | </description> | |||
<priority>1</priority> | <priority>1</priority> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>individual</view> | <view>individual</view> | |||
<capturedPeople> | <capturedPeople> | |||
<personIDREF>alice</personIDREF> | <personIDREF>alice</personIDREF> | |||
</capturedPeople> | </capturedPeople> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC2" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC2" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureOrigin> | <captureOrigin> | |||
<capturePoint> | <capturePoint> | |||
<x>2.0</x> | <x>2.0</x> | |||
<y>0.0</y> | <y>0.0</y> | |||
<z>10.0</z> | <z>10.0</z> | |||
</capturePoint> | </capturePoint> | |||
</captureOrigin> | </captureOrigin> | |||
<captureArea> | <captureArea> | |||
skipping to change at line 2257 ¶ | skipping to change at line 2026 ¶ | |||
</description> | </description> | |||
<priority>1</priority> | <priority>1</priority> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>individual</view> | <view>individual</view> | |||
<capturedPeople> | <capturedPeople> | |||
<personIDREF>bob</personIDREF> | <personIDREF>bob</personIDREF> | |||
</capturedPeople> | </capturedPeople> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC3" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC3" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureArea> | <captureArea> | |||
<bottomLeft> | <bottomLeft> | |||
<x>-3.0</x> | <x>-3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomLeft> | </bottomLeft> | |||
<bottomRight> | <bottomRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
skipping to change at line 2289 ¶ | skipping to change at line 2059 ¶ | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>11.0</z> | <z>11.0</z> | |||
</topRight> | </topRight> | |||
</captureArea> | </captureArea> | |||
</spatialInformation> | </spatialInformation> | |||
<content> | <content> | |||
<sceneViewIDREF>SE1</sceneViewIDREF> | <sceneViewIDREF>SE1</sceneViewIDREF> | |||
</content> | </content> | |||
<policy>SoundLevel:0</policy> | <policy>SoundLevel:0</policy> | |||
<encGroupIDREF>EG0</encGroupIDREF> | <encGroupIDREF>EG0</encGroupIDREF> | |||
<description lang="en">loudest room segment</description> | <description lang="en">loudest room segment | |||
</description> | ||||
<priority>2</priority> | <priority>2</priority> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>individual</view> | <view>individual</view> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC4" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC4" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureOrigin> | <captureOrigin> | |||
<capturePoint> | <capturePoint> | |||
<x>0.0</x> | <x>0.0</x> | |||
<y>0.0</y> | <y>0.0</y> | |||
<z>10.0</z> | <z>10.0</z> | |||
</capturePoint> | </capturePoint> | |||
</captureOrigin> | </captureOrigin> | |||
<captureArea> | <captureArea> | |||
skipping to change at line 2332 ¶ | skipping to change at line 2104 ¶ | |||
</topLeft> | </topLeft> | |||
<topRight> | <topRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>13.0</z> | <z>13.0</z> | |||
</topRight> | </topRight> | |||
</captureArea> | </captureArea> | |||
</spatialInformation> | </spatialInformation> | |||
<individual>true</individual> | <individual>true</individual> | |||
<encGroupIDREF>EG0</encGroupIDREF> | <encGroupIDREF>EG0</encGroupIDREF> | |||
<description lang="en">zoomed out view of all people in the | <description lang="en">zoomed-out view of all people in | |||
room</description> | the room</description> | |||
<priority>2</priority> | <priority>2</priority> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>room</view> | <view>room</view> | |||
<capturedPeople> | <capturedPeople> | |||
<personIDREF>alice</personIDREF> | <personIDREF>alice</personIDREF> | |||
<personIDREF>bob</personIDREF> | <personIDREF>bob</personIDREF> | |||
<personIDREF>ciccio</personIDREF> | <personIDREF>ciccio</personIDREF> | |||
</capturedPeople> | </capturedPeople> | |||
</mediaCapture> | </mediaCapture> | |||
skipping to change at line 2428 ¶ | skipping to change at line 2200 ¶ | |||
<person personID="ciccio"> | <person personID="ciccio"> | |||
<personInfo> | <personInfo> | |||
<ns3:fn> | <ns3:fn> | |||
<ns3:text>Ciccio</ns3:text> | <ns3:text>Ciccio</ns3:text> | |||
</ns3:fn> | </ns3:fn> | |||
</personInfo> | </personInfo> | |||
<personType>chairman</personType> | <personType>chairman</personType> | |||
<personType>timekeeper</personType> | <personType>timekeeper</personType> | |||
</person> | </person> | |||
</ns2:people> | </ns2:people> | |||
</ns2:advertisement> | </ns2:advertisement>]]></sourcecode> | |||
]]> | </section> | |||
</artwork> | <section anchor="confAck-example" numbered="true" toc="default"> | |||
</figure> | <name>CLUE Message No. 4: 'configure+ack'</name> | |||
</t> | <sourcecode name="" type="xml"><![CDATA[ | |||
</section> | ||||
<section title="CLUE message nr. 4: 'configure + ack'" anchor="confAck-example"> | ||||
<t> | ||||
<figure> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<ns2:configure xmlns="urn:ietf:params:xml:ns:clue-info" | <ns2:configure xmlns="urn:ietf:params:xml:ns:clue-info" | |||
xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | |||
xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="urn:ietf:params:xml:ns:clue-protocol | ||||
http://wpage.unina.it/spromano/clue-protocol-17-schema-file.xsd" | ||||
protocol="CLUE" v="2.7"> | protocol="CLUE" v="2.7"> | |||
<ns2:clueId>CP2</ns2:clueId> | <ns2:clueId>CP2</ns2:clueId> | |||
<ns2:sequenceNr>22</ns2:sequenceNr> | <ns2:sequenceNr>22</ns2:sequenceNr> | |||
<ns2:advSequenceNr>11</ns2:advSequenceNr> | <ns2:advSequenceNr>11</ns2:advSequenceNr> | |||
<ns2:ack>200</ns2:ack> | <ns2:ack>200</ns2:ack> | |||
<ns2:captureEncodings> | <ns2:captureEncodings> | |||
<captureEncoding ID="ce123"> | <captureEncoding ID="ce123"> | |||
<captureID>AC0</captureID> | <captureID>AC0</captureID> | |||
<encodingID>ENC4</encodingID> | <encodingID>ENC4</encodingID> | |||
</captureEncoding> | </captureEncoding> | |||
<captureEncoding ID="ce223"> | <captureEncoding ID="ce223"> | |||
<captureID>VC3</captureID> | <captureID>VC3</captureID> | |||
<encodingID>ENC1</encodingID> | <encodingID>ENC1</encodingID> | |||
<configuredContent> | <configuredContent> | |||
<sceneViewIDREF>SE1</sceneViewIDREF> | <sceneViewIDREF>SE1</sceneViewIDREF> | |||
</configuredContent> | </configuredContent> | |||
</captureEncoding> | </captureEncoding> | |||
</ns2:captureEncodings> | </ns2:captureEncodings> | |||
</ns2:configure> | </ns2:configure>]]></sourcecode> | |||
]]> | </section> | |||
</artwork> | <section anchor="confRes-example" numbered="true" toc="default"> | |||
</figure> | <name>CLUE Message No. 5: 'configureResponse'</name> | |||
</t> | <sourcecode name="" type="xml"><![CDATA[ | |||
</section> | ||||
<section title="CLUE message nr. 5: 'confResponse'" anchor="confRes-example"> | ||||
<t> | ||||
<figure> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<ns2:configureResponse xmlns="urn:ietf:params:xml:ns:clue-info" | <ns2:configureResponse xmlns="urn:ietf:params:xml:ns:clue-info" | |||
xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | |||
xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="urn:ietf:params:xml:ns:clue-protocol | ||||
http://wpage.unina.it/spromano/clue-protocol-17-schema-file.xsd" | ||||
protocol="CLUE" v="2.7"> | protocol="CLUE" v="2.7"> | |||
<ns2:clueId>CP1</ns2:clueId> | <ns2:clueId>CP1</ns2:clueId> | |||
<ns2:sequenceNr>12</ns2:sequenceNr> | <ns2:sequenceNr>12</ns2:sequenceNr> | |||
<ns2:responseCode>200</ns2:responseCode> | <ns2:responseCode>200</ns2:responseCode> | |||
<ns2:reasonString>Success</ns2:reasonString> | <ns2:reasonString>Success</ns2:reasonString> | |||
<ns2:confSequenceNr>22</ns2:confSequenceNr> | <ns2:confSequenceNr>22</ns2:confSequenceNr> | |||
</ns2:configureResponse> | </ns2:configureResponse>]]></sourcecode> | |||
]]> | </section> | |||
</artwork> | <section anchor="adv2-example" numbered="true" toc="default"> | |||
</figure> | <name>CLUE Message No. 6: 'advertisement'</name> | |||
</t> | <sourcecode name="" type="xml"><![CDATA[ | |||
</section> | ||||
<section title="CLUE message nr. 6: 'advertisement' " anchor="adv2-example"> | ||||
<t> | ||||
<figure> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<ns2:advertisement xmlns="urn:ietf:params:xml:ns:clue-info" | <ns2:advertisement xmlns="urn:ietf:params:xml:ns:clue-info" | |||
xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | |||
xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="urn:ietf:params:xml:ns:clue-protocol | ||||
http://wpage.unina.it/spromano/clue-protocol-17-schema-file.xsd" | ||||
protocol="CLUE" v="2.7"> | protocol="CLUE" v="2.7"> | |||
<ns2:clueId>CP1</ns2:clueId> | <ns2:clueId>CP1</ns2:clueId> | |||
<ns2:sequenceNr>13</ns2:sequenceNr> | <ns2:sequenceNr>13</ns2:sequenceNr> | |||
<ns2:mediaCaptures> | <ns2:mediaCaptures> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="audioCaptureType" captureID="AC0" mediaType="audio"> | xsi:type="audioCaptureType" captureID="AC0" | |||
mediaType="audio"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureOrigin> | <captureOrigin> | |||
<capturePoint> | <capturePoint> | |||
<x>0.0</x> | <x>0.0</x> | |||
<y>0.0</y> | <y>0.0</y> | |||
<z>10.0</z> | <z>10.0</z> | |||
</capturePoint> | </capturePoint> | |||
<lineOfCapturePoint> | <lineOfCapturePoint> | |||
<x>0.0</x> | <x>0.0</x> | |||
skipping to change at line 2543 ¶ | skipping to change at line 2292 ¶ | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>room</view> | <view>room</view> | |||
<capturedPeople> | <capturedPeople> | |||
<personIDREF>alice</personIDREF> | <personIDREF>alice</personIDREF> | |||
<personIDREF>bob</personIDREF> | <personIDREF>bob</personIDREF> | |||
<personIDREF>ciccio</personIDREF> | <personIDREF>ciccio</personIDREF> | |||
</capturedPeople> | </capturedPeople> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC0" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC0" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureOrigin> | <captureOrigin> | |||
<capturePoint> | <capturePoint> | |||
<x>0.5</x> | <x>0.5</x> | |||
<y>1.0</y> | <y>1.0</y> | |||
<z>0.5</z> | <z>0.5</z> | |||
</capturePoint> | </capturePoint> | |||
<lineOfCapturePoint> | <lineOfCapturePoint> | |||
<x>0.5</x> | <x>0.5</x> | |||
skipping to change at line 2573 ¶ | skipping to change at line 2323 ¶ | |||
</description> | </description> | |||
<priority>1</priority> | <priority>1</priority> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>individual</view> | <view>individual</view> | |||
<capturedPeople> | <capturedPeople> | |||
<personIDREF>ciccio</personIDREF> | <personIDREF>ciccio</personIDREF> | |||
</capturedPeople> | </capturedPeople> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC1" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC1" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureOrigin> | <captureOrigin> | |||
<capturePoint> | <capturePoint> | |||
<x>0.0</x> | <x>0.0</x> | |||
<y>0.0</y> | <y>0.0</y> | |||
<z>10.0</z> | <z>10.0</z> | |||
</capturePoint> | </capturePoint> | |||
</captureOrigin> | </captureOrigin> | |||
<captureArea> | <captureArea> | |||
<bottomLeft> | <bottomLeft> | |||
<x>-1.0</x> | <x>-1.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomLeft> | </bottomLeft> | |||
<bottomRight> | <bottomRight> | |||
<x>1.0</x> | <x>1.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomRight> | </bottomRight> | |||
<topLeft> | <topLeft> | |||
<x>-1.0</x> | <x>-1.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>11.0</z> | <z>11.0</z> | |||
</topLeft> | </topLeft> | |||
<topRight> | <topRight> | |||
<x>1.0</x> | <x>1.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>11.0</z> | <z>11.0</z> | |||
</topRight> | </topRight> | |||
</captureArea> | </captureArea> | |||
</spatialInformation> | </spatialInformation> | |||
<individual>true</individual> | <individual>true</individual> | |||
<encGroupIDREF>EG0</encGroupIDREF> | <encGroupIDREF>EG0</encGroupIDREF> | |||
<description lang="en">central camera video capture | <description lang="en">central camera video capture | |||
</description> | </description> | |||
<priority>1</priority> | <priority>1</priority> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>individual</view> | <view>individual</view> | |||
<capturedPeople> | <capturedPeople> | |||
<personIDREF>alice</personIDREF> | <personIDREF>alice</personIDREF> | |||
</capturedPeople> | </capturedPeople> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC2" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC2" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureOrigin> | <captureOrigin> | |||
<capturePoint> | <capturePoint> | |||
<x>2.0</x> | <x>2.0</x> | |||
<y>0.0</y> | <y>0.0</y> | |||
<z>10.0</z> | <z>10.0</z> | |||
</capturePoint> | </capturePoint> | |||
</captureOrigin> | </captureOrigin> | |||
<captureArea> | <captureArea> | |||
<bottomLeft> | <bottomLeft> | |||
<x>1.0</x> | <x>1.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomLeft> | </bottomLeft> | |||
<bottomRight> | <bottomRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomRight> | </bottomRight> | |||
<topLeft> | <topLeft> | |||
<x>1.0</x> | <x>1.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>11.0</z> | <z>11.0</z> | |||
</topLeft> | </topLeft> | |||
<topRight> | <topRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>11.0</z> | <z>11.0</z> | |||
</topRight> | </topRight> | |||
</captureArea> | </captureArea> | |||
</spatialInformation> | </spatialInformation> | |||
<individual>true</individual> | <individual>true</individual> | |||
<encGroupIDREF>EG0</encGroupIDREF> | <encGroupIDREF>EG0</encGroupIDREF> | |||
<description lang="en">right camera video capture | <description lang="en">right camera video capture | |||
</description> | </description> | |||
<priority>1</priority> | <priority>1</priority> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>individual</view> | <view>individual</view> | |||
<capturedPeople> | <capturedPeople> | |||
<personIDREF>bob</personIDREF> | <personIDREF>bob</personIDREF> | |||
</capturedPeople> | </capturedPeople> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC3" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC3" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureArea> | <captureArea> | |||
<bottomLeft> | <bottomLeft> | |||
<x>-3.0</x> | <x>-3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomLeft> | </bottomLeft> | |||
<bottomRight> | <bottomRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomRight> | </bottomRight> | |||
<topLeft> | <topLeft> | |||
<x>-3.0</x> | <x>-3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>11.0</z> | <z>11.0</z> | |||
</topLeft> | </topLeft> | |||
<topRight> | <topRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>11.0</z> | <z>11.0</z> | |||
</topRight> | </topRight> | |||
</captureArea> | </captureArea> | |||
</spatialInformation> | </spatialInformation> | |||
<content> | <content> | |||
<sceneViewIDREF>SE1</sceneViewIDREF> | <sceneViewIDREF>SE1</sceneViewIDREF> | |||
</content> | </content> | |||
<policy>SoundLevel:0</policy> | <policy>SoundLevel:0</policy> | |||
<encGroupIDREF>EG0</encGroupIDREF> | <encGroupIDREF>EG0</encGroupIDREF> | |||
<description lang="en">loudest room segment</description> | <description lang="en">loudest room segment | |||
</description> | ||||
<priority>2</priority> | <priority>2</priority> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>individual</view> | <view>individual</view> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC4" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC4" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureOrigin> | <captureOrigin> | |||
<capturePoint> | <capturePoint> | |||
<x>0.0</x> | <x>0.0</x> | |||
<y>0.0</y> | <y>0.0</y> | |||
<z>10.0</z> | <z>10.0</z> | |||
</capturePoint> | </capturePoint> | |||
</captureOrigin> | </captureOrigin> | |||
<captureArea> | <captureArea> | |||
<bottomLeft> | <bottomLeft> | |||
<x>-3.0</x> | <x>-3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>7.0</z> | <z>7.0</z> | |||
</bottomLeft> | </bottomLeft> | |||
<bottomRight> | <bottomRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>7.0</z> | <z>7.0</z> | |||
</bottomRight> | </bottomRight> | |||
<topLeft> | <topLeft> | |||
<x>-3.0</x> | <x>-3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>13.0</z> | <z>13.0</z> | |||
</topLeft> | </topLeft> | |||
<topRight> | <topRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>13.0</z> | <z>13.0</z> | |||
</topRight> | </topRight> | |||
</captureArea> | </captureArea> | |||
</spatialInformation> | </spatialInformation> | |||
<individual>true</individual> | <individual>true</individual> | |||
<encGroupIDREF>EG0</encGroupIDREF> | <encGroupIDREF>EG0</encGroupIDREF> | |||
<description lang="en"> | <description lang="en"> | |||
zoomed out view of all people in the room | zoomed-out view of all people in the room | |||
</description> | </description> | |||
<priority>2</priority> | <priority>2</priority> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>room</view> | <view>room</view> | |||
<capturedPeople> | <capturedPeople> | |||
<personIDREF>alice</personIDREF> | <personIDREF>alice</personIDREF> | |||
<personIDREF>bob</personIDREF> | <personIDREF>bob</personIDREF> | |||
<personIDREF>ciccio</personIDREF> | <personIDREF>ciccio</personIDREF> | |||
</capturedPeople> | </capturedPeople> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC5" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC5" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureArea> | <captureArea> | |||
<bottomLeft> | <bottomLeft> | |||
<x>-3.0</x> | <x>-3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomLeft> | </bottomLeft> | |||
<bottomRight> | <bottomRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
skipping to change at line 2794 ¶ | skipping to change at line 2550 ¶ | |||
<sceneViewIDREF>SE1</sceneViewIDREF> | <sceneViewIDREF>SE1</sceneViewIDREF> | |||
</content> | </content> | |||
<policy>SoundLevel:1</policy> | <policy>SoundLevel:1</policy> | |||
<description lang="en">penultimate loudest room segment | <description lang="en">penultimate loudest room segment | |||
</description> | </description> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>individual</view> | <view>individual</view> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC6" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC6" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureArea> | <captureArea> | |||
<bottomLeft> | <bottomLeft> | |||
<x>-3.0</x> | <x>-3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomLeft> | </bottomLeft> | |||
<bottomRight> | <bottomRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomRight> | </bottomRight> | |||
<topLeft> | <topLeft> | |||
<x>-3.0</x> | <x>-3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>11.0</z> | <z>11.0</z> | |||
</topLeft> | </topLeft> | |||
<topRight> | <topRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>11.0</z> | <z>11.0</z> | |||
</topRight> | </topRight> | |||
</captureArea> | </captureArea> | |||
</spatialInformation> | </spatialInformation> | |||
<content> | <content> | |||
<sceneViewIDREF>SE1</sceneViewIDREF> | <sceneViewIDREF>SE1</sceneViewIDREF> | |||
</content> | </content> | |||
<policy>SoundLevel:2</policy> | <policy>SoundLevel:2</policy> | |||
<description lang="en">last but two loudest room segment | <description lang="en">last but two loudest room segment | |||
</description> | </description> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>individual</view> | <view>individual</view> | |||
</mediaCapture> | </mediaCapture> | |||
<mediaCapture | <mediaCapture | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:type="videoCaptureType" captureID="VC7" mediaType="video"> | xsi:type="videoCaptureType" captureID="VC7" | |||
mediaType="video"> | ||||
<captureSceneIDREF>CS1</captureSceneIDREF> | <captureSceneIDREF>CS1</captureSceneIDREF> | |||
<spatialInformation> | <spatialInformation> | |||
<captureArea> | <captureArea> | |||
<bottomLeft> | <bottomLeft> | |||
<x>-3.0</x> | <x>-3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomLeft> | </bottomLeft> | |||
<bottomRight> | <bottomRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>9.0</z> | <z>9.0</z> | |||
</bottomRight> | </bottomRight> | |||
<topLeft> | <topLeft> | |||
<x>-3.0</x> | <x>-3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>11.0</z> | <z>11.0</z> | |||
</topLeft> | </topLeft> | |||
<topRight> | <topRight> | |||
<x>3.0</x> | <x>3.0</x> | |||
<y>20.0</y> | <y>20.0</y> | |||
<z>11.0</z> | <z>11.0</z> | |||
</topRight> | </topRight> | |||
</captureArea> | </captureArea> | |||
</spatialInformation> | </spatialInformation> | |||
<content> | <content> | |||
<mediaCaptureIDREF>VC3</mediaCaptureIDREF> | <mediaCaptureIDREF>VC3</mediaCaptureIDREF> | |||
<mediaCaptureIDREF>VC5</mediaCaptureIDREF> | <mediaCaptureIDREF>VC5</mediaCaptureIDREF> | |||
<mediaCaptureIDREF>VC6</mediaCaptureIDREF> | <mediaCaptureIDREF>VC6</mediaCaptureIDREF> | |||
</content> | </content> | |||
<maxCaptures exactNumber="true">3</maxCaptures> | <maxCaptures exactNumber="true">3</maxCaptures> | |||
<encGroupIDREF>EG0</encGroupIDREF> | <encGroupIDREF>EG0</encGroupIDREF> | |||
<description lang="en">big picture of the current speaker + | <description lang="en">big picture of the current | |||
pips about previous speakers</description> | speaker + pips about previous speakers</description> | |||
<priority>3</priority> | <priority>3</priority> | |||
<lang>it</lang> | <lang>it</lang> | |||
<mobility>static</mobility> | <mobility>static</mobility> | |||
<view>individual</view> | <view>individual</view> | |||
</mediaCapture> | </mediaCapture> | |||
</ns2:mediaCaptures> | </ns2:mediaCaptures> | |||
<ns2:encodingGroups> | <ns2:encodingGroups> | |||
<encodingGroup encodingGroupID="EG0"> | <encodingGroup encodingGroupID="EG0"> | |||
<maxGroupBandwidth>600000</maxGroupBandwidth> | <maxGroupBandwidth>600000</maxGroupBandwidth> | |||
<encodingIDList> | <encodingIDList> | |||
skipping to change at line 2971 ¶ | skipping to change at line 2729 ¶ | |||
<person personID="ciccio"> | <person personID="ciccio"> | |||
<personInfo> | <personInfo> | |||
<ns3:fn> | <ns3:fn> | |||
<ns3:text>Ciccio</ns3:text> | <ns3:text>Ciccio</ns3:text> | |||
</ns3:fn> | </ns3:fn> | |||
</personInfo> | </personInfo> | |||
<personType>chairman</personType> | <personType>chairman</personType> | |||
<personType>timekeeper</personType> | <personType>timekeeper</personType> | |||
</person> | </person> | |||
</ns2:people> | </ns2:people> | |||
</ns2:advertisement> | </ns2:advertisement>]]></sourcecode> | |||
</section> | ||||
]]> | <section anchor="ack-example" numbered="true" toc="default"> | |||
</artwork> | <name>CLUE Message No. 7: 'ack'</name> | |||
</figure> | <sourcecode name="" type="xml"><![CDATA[ | |||
</t> | ||||
</section> | ||||
<section title="CLUE message nr. 7: 'ack' " anchor="ack-example"> | ||||
<t> | ||||
<figure> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<ack xmlns="urn:ietf:params:xml:ns:clue-protocol" | <ack xmlns="urn:ietf:params:xml:ns:clue-protocol" | |||
xmlns:ns2="urn:ietf:params:xml:ns:clue-info" | xmlns:ns2="urn:ietf:params:xml:ns:clue-info" | |||
xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="urn:ietf:params:xml:ns:clue-protocol | ||||
http://wpage.unina.it/spromano/clue-protocol-17-schema-file.xsd" | ||||
protocol="CLUE" v="2.7"> | protocol="CLUE" v="2.7"> | |||
<clueId>CP2</clueId> | <clueId>CP2</clueId> | |||
<sequenceNr>23</sequenceNr> | <sequenceNr>23</sequenceNr> | |||
<responseCode>200</responseCode> | <responseCode>200</responseCode> | |||
<reasonString>Success</reasonString> | <reasonString>Success</reasonString> | |||
<advSequenceNr>13</advSequenceNr> | <advSequenceNr>13</advSequenceNr> | |||
</ack> | </ack>]]></sourcecode> | |||
]]> | </section> | |||
</artwork> | <section anchor="conf-example" numbered="true" toc="default"> | |||
</figure> | <name>CLUE Message No. 8: 'configure'</name> | |||
</t> | <sourcecode name="" type="xml"><![CDATA[ | |||
</section> | ||||
<section title="CLUE message nr. 8: 'configure'" anchor="conf-example"> | ||||
<t> | ||||
<figure> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<ns2:configure xmlns="urn:ietf:params:xml:ns:clue-info" | <ns2:configure xmlns="urn:ietf:params:xml:ns:clue-info" | |||
xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | |||
xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="urn:ietf:params:xml:ns:clue-protocol | ||||
http://wpage.unina.it/spromano/clue-protocol-17-schema-file.xsd" | ||||
protocol="CLUE" v="2.7"> | protocol="CLUE" v="2.7"> | |||
<ns2:clueId>CP2</ns2:clueId> | <ns2:clueId>CP2</ns2:clueId> | |||
<ns2:sequenceNr>24</ns2:sequenceNr> | <ns2:sequenceNr>24</ns2:sequenceNr> | |||
<ns2:advSequenceNr>13</ns2:advSequenceNr> | <ns2:advSequenceNr>13</ns2:advSequenceNr> | |||
<ns2:captureEncodings> | <ns2:captureEncodings> | |||
<captureEncoding ID="ce123"> | <captureEncoding ID="ce123"> | |||
<captureID>AC0</captureID> | <captureID>AC0</captureID> | |||
<encodingID>ENC4</encodingID> | <encodingID>ENC4</encodingID> | |||
</captureEncoding> | </captureEncoding> | |||
<captureEncoding ID="ce456"> | <captureEncoding ID="ce456"> | |||
<captureID>VC7</captureID> | <captureID>VC7</captureID> | |||
<encodingID>ENC1</encodingID> | <encodingID>ENC1</encodingID> | |||
<configuredContent> | <configuredContent> | |||
<sceneViewIDREF>SE5</sceneViewIDREF> | <sceneViewIDREF>SE5</sceneViewIDREF> | |||
</configuredContent> | </configuredContent> | |||
</captureEncoding> | </captureEncoding> | |||
</ns2:captureEncodings> | </ns2:captureEncodings> | |||
</ns2:configure> | </ns2:configure>]]></sourcecode> | |||
]]> | </section> | |||
</artwork> | <section anchor="confRes2-example" numbered="true" toc="default"> | |||
</figure> | <name>CLUE Message No. 9: 'configureResponse'</name> | |||
</t> | <sourcecode name="" type="xml"><![CDATA[ | |||
</section> | ||||
<section title="CLUE message nr. 9: 'confResponse'" anchor="confRes2-example"> | ||||
<t> | ||||
<figure> | ||||
<artwork> | ||||
<![CDATA[ | ||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<ns2:configureResponse xmlns="urn:ietf:params:xml:ns:clue-info" | <ns2:configureResponse xmlns="urn:ietf:params:xml:ns:clue-info" | |||
xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | xmlns:ns2="urn:ietf:params:xml:ns:clue-protocol" | |||
xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | xmlns:ns3="urn:ietf:params:xml:ns:vcard-4.0" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="urn:ietf:params:xml:ns:clue-protocol | ||||
http://wpage.unina.it/spromano/clue-protocol-17-schema-file.xsd" | ||||
protocol="CLUE" v="2.7"> | protocol="CLUE" v="2.7"> | |||
<ns2:clueId>CP1</ns2:clueId> | <ns2:clueId>CP1</ns2:clueId> | |||
<ns2:sequenceNr>14</ns2:sequenceNr> | <ns2:sequenceNr>14</ns2:sequenceNr> | |||
<ns2:responseCode>200</ns2:responseCode> | <ns2:responseCode>200</ns2:responseCode> | |||
<ns2:reasonString>Success</ns2:reasonString> | <ns2:reasonString>Success</ns2:reasonString> | |||
<ns2:confSequenceNr>24</ns2:confSequenceNr> | <ns2:confSequenceNr>24</ns2:confSequenceNr> | |||
</ns2:configureResponse> | </ns2:configureResponse>]]></sourcecode> | |||
]]> | </section> | |||
</artwork> | </section> | |||
</figure> | <section anchor="sec-cons" numbered="true" toc="default"> | |||
</t> | <name>Security Considerations</name> | |||
</section> | <t> | |||
As a general consideration, we would like to point out that the CLUE framework | ||||
</section> | ||||
<section title="Security Considerations"> | ||||
<t> | ||||
As a general consideration, we remark that the CLUE framework | ||||
(and related protocol) | (and related protocol) | |||
has been conceived at the outset by embracing the security-by-design | has been conceived from the outset by embracing the security-by-design | |||
paradigm. | paradigm. | |||
This entails that a number of requirements have been identified and | As a result, a number of requirements have been identified and | |||
properly standardized as mandatory within the entire set of documents | properly standardized as mandatory within the entire set of documents | |||
associated with the CLUE architecture. | associated with the CLUE architecture. | |||
Requirements include: (i) the use of cryptography and authentication; | Requirements include (i) the use of cryptography and authentication, | |||
(ii) protection of all sensitive fields; (iii) mutual authentication | (ii) protection of all sensitive fields, (iii) mutual authentication | |||
between CLUE endpoints; (iv) the presence of authorization mechanisms; | between CLUE endpoints, (iv) the presence of authorization mechanisms, | |||
(v) the presence of native defence mechanisms against malicious | and (v) the presence of native defense mechanisms against malicious | |||
activities such as eavesdropping, selective modification, deletion, | activities such as eavesdropping, selective modification, deletion, | |||
replay (and related combinations thereof). | and replay (and related combinations thereof). | |||
Hence, security of the single components of | Hence, security of the single components of | |||
the CLUE solution cannot be evaluated independently of the integrated | the CLUE solution cannot be evaluated independently of the integrated | |||
view of the final architecture. | view of the final architecture. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
The CLUE protocol is an application-level protocol allowing a Media | The CLUE protocol is an application-level protocol allowing a Media | |||
Producer and a Media Consumer to negotiate a variegated set of | Producer and an MC to negotiate a variegated set of | |||
parameters associated with the establishment of a telepresence session. | parameters associated with the establishment of a telepresence session. | |||
This unavoidably exposes a CLUE-enabled telepresence system to a number | This unavoidably exposes a CLUE-enabled telepresence system to a number | |||
of potential threats, most of which are extensively discussed in the | of potential threats, most of which are extensively discussed in the CLUE | |||
framework document <xref target="I-D.ietf-clue-framework" />. | framework document <xref target="RFC8845" format="default"/>. | |||
The security considerations section of the mentioned document actually | The Security Considerations section of <xref target="RFC8845" format="default"/> | |||
actually | ||||
discusses issues associated with the setup and management of a | discusses issues associated with the setup and management of a | |||
telepresence session both in the basic case involving two CLUE endpoints | telepresence session in both (1) the basic case involving two CLUE endpoint | |||
acting, respectively, as MP and MC, and in the more advanced scenario | s | |||
acting as the MP and the MC, respectively and (2) the more advanced scenar | ||||
io | ||||
envisaging the presence of an MCU. | envisaging the presence of an MCU. | |||
</t> | </t> | |||
<t> | ||||
<t> | The CLUE framework document <xref target="RFC8845" format="default"/> also menti | |||
The framework document also mentions that the information carried within CLUE | ons that the information carried within CLUE | |||
protocol messages might contain sensitive data, which SHOULD hence be accessed | protocol messages might contain sensitive data, which <bcp14>SHOULD</bcp14> henc | |||
e be accessed | ||||
only by authenticated endpoints. Security issues associated with the CLUE data | only by authenticated endpoints. Security issues associated with the CLUE data | |||
model schema are discussed in <xref target="I-D.ietf-clue-data-model-schema" />. | model schema are discussed in <xref target="RFC8846" format="default"/>. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
There is extra information carried by the CLUE protocol that is not | There is extra information carried by the CLUE protocol that is not | |||
associated with the CLUE data model schema and which exposes | associated with the CLUE data model schema and that exposes | |||
information that might be of concern. This information is primarily | information that might be of concern. This information is primarily | |||
exchanged during the negotiation phase via the 'options' and 'optionsResponse' m essages. | exchanged during the negotiation phase via the 'options' and 'optionsResponse' m essages. | |||
In the CLUE Participant state machine OPTIONS state, both parties | In the CP state machine's OPTIONS state, both parties | |||
agree on the version and on the extensions to be used in the subsequent | agree on the version and extensions to be used in the subsequent | |||
CLUE messages exchange phase. A malicious participant might either try | CLUE message exchange phase. A malicious participant might either | |||
to retrieve a detailed footprint of a specific CLUE protocol | (1) try to retrieve a detailed footprint of a specific CLUE protocol | |||
implementation during this initial setup phase, or force the | implementation during this initial setup phase or (2) force the | |||
communicating party to use a non-up-to-date version of the protocol | communicating party to use a version of the protocol that is outdated | |||
which they know how to break. | and that they know how to break. | |||
Indeed, exposing all of the supported versions and extensions could | Indeed, exposing all of the supported versions and extensions could | |||
conceivably leak information about the specific implementation of the | conceivably leak information about the specific implementation of the | |||
protocol. In theory an implementation could choose not to announce all | protocol. In theory, an implementation could choose not to announce all | |||
of the versions it supports if it wants to avoid such leakage, though at | of the versions it supports if it wants to avoid such leakage, although | |||
the expenses of interoperability. | this would come at the expense of interoperability. | |||
With respect to the above considerations, it is noted that the OPTIONS | With respect to the above considerations, it is noted that the OPTIONS | |||
state is only reached after the CLUE data channel has been successfully | state is only reached after the CLUE data channel has been successfully | |||
set up. This ensures that only authenticated parties can exchange | set up. This ensures that only authenticated parties can exchange | |||
'options' and related 'optionsResponse' messages and hence drastically | 'options' messages and related 'optionsResponse' messages, and hence drastically | |||
reduces the attack surface that is exposed to malicious parties. | reduces the attack surface that is exposed to malicious parties. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
The CLUE framework clearly states the requirement to protect CLUE | The CLUE framework clearly states the requirement to protect CLUE | |||
protocol messages against threats deriving from the presence of a | protocol messages against threats deriving from the presence of a | |||
malicious agent capable to gain access to the CLUE data channel. | malicious agent capable of gaining access to the CLUE data channel. | |||
Such a requirement is met by the CLUE data channel solution described | Such a requirement is met by the CLUE data channel solution described | |||
in <xref target="I-D.ietf-clue-datachannel"/>, which ensures protection | in <xref target="RFC8850" format="default"/>, which ensures protection | |||
from both message recovery and message tampering. | from both message recovery and message tampering. | |||
With respect to this last point, any implementation of the CLUE protocol | With respect to this last point, any implementation of the CLUE protocol | |||
compliant with the CLUE specification MUST rely on the exchange of | compliant with the CLUE specification <bcp14>MUST</bcp14> rely on the exchange | |||
messages that flow on top of a reliable and ordered SCTP over DTLS | of | |||
transport channel connecting two CLUE Participants. | messages that flow on top of a reliable and ordered SCTP-over-DTLS | |||
transport channel connecting two CPs. | ||||
</t> | </t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>IANA Considerations</name> | ||||
<section title="IANA Considerations"> | <t> | |||
<t> | This document registers a new XML namespace, a new XML schema, and | |||
This document registers a new XML namespace, a new XML schema and | the media type for the schema. | |||
the MIME type for the schema. | ||||
This document also registers the "CLUE" Application Service tag | This document also registers the "CLUE" Application Service tag | |||
and the "CLUE" Application Protocol tag and | and the "CLUE" Application Protocol tag and | |||
defines registries for the CLUE messages and response codes. | defines registries for the CLUE messages and response codes. | |||
</t> | </t> | |||
<section title="URN Sub-Namespace Registration"> | <section numbered="true" toc="default"> | |||
<t> | <name>URN Sub-Namespace Registration</name> | |||
<t> | ||||
This section registers a new XML namespace, | This section registers a new XML namespace, | |||
<spanx style="verb">"urn:ietf:params:xml:ns:clue-protocol"</spanx>. | <tt>urn:ietf:params:xml:ns:clue-protocol</tt>. | |||
</t> | ||||
<t> | ||||
URI: urn:ietf:params:xml:ns:clue-protocol | ||||
</t> | ||||
<t> | ||||
Registrant Contact: | ||||
IESG (iesg@ietf.org). | ||||
</t> | </t> | |||
<t> | ||||
XML: | <dl newline="false" spacing="normal"> | |||
<dt>URI:</dt> | ||||
<dd>urn:ietf:params:xml:ns:clue-protocol</dd> | ||||
<dt>Registrant Contact:</dt> | ||||
<dd>IESG (iesg@ietf.org).</dd> | ||||
</dl> | ||||
<t>XML: | ||||
</t> | </t> | |||
<t> | <sourcecode markers="true" type="xml"><![CDATA[ | |||
<figure> | ||||
<artwork> | ||||
<![CDATA[ | ||||
BEGIN | ||||
<?xml version="1.0"?> | <?xml version="1.0"?> | |||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | |||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> | <html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en"> | |||
<head> | <head> | |||
<title>CLUE Messages</title> | <title>CLUE Messages</title> | |||
</head> | </head> | |||
<body> | <body> | |||
<h1>Namespace for CLUE Messages</h1> | <h1>Namespace for CLUE Messages</h1> | |||
<h2>urn:ietf:params:xml:ns:clue-protocol</h2> | <h2>urn:ietf:params:xml:ns:clue-protocol</h2> | |||
[[NOTE TO IANA/RFC-EDITOR: Please update RFC URL and replace XXXX | <p>See <a href="https://www.rfc-editor.org/rfc/rfc8847.txt"> | |||
with the RFC number for this specification.]] | RFC 8847</a>.</p> | |||
<p>See <a href="[[RFC URL]]"> | ||||
RFCXXXX</a>.</p> | ||||
</body> | </body> | |||
</html> | </html> | |||
END | ]]></sourcecode> | |||
]]> | </section> | |||
</artwork> | <section numbered="true" toc="default"> | |||
</figure> | <name>XML Schema Registration</name> | |||
</t> | <t> | |||
</section> | This section registers an XML schema per the guidelines in <xref target="RFC3688 | |||
" format="default"/>. | ||||
<section title="XML Schema registration"> | ||||
<t> | ||||
This section registers an XML schema per the guidelines in <xref target="RFC3688 | ||||
"/>. | ||||
</t> | ||||
<t> | ||||
URI: | ||||
urn:ietf:params:xml:schema:clue-protocol | ||||
</t> | ||||
<t> | ||||
Registrant Contact: | ||||
IESG (iesg@ietf.org). | ||||
</t> | ||||
<t> | ||||
Schema: | ||||
The XML for this schema can be found as the entirety of | ||||
<xref target="sec-schema"/> of this document. | ||||
</t> | </t> | |||
</section> | <dl newline="false" spacing="normal"><dt>URI:</dt> | |||
<dd>urn:ietf:params:xml:schema:clue-protocol</dd> | ||||
<dt>Registrant Contact:</dt> | ||||
<dd>IESG (iesg@ietf.org).</dd> | ||||
<dt>Schema:</dt> | ||||
<dd>The XML for this schema can be found in | ||||
<xref target="sec-schema" format="default"/> of this document.</dd> | ||||
</dl> | ||||
</section> | ||||
<section title="MIME Media Type Registration for 'application/clue+xml'"> | <section numbered="true" toc="default"> | |||
<t>This section registers the <spanx style="verb"> | <name>Media Type Registration for "application/clue+xml"</name | |||
"application/clue+xml"</spanx> MIME type. | > | |||
<t>This section registers the <tt> | ||||
application/clue+xml</tt> media type. | ||||
</t> | </t> | |||
<t>To: ietf-types@iana.org</t> | <dl newline="false" spacing="normal"> | |||
<t>Subject: | <dt>To:</dt> | |||
Registration of MIME media type application/clue+xml | <dd>ietf-types@iana.org</dd> | |||
</t> | <dt>Subject:</dt> | |||
<t>MIME media type name: | <dd>Registration of media type "application/clue+xml"</dd> | |||
application</t> | <dt>Media type name:</dt> | |||
<t>MIME subtype name: clue+xml</t> | <dd>application</dd> | |||
<t>Required parameters: (none)</t> | <dt>Subtype name:</dt> | |||
<t>Optional parameters: charset <vspace/> | <dd>clue+xml</dd> | |||
Same as the charset parameter of "application/xml" as specified in | <dt>Required parameters:</dt> | |||
<xref target="RFC7303"/>, Section 3.2. | <dd>(none)</dd> | |||
</t> | <dt>Optional parameters:</dt> | |||
<t>Encoding considerations: | <dd>charset. Same as the charset parameter of "application&wj;/xml" as s | |||
Same as the encoding considerations of | pecified in | |||
"application/xml" as specified in <xref target="RFC7303"/>, Section 3.2. | <xref target="RFC7303" sectionFormat="comma" section="4.2"/>.</dd> | |||
</t> | <dt>Encoding considerations:</dt> | |||
<t>Security considerations: | <dd>Same as the encoding considerations of | |||
This content type is designed to carry | "application/xml" as specified in | |||
<xref target="RFC7303" sectionFormat="comma" section="4.2"/>.</dd> | ||||
<dt>Security considerations:</dt> | ||||
<dd>This content type is designed to carry | ||||
protocol data related to telepresence session control. Some of the data | protocol data related to telepresence session control. Some of the data | |||
could be considered private. This media type does not provide any | could be considered private. This media type does not provide any | |||
protection and thus other mechanisms such as those described in | protection; thus, other mechanisms, such as those described in | |||
Section Security are required to protect the data. This media type does | <xref target="sec-cons"/> of this document, are required to protect the data. T | |||
not contain executable content. | his media type does | |||
</t> | not contain executable content.</dd> | |||
<t>Interoperability considerations: None. | <dt>Interoperability considerations:</dt> | |||
</t> | <dd>None.</dd> | |||
<t>Published specification: | <dt>Published specification:</dt> | |||
RFC XXXX | <dd>RFC 8847 | |||
[[NOTE TO IANA/RFC-EDITOR: | </dd> | |||
Please replace XXXX with the RFC number for this specification.]] | <dt>Applications that use this media type:</dt> | |||
</t> | <dd>CLUE Participants.</dd> | |||
<t>Applications that use this media type: | ||||
CLUE participants. | ||||
</t> | ||||
<t>Additional Information: | ||||
Magic Number(s): (none), <vspace/> | ||||
File extension(s): .xml, <vspace/> | ||||
Macintosh File Type Code(s): TEXT. <vspace/> | ||||
</t> | ||||
<t>Person & email address to contact for further information: | ||||
Simon Pietro Romano (spromano@unina.it). | ||||
</t> | ||||
<t>Intended usage: | ||||
LIMITED USE | ||||
</t> | ||||
<t>Author/Change controller: | ||||
The IETF | ||||
</t> | ||||
<t>Other information: | ||||
This media type is a specialization of | ||||
application/xml <xref target="RFC7303"/>, and many of the considerations | ||||
described there also apply to application/clue+xml. | ||||
</t> | ||||
</section> | <dt>Additional Information:</dt> | |||
<dd><t><br/></t> | ||||
<dl newline="false" spacing="compact"> | ||||
<dt>Magic Number(s):</dt><dd>(none)</dd> | ||||
<dt>File extension(s):</dt><dd>.xml</dd> | ||||
<dt>Macintosh File Type Code(s):</dt><dd>TEXT</dd> | ||||
</dl> | ||||
</dd> | ||||
<dt>Person & email address to contact for further information:</dt> | ||||
<dd>Simon Pietro Romano (spromano@unina.it).</dd> | ||||
<dt>Intended usage:</dt> | ||||
<dd>LIMITED USE</dd> | ||||
<dt>Author/Change controller:</dt> | ||||
<dd>The IETF</dd> | ||||
<section title="CLUE Protocol Registry"> | <dt>Other information:</dt> | |||
<t> | <dd>This media type is a specialization of | |||
The document requests that the IANA creates new registries for CLUE messages and | application/xml <xref target="RFC7303" format="default"/>, and many of the consi | |||
response codes. | derations | |||
described there also apply to application/clue+xml.</dd> | ||||
</dl> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>CLUE Protocol Registry</name> | ||||
<t> | ||||
Per this document, IANA has created new registries for CLUE messages and respons | ||||
e codes. | ||||
</t> | </t> | |||
<section title="CLUE Message Types"> | <section numbered="true" toc="default"> | |||
<t> | <name>CLUE Message Types</name> | |||
<t> | ||||
The following summarizes the registry for CLUE messages: | The following summarizes the registry for CLUE messages: | |||
</t> | </t> | |||
<t> | <dl newline="false" spacing="normal"> | |||
Related Registry: CLUE Message Types Registry | <dt>Related Registry:</dt> | |||
</t> | <dd>CLUE Message Types</dd> | |||
<t> | <dt>Defining RFC:</dt> | |||
Defining RFC: | <dd>RFC 8847</dd> | |||
RFC XXXX | <dt>Registration/Assignment Procedures:</dt> | |||
[[NOTE TO IANA/RFC-EDITOR: | <dd>Following the policies outlined | |||
Please replace XXXX with the RFC number for this specification.]] | in <xref target="RFC8126" format="default"/>, the IANA policy for assigning new | |||
</t> | values for the | |||
<t> | CLUE message types for the CLUE protocol is Specification Required.</dd> | |||
Registration/Assignment Procedures: Following the policies outlined | <dt>Registrant Contact:</dt> | |||
in <xref target="RFC8126"/>, the IANA policy for assigning new values for the | <dd>IESG (iesg@ietf.org).</dd> | |||
CLUE message types for the CLUE protocol is Specification Required. | </dl> | |||
</t> | <t> | |||
<t> | The initial table of CLUE messages is populated using the | |||
Registrant Contact: | CLUE messages described in <xref target="sec-messages" format="default"/> | |||
IESG (iesg@ietf.org). | and defined in the XML schema in <xref target="sec-schema" format="default"/>. | |||
</t> | ||||
<t> | ||||
The initial Message table is populated using the | ||||
CLUE messages described in <xref target="sec-messages"/> | ||||
and defined in the XML schema in <xref target="sec-schema"/>. | ||||
</t> | </t> | |||
<table align="center"> | ||||
<texttable title="IANA-CLUE"> | <name>Initial IANA Table of CLUE Messages</name> | |||
<ttcol>Message</ttcol> | <thead> | |||
<ttcol>Description</ttcol> | <tr> | |||
<ttcol>Reference</ttcol> | <th align="left">Message</th> | |||
<c>options</c> | <th align="left">Description</th> | |||
<c>Sent by the CI to the CR in the initiation | <th align="left">Reference</th> | |||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">options</td> | ||||
<td align="left">Sent by the CI to the CR in the initiation | ||||
phase to specify the roles played by the CI, | phase to specify the roles played by the CI, | |||
the supported versions and the supported extensions.</c> | the supported versions, and the supported extensions.</td> | |||
<c>RFCXXXX</c> | <td align="left">RFC 8847</td> | |||
<c>optionsResponse</c> | </tr> | |||
<c>Sent by the CI to the CR in reply to an 'options' message | <tr> | |||
to finally estabilsh the | <td align="left">optionsResponse</td> | |||
version and the extensions to be used in the following CLUE messages | <td align="left">Sent by the CI to the CR in reply to an | |||
exchange.</c> | 'options' message, to establish the | |||
<c>RFCXXXX</c> | version and extensions to be used in the subsequent exchange of CLUE messages.</ | |||
<c>advertisement</c> | td> | |||
<c>Sent by the MP to the MC to specify the telepresence capabilities | <td align="left">RFC 8847</td> | |||
of the MP expressed according to the CLUE framework.</c> | </tr> | |||
<c>RFCXXXX</c> | <tr> | |||
<c>ack</c> | <td align="left">advertisement</td> | |||
<c>Sent by the MC to the MP to acknowledge the reception of | <td align="left">Sent by the MP to the MC to specify the telepre | |||
an 'advertisement' message.</c> | sence capabilities | |||
<c>RFCXXXX</c> | of the MP expressed according to the CLUE framework.</td> | |||
<c>configure</c> | <td align="left">RFC 8847</td> | |||
<c>Sent by the MC to the MP to specify the desired media captures | </tr> | |||
among those specified in the 'advertisement'.</c> | <tr> | |||
<c>RFCXXXX</c> | <td align="left">ack</td> | |||
<c>configureResponse</c> | <td align="left">Sent by the MC to the MP to acknowledge the rec | |||
<c>Sent by the MP to the MC in reply to a CONFIGURE message to | eption of | |||
communicate if the configuration request has been successfully | an 'advertisement' message.</td> | |||
processed or not.</c> | <td align="left">RFC 8847</td> | |||
<c>RFCXXXX</c> | </tr> | |||
</texttable> | <tr> | |||
<td align="left">configure</td> | ||||
</section> | <td align="left">Sent by the MC to the MP to specify the desired | |||
<section title="CLUE Response Codes"> | media captures | |||
<t> | among those specified in the 'advertisement'.</td> | |||
The following summarizes the requested registry for CLUE response codes: | <td align="left">RFC 8847</td> | |||
</t> | </tr> | |||
<t> | <tr> | |||
Related Registry: CLUE Response Code Registry | <td align="left">configureResponse</td> | |||
</t> | <td align="left">Sent by the MP to the MC in reply to a 'configu | |||
<t> | re' message to | |||
Defining RFC: | communicate whether or not the configuration request has been successfully | |||
RFC XXXX | processed.</td> | |||
[[NOTE TO IANA/RFC-EDITOR: | <td align="left">RFC 8847</td> | |||
Please replace XXXX with the RFC number for this specification.]] | </tr> | |||
</t> | </tbody> | |||
<t> | </table> | |||
Registration/Assignment Procedures: Following the policies outlined | </section> | |||
in <xref target="RFC8126"/>, the IANA policy for assigning new values for the | <section numbered="true" toc="default"> | |||
Response codes for CLUE shall be Specification Required. | <name>CLUE Response Codes</name> | |||
</t> | <t> | |||
<t> | The following summarizes the registry for CLUE response codes: | |||
Registrant Contact: | ||||
IESG (iesg@ietf.org). | ||||
</t> | </t> | |||
<t> | ||||
The initial Response-code table is populated using the | <dl newline="false" spacing="normal"> | |||
Response codes defined in <xref target="sec-resp-codes"/> | <dt>Related Registry:</dt> | |||
<dd>CLUE Response Codes</dd> | ||||
<dt>Defining RFC:</dt> | ||||
<dd>RFC 8847</dd> | ||||
<dt>Registration/Assignment Procedures:</dt> | ||||
<dd>Following the policies outlined | ||||
in <xref target="RFC8126" format="default"/>, the IANA policy for assigning new | ||||
values for the | ||||
response codes for CLUE is Specification Required.</dd> | ||||
<dt>Registrant Contact:</dt> | ||||
<dd>IESG (iesg@ietf.org).</dd> | ||||
</dl> | ||||
<t> | ||||
The initial table of CLUE response codes is populated using the | ||||
response codes defined in <xref target="sec-resp-codes" format="default"/> | ||||
as follows: | as follows: | |||
</t> | </t> | |||
<table align="center"> | ||||
<texttable> | <name>Initial IANA Table of CLUE Response Codes</name> | |||
<ttcol>Number</ttcol> | <thead> | |||
<ttcol>Default Response String</ttcol> | <tr> | |||
<ttcol>Description</ttcol> | <th align="left">Number</th> | |||
<ttcol>Reference</ttcol> | <th align="left">Default Reason String</th> | |||
<c>200</c> | <th align="left">Description</th> | |||
<c>Success</c> | <th align="left">Reference</th> | |||
<c>The request has been successfully processed.</c> | </tr> | |||
<c>RFCXXXX</c> | </thead> | |||
<c>300</c> | <tbody> | |||
<c>Low-level request error.</c> | <tr> | |||
<c>A generic low-level request error has occurred.</c> | <td align="left">200</td> | |||
<c>RFCXXXX</c> | <td align="left">Success</td> | |||
<c>301</c> | <td align="left">The request has been successfully processed.</t | |||
<c>Bad syntax</c> | d> | |||
<c>The XML syntax of the message | <td align="left">RFC 8847</td> | |||
is not correct.</c> | </tr> | |||
<c>RFCXXXX</c> | <tr> | |||
<c>302</c> | <td align="left">300</td> | |||
<c>Invalid value</c> | <td align="left">Low-level request error</td> | |||
<c>The message contains an | <td align="left">A generic low-level request error has occurred. | |||
invalid parameter value.</c> | </td> | |||
<c>RFCXXXX</c> | <td align="left">RFC 8847</td> | |||
<c>303</c> | </tr> | |||
<c>Conficting values</c> | <tr> | |||
<c>The message contains values | <td align="left">301</td> | |||
that cannot be used together.</c> | <td align="left">Bad syntax</td> | |||
<c>RFCXXXX</c> | <td align="left">The XML syntax of the message | |||
<c>400</c> | is not correct.</td> | |||
<c>Semantic errors</c> | <td align="left">RFC 8847</td> | |||
<c>Semantic errors in the received | </tr> | |||
CLUE protocol message.</c> | <tr> | |||
<c>RFCXXXX</c> | <td align="left">302</td> | |||
<c>401</c> | <td align="left">Invalid value</td> | |||
<c>Version not supported</c> | <td align="left">The message contains an | |||
<c>The protocol version | invalid parameter value.</td> | |||
<td align="left">RFC 8847</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">303</td> | ||||
<td align="left">Conflicting values</td> | ||||
<td align="left">The message contains values | ||||
that cannot be used together.</td> | ||||
<td align="left">RFC 8847</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">400</td> | ||||
<td align="left">Semantic errors</td> | ||||
<td align="left">The received CLUE protocol message contains | ||||
semantic errors.</td> | ||||
<td align="left">RFC 8847</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">401</td> | ||||
<td align="left">Version not supported</td> | ||||
<td align="left">The protocol version | ||||
used in the message | used in the message | |||
is not supported.</c> | is not supported.</td> | |||
<c>RFCXXXX</c> | <td align="left">RFC 8847</td> | |||
<c>402</c> | </tr> | |||
<c>Invalid sequencing</c> | <tr> | |||
<c> | <td align="left">402</td> | |||
Sequence number gap; repeated sequence number; sequence number | <td align="left">Invalid sequencing</td> | |||
outdated. | <td align="left"> | |||
</c> | The received message contains an unexpected sequence number (e.g., | |||
<c>RFCXXXX</c> | sequence number gap, repeated sequence number, or sequence number | |||
<c>403</c> | outdated). | |||
<c>Invalid identifier</c> | </td> | |||
<c>The clueId used in the | <td align="left">RFC 8847</td> | |||
message is not valid | </tr> | |||
or unknown.</c> | <tr> | |||
<c>RFCXXXX</c> | <td align="left">403</td> | |||
<c>404</c> | <td align="left">Invalid identifier</td> | |||
<c>advertisement Expired</c> | <td align="left">The clueId used in the | |||
<c>The sequence number of the advertisement | message is invalid | |||
the configure refers to is out | or unknown.</td> | |||
of date.</c> | <td align="left">RFC 8847</td> | |||
<c>RFCXXXX</c> | </tr> | |||
<c>405</c> | <tr> | |||
<c>Subset choice not allowed</c> | <td align="left">404</td> | |||
<c>The subset choice is not allowed | <td align="left">Advertisement expired</td> | |||
for the specified Multiple Content Capture.</c> | <td align="left">The sequence number of the advertisement | |||
<c>RFCXXXX</c> | the 'configure' message refers to is out | |||
</texttable> | of date.</td> | |||
<td align="left">RFC 8847</td> | ||||
</section> | </tr> | |||
</section> | <tr> | |||
</section> | <td align="left">405</td> | |||
<td align="left">Subset choice not allowed</td> | ||||
<section title="Acknowledgments"> | <td align="left">The subset choice is not allowed | |||
<t> | for the specified Multiple Content Capture.</td> | |||
The authors thank all the CLUErs for their precious feedbacks and support, | <td align="left">RFC 8847</td> | |||
in particular Paul Kyzivat, Christian Groves and Scarlett Liuyan. | </tr> | |||
</t> | </tbody> | |||
</section> | </table> | |||
</section> | ||||
</middle> | </section> | |||
<back> | </section> | |||
</middle> | ||||
<references title="Normative References"> | <back> | |||
<references> | ||||
<!-- RFC2119, boilerplate text --> | <name>References</name> | |||
<?rfc include="reference.RFC.2119"?> | <references> | |||
<name>Normative References</name> | ||||
<!-- RFC8174, boilerplate text --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | |||
<?rfc include="reference.RFC.8174"?> | xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | ||||
<!-- clue framework --> | xml"/> | |||
<?rfc include="reference.I-D.ietf-clue-framework"?> | ||||
<!-- clue signaling WG doc--> | ||||
<?rfc include="reference.I-D.ietf-clue-signaling"?> | ||||
<!-- clue data channel --> | ||||
<?rfc include="reference.I-D.ietf-clue-datachannel"?> | ||||
<!-- clue data model --> | ||||
<?rfc include="reference.I-D.ietf-clue-data-model-schema"?> | ||||
<!-- RFC3550, rtp --> | ||||
<?rfc include="reference.RFC.3550"?> | ||||
<!-- RFC3688 --> | ||||
<?rfc include="reference.RFC.3688"?> | ||||
<!-- RFC8126 --> | ||||
<?rfc include="reference.RFC.8126"?> | ||||
<!-- RFC7303 --> | ||||
<?rfc include="reference.RFC.7303"?> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<!-- clue requirements --> | ||||
<?rfc include="reference.RFC.7262"?> | ||||
<!-- RFC4353, sip conferencing framework --> | ||||
<?rfc include="reference.RFC.4353"?> | ||||
<!-- <?rfc include="reference.RFC.5117"?> --> | ||||
<!-- RFC7667, rtp topologies --> | <!-- draft-ietf-clue-framework (RFC 8845) --> | |||
<?rfc include="reference.RFC.7667"?> | <reference anchor="RFC8845" target="https://www.rfc-editor.org/info/rfc8845" | |||
> | ||||
<front> | ||||
<title>Framework for Telepresence Multi-Streams</title> | ||||
<author initials="M" surname="Duckworth" fullname="Mark Duckworth" | ||||
role="editor"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="A" surname="Pepperell" fullname="Andrew Pepperell" | ||||
> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S" surname="Wenger" fullname="Stephan Wenger"> | ||||
<organization/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8845"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8845"/> | ||||
</reference> | ||||
<!-- RFC6120, XMPP --> | <!-- draft-ietf-clue-signaling (RFC 8848) --> | |||
<?rfc include="reference.RFC.6120"?> | <reference anchor="RFC8848" target="https://www.rfc-editor.org/info/rfc8 | |||
848"> | ||||
<front> | ||||
<title>Session Signaling for Controlling Multiple Streams for Telepr | ||||
esence (CLUE)</title> | ||||
<author initials="R" surname="Hanton" fullname="Robert Hanton"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="P" surname="Kyzivat" fullname="Paul Kyzivat"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="L" surname="Xiao" fullname="Lennard Xiao"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C" surname="Groves" fullname="Christian Groves"> | ||||
<organization/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8848"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8848"/> | ||||
</reference> | ||||
<!-- RFC1122, XMPP --> | <!-- draft-ietf-clue-datachannel (RFC 8850) --> | |||
<?rfc include="reference.RFC.1122"?> | <reference anchor="RFC8850" target="https://www.rfc-editor.org/info/rfc8 | |||
850"> | ||||
<front> | ||||
<title>Controlling Multiple Streams for Telepresence (CLUE) Protocol | ||||
Data Channel</title> | ||||
<author initials="C." surname="Holmberg" fullname="Christer Holmberg | ||||
"> | ||||
<organization/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8850"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8850"/> | ||||
</reference> | ||||
<!-- RFC3261, SIP --> | <!-- draft-ietf-clue-data-model-schema (RFC 8846) --> | |||
<?rfc include="reference.RFC.3261"?> | <reference anchor="RFC8846" target="https://www.rfc-editor.org/info/rfc8 | |||
846"> | ||||
<front> | ||||
<title>An XML Schema for the Controlling Multiple Streams for | ||||
Telepresence (CLUE) Data Model</title> | ||||
<author initials="R" surname="Presta" fullname="Roberta Presta"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S P." surname="Romano" fullname="Simon Romano"> | ||||
<organization/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8846"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8846"/> | ||||
</reference> | ||||
</references> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3550. | |||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3688. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7303. | ||||
xml"/> | ||||
</back> | <reference anchor='W3C.REC-xml-20081126' | |||
target='https://www.w3.org/TR/2008/REC-xml-20081126'> | ||||
<front> | ||||
<title>Extensible Markup Language (XML) 1.0 (Fifth Edition)</title> | ||||
<author initials='T.' surname='Bray' fullname='Tim Bray'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='J.' surname='Paoli' fullname='Jean Paoli'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='M.' surname='Sperberg-McQueen' fullname='Michael Sperberg | ||||
-McQueen'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='E.' surname='Maler' fullname='Eve Maler'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='F.' surname='Yergeau' fullname='Francois Yergeau'> | ||||
<organization /> | ||||
</author> | ||||
<date month='November' year='2008' /> | ||||
</front> | ||||
<refcontent>World Wide Web Consortium Recommendation REC-xml-20081126</refc | ||||
ontent> | ||||
</reference> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7262. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4353. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7667. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6120. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1122. | ||||
xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3261.xml"/> | ||||
</references> | ||||
</references> | ||||
<section numbered="false" toc="default"> | ||||
<name>Acknowledgements</name> | ||||
<t> | ||||
The authors thank all the CLUErs for their precious feedback and support -- in | ||||
particular, <contact fullname="Paul Kyzivat"/>, <contact fullname="Christian | ||||
Groves"/>, and <contact fullname="Scarlett Liuyan"/>. | ||||
</t> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 365 change blocks. | ||||
1862 lines changed or deleted | 1731 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/ |