<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
	<!ENTITY rfc2119 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
   	<!ENTITY rfc2616 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2616.xml'>
	<!ENTITY rfc3261 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3261.xml'>
	<!ENTITY rfc3262 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3262.xml'>
	<!ENTITY rfc3263 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3263.xml'>
	<!ENTITY rfc3264 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3264.xml'>
	<!ENTITY rfc3550 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3550.xml'>
	<!ENTITY rfc3725 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3725.xml'>
	<!ENTITY rfc4574 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4574.xml'>
    <!ENTITY rfc3023 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3023.xml'>
    <!ENTITY rfc5022 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5022.xml'>
    <!ENTITY rfc5707 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5707.xml'>
	<!ENTITY rfc5167 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5167.xml'>
	<!ENTITY mediactrl-cfw PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-mediactrl-sip-control-framework-12.xml'>
    <!ENTITY xcon-conf-data PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-xcon-common-data-model-22.xml'>
	<!ENTITY rfc3688 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3688.xml'>
	<!ENTITY rfc4288 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4288.xml'>
	<!ENTITY rfc2277 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2277.xml'>
	<!ENTITY rfc5234 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5234.xml'>
	<!ENTITY rfc2045 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2045.xml'>
	<!ENTITY rfc5226 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml'>
    <!ENTITY rfc5646 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5646.xml'>
    <!ENTITY rfc4647 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4647.xml'>
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<?rfc toc="yes"?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no"?>
<?rfc strict="yes" ?>

<rfc category="std" docName="draft-ietf-mediactrl-mixer-control-package-14" 
     ipr="pre5378Trust200902">
	<front>

		<title abbrev="Mixer Control Package">A Mixer Control Package
		for the Media Control Channel Framework</title>
		
		<author fullname="Scott McGlashan" initials="S." surname="McGlashan">
			<organization>Hewlett-Packard</organization>
			<address>
				<email>smcg.stds01@mcglashan.org</email>
			</address>
		</author>

		<author fullname="Tim Melanchuk" initials="T." surname="Melanchuk">
			<organization>Rain Willow Communications</organization>
			<address>
			
				<email>tim.melanchuk@gmail.com</email>
			</address>
		</author>

		<author fullname="Chris Boulton" initials="C." surname="Boulton">
			<organization>NS-Technologies</organization>
			<address>
				<email>chris@ns-technologies.com</email>
			</address>
		</author>

		
		<date year="2011"/>
		<workgroup/>
		<abstract>

<t>This document defines a Media Control Channel Framework Package for
managing mixers for media conferences and connections.  The package
defines request elements for managing conference mixers, managing mixers
between conferences and/or connections, as well as associated responses
and notifications. The package also defines elements for auditing
package capabilities and mixers.
</t>

		</abstract>
		<!-- Abstract -->
	</front>
	<middle>


<section title="Introduction">


<t>The Media Control Channel Framework <xref
target="I-D.ietf-mediactrl-sip-control-framework"/> provides a generic
approach for establishment and reporting capabilities of remotely
initiated commands.  The Control Framework - an equivalent term for the
Media Control Channel Framework - utilizes many functions provided by
the Session Initiation Protocol <xref target="RFC3261"/> (SIP) for the
rendezvous and establishment of a reliable channel for control
interactions.  The Control Framework also introduces the concept of a
Control Package.  A Control Package is an explicit usage of the Control
Framework for a particular interaction set.  This specification defines
a package for media conference mixers and media connection mixers.  </t>

<t>This package defines mixer management elements for creating,
modifying and deleting conference mixers, elements for joining,
modifying and unjoining media streams between connections and
conferences (including mixers between connections), as well as
associated responses and notifications.  The package also defines
elements for auditing package capabilities and mixers.
</t>

<t>This package has been designed to satisfy media mixing requirements
documented in the Media Server Control Protocol Requirements document
(<xref target="RFC5167"/>); more specifically REQ-MCP-22, REQ-MCP-23,
REQ-MCP-24, REQ-MCP-25, REQ-MCP-26 and REQ-MCP-27. </t>

<t>The package provides the major conferencing functionality of SIP
Media Server languages such as MSCML (<xref target="RFC5022"/>) and MSML
(<xref target="RFC5707"/>). A key differentiator is that this package
provides such functionality using the Media Control Channel Framework.
</t>

<t>Out of scope for this mixer package are more advanced functions
including personalized video mixes for conference participants, support
for floor control protocols, as well as support for video overlays and
text insertion.  Such functionality can be addressed by extensions to
this package (through addition of foreign elements or attributes from
another namespace) or use of other control packages which could build
upon this package.
</t>


<t>The functionality of this package is defined by messages, containing
XML <xref target="XML"/> elements, transported using the Media Control
Channel Framework. The XML elements can be divided into two types: mixer
management elements; and elements for auditing package capabilities as
well as mixers managed by the package.
</t>


<t>The document is organized as follows.  

<xref target="sec:Control_Package_Definition"/> describes how this
control package fulfills the requirements for a Media Control Channel
Framework control package.


<xref target="defn.elements"/> describes the syntax and semantics of
defined elements, including mixer management (<xref
target="defn.mixermgt"/>) and audit elements (<xref
target="defn.auditmgt"/>).

<xref target="schema"/> describes an XML schema for these elements and
provides extensibility by allowing attributes and elements from other
namespaces.

<xref target="examples"/> provides examples of package usage.

<xref target="security"/> describes important security considerations
for use of this control package. <xref
target="sec:IANA_Considerations"/> provides information on IANA
registration of this control package, including its name, XML namespace
and MIME media type.

</t>

</section>

<!-- Introduction -->
		
<section anchor="terminology" title="Conventions and Terminology">
			
<t>In this document, <xref target="RFC2119">BCP 14/RFC 2119</xref>
defines the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY",
and "OPTIONAL".  In addition, BCP 15 indicates requirement levels for
compliant implementations.  </t>
			
<t>The following additional terms are defined for use in this document:
			
<list style="hanging">

<t hangText="Application server:">A SIP <xref target="RFC3261"/>
application server (AS) is a control client that hosts and executes 
services such as interactive media and conferencing in an operator's network.
An AS controls the media server (MS), influencing and
impacting the SIP sessions terminating on a media server, 
which the AS can have established for example using
SIP third party call control.</t>

<t hangText="Media Server:">A media server (MS) processes media streams
on behalf of an AS by offering functionality such as interactive media,
conferencing, and transcoding to the end user. Interactive media
functionality is realized by way of dialogs, which are identified by a
URI and initiated by the application server.  </t>

<t hangText="MS Conference:">A MS Conference provides the media related
mixing resources and services for conferences. In this document, A MS
Conference is often referred to simply as a conference. </t>

<t hangText="MS Connection:">A Media Server connection
represents the termination on a media server of one or 
more RTP <xref target="RFC3550"/> sessions that are
associated to a single SIP dialog. A media server receives
media from the output(s) of a connection and it transmits
media on the input(s) of a connection.</t>

<t hangText="Media Stream:">A media stream on a media server represents
a media flow between either a connection and a conference, between two
connections, or between two conferences. Streams can be audio or video
and can be bi-directional or uni-directional. </t>

</list>
</t>

</section>

<!-- Conventions and Terminology -->


<section anchor="sec:Control_Package_Definition" title="Control Package Definition">

<t>This section fulfills the mandatory requirement for information that
MUST be specified during the definition of a Control Framework Package,
as detailed in Section 8 of <xref
target="I-D.ietf-mediactrl-sip-control-framework"/>.</t>
		  
<section anchor="sec:Control_Package_Name" title="Control Package Name">

  <t>The Control Framework requires a Control Package definition to
  specify and register a unique name. The name and version of this
  Control Package is "msc-mixer/1.0" (Media Server Control - Mixer -
  version 1.0). Its IANA registration is specified in <xref
  target="sec:Control_Package_Reg"/>. </t>

  <t>Since this is the initial ("1.0") version of the control package,
  there are no backwards compatibility issues to address.
</t>
		     
</section>

<!-- Control Package Name -->

<section anchor="sec:Message_Usage" title="Framework Message Usage">

<t>The Control Framework requires a Control Package to explicitly detail
the control messages that can be used as well as provide an indication
of directionality between entities. This will include which role type is
allowed to initiate a request type. </t>

<t>This package specifies CONTROL and response messages in terms of XML
elements defined in <xref target="defn.elements"/>, where the message
bodies have the MIME media type defined in <xref
target="sec:MIME_Reg"/>. These elements describe requests, response and
notifications and all are contained within a root &lt;mscmixer> element
(<xref target="defn.mscmixer"/>). </t>

<t>In this package, the MS operates as a Control Server in receiving
requests from, and sending responses to, the AS (operating as Control
Client). Mixer management requests and responses are defined in <xref
target="defn.mixermgt"/>.  Audit requests and responses are defined in
<xref target="defn.auditmgt"/>. Mixer management and audit responses are
carried in a framework 200 response or REPORT message bodies. This
package's response codes are defined in <xref
target="defn.statuscodes"/>. </t>

<t>Note that package responses are different from framework response
codes. Framework error response codes (see Section 8 of <xref
target="I-D.ietf-mediactrl-sip-control-framework"/>) are used when the
request or event notification is invalid; for example, a request is
invalid XML (400), or not understood (500). </t>


<t>The MS also operates as a Control Client in sending event
notification to the AS (Control Server). Event notifications (<xref
target="defn.event"/>) are carried in CONTROL message bodies. The AS
MUST respond with a Control Framework 200 response.
</t>
	
</section>

<!-- Framework Message Usage -->

<section anchor="sec:Common_XML" title="Common XML Support">

<t>The Control Framework requires a Control Package definition to
specify if the attributes for media dialog or conference references are
required.</t>

<t>This package requires that the XML Schema in Section 16.1 of <xref
target="I-D.ietf-mediactrl-sip-control-framework"/> MUST be supported
for media dialogs and conferences. </t>


<t>The package uses "connectionid" and "conferenceid" attributes for
various element definitions (<xref target="defn.elements"/>). The XML
schema (<xref target="schema"/>) imports the definitions of these
attributes from the framework schema.
</t>

</section>

<!-- Common XML Support -->

<section anchor="sec:Control_Body" title="CONTROL Message Body">

<t>The Control Framework requires a Control Package to define the
control body that can be contained within a CONTROL command request and
to indicate the location of detailed syntax definitions and semantics
for the appropriate body types.
</t>

<t>When operating as Control Server, the MS receives CONTROL messages
with the MIME media type defined in <xref target="sec:MIME_Reg"/> and a
body containing a &lt;mscmixer> element (<xref target="defn.mscmixer"/>)
with either a mixer management or audit request child element.
</t>

<t>The following mixer management request elements are carried in
CONTROL message bodies to MS: &lt;createconference> (<xref
target="defn.createconference"/>), &lt;modifyconference> (<xref
target="defn.modifyconference"/>), &lt;destroyconference> (<xref
target="defn.destroyconference"/>), &lt;join> (<xref
target="defn.join"/>), &lt;modifyjoin> (<xref
target="defn.modifyjoin"/>) and &lt;unjoin> (<xref
target="defn.unjoin"/>) elements.
</t>

<t> The &lt;audit> request element (<xref target="defn.audit"/>) is also
carried in CONTROL message bodies.
</t>

<t>When operating as Control Client, the MS sends CONTROL messages with
the MIME media type defined in <xref target="sec:MIME_Reg"/> and a body
containing a &lt;mscmixer> element (<xref target="defn.mscmixer"/>) with
a notification &lt;event> child element (<xref target="defn.event"/>).
</t>

</section>

<!-- CONTROL Message Body -->


<section anchor="sec:REPORT_Body" title="REPORT Message Body">

<t>The Control Framework requires a control package definition to define
the REPORT body that can be contained within a REPORT command request,
or that no report package body is required. This section indicates the
location of detailed syntax definitions and semantics for the
appropriate body types.
</t>

<t>When operating as Control Server, the MS sends REPORT bodies with the
MIME media type defined in <xref target="sec:MIME_Reg"/> and a
&lt;mscmixer> element with a response child element.  The response
element for mixer management requests is a &lt;response> element (<xref
target="defn.response"/>). The response element for an audit request is
a &lt;auditresponse> element (<xref target="defn.auditresponse"/>).
</t>

</section> <!-- REPORT Message Body -->
		   

<section anchor="audit" title="Audit">

<t>The Control Framework encourages Control Packages to specify whether
auditing is available, how it is triggered as well as the query/response
formats. </t> 

<t>This Control Packages supports auditing of package capabilities and
mixers on the MS. An audit request is carried in a CONTROL message and
an audit response in a REPORT message (or a 200 response to the CONTROL
if it can execute the audit in time).
</t>

<t>The syntax and semantics of audit request and response elements is
defined in <xref target="defn.auditmgt"/>.</t>

</section>


<section anchor="cfw_examples" title="Examples">

<t>The Control Framework recommends Control Packages to provide a range
of message flows that represent common flows using the package and this
framework document. </t>

<t>This Control Package provides examples of such message flows in 
<xref target="examples"/>.</t>


</section>
 
</section>
		

<!-- Control Package Definition -->

<section anchor="defn.elements" title="Element Definitions">

<t>This section defines the XML elements for this package.  The elements
are defined in the XML namespace specified in <xref
target="sec:URN_Reg"/>.
</t>

<t>The root element is &lt;mscmixer> (<xref target="defn.mscmixer"/>).
All other XML elements (requests, responses and notification elements)
are contained within it.  Child elements describe mixer management
(<xref target="defn.mixermgt"/>) and audit (<xref
target="defn.auditmgt"/>) functionality. Response status codes are
defined in <xref target="defn.statuscodes"/> and type definitions in
<xref target="defn.types"/>.
</t>

<t>Implementation of this control package MUST address the Security
Considerations described in <xref target="security"/>. </t>

<t>Implementation of this control package MUST adhere to the syntax and
semantics of XML elements defined in this section and the schema (<xref
target="schema"/>).  The XML schema supports extensibility by allowing
attributes and elements from other namespaces. Implementations MAY
support attributes and elements from other (foreign) namespaces. If an
MS implementation receives a &lt;mscmixer> element containing attributes
or elements from another namespace which it does not support, the MS
sends a 428 response (<xref target="defn.statuscodes"/>).
</t>

<t>Extensible attributes and elements are not described in this
section. In all other cases where there is a difference in constraints
between the XML schema and the textual description of elements in this
section, the textual definition takes priority.
</t>


<t>Some elements in this control package contain attributes whose value
is descriptive text primarily for diagnostic use. The implementation can
indicated the language used in the descriptive text by means of a
'desclang' attribute (<xref target="RFC2277"/>). The desclang attribute
can appear on the root element as well as selected subordinate elements
(see <xref target="defn.mscmixer"/>). The desclang attribute value on
the root element applies to all desclang attributes in subordinate
elements unless the subordinate element has an explicit desclang
attribute which overrides it.
</t>

<t>Usage examples are provided in <xref target="examples"/>. </t>


<section anchor="defn.mscmixer" title="&lt;mscmixer>">

<t>The &lt;mscmixer> element has the following attributes (in addition to
standard XML namespace attributes such as xmlns):

<list style="hanging">

<t hangText="version:">a string specifying the mscmixer package
version. The value is fixed as '1.0' for this version of the
package. The attribute is mandatory.
</t>

<t hangText="desclang:">specifies the language used in descriptive text
attributes of subordinate elements (unless the subordinate element
provides a desclang attribute which overrides the value for its
descriptive text attributes). The descriptive text attributes on
subordinate elements include: the reason attribute on &lt;response>
(<xref target="defn.response"/>), &lt;unjoin-notify> (<xref
target="defn.unjoin-notify"/>), &lt;conferenceexit> (<xref
target="defn.conferenceexit"/>) and &lt;auditresponse> (<xref
target="defn.auditresponse"/>). A valid value is a language identifier
(<xref target="defn.langid"/>).  The attribute is optional.  The default
value is i-default (<xref target="RFC5646">BCP47</xref>).
</t>

</list>
</t>

<t>The &lt;mscmixer> element has the following defined child elements,
only one of which can occur:

<list style="numbers">

<t>mixer management elements defined in <xref target="defn.mixermgt"/>:

<list style="hanging">

<t hangText="&lt;createconference>"> create and configure a new
conference mixer. See <xref target="defn.createconference"/></t>

<t hangText="&lt;modifyconference>"> modify the configuration of an
existing conference mixer. See <xref
target="defn.modifyconference"/></t>

<t hangText="&lt;destroyconference>"> destroy an existing conference
mixer. See <xref target="defn.destroyconference"/></t>

<t hangText="&lt;join>">create and configure media streams between
connections and/or conferences (for example, add a participant to a
conference). See <xref target="defn.join"/></t>

<t hangText="&lt;modifyjoin>">modify the configuration of joined media
streams. See <xref target="defn.modifyjoin"/></t>

<t hangText="&lt;unjoin>">delete a media stream (for example, remove a
participant from a conference). See <xref target="defn.unjoin"/></t>

<t hangText="&lt;response>">response to a mixer request. See <xref
target="defn.response"/></t>

<t hangText="&lt;event>">mixer or subscription notification. See <xref
target="defn.event"/></t>

</list>

</t>

<t>audit elements defined in <xref target="defn.auditmgt"/>:

<list style="hanging">

<t hangText="&lt;audit>">audit package capabilities and managed
mixers. See <xref target="defn.audit"/></t>

<t hangText="&lt;auditresponse>">response to an audit request. See <xref
target="defn.auditresponse"/></t>

</list>

</t>

</list>

</t>


<t>For example, a request to the MS to create a conference mixer:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <createconference/>
</mscmixer>
]]></artwork></figure>
</t>

<t>and a response from the MS that the conference was successfully created:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer"
  desclang="en">
 <response status="200" conferenceid="conference1" 
   reason="conference created"/>
</mscmixer>
]]></artwork></figure>
</t>


</section>

<section anchor="defn.mixermgt" title="Mixer Elements">

<t>This section defines the mixer management XML elements for this
control package. These elements are divided into requests, responses and
notifications.
</t>

<t>Request elements are sent to the MS to request a specific mixer
operation to be executed. The following request elements are defined:

<list style="hanging">
            
<t hangText="&lt;createconference>"> create and configure a new a
conference mixer. See <xref target="defn.createconference"/></t>

<t hangText="&lt;modifyconference>"> modify the configuration of an
existing conference mixer. See <xref
target="defn.modifyconference"/></t>

<t hangText="&lt;destroyconference>"> destroy an existing conference
mixer. See <xref target="defn.destroyconference"/></t>

<t hangText="&lt;join>">create and configure media streams between
connections and/or conferences (for example, add a participant to a
conference). See <xref target="defn.join"/></t>

<t hangText="&lt;modifyjoin>">modify the configuration of joined media
streams. See <xref target="defn.modifyjoin"/></t>

<t hangText="&lt;unjoin>">delete a media stream (for example, remove a
participant from a conference). See <xref target="defn.unjoin"/></t>

</list>
</t>

<t>Responses from the MS describe the status of the requested operation.
Responses are specified in a &lt;response> element (<xref
target="defn.response"/>) which includes a mandatory attribute
describing the status in terms of a numeric code. Response status codes
are defined in <xref target="defn.statuscodes"/>. The MS MUST respond to
a request message with a response message.  If the MS is not able to
process the request and carry out the mixer operation (in whole or in
part), then the request has failed: the MS MUST ensure that no part of
the requested mixer operation is carried out, and the MS MUST indicate
the class of failure using an appropriate 4xx response code. Unless an
error response code is specified for a class of error within this
section, implementations follow <xref target="defn.statuscodes"/> in
determining the appropriate status code for the response.
</t>


<t>Notifications are sent from the MS to provide updates on the status
of a mixer operation or subscription.  Notifications are specified in an
&lt;event> element (<xref target="defn.event"/>).
</t>

<section toc="include" anchor="defn.conferencemgt" title="Conference Elements">

<section toc="include" anchor="defn.createconference" title="&lt;createconference>">

<t>The &lt;createconference> element is sent to the MS to request
creation of a new conference (multiparty) mixer.</t>

<t>The &lt;createconference> element has the following attributes:

<list style="hanging">

<t hangText="conferenceid:">string indicating a unique name for the new
conference.  If this attribute is not specified, the MS MUST create a
unique name for the conference. The value is used in subsequent
references to the conference (e.g. as conferenceid in a
&lt;response>). The attribute is optional. There is no default
value. </t>

<t hangText="reserved-talkers:">indicates the requested number of
guaranteed speaker slots to be reserved for the conference.  A valid
value is a non-negative integer (see <xref
target="defn.nonneginteger"/>). The attribute is optional. The default
value is 0.</t>

<t hangText="reserved-listeners:">indicates the requested number of
guaranteed listener slots to be reserved for the conference.  A valid
value is a non-negative integer (see <xref
target="defn.nonneginteger"/>). The attribute is optional. The default
value is 0.</t>

</list>
</t>


<t>The &lt;createconference> element has the following sequence of child
elements:

<list style="hanging">

<t hangText="&lt;codecs>:">an element to configure the codecs supported
by the conference (see <xref target="defn.codecs"/>). If codecs are
specified, then they impose limitations in media capability when the MS
attempts to join the conference to other entities (see <xref
target="defn.join"/> and <xref target="defn.modifyjoin"/>).  The element
is optional.
</t>

<t hangText="&lt;audio-mixing>:">an element to configure the audio
mixing characteristics of a conference (see <xref
target="sec:audio-mixing"/>). The element is optional.
</t>

<t hangText="&lt;video-layouts>:">an element to configure the video
layouts of a conference (see <xref target="defn.video-layouts"/>). The
element is optional.
</t>

<t hangText="&lt;video-switch>:">an element to configure the video
switch policy for the layout of a conference (see <xref
target="defn.video-switch"/>). The element is optional.
</t>
		
<t hangText="&lt;subscribe>:">an element to request subscription to
conference events. (see <xref target="defn.subscribe"/>). The element is
optional.</t>

</list>
</t>

<t>If the conferenceid attribute specifies a value which is already used
by an existing conference, the MS reports an error (405) and MUST NOT
create a new conference and MUST NOT affect the existing conference.</t>

<t>If the MS is unable to configure the conference according to
specified reserved-talkers or reserved-listeners attributes, the MS
reports an error (420) and MUST NOT create the conference.</t>

<t>If the MS is unable to configure the conference according to a
specified &lt;audio-mixing> element, the MS reports an error (421)
and MUST NOT create the conference.</t>

<t>If the MS is unable to configure the conference according to a
specified &lt;video-layouts> element, the MS reports an error (423)
and MUST NOT create the conference.</t>

<t>If the MS is unable to configure the conference according to a
specified &lt;video-switch> element, the MS reports an error (424)
and MUST NOT create the conference.</t>

<t>If the MS is unable to configure the conference according to a
specified &lt;codecs> element, the MS reports an error (425)
and MUST NOT create the conference.</t>


<t>When a MS has finished processing a &lt;createconference> request, it
MUST reply with an appropriate &lt;response> element (<xref
target="defn.response"/>).  </t>

	
<t>For example, a request to create an audio video conference mixer with
specified codecs, video layout, video switch and subscription:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <createconference conferenceid="conference1" 
       reserved-talkers="1" reserved-listeners="10">
   <codecs>
    <codec name="video">
     <subtype>H264</subtype>
    </codec>
    <codec name="audio">
     <subtype>PCMA</subtype>
    </codec>
   </codecs>
   <audio-mixing type="nbest"/>
   <video-layouts>
    <video-layout min-participants="1"><single-view/></video-layout>
    <video-layout min-participants="2"><dual-view/></video-layout>
    <video-layout min-participants="3"><quad-view/></video-layout>
   </video-layouts>
   <video-switch interval="5"><vas/></video-switch>
   <subscribe>
    <active-talkers-sub interval="4"/>
   </subscribe>
 </createconference>
</mscmixer>
]]></artwork></figure>
</t>

<t>and a response from the MS if the conference was successfully created:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <response status="200" conferenceid="conference1"/>
</mscmixer>
]]></artwork></figure>
</t>


<t>alternatively, a response if MS could not create the conference due
to a lack of support for the H264 codec:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <response status="425" conferenceid="conference1" 
           reason="H264 codec not supported"/>
</mscmixer>
]]></artwork></figure>
</t>

	
</section>   <!-- createconference -->

<section  toc="include" anchor="defn.modifyconference" title="&lt;modifyconference>">

    <t>The &lt;modifyconference> element is sent to the MS to request
    modification of an existing conference.</t>

	<t>The &lt;modifyconference> element has the following attributes:

	<list style="hanging">

		<t hangText="conferenceid:">string indicating the name of the
 	   	conference to modify.  This attribute is mandatory.
    	</t>

	</list>
	</t>

    <t>The &lt;modifyconference> element has the following sequence of
    child elements (1 or more):

    <list style="hanging">

<t hangText="&lt;codecs>:">an element to configure the codecs supported
by the conference (see <xref target="defn.codecs"/>). If codecs are
specified, then they impose limitations in media capability when the MS
attempts to join the conference to other entities (see <xref
target="defn.join"/> and <xref target="defn.modifyjoin"/>). Existing
conference participants are unaffected by any policy change. The element
is optional.
</t>

<t hangText="&lt;audio-mixing>:">an element to configure the audio
mixing characteristics of a conference (see <xref
target="sec:audio-mixing"/>). The element is optional.
</t>

<t hangText="&lt;video-layouts>:">an element to configure the video
layouts of a conference (see <xref target="defn.video-layouts"/>). The
element is optional.
</t>

<t hangText="&lt;video-switch>:">an element to configure the video
switch policy for the layout of a conference (see <xref
target="defn.video-switch"/>). The element is optional.
</t>
		
<t hangText="&lt;subscribe>:">an element to request subscription to
conference events. (see <xref target="defn.subscribe"/>). The element is
optional.</t>

</list>

</t>

<t>If the conferenceid attribute specifies the name of a conference
which does not exist, the MS reports an error (406).</t>


<t>If the MS is unable to configure the conference according to a
specified &lt;audio-mixing> element, the MS reports an error (421)
and MUST NOT modify the conference in any way.</t>

<t>If the MS is unable to configure the conference according to a
specified &lt;video-layouts> element, the MS reports an error (423)
and MUST NOT modify the conference in any way.</t>

<t>If the MS is unable to configure the conference according to a
specified &lt;video-switch> element, the MS reports an error (424)
and MUST NOT modify the conference in any way.</t>

<t>If the MS is unable to configure the conference according to a
specified &lt;codecs> element, the MS reports an error (425) and
MUST NOT modify the conference.</t>

<t>When a MS has finished processing a &lt;modifyconference> request, it
MUST reply with an appropriate &lt;response> element (<xref
target="defn.response"/>).  </t>


</section>   <!-- modifyconference -->

<section toc="include" anchor="defn.destroyconference" title="&lt;destroyconference>">

    <t>The &lt;destroyconference> element is sent to the MS to request destruction of 
    an  existing conference.</t>

    <t>The &lt;destroyconference> element has the following attributes:

	<list style="hanging">

		<t hangText="conferenceid:">string indicating the name of the
		conference to destroy. This attribute is mandatory.
    	</t>
	</list>
	</t>
    
    <t>The &lt;destroyconference> element does not specify any child 
    elements. </t>


<t>If the conferenceid attribute specifies the name of a conference
which does not exist, the MS reports an error (406).</t>
    
<t>When a MS has finished processing a &lt;destroyconference> request,
it MUST reply with an appropriate &lt;response> element (<xref
target="defn.response"/>). </t>

<t>Successfully destroying the conference (status code 200) will result
in all connection or conference participants being removed from the
conference mixer, &lt;unjoin-notify> notification events (<xref
target="defn.unjoin-notify"/>) being sent for each conference
participant and a &lt;conferenceexit> notification event (<xref
target="defn.conferenceexit"/>) indicating that conference has exited.
A &lt;response> with any other status code indicates that the conference
mixer still exists and participants are still joined to the mixer.</t>

</section>   <!-- destroyconference -->

<section toc="include" anchor="defn.conferenceconfig" title="Conference Configuration">

	<t>The elements in this section are used to establish and modify
	the configuration of conferences.</t>



<section toc="include" anchor="sec:audio-mixing" title="&lt;audio-mixing>">

<t>The &lt;audio-mixing> element defines the configuration of the
conference audio mix.</t> 

<t>The &lt;audio-mixing> element has the following attributes:
	
<list style="hanging">
	
<t hangText="type:"> is a string indicating the audio stream mixing
policy.  Defined values are: "nbest" (where the N best (loudest)
participant signals are mixed) and "controller" (where the contributing
participant(s) is/are selected by the controlling AS via an external
floor control protocol).  The attribute is optional. The default value
is "nbest". </t>

<t hangText="n:">indicates the number of eligible participants included
in the conference audio mix. An eligible participant is a participant
who contributes audio to the conference. Inclusion is based on having
the greatest audio energy.  A valid value is a non-negative integer (see
<xref target="defn.nonneginteger"/>). A value of 0 indicates that all
participants contributing audio to the conference are included in the
audio mix. The default value is 0.  The element is optional.
</t>

</list> 
If the type attribute does not have the value "nbest", the MS ignores
the "n" attribute.
</t>
	

<t>The &lt;audio-mixing> element has no child elements. </t>


<t>For example, a fragment where the audio mixing policy is set to
"nbest" with 3 participants to be included:

<figure><artwork><![CDATA[
   <audio-mixing type="nbest" n="3"/>
]]></artwork></figure>
</t>

<t>If the conference had 200 participants of whom 30 contributed audio,
then there would be 30 eligible participants for the audio mix. Of
these, the 3 loudest participants would have their audio included in the
conference.
</t>


</section>   <!-- Audio Mixing -->


<section toc="include" anchor="defn.video-layouts" title="&lt;video-layouts>">

<t>The &lt;video-layouts> element describe the video presentation layout
configuration for participants providing a video input stream to the
conference. This element allows multiple video layouts to be specified
so that the MS automatically changes layout depending on the number of
video-enabled participants.
</t>

<t>The &lt;video-layouts> element has no attributes.</t>

<t>The &lt;video-layouts> element has the following sequence of child
elements (1 or more):

<list style="hanging">

<t hangText="&lt;video-layout>:">element describing a video layout
(<xref target="defn.video-layout"/>).
</t>

</list>
</t>

<t>If the MS does not support video conferencing at all, or does not
support multiple video layouts, or does not support a specific video
layout, the MS reports an 423 error in the response to the request
element containing the &lt;video-layouts> element.
</t>

<t>
An MS MAY support more than one &lt;video-layout> element, although
only one layout can be active at a time.
A &lt;video-layout> is active if the number of participants in 
the conference is equal to or greater than the value of its 
"min-participants" attribute, but less than the value of the 
"min-participants" attribute for any other &lt;video-layout> element. 
An MS reports an error (400) if more than one &lt;video-layout> has 
the same value for the "min-participants" attribute. When the
number of regions within the active layout is greater than the number of
participants in the conference, the display of unassigned regions is
implementation-specific. 
</t>

<t>
The assignment of participant video streams to regions within the layout
is according to the video switch policy specified by the
&lt;video-switch> element (<xref target="defn.video-switch"/>).
</t>


<t>For example, a fragment describing a single layout: 

<figure><artwork><![CDATA[
<video-layouts>
  <video-layout><single-view/></video-layout>
</video-layouts>
]]></artwork></figure>
</t>


<t>And a fragment describing a sequence of layouts:

<figure><artwork><![CDATA[
<video-layouts>
  <video-layout min-participants="1"><single-view/></video-layout>
  <video-layout min-participants="2"><dual-view/></video-layout>
  <video-layout min-participants="3"><quad-view/></video-layout>
  <video-layout min-participants="5"><multiple-3x3/></video-layout>
</video-layouts>
]]></artwork></figure>

When the conference has one participant providing a video input stream
to the conference, then the single-view format is used. When the
conference has two such participants, the dual-view layout is used. When
the conference has three or four participants, the quad-view layout
is used. When the conference has five or more participants, the 
multiple-3x3 layout is used.
</t>



<section toc="include" anchor="defn.video-layout" title="&lt;video-layout>">

<t>The &lt;video-layout> element describes a video layout containing one
or more regions in which participant video input streams are displayed.
</t>

<t>The &lt;video-layout> element has the following attributes:

<list style="hanging">

<t hangText="min-participants:">the minimum number of conference
participants needed to allow this layout to be active. A
valid value is a positive integer (see <xref
target="defn.posinteger"/>). The attribute is optional. 
The default value is 1.
</t>

</list>
</t>

<t>The &lt;video-layout> element has one child element specifying the
video layout. An MS MAY support the predefined video layouts defined in
the XCON conference information data model (<xref
target="I-D.ietf-xcon-common-data-model"/>): &lt;single-view>,
&lt;dual-view>, &lt;dual-view-crop>, &lt;dual-view-2x1>,
&lt;dual-view-2x1-crop>, &lt;quad-view>, &lt;multiple-3x3>,
&lt;multiple-4x4> and &lt;multiple-5x1>. </t>

<t>The MS MAY support other video layouts. Non-XCON layouts MUST be
specified using an element from a namespace other than the one used in
this specification. For example,

<figure><artwork><![CDATA[
<video-layout>
 <mylayout xmlns='http://example.com/foo'>my-single-view</mylayout>
</video-layout>
]]></artwork></figure>
</t>

<t>If the MS does not support the specified video layout configuration,
then the MS reports a 423 error (<xref target="defn.statuscodes"/>) in
the response to the request element containing the &lt;video-layout>
element.</t>

<t>Each video layout has associated with it one or more regions. The
XCON layouts are associated with the following named regions:

<list style="hanging">

<t hangText="&lt;single-view/&gt;">layout with one stream in a single
region as shown in <xref target="fig.single-view"/>.

<figure align="center" anchor="fig.single-view" title="single-view video layout">
<artwork>
<![CDATA[
+-----------+ 
|           |    
|           |    
|     1     |      
|           |          
|           |            
+-----------+ 
]]>
</artwork>
</figure>
</t>

<t hangText="&lt;dual-view/&gt;">layout presenting two streams side-by-side
in two regions as shown in <xref target="fig.dual-view"/>. The MS MUST
NOT alter the aspect ratio of each stream to fit the region and hence
the MS might need to blank out part of each region.

<figure align="center" anchor="fig.dual-view" 
title="dual-view video layout">
<artwork>
<![CDATA[
+-----------+-----------+
|           |           | 
|           |           | 
|     1     |     2     |
|           |           | 
|           |           |
+-----------+-----------+
]]>
</artwork>
</figure>
</t>



<t hangText="&lt;dual-view-crop/&gt;">layout presenting two streams
side-by-side in two regions as shown in <xref
target="fig.dual-view-crop"/>.  The MS MUST alter the aspect ratio of
each stream to fit its region so that no blanking is required.

<figure align="center" anchor="fig.dual-view-crop" 
title="dual-view-crop video layout">
<artwork>
<![CDATA[
+-----------+-----------+
|           |           | 
|           |           | 
|     1     |     2     |
|           |           | 
|           |           |
+-----------+-----------+
]]>
</artwork>
</figure>
</t>

<t hangText="&lt;dual-view-2x1/&gt;">layout presenting two streams one
above the other in two regions as shown in <xref
target="fig.dual-view-2x1"/>. The MS MUST NOT alter the aspect ratio of
each stream to fit its region and hence the MS might need to blank out
part of each region.


<figure align="center" anchor="fig.dual-view-2x1" 
title="dual-view-2x1 video layout">

<artwork>
<![CDATA[
+-----------+
|           |
|           |
|     1     |
|           |
|           |
+-----------+
|           |
|           |
|     2     |
|           |
|           |
+-----------+
]]>
</artwork>
</figure>
</t>

<t hangText="&lt;dual-view-2x1-crop/&gt;">layout presenting two streams one above
the other in two regions as shown in <xref
target="fig.dual-view-2x1-crop"/>.  The MS MUST alter the aspect ratio
of each stream to fit its region so that no blanking is required.

<figure align="center" anchor="fig.dual-view-2x1-crop" 
title="dual-view-2x1-crop video layout">

<artwork>
<![CDATA[
+-----------+
|           |
|           |
|     1     |
|           |
|           |
+-----------+
|           |
|           |
|     2     |
|           |
|           |
+-----------+
]]>
</artwork>
</figure>
</t>

<t hangText="&lt;quad-view/&gt;">layout presenting four equal-sized regions in a
2x2 layout as shown in <xref target="fig.quad-view"/>.  Typically the
aspect ratio of the streams is preserved, so blanking is required.

<figure align="center" anchor="fig.quad-view" title="quad-view video layout">
<artwork>
<![CDATA[
+-----------+-----------+
|           |           |
|           |           |
|     1     |     2     |
|           |           |
|           |           |
+-----------+-----------+
|           |           |
|           |           |
|     3     |     4     |
|           |           |
|           |           |
+-----------+-----------+
]]>
</artwork>
</figure>
</t>


<t hangText="&lt;multiple-3x3/&gt;">layout presenting nine equal-sized
regions in a 3x3 layout as shown in <xref target="fig.multiple-3x3"/>.
Typically the aspect ratio of the streams is preserved, so blanking is
required.


<figure align="center" anchor="fig.multiple-3x3" title="multiple-3x3 video layout">
<artwork>
<![CDATA[
+-----------+-----------+-----------+
|           |           |           |
|           |           |           |
|     1     |     2     |     3     |
|           |           |           |
|           |           |           |
+-----------+-----------+-----------+
|           |           |           |
|           |           |           |
|     4     |     5     |     6     |
|           |           |           |
|           |           |           |
+-----------+-----------+-----------+
|           |           |           |
|           |           |           |
|    7      |     8     |     9     |
|           |           |           |
|           |           |           |
+-----------+-----------+-----------+
]]>
</artwork>
</figure>
</t>

<t hangText="&lt;multiple-4x4/&gt;">layout presenting sixteen
equal-sized regions in a 4x4 layout as shown in <xref
target="fig.multiple-4x4"/>. Typically the aspect ratio of the streams
is preserved, so blanking is required.


<figure align="center" anchor="fig.multiple-4x4" title="multiple-4x4 video layout">
<artwork>
<![CDATA[
+-----------+-----------+-----------+-----------+
|           |           |           |           |
|           |           |           |           |
|     1     |     2     |     3     |     4     |
|           |           |           |           |
|           |           |           |           |
+-----------+-----------+-----------+-----------+
|           |           |           |           |
|           |           |           |           |
|     5     |     6     |     7     |     8     |
|           |           |           |           |
|           |           |           |           |
+-----------+-----------+-----------+-----------+
|           |           |           |           |
|           |           |           |           |
|     9     |    10     |    11     |    12     |
|           |           |           |           |
|           |           |           |           |
+-----------+-----------+-----------+-----------+
|           |           |           |           |
|           |           |           |           |
|    13     |    14     |    15     |    16     |
|           |           |           |           |
|           |           |           |           |
+-----------+-----------+-----------+-----------+
]]>
</artwork>
</figure>
</t>


<t hangText="&lt;multiple-5x1/&gt;">layout presents a 5x1 layout as
shown in <xref target="fig.multiple-5x1"/> where one region will occupy
4/9 of the mixed video stream while the others will each occupy 1/9 of
the stream.  Typically the aspect ratio of the streams is preserved, so
blanking is required.

<figure align="center" anchor="fig.multiple-5x1" title="multiple-5x1 video layout">
<artwork>
<![CDATA[
+-----------------------+-----------+
|                       |           |
|                       |           |
|                       |     2     |
|                       |           |
|                       |           |
|           1           +-----------+
|                       |           |
|                       |           |
|                       |     3     |
|                       |           |
|                       |           |
+-----------+-----------+-----------+
|           |           |           |
|           |           |           |
|    4      |     5     |     6     |
|           |           |           |
|           |           |           |
+-----------+-----------+-----------+
]]>
</artwork>
</figure>
</t>

</list>

</t>

</section>

</section>

<section toc="include" anchor="defn.video-switch" title="&lt;video-switch>">

<t>The &lt;video-switch> element describe the configuration of the
conference policy for how participant's input video streams are assigned
to regions within the active video layout. </t>


<t>The &lt;video-switch> element has the following child elements
defined (one child occurrence only) indicating the video switching
policy of the conference:

<list style="hanging">

<t hangText="&lt;vas/&gt;">(Voice Activated Switching) enables automatic
display of the loudest speaker participant also providing a video input
stream to the conference. Participants who do not provide an audio
stream are not considered for automatic display. If a participant
provides more than one audio stream, then the policy for inclusion of
such a participant in the VAS is implementation-specific; an MS could
select one stream, sum audio streams or ignore the participant for VAS
consideration. If there is only one region in the layout, then the
loudest speaker is displayed there. If more than one region is
available, then the loudest speaker is displayed in the largest region,
if any, and then in the first region from the top-left corner of the
layout.  The MS assigns the remaining regions based on the priority
mechanism described in <xref target="defn.switchpriority"/>.
</t>

<t hangText="&lt;controller/&gt;">enables manual control over video
switching. The controller AS determines how the regions are assigned
based on an external floor control policy. The MS receives &lt;join>,
&lt;modifyjoin> and &lt;unjoin> commands with a &lt;stream> element
(<xref target="defn.stream"/>) indicating the region where the stream is
displayed. If no explicit region is specified, the MS assigns the region
based on the priority mechanism described in <xref
target="defn.switchpriority"/>.
</t>

</list>
</t>

<t>An MS MAY support other video switching policies.  Other policies
MUST be specified using an element from a namespace other than the one
used in this specification. For example,

<figure><artwork><![CDATA[
<video-switch>
 <mypolicy xmlns='http://example.com/foo'/>
</video-switch>
]]></artwork></figure>
</t>

<t>The &lt;video-switch> element has the following attributes:

<list style="hanging">

<t hangText="interval:"> specifies the period between video switches as
a number of seconds. In the case of &lt;vas/> policy, a speaker needs to
be the loudest speaker for the interval before the switch takes place.
A valid value is a non-negative integer (see <xref
target="defn.nonneginteger"/>). A value of 0 indicates that switching is
applied immediately.  The attribute is optional. The default value is 3
(seconds).
</t>

<t hangText="activespeakermix:">indicates whether or not the active
(loudest) speaker participant receives a video stream without themselves
displayed in the case of the &lt;vas/> switching policy. If enabled, the
MS needs to generate two video streams for each conference mix: one for
the active speaker participant without themselves displayed - details of
this video layout are implementation-specific; and one for other
participants as described in the &lt;vas/> switch policy above. A valid
value is a boolean (see <xref target="defn.boolean"/>). A value of true
indicates that a separate video mix is generated for the active speaker
without themselves being displayed. A value of false indicates that all
participants receive the same video mix.  The attribute is optional. The
default value is false. If the type attribute is not set to &lt;vas/>,
the MS ignores this attribute.
</t>

</list>
</t>

<t>If the MS does not support the specified video switching policy or
other configuration parameters (including separate active speaker video
mixes), then MS reports a 424 error (<xref
target="defn.statuscodes"/>) in the response to the request element
containing the &lt;video-switch> element. </t>

<t>If the MS receives a &lt;join> or &lt;modifyjoin> request containing
a &lt;stream> element (<xref target="defn.stream"/>) specifying a region
and the conference video switching policy is set to &lt;vas/>, then the
MS ignores the region (i.e. conference switching policy takes
precedence). </t>


<t>If the MS receives a &lt;join> or &lt;modifyjoin> request containing
a &lt;stream> element (<xref target="defn.stream"/>) specifying a region
which is not defined for the currently active video layout, the MS MUST
NOT report an error. Even though the participant is not currently
visible, the MS displays the participant if the layout changes to
one which defines the specified region.
</t>

<t>For example, a fragment specifying a &lt;vas/> video switching policy
with an interval of 2s

<figure><artwork><![CDATA[
 <video-switch interval="2"><vas/></video-switch>
]]></artwork></figure>

</t>


<t>For example, a fragment specifying a &lt;controller/> video switching
policy where video switching takes place immediately:

<figure><artwork><![CDATA[
 <video-switch interval="0"><controller/></video-switch>
]]></artwork></figure>

</t>

<section toc="include" anchor="defn.switchpriority" title="Priority assignment">


<t>In cases where the video switching policy does not explicitly
determine the region to which a participant is assigned, the following
priority assignment mechanism applies:

<list style="numbers">

<t>Each participant has an (positive integer) priority value: the lower
the value, the higher the priority. The priority value is determined by
the &lt;priority> child element (<xref target="defn.priority"/>) of
&lt;stream>. If not explicitly specified, the default priority value is
100.
</t>

<t>
The MS uses priority values to assign participants to regions in the
video layout which remain unfilled after application of the video
switching policy. The MS MUST dedicate larger and/or more prominent
portions of the layout to participants with higher priority values first
(e.g. first, all participants with priority 1, then those with 2, 3,
etc).
</t>

<t>The policy for displaying participants with the same priority is
implementation-specific.
</t>


</list>
</t>

<t>The MS applies this priority policy each time the video layout is
changed or updated. It is RECOMMENDED that the MS does not move a
participant from one region to another unless required by the video
switching policy when an active video layout is updated. </t>

<t>This model allows the MS to apply default video layouts after
applying the video switch policy. For example, region 2 is statically
assigned to Bob, so the priority mechanism only applies to regions 1, 3,
4, etc. 
</t>

</section>

</section> <!-- video-switch -->


<section toc="include" anchor="defn.subscribe" title="&lt;subscribe>">

<t> The &lt;subscribe> element is a container for specifying conference
notification events to which a controlling entity subscribes.
Notifications of conference events are delivered using the &lt;event>
element (see <xref target="defn.event"/>).</t>

<t>The &lt;subscribe> element has no attributes, but has the following
child element:

    <list style="hanging">

		<t hangText="&lt;active-talkers-sub>:"> subscription to active
		talker events (<xref target="defn.active-talkers-sub"/>). The
		element is optional.
        </t>
   	</list>
</t>

<t>
The MS MUST support a &lt;active-talkers-sub> subscription. It MAY
support other event subscriptions (specified using attributes and child
elements from a foreign namespace). If the MS does not support a
subscription specified in a foreign namespace, it sends a
&lt;response> with a 428 status code (see <xref
target="defn.statuscodes"/>).

</t>


<section toc="include" anchor="defn.active-talkers-sub" title="&lt;active-talkers-sub>">

<t>The &lt;active-talkers-sub> element has the following attributes:

<list style="hanging">

<t hangText="interval:">the minimum amount of time (in seconds) that
elapses before further active talker events can be generated. A
valid value is a non-negative integer (see <xref
target="defn.nonneginteger"/>). A value of 0 suppresses further
notifications. The attribute is optional. The default value is 3
(seconds).
</t>

</list>
</t>

<t>The &lt;active-talkers-sub> element has no child elements.</t>

<t>Active talker notifications are delivered in the
&lt;active-talkers-notify> element (<xref
target="defn.active-talkers-notify"/>).
</t>

</section> <!-- active-talkers-sub -->

</section>   <!-- subscribe -->

</section>   <!-- Conference Configuration -->

</section> <!-- conference elements -->

<section toc="include" anchor="defn.joining" title="Joining Elements">

<t>In this section, the joining model is defined (<xref
target="defn.bridging"/>) as well as definitions of the &lt;join> (<xref
target="defn.join"/>), &lt;modifyjoin> (<xref
target="defn.modifyjoin"/>), &lt;unjoin> (<xref target="defn.unjoin"/>)
and &lt;stream> (<xref target="defn.stream"/>) elements.
</t>


<section toc="include" anchor="defn.bridging" title="Joining Model">

	<t>The &lt;join> operation creates a media stream between a
	connection and a conference, between connections, or between
	conferences. This section describes the model of conferences and
	connections and specifies the behavior for join requests to targets
	that already have an associated media stream. </t>
	
	<t>Conferences support multiple inputs and have resources to mix
	them together. A media server conference in essence is a mixer that
	combines media streams. A simple audio mixer simply sums its input
	audio signals to create a single common output.  Conferences however
	use a more complex algorithm so that participants do not hear
	themselves as part of the mix.  That algorithm, sometimes called an
	n-minus mix, subtracts each participants input signal from the
	summed input signals, creating a unique output for each contributing
	participant.  Each &lt;join> operation to a conference uses one of
	the conference's available inputs and/or outputs, to the maximum
	number of supported participants.</t>
	
	<t>A connection is the termination of a RTP session(s) on a media
	server. It has a single input and output for each media session
	established by its SIP dialog. The output of a connection can feed
	several different inputs such as both a conference mixer and a
	recording of that participant's audio. </t>
	
	<t>Joining two connections which are are not joined to anything else
	simply creates a media stream from the outputs(s) of one connection
	to the corresponding inputs(s) of the other connection.  It is not
	necessary to combine media from multiple sources in this case. There
	are however several common scenarios where combining media from
	several sources to create a single input to a connection is
	needed.</t>
	
	<t>In the first case, a connection can be receiving media from one
	source, for example a conference, and it is necessary to play an
	announcement to the connection so that both the conference audio and
	announcement can be heard by the conference participant. This is
	sometimes referred to as a whisper announcement. An alternative to a
	whisper announcement is to have the announcement pre-empt the
	conference media.</t>
	
	<t>Another common case is the call center coaching scenario where a 
	supervisor can listen to the conversation between an agent and a 
	customer, and provide hints to the agent, which are not heard by the 
	customer.</t>
   
	<t>Both of these cases can be solved by having the controlling AS
	create one or more conferences for audio mixing, and then join and
	unjoin the media streams as required. A better solution is to have
	the media server automatically mix media streams that are requested
	to be joined to a common input when only the simple summing of audio
	signals as described above is required.  This is the case for both
	the use cases presented above.</t>
   
	<t>Automatically mixing streams has several benefits. Conceptually,
	it is straight forward and simple, requiring no indirect requests on
	the part of the controlling AS. This increases transport efficiency
	and reduces the coordination complexity and the latency of the
	overall operation. Therefore, it is RECOMMENDED that a media server
	be able to automatically mix at least two audio streams where only
	the simple summing of signals is required.</t>
	
	<t>When a media server receives a &lt;join> request, it MUST
	automatically mix all of the media streams included in the request
	with any streams already joined to one of the entities identified in
	the request, or it MUST fail the request and MUST NOT join any of
	the streams (and MUST NOT change existing streams of the
	entities). A controlling AS uses the &lt;createconference> request
	for generic conferences where the complex mixing algorithm is
	required.</t>
	
	<t>Specifications which extend this package to handle additional
	media types such as text, MUST define the semantics of the join
	operation when multiple streams are requested to be joined to a
	single input, such as that for a connection with a single RTP
	session per media type.</t>

</section>   <!-- bridging -->


<section toc="include" anchor="defn.join" title="&lt;join>">


 <t>The &lt;join> element is sent to the MS to request creation of one or
 more media streams either between a connection and a conference,
 between connections, or between conferences.  The two entities to join
 are specified by the attributes of &lt;join>.</t>

 <t>Streams can be of any media type, and can be bi-directional or
 uni-directional. A bi-directional stream is implicitly composed of two
 uni-directional streams that can be manipulated independently.  The
 streams to be established are specified by child &lt;stream> elements
 (see <xref target="defn.stream"/>).</t>


<t>The &lt;join> element has the following attributes:

	<list style="hanging">

		<t hangText="id1:">an identifier for either a connection or a
		conference. The identifier MUST conform to the syntax defined in
		Section 16.1 of <xref
		target="I-D.ietf-mediactrl-sip-control-framework"/> The
		attribute is mandatory.</t>
    	
		<t hangText="id2:">an identifier for either a connection or a
		conference. The identifier MUST conform to the syntax defined in
		Section 16.1 of <xref
		target="I-D.ietf-mediactrl-sip-control-framework"/> The
		attribute is mandatory.</t>
	</list>
	</t>
	
<t>Note: Section 16.1 of <xref
target="I-D.ietf-mediactrl-sip-control-framework"/> defines the
semantics for a conference identifier but not its syntax. Media server
implementations need to distinguish between conferences and connections
based upon the values of the "id1" and "id2" attributes. </t>

<t>If id1 or id2 specify a conference identifier and the conference does
not exist on the MS, the MS reports an error (406). If id1 or id2
specify a connection identifier and the connection does not exist on the
MS, the MS reports an error (412).</t>
 
<t>The &lt;join> element has the following child element (0 or
	more):

	<list style="hanging">

		<t hangText="&lt;stream>: ">an element that both identifies the
		media streams to join and defines the way that they are to be
		joined (see <xref target="defn.stream"/>).  The element is
		optional.
        </t>

	</list>
	</t>

<t> If no &lt;stream> elements are specified, then the default is to
join all streams between the entities according to the media
configuration of the connection or conference.</t>

<t>One or more &lt;stream> elements can be specified so that individual
media streams can be controlled independently.  For example, if a
connection supports both audio and video streams, a &lt;stream> element
could be used to indicate that only the audio stream is used in receive
mode. In cases where there are multiple media streams of the same type
for a connection or conference, the configuration MUST be explicitly
specified using &lt;stream> elements.
</t>

<t>Multiple &lt;stream> elements can be specified for precise control
over the media flow in different directions within the same media
stream. One &lt;stream> element can be specified for the receiving media
flow and another element for the sending media flow, where each
independently controls features such as volume (see child element of
&lt;stream> in <xref target="defn.stream"/>). If there is only one
&lt;stream> element for a given media specifying a 'sendonly' or
'recvonly' direction, then the media flow in the opposite direction is
inactive (established but no actual flow of media) unless this leads
to a stream conflict. </t>

<t>If the MS is unable to execute the join as specified in &lt;stream>
because a &lt;stream> element is in conflict with (a) another
&lt;stream> element, (b) with specified connection or conference media
capabilities (including supported or available codec information), or
(c) with a SDP label value as part of the connection-id (see Section
16.1 of <xref target="I-D.ietf-mediactrl-sip-control-framework"/>), then
the MS reports an error (407) and MUST NOT join the entities and MUST
NOT change existing streams of the entities. </t>

<t>If the MS is unable to execute the join as specified in &lt;stream>
elements because the MS does not support the media stream configuration,
the MS reports an error (422) and MUST NOT join the entities and
MUST NOT change existing streams of the entities. </t>


<t>If the MS is unable to join an entity to a conference because it is
full, then the MS reports an error (410).</t>

<t>If the specified entities are already joined, then the MS reports
an error (408). </t>

<t>If the MS does not support joining two specified connections
together, the MS reports an error (426).</t>


<t>If the MS does not support joining two specified conferences
together, the MS reports an error (427).</t>

<t>If the MS is unable to join the specified entities for any other
reason, the MS reports an error (411).</t>


<t>When the MS has finished processing a &lt;join> request, it MUST
reply with an &lt;response> element (<xref target="defn.response"/>).
</t>


<t>For example, a request to join two connection together:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <join id1="1536067209:913cd14c" id2="1536067209:913cd14c"/>
</mscmixer>
]]></artwork></figure>
</t>

<t> and the response if the MS doesn't support joining media streams
between connections:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <response status="426" reason="mixing connections not supported"/>
</mscmixer>
]]></artwork></figure>
</t>


</section>   <!-- join -->

<section toc="include"  anchor="defn.modifyjoin" title="&lt;modifyjoin>">

 <t>The &lt;modifyjoin> element is sent to the MS to request changes in
 the configuration of media stream(s) that were previously established
 between a connection and a conference, between two connections, or
 between two conferences. </t>


	<t>The &lt;modifyjoin> element has the following attributes:

	<list style="hanging">

		<t hangText="id1:">an identifier for either a connection or a
		conference. The identifier MUST conform to the syntax defined in
		Section 16.1 of <xref
		target="I-D.ietf-mediactrl-sip-control-framework"/> The
		attribute is mandatory.</t>
    	
		<t hangText="id2:">an identifier for either a connection or a
		conference. The identifier MUST conform to the syntax defined in
		Section 16.1 of <xref
		target="I-D.ietf-mediactrl-sip-control-framework"/> The
		attribute is mandatory.</t>

	</list>
	</t>

<t>The &lt;modifyjoin> element has the following child elements (1 or
more):

	<list style="hanging">

		<t hangText="&lt;stream>: ">an element that both identifies the
		media streams to modify and defines the way that each stream 
		is now to be configured (see <xref target="defn.stream"/>). 
        </t>

	</list>
	</t>
    
<t>The MS MUST support &lt;modifyjoin> for any stream that was
established using &lt;join>.</t>
		
<t> The MS MUST configure the streams that are included within
&lt;modifyjoin> to that stated by the child elements. 
</t>


<t>If the MS is unable to modify the join as specified in &lt;stream>
elements because a &lt;stream> element is in conflict with (a) another
&lt;stream> element, (b) with specified connection or conference media
capabilities (including supported or available codec information), or
(c) with a SDP label value as part of the connection-id (see Section
16.1 of <xref target="I-D.ietf-mediactrl-sip-control-framework"/>), then
the MS reports an error (407) and MUST NOT modify the join between the
entities and MUST NOT change existing streams of the entities.</t>

<t>If the MS is unable to modify the join as specified in &lt;stream>
elements because the MS does not support the media stream configuration,
the MS reports an error (422) and MUST NOT modify the join between
the entities and MUST NOT change existing streams of the entities. </t>


<t>If the specified entities are not already joined, then the MS reports
an error (409). </t>

<t>If the MS is unable to modify the join between the specified entities
for any other reason, the MS reports an error (411).</t>

<t>When an MS has finished processing a &lt;modifyjoin> request, it MUST
reply with an appropriate &lt;response> element (<xref
target="defn.response"/>). </t>


<t>In cases where stream characteristics are controlled independently
for each direction, then a &lt;modifyjoin> request needs to specify a
child element for each direction in order to retain the original stream
directionality. For the example, if a &lt;join> request establishes
independent control for each direction of an audio stream (see <xref
target="defn.stream"/>):

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer"> 
 <join id1="1536067209:913cd14c" id2="conference1">
  <stream media="audio" direction="sendonly">
   <volume controltype="setgain" value="-3"/>
  </stream>
  <stream media="audio" direction="recvonly">
   <volume controltype="setgain" value="+3"/>
  </stream>
 </join>
</mscmixer>
]]></artwork></figure>

then the following &lt;modifyjoin> request

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <modifyjoin id1="1536067209:913cd14c" id2="conference1">
  <stream media="audio" direction="sendonly">
    <volume controltype="setgain" value="0"/>
  </stream>
  </modifyjoin>
</mscmixer>
]]></artwork></figure>

would cause, in addition to the sendonly volume being modified, that the
overall stream directionality changes from sendrecv to sendonly since
there is no &lt;stream> element in this &lt;modifyjoin> request for the
recvonly direction.  The following would change the sendonly volume and
retain the recvonly stream together with its original characteristics
such as volume:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <modifyjoin id1="1536067209:913cd14c" id2="conference1">
  <stream media="audio" direction="sendonly">
    <volume controltype="setgain" value="0"/>
  </stream>
  <stream media="audio" direction="recvonly"/>
  </modifyjoin>
</mscmixer>
]]></artwork></figure>
</t>

	
</section>   <!-- modifyjoin -->


<section toc="include"  anchor="defn.unjoin" title="&lt;unjoin>">

<t>The &lt;unjoin> element is sent to the MS to request removal of
previously established media stream(s) from between a connection and a
conference, between two connections, or between two conferences. </t>


	<t>The &lt;unjoin> element has the following attributes:

	<list style="hanging">

		<t hangText="id1:">an identifier for either a connection or a
		conference. The identifier MUST conform to the syntax defined in
		Section 16.1 of <xref
		target="I-D.ietf-mediactrl-sip-control-framework"/> The
		attribute is mandatory.</t>
    	
		<t hangText="id2:">an identifier for either a connection or a
		conference. The identifier MUST conform to the syntax defined in
		Section 15.1 of <xref
		target="I-D.ietf-mediactrl-sip-control-framework"/> The
		attribute is mandatory.</t>
	</list>
	</t>

<t>The &lt;unjoin> element has the following child element (0 or more
occurrences):

	<list style="hanging">

		<t hangText="&lt;stream>: ">an element that identifies the media
		stream(s) to remove (see <xref target="defn.stream"/>).  The
		element is optional. When not present, all currently established
		streams between "id1" and "id2" are removed.</t>
	</list>
	</t>

    <t>The MS MUST support &lt;unjoin> for any stream that was
    established using &lt;join> and has not already been removed by a
    previous &lt;unjoin> on the same stream.</t>


<t>If the MS is unable to terminate the join as specified in &lt;stream>
elements because a &lt;stream> element is in conflict with (a) another
&lt;stream> element, (b) with specified connection or conference media
capabilities or (c) with a SDP label value as part of the connection-id
(see Section 16.1 of <xref
target="I-D.ietf-mediactrl-sip-control-framework"/>), then the MS
reports an error (407) and MUST NOT terminate the join between the
entities and MUST NOT change existing streams of the entities.</t>

<t>If the MS is unable to terminate the join as specified in &lt;stream>
elements because the MS does not support the media stream configuration,
the MS reports an error (422) and MUST NOT terminate the join
between the entities and MUST NOT change existing streams of the
entities. </t>

<t>If the specified entities are not already joined, then the MS reports
an error (409). </t>

<t>If the MS is unable to terminate the join between the specified
entities for any other reason, the MS reports an error (411).</t>

<t>When an MS has successfully processed a &lt;unjoin> request, it MUST
reply with a successful &lt;response> element (<xref
target="defn.response"/>).
</t>

	
</section>   <!-- unjoin -->


<section toc="include" anchor="defn.stream" title="&lt;stream>">

	<t>&lt;join>, &lt;modifyjoin> and &lt;unjoin> require the identification 
	and manipulations of media streams. Media streams represent the flow of 
	media between a participant connection and a conference, between two 
	connections, or between two conferences. 
	The &lt;stream> element is used (as a child to &lt;join>, &lt;modifyjoin> 
	and &lt;unjoin) to identify the media stream(s) for the request and
	to specify the configuration of the media stream.</t>

	<t>The &lt;stream> element has the following attributes:

    <list style="hanging"> 

        <t hangText="media:">a string indicating the type of media
        associated with the stream. A valid value is a MIME type-name as
        defined in Section 4.2 of <xref target="RFC4288"/>. The
        following values MUST be used for common types of media: "audio"
        for audio media, and "video" for video media. See IANA (<xref
        target="IANA"/>) for registered MIME type names.  The attribute
        is mandatory. </t>


        <t hangText="label:">a string indicating the SDP label
        associated with a media stream (<xref target="RFC4574"/>).  The
        attribute is optional.  </t>

        <t hangText="direction:">a string indicating the allowed media
        flow of the stream relative to the value of the "id1" attribute
        of the parent element. Defined values are: "sendrecv" (media can
        be sent and received), "sendonly" (media can only be sent),
        "recvonly" (media can only be received) and "inactive" (stream
        established but no media flow). The default value is
        "sendrecv". The attribute is optional. </t>
    </list> 
 </t>
    

<t>The &lt;stream> element has the following sequence of child elements:

    <list style="hanging">

    	<t hangText="&lt;volume>:">an element (<xref
    	target="defn.volume"/>) to configure the volume or gain of the
    	media stream. The element is optional.</t>

		<t hangText="&lt;clamp>:">an element (<xref
		target="defn.clamp"/>) to configure filtering and removal of
		tones from the media stream. The element is optional.</t>

		<t hangText="&lt;region>:">an element (<xref
		target="defn.region"/>) to configure a region within a video
		layout where the media stream is displayed. The element is
		optional.</t>

		<t hangText="&lt;priority>:">an element (<xref
		target="defn.priority"/>) to configure priority associated with
		the stream in the media mix. The element is optional.</t>
	</list>
    In each child element, the media stream affected is indicated by the
    value of the direction attribute of the parent element. </t>

	<t>If the media attribute does not have the value of "audio", then
	the MS ignores &lt;volume> and &lt;clamp> elements.</t>

	<t>If the media attribute does not have the value of "video", then
	the MS ignores a &lt;region> element.</t>


<t>For example, a request to join a connection to conference in both
directions with volume control:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer"> 
 <join id1="1536067209:913cd14c" id2="conference1">
  <stream media="audio" direction="sendrecv">
   <volume controltype="setgain" value="-3"/>
  </stream>
 </join>
</mscmixer>
]]></artwork></figure>
</t>

<t>where audio flow from the connection (id1) to the conference (id2)
has the volume lowered by 3dB, and likewise the volume of the audio flow
from the conference to the connection is lowered by 3 dB.
</t>

<t>In this example, the volume is independently controlled for each
direction.

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer"> 
 <join id1="1536067209:913cd14c" id2="conference1">
  <stream media="audio" direction="sendonly">
   <volume controltype="setgain" value="-3"/>
  </stream>
  <stream media="audio" direction="recvonly">
   <volume controltype="setgain" value="+3"/>
  </stream>
 </join>
</mscmixer>
]]></artwork></figure>
</t>

<t>where audio flow from the connection (id1) to the conference (id2)
has the volume lowered by 3dB, but the volume of the audio flow from the
conference to the connection is raised by 3 dB.
</t>

<section toc="include" anchor="defn.volume" title="&lt;volume>">
	
<t>The &lt;volume> element is used to configure the volume of an audio
media stream. It can be set to a specific gain amount, to automatically
adjust the gain to a desired target level, or to mute the volume.
	</t>
	
<t>The &lt;volume> element has no child elements but has the following
attributes:

    <list style="hanging">

		<t hangText="controltype:">a string indicating the type of
		volume control to use for the stream. Defined values are:
		"automatic" (the volume will be adjusted automatically to the
		level specified by the "value" attribute), "setgain" (use the
		value of the "value" attribute as a specific gain measured in dB
		to apply), "setstate" (set the state of the stream to "mute" or
		"unmute" as specified by the value of the "value"
		attribute). The attribute is mandatory. </t>
		
		<t hangText="value:">a string specifying the amount or state for
		the volume control defined by the value of the "controltype"
		attribute. The attribute is optional. There is no default value. </t>
        
		
</list>
</t>


<t>If the audio media stream is in a muted state, then the MS also
changes automatically the state to unmuted with an "automatic" or
"setgain" volume control. For the example, assume an audio stream has
been muted with &lt;volume controltype="setstate" value="mute"/>. If the
gain on the same stream is changed with &lt;volume controltype="setgain"
value="+3"/>, then the volume is increased and stream state is also
changed to unmuted.
</t>


</section>   <!-- Volume -->

<section toc="include" anchor="defn.clamp" title="&lt;clamp>">

	<t>The &lt;clamp> element is used to configure whether tones are
	filtered and removed from a media stream.</t>
	
	<t>The &lt;clamp> element has no child elements but has the
	following attributes:

    <list style="hanging">

		<t hangText="tones:"> A space-separated list of the tones to
		remove. The attribute is optional. The default value is "1 2 3 4
		5 6 7 8 9 0 * # A B C D" (i.e. all DTMF (Dual-Tone
		Multi-Frequency) tones removed).
        </t>
	</list>
	</t>
	
</section>   <!-- clamping -->


<section toc="include" anchor="defn.region" title="&lt;region>">

  <t>As described in <xref target="defn.video-layout"/>, each
  &lt;video-layout> is composed of one or more named regions (or areas)
  in which video media can be presented. For example, the XCON layout
  &lt;dual-view> has two regions named "1" and "2" respectively.
  </t>
   
  <t>The &lt;region> element is used to explicitly specify the name of
  the area within a video layout where a video media stream is
  displayed.
  </t>

	
	<t>The &lt;region> element has no attributes and its content model
	specifies the name of the region.
	</t>
	



</section>   <!-- region -->


<section toc="include" anchor="defn.priority" title="&lt;priority>">

	<t>The &lt;priority> element is used to explicitly specify the
	priority of a participant. The MS uses this priority to determine
	where the media stream is displayed within a video layout (<xref
	target="defn.switchpriority"/>).</t>
	
	<t>The &lt;priority> element has no attributes and its content model
	specifies a positive integer (see <xref
	target="defn.posinteger"/>). The lower the value, the higher the
	priority.
	</t>
	
</section>   <!-- defn.priority -->





</section>   <!-- Media Streams -->

</section> <!-- Joining Elements -->




<section toc="include" anchor="defn.response" title="&lt;response>">

	<t>Responses to requests are indicated by a &lt;response> element. </t>

	<t>The &lt;response> element has following attributes:

	<list style="hanging">

		<t hangText="status:">numeric code indicating the response
		status. Valid values are defined in <xref
		target="defn.statuscodes"/>. The attribute is mandatory.</t>

		<t hangText="reason:">string specifying a reason for the
		response status. The attribute is optional. </t>


<t hangText="desclang:">specifies the language used in the value of the
the reason attribute. A valid value is a language identifier (<xref
target="defn.langid"/>).  The attribute is optional.  If not specified,
the value of the desclang attribute on &lt;mscmixer> (<xref
target="defn.mscmixer"/>) applies.
</t>
		<t hangText="conferenceid:">string identifying the conference
		(see Section 16.1 of <xref target="I-D.ietf-mediactrl-sip-control-framework"/>). 
		The attribute is optional.</t>

		<t hangText="connectionid:">string identifying the SIP dialog
		connection (see Section 16.1 of <xref
		target="I-D.ietf-mediactrl-sip-control-framework"/>).  The
		attribute is optional.</t>

	</list>
	</t>
		
	<t>For example, a response when a conference was created successfully:

<figure><artwork>
&lt;response code="200"/>
</artwork></figure>
</t>


	<t>The response if conference creation failed due to the requested
    conference id already existing:

<figure><artwork>
&lt;response code="405" reason="Conference already exists"/>
</artwork></figure>
	</t>

</section>   <!-- response element -->


<section toc="include" anchor="defn.event" title="&lt;event>">

  <t>When a mixer generates a notification event, the MS sends the event
  using an &lt;event> element. </t>

  <t>The &lt;event> element has no attributes, but has the following
  sequence of child elements (0 or more instances of each child):

	<list style="hanging">

		<t hangText="&lt;active-talkers-notify>">specifies an active
		talkers notification (<xref
		target="defn.active-talkers-notify"/>).</t>

		<t hangText="&lt;unjoin-notify>">notifies that a connection or
		conference has been completely unjoined (<xref
		target="defn.unjoin-notify"/>).</t>

		<t hangText="&lt;conferenceexit>">notifies that a conference has
		exited (<xref target="defn.conferenceexit"/>).</t>

	</list>
	</t>

<section toc="include" anchor="defn.active-talkers-notify" 
title="&lt;active-talkers-notify>">

<t>The &lt;active-talkers-notify> element describes zero or more
speakers that have been active in a conference during the specified
interval (see <xref target="defn.active-talkers-sub"/>).
 </t>


  <t>The &lt;active-talkers-notify> element has the following
  attributes:

	<list style="hanging">

  <t hangText="conferenceid:">string indicating the name of the
  conference from which the event originated.  This attribute is
  mandatory.
  </t>

    </list>
  </t>

  <t>The &lt;active-talkers-notify> element has the following sequence
  of child elements (0 or more occurrences):

	<list style="hanging">

  <t hangText="&lt;active-talker>">element describing an active talker
  (<xref target="defn.active-talker"/>).
  </t>
    </list>
  </t>


<section toc="include" anchor="defn.active-talker" title="&lt;active-talker>">

<t>The &lt;active-talker> element describes an active talker, associated
with either a connection or conference participant in a conference.</t>


  <t>The &lt;active-talker> element has the following attributes:

	<list style="hanging">

  <t hangText="connectionid:">string indicating the connectionid of the
  active talker.  This attribute is optional. There is no default value.
  </t>

  <t hangText="conferenceid:">string indicating the conferenceid of the
  active talker. This attribute is optional. There is no default value.
  </t>

    </list>
  </t>

<t>Note that the element does not describe an active talker if both the
connectionid and conferenceid attributes are specified, or if neither
attribute is specified. </t>

<t>The &lt;active-talker> element has no child elements.</t>

</section> <!-- active-talker -->

</section> <!-- active-talkers-notify -->	


<section toc="include" anchor="defn.unjoin-notify" 
title="&lt;unjoin-notify>">


<t>The &lt;unjoin-notify> element describes a notification event where a
connection and/or conference have been completely unjoined. </t>


<t>The &lt;unjoin-notify> element has the following attributes:

<list style="hanging">


<t hangText="status:">a status code indicating why the unjoin occurred.
A valid value is a non-negative integer (see <xref
target="defn.nonneginteger"/>). The MS MUST support the following
values:

<list style="hanging">

<t hangText="0">indicates the join has been terminated by a &lt;unjoin>
request.
</t>

<t hangText="1">indicates the join terminated due to an execution error.
</t>

<t hangText="2">indicates that the join terminated because a connection
or conference has terminated.</t>


</list>
All other valid but undefined values are reserved for future use, where
new status codes are assigned using the Standards Action process defined
in <xref target="RFC5226"/>. The AS MUST treat any status code it does
not recognize as being equivalent to 1 (join execution error). The
attribute is mandatory.
</t>

<t hangText="reason:">a textual description providing a reason for the
status code; e.g. details about an error.  A valid value is a string
(see <xref target="defn.string"/>).  The attribute is optional. There is
no default value.
</t>

<t hangText="desclang:">specifies the language used in the value of the
the reason attribute. A valid value is a language identifier (<xref
target="defn.langid"/>).  The attribute is optional.  If not specified,
the value of the desclang attribute on &lt;mscmixer> (<xref
target="defn.mscmixer"/>) applies.</t>

<t hangText="id1:">an identifier for either a connection or a
conference. The identifier MUST conform to the syntax defined in Section
16.1 of <xref target="I-D.ietf-mediactrl-sip-control-framework"/> The
attribute is mandatory.</t>
    	
<t hangText="id2:">an identifier for either a connection or a
conference. The identifier MUST conform to the syntax defined in Section
16.1 of <xref target="I-D.ietf-mediactrl-sip-control-framework"/> The
attribute is mandatory.</t>
    </list>
  </t>

<t>The &lt;unjoin-notify> element has no child elements.</t>



</section>  <!-- unjoin-notify-->


<section toc="include" anchor="defn.conferenceexit" 
title="&lt;conferenceexit>">


<t>The &lt;conferenceexit> element indicates that a conference has
exited because it has been terminated or because a error occurred (for
example, a hardware error in the conference mixing unit). This event
MUST be sent by the MS whenever a successfully created conference exits.
</t>


<t>The &lt;conferenceexit> element has the following attributes:

<list style="hanging">


<t hangText="conferenceid:"> string indicating the name of the
conference. This attribute is mandatory.
</t>

<t hangText="status:">a status code indicating why the conference
exited.  A valid value is a non-negative integer (see <xref
target="defn.nonneginteger"/>). The MS MUST support the following
values:

<list style="hanging">

<t hangText="0">indicates the conference has been terminated by a
&lt;destroyconference> request.
</t>

<t hangText="1">indicates the conference terminated due to an execution
error.
</t>

<t hangText="2">indicates the conference terminated due to exceeding the
maximum duration for a conference. </t>

</list>
All other valid but undefined values are reserved for future use, where
new status codes are assigned using the Standards Action process defined
in <xref target="RFC5226"/>. The AS MUST treat any status code it does
not recognize as being equivalent to 1 (conference execution error). The
attribute is mandatory.
</t>


<t hangText="reason:">a textual description providing a reason for the
status code; e.g. details about an error.  A valid value is a string
(see <xref target="defn.string"/>).  The attribute is optional. There is
no default value.
</t>

<t hangText="desclang:">specifies the language used in the value of the
the reason attribute. A valid value is a language identifier (<xref
target="defn.langid"/>).  The attribute is optional.  If not specified,
the value of the desclang attribute on &lt;mscmixer> (<xref
target="defn.mscmixer"/>) applies.</t>

</list>
</t>

<t>The &lt;conferenceexit> element has no child elements.</t>
    
<t>When a MS sends a &lt;conferenceexit> event, the identifier for the
conference (conferenceid attribute) is no longer valid on the MS and can
be reused for another conference.
</t>

<t>For example, the following notification event would be sent from the
MS when the conference with identifier "conference99" exits due to a
successful &lt;destroyconference/>: 

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <event>
  <conferenceexit conferenceid="conference99" 
     status="0"/>
 </event>
</mscmixer>
]]></artwork></figure>



</t>

</section>  <!-- conferenceexit -->







</section>   <!-- event -->
   

</section> <!-- Mixer mgt Definitions -->


<section anchor="defn.auditmgt" title="Audit Elements">

<t>The audit elements defined in this section allow the MS to be audited
for package capabilities as well as mixers managed by the package.

Auditing is particularly important for two use cases. First, it enables
discovery of package capabilities supported on an MS before an AS
creates a conference mixer or joins connections and conferences. The AS
can then use this information to create request elements using supported
capabilities and, in the case of codecs, to negotiate an appropriate SDP
for a user agent's connection.  Second, auditing enables discovery of
the existence and status of mixers currently managed by the package on
the MS. This could be used when one AS takes over management of mixers
if the AS which created the mixers fails or is no longer available
(see Security Considerations described in <xref
target="security"/>). </t>


<section anchor="defn.audit" title="&lt;audit>">

<t>The &lt;audit> request element is sent to the MS to request
information about the capabilities of, and mixers currently managed
with, this control package. Capabilities include supported conference
codecs and video layouts.  Mixer information includes the status of
managed mixers as well as codecs.

</t>

<t>The &lt;audit> element has the following attributes: 


<list style="hanging">

<t hangText="capabilities:">indicates whether package capabilities are
to be audited. A valid value is a boolean (see <xref
target="defn.boolean"/>). A value of true indicates that capability
information is to be reported. A value of false indicates that
capability information is not to be reported. The attribute is
optional. The default value is true.
</t>


<t hangText="mixers:">indicates whether mixers currently managed by the
package are to be audited. A valid value is a boolean (see <xref
target="defn.boolean"/>). A value of true indicates that mixer
information is to be reported. A value of false indicates that mixer
information is not to be reported. The attribute is optional. The
default value is true.
</t>

<t hangText="conferenceid:">string identifying a specific conference
mixer to audit.  It is an error (406) if the conferenceid attribute is
specified and the conference identifier is not valid.  The attribute is
optional. There is no default value.
</t> 

</list>

If the mixers attribute has the value true and conferenceid attribute is
specified, then only audit information about the specified conference
mixer is reported. If the mixers attribute has the value false, then no
mixer audit information is reported even if a conferenceid attribute is
specified.
</t>

<t>
The &lt;audit> element has no child elements.
</t>

<t>When the MS receives an &lt;audit> request, it MUST reply with a
&lt;auditresponse> element (<xref target="defn.auditresponse"/>) which
includes a mandatory attribute describing the status in terms of a
numeric code. Response status codes are defined in <xref
target="defn.statuscodes"/>.  If the request is successful, the
&lt;auditresponse> contains (depending on attribute values) a
&lt;capabilities> element (<xref target="defn.capabilities"/>) reporting
package capabilities and a &lt;mixers> element (<xref
target="defn.mixers"/>) reporting managed mixer information.  If the MS
is not able to process the request and carry out the audit operation,
the audit request has failed and the MS MUST indicate the class of
failure using an appropriate 4xx response code. Unless an error response
code is specified for a class of error within this section,
implementations follow <xref target="defn.statuscodes"/> in determining
the appropriate status code for the response.
</t>


<t>For example, a request to audit capabilities and mixers managed by
the package:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
  <audit/>
</mscmixer>
]]></artwork></figure>
</t>

<t>In this example, only capabilities are to be audited:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
  <audit mixers="false"/>
</mscmixer>
]]></artwork></figure>
</t>

<t>With this example, only a specific conference mixer is to be audited:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
  <audit capabilities="false" conferenceid="conf4"/>
</mscmixer>
]]></artwork></figure>
</t>


</section>




<section anchor="defn.auditresponse" title="&lt;auditresponse>">

<t>The &lt;auditresponse> element describes a response to a &lt;audit>
request.
</t>

<t>The &lt;auditresponse> element has the following attributes:

<list style="hanging">

<t hangText="status:">numeric code indicating the audit response
status. The attribute is mandatory. Valid values are defined in <xref
target="defn.statuscodes"/>. </t>

<t hangText="reason:">string specifying a reason for the status. The
attribute is optional. </t>

<t hangText="desclang:">specifies the language used in the value of the
the reason attribute. A valid value is a language identifier (<xref
target="defn.langid"/>).  The attribute is optional.  If not specified,
the value of the desclang attribute on &lt;mscmixer> (<xref
target="defn.mscmixer"/>) applies.</t>

</list>
</t>


<t>The &lt;auditresponse> element has the following sequence of child
elements:

<list style="hanging">

<t hangText="&lt;capabilities>">element (<xref
target="defn.capabilities"/>) describing capabilities of the
package. The element is optional. </t>

<t hangText="&lt;mixers>">element (<xref target="defn.mixers"/>)
describing information about managed mixers.  The element is
optional. </t>

</list>
</t>


<t>For example, a successful response to a &lt;audit> request requesting
capabilities and mixer information:

<figure><artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <auditresponse status="200">
  <capabilities>
   <codecs>
    <codec name="video">
     <subtype>H263</subtype>
    </codec>
    <codec name="video">
     <subtype>H264</subtype>
    </codec>
    <codec name="audio">
     <subtype>PCMU</subtype>
    </codec>
    <codec name="audio">
     <subtype>PCMA</subtype>
    </codec>
   </codecs>
  </capabilities>
  <mixers>
   <conferenceaudit conferenceid="conf1">
    <codecs>
     <codec name="audio">
      <subtype>PCMA</subtype>
     </codec>
    </codecs>
    <participants>
     <participant id="1536067209:913cd14c"/>
    </participants>    
   </conferenceaudit>
   <joinaudit id1="1536067209:913cd14c" id2="conf1"/>
   <joinaudit id1="1636067209:113cd14c" id2="1836067209:313cd14c"/>
   <joinaudit id1="1736067209:213cd14c" id2="1936067209:413cd14c"/>
  </mixers>
 </auditresponse>
</mscmixer>
]]></artwork></figure>
</t>




<section toc="include" anchor="defn.capabilities" 
title="&lt;capabilities>">

<t> The &lt;capabilities> element provides audit information about
package capabilities. </t>

<t>The &lt;capabilities> element has no attributes. </t>

<t>The &lt;capabilities> element has the following sequence of child
elements:

<list style="hanging">

<t hangText="&lt;codecs>:">element (<xref target="defn.codecs"/>)
describing codecs available to the package. The element is mandatory.
</t>

</list>
</t>

<t>For example, a fragment describing capabilities:

<figure><artwork><![CDATA[
  <capabilities>
   <codecs>
    <codec name="video">
     <subtype>H263</subtype>
    </codec>
    <codec name="video">
     <subtype>H264</subtype>
    </codec>
    <codec name="audio">
     <subtype>PCMU</subtype>
    </codec>
    <codec name="audio">
     <subtype>PCMA</subtype>
    </codec>
   </codecs>
  </capabilities>
]]></artwork></figure>
</t>

</section>

<section toc="include" anchor="defn.mixers" title="&lt;mixers>">

<t> The &lt;mixers> element provides audit information about
mixers. </t>

<t>The &lt;mixers> element has no attributes. </t>

<t>The &lt;mixers> element has the following sequence of child elements
(0 or more occurrences, any order):

<list style="hanging">

<t hangText="&lt;conferenceaudit>:">audit information for a conference
mixer (<xref target="defn.conferenceaudit"/>). The element is optional.
</t>

<t hangText="&lt;joinaudit>:">audit information for a join mixer (<xref
target="defn.joinaudit"/>). The element is optional.
</t>

</list>
</t>

<section toc="include" anchor="defn.conferenceaudit" title="&lt;conferenceaudit>">

<t>The &lt;conferenceaudit> element has the following attributes:

<list style="hanging">

<t hangText="conferenceid:">string identifying the conference (see
Section 16.1 of <xref
target="I-D.ietf-mediactrl-sip-control-framework"/>).  The attribute is
mandatory. </t>

</list>
</t>

<t>The &lt;conferenceaudit> element has the following sequence of child
elements:

<list style="hanging">

<t hangText="&lt;codecs>">element describing codecs used in the
conference. See <xref target="defn.codecs"/>. The element is
optional.</t>


<t hangText="&lt;participants>">element listing connections or
conferences joined to the conference. See <xref
target="defn.participants"/>. The element is optional.</t>

<t hangText="&lt;video-layout>">element describing the active video
layout for the conference. See <xref target="defn.video-layout"/>. The
element is optional.</t>


</list>
</t>

<t>For example, a fragment describing a conference which has been
created but has no participants:

<figure><artwork><![CDATA[
<conferenceaudit conferenceid="conference1"/>
]]></artwork></figure>
</t>

<t>And a fragment when the same conference has three participants (two
connections and another conference) joined to it:

<figure><artwork><![CDATA[
<conferenceaudit conferenceid="conference1">
 <codecs> 
  <codec name="audio">
   <subtype>PCMU</subtype>
  </codec>
 </codecs>
 <participants>
   <participant id="connection1"/>
   <participant id="connection2"/>
   <participant id="conference2"/>
 </participants>
</conferenceaudit>
]]></artwork></figure>
</t>


<section toc="include" anchor="defn.participants" title="&lt;participants>">

<t>The &lt;participants> element is a container for &lt;participant> elements (<xref
target="defn.participant"/>). </t>

<t>The &lt;participants> element has no attributes, but the following child
elements are defined (0 or more):

<list style="hanging">

<t hangText="&lt;participant>:">specifies a participant (<xref
target="defn.participant"/>).

</t>

</list>
</t>

<section toc="include" anchor="defn.participant" title="&lt;participant>">

<t>The &lt;participant> element describes a participant.</t>

<t>The &lt;participant> element has the following attributes:

<list style="hanging"> 

<t hangText="id:">an identifier for either a connection or a
conference. The identifier MUST conform to the syntax defined in Section
16.1 of <xref target="I-D.ietf-mediactrl-sip-control-framework"/>. The
attribute is mandatory.</t>
</list>

</t>

<t>The &lt;participant> element has no children.
 </t>



</section>


</section>

</section>


<section toc="include" anchor="defn.joinaudit" title="&lt;joinaudit>">

<t>The &lt;joinaudit> element has the following attributes:

<list style="hanging">

<t hangText="id1:">an identifier for either a connection or a
conference. The identifier MUST conform to the syntax defined in Section
16.1 of <xref target="I-D.ietf-mediactrl-sip-control-framework"/> The
attribute is mandatory.</t>
    	
<t hangText="id2:">an identifier for either a connection or a
conference. The identifier MUST conform to the syntax defined in Section
16.1 of <xref target="I-D.ietf-mediactrl-sip-control-framework"/> The
attribute is mandatory.</t>
</list>
</t>

<t>The &lt;joinaudit> element has no children.</t>

<t>For example, a fragment describing an audit of two join mixers, one
between connections and the second between conferences:

<figure><artwork><![CDATA[
<mixers>
 <joinaudit id1="1536067209:913cd14" id2="1636067209:413cd14"/>
 <joinaudit id1="conference1" id2="conference2"/>
</mixers>
]]></artwork></figure>
</t>

</section>

</section>
</section>

</section> <!-- auditmgt -->


<section toc="include" anchor="defn.codecs" title="&lt;codecs>">

<t> The &lt;codecs> element is a container for one or more codec 
definitions. Codec definitions are used by an AS to specify the codecs allowed for
a conference (e.g. when used as a child of &lt;createconference> or
&lt;modifyconference). Codec definitions are used by an MS to provide
audit information about the codecs supported by an MS and used in
specific conferences.
</t>

<t>The &lt;codecs> element has no attributes. </t>

<t>The &lt;codecs> element has the following sequence of child
elements (0 or more occurrences):

<list style="hanging">

<t hangText="&lt;codec>:">defines a codec and optionally its policy
(<xref target="defn.codec"/>). The element is optional.
</t>

</list>
</t>

<t>For example, a fragment describing two codecs: 

<figure><artwork><![CDATA[
<codecs>
  <codec name="audio">
   <subtype>PCMA</subtype>
  </codec>
  <codec name="video">
    <subtype>H263</subtype>
  </codec>
</codecs>
]]></artwork></figure>
</t>

<section toc="include" anchor="defn.codec" title="&lt;codec>">

<t>The &lt;codec> element describes a codec. The element is modeled on
the &lt;codec> element in the XCON conference information data model
(<xref target="I-D.ietf-xcon-common-data-model"/>) and allows addition
information (e.g. rate, speed, etc) to be specified.</t>


<t>The &lt;codec> element has the following attributes:

<list style="hanging">

<t hangText="name:">indicates the type name of the codec's media format
as defined in IANA (<xref target="IANA"/>). A valid value is a
"type-name" as defined in Section 4.2 of <xref target="RFC4288"/>.  The
attribute is manadatory.
</t>
</list>

</t>

<t>The &lt;codec> element has the following sequence of child
elements:

<list style="hanging">

<t hangText="&lt;subtype>:">element whose content model describes the
subtype of the codec's media format as defined in IANA (<xref
target="IANA"/>). A valid value is a "subtype-name" as defined in
Section 4.2 of <xref target="RFC4288"/>. The element is mandatory.
</t>

<t hangText="&lt;params>:">element (<xref target="defn.params"/>)
describing additional information about the codec. This package is
agnostic to the names and values of the codec parameters supported by an
implementation. The element is optional.
</t>

</list>
</t>

<t>For example, a fragment with a &lt;codec> element describing the
H263 codec:

<figure><artwork><![CDATA[
<codec name=video">
 <subtype>H263</subtype>
</codec>
]]></artwork></figure>
</t>


<t>And a fragment where the &lt;codec> element describes the H264 video
codec with additional information about the profile level and
packetization mode:

<figure><artwork><![CDATA[
<codec name="video">
 <subtype>H264</subtype>
 <params>
  <param name="profile-level-id">42A01E</param>
  <param name="packetization-mode">0</param>
 </params>
</codec>
]]></artwork></figure>
</t>


</section> <!-- codec -->

</section> <!-- codecs -->

<section toc="include" anchor="defn.params" title="&lt;params>">

<t>The &lt;params> element is a container for &lt;param> elements (<xref
target="defn.param"/>). </t>

<t>The &lt;params> element has no attributes, but the following child
elements are defined (0 or more):

<list style="hanging">

<t hangText="&lt;param>:">specifies a parameter name and value (<xref
target="defn.param"/>).

</t>

</list>
</t>

<section toc="include" anchor="defn.param" title="&lt;param>">

<t>The &lt;param> element describes a parameter name and value.</t>

<t>The &lt;param> element has the following attributes:

<list style="hanging"> 

<t hangText="name:">a string indicating the name of the parameter.  The
attribute is mandatory. </t>

<t hangText="type:">specifies a type indicating how the inline value of
the parameter is to be interpreted.  A valid value is a MIME media type
(see <xref target="defn.mimetype"/>). The attribute is optional. The
default value is "text/plain".
</t>

<t hangText="encoding:">specifies a content-transfer-encoding schema
applied to the inline value of the parameter on top of the MIME media
type specified with the type attribute. A valid value is a
content-transfer-encoding schema as defined by the "mechanism" token in
Section 6.1 of <xref target="RFC2045"/>. The attribute is
optional. There is no default value.
</t>

</list>
</t>


<t>The &lt;param> element content model is the value of the parameter.
Note that a value which contains XML characters (e.g. "&lt;") needs to
be escaped following standard XML conventions.
</t>


</section>

</section> <!-- end of params -->




<section anchor="defn.statuscodes" title="Response Status Codes">


<t>This section describes the response codes in <xref
target="defn.table.statuscodes"/> for the status attribute of mixer
management &lt;response> (<xref target="defn.response"/>) and audit
&lt;auditresponse> (<xref target="defn.auditresponse"/>) responses. The
MS MUST support the status response codes defined here.  All other valid
but undefined values are reserved for future use, where new status codes
are assigned using the Standards Action process defined in <xref
target="RFC5226"/>. The AS MUST treat any responses it does not
recognize as being equivalent to the x00 response code for all
classes. For example, if an AS receives an unrecognized response code of
499, it can safely assume that there was something wrong with its
request and treat the response as if it had received a 400 (Syntax
error) response code. </t>

<t>4xx responses are definite failure responses from a particular MS.
The reason attribute in the response SHOULD identify the failure in more
detail, for example, "Mandatory attribute missing: id2 join element" for
a 400 (Syntax error) response code.
</t>

<t>The AS SHOULD NOT retry the same request without modification (for
example, correcting a syntax error or changing the conferenceid to use
one available on the MS).  However, the same request to a different MS
might be successful; for example, if another MS supports a capability
required in the request.
</t>

<t>4xx failure responses can be grouped into three classes: failure due
to a syntax error in the request (400); failure due to an error
executing the request on the MS (405-419); and failure due to the
request requiring a capability not supported by the MS (420-435).
</t>

<t>In cases where more than one request code could be reported for a
failure, the MS SHOULD use the most specific error code of the failure
class for the detected error. For example, if the MS detects that the
conference identifier in the request is invalid, then it uses a 406
status code.  However, if the MS merely detects that an execution error
occurred, then 419 is used.
</t>

<texttable anchor="defn.table.statuscodes"  title="status codes" >
  <ttcol align="left" width="10%">Code</ttcol>
  <ttcol align="left" width="15%">Summary</ttcol>
  <ttcol align="left" width="40%">Description</ttcol>
  <ttcol align="left" width="35%">Informational: AS Possible Recovery
  Action</ttcol>

   <c>200</c>
   <c>OK</c>
   <c>request has succeeded</c>
   <c></c>

   <c>400</c>
   <c>Syntax error</c>

   <c>request is syntactically invalid: it is not valid with respect to
   the XML schema specified in <xref target="schema"/> or it violates a
   co-occurrence constraint for a request element defined in <xref
   target="defn.elements"/>. </c>
   <c>Change the request so that it is syntactically valid.</c>

   <c>405</c>
   <c>Conference already exists</c>
   <c>request uses an identifier to create a new conference (<xref
   target="defn.createconference"/>) which is already used by another
   conference on the MS.
   </c>
   <c>Send an &lt;audit> request (<xref target="defn.audit"/>)
   requesting the list of conference mixer identifiers already used by
   the MS and then use a conference identifier which is not
   listed. </c>

   <c>406</c>
   <c>Conference does not exist</c>
   <c>request uses an identifier for a conference which does not exist
   on the MS.</c>
   <c>Send an &lt;audit> request (<xref target="defn.audit"/>)
   requesting the list of conference mixer identifiers used by the MS
   and then use a conference identifier which is listed. </c>

   <c>407</c>
   <c>Incompatible stream configuration</c>
   <c>request specifies a media stream configuration which is in
   conflict with itself, or the connection or conference capabilities
   (see <xref target="defn.join"/>)
   </c>
   <c>Change the media stream configuration to match the capabilities of
   the connection or conference</c>
   
   <c>408</c>
   <c>joining entities already joined</c>
   <c>request attempts to create a join mixer (<xref
   target="defn.join"/>) where the entities are already joined</c>
   <c>Send an &lt;audit> request (<xref target="defn.audit"/>)
   requesting the list of join mixers on the MS and then use entities
   which are not listed. </c>
   
   <c>409</c>
   <c>joining entities not joined</c>
   <c>request attempts to manipulate a join mixer where entities which
   are not joined</c>
   <c>Send an &lt;audit> request (<xref target="defn.audit"/>)
   requesting the list of join mixers on the MS and then use entities
   which are listed. </c>


   <c>410</c>
   <c>Unable to join - conference full</c>
   <c>request attempts to join a participant to a conference (<xref 
   target="defn.join"/>) but the conference is already full</c>
   <c></c>

   <c>411</c>
   <c>Unable to perform join mixer operation</c>
   <c>request attempts to create, modify or delete a join between
   entities but fails</c>
   <c></c>   

   <c>412</c>
   <c>Connection does not exist</c>
   <c>request uses an identifier for a connection which does not exist
   on the MS.</c>
   <c></c>


   <c>419</c>
   <c>Other execution error</c>
   <c>requested operation cannot be executed by the MS.</c>
   <c></c>

   <c>420</c>
   <c>Conference reservation failed</c>
   <c>request to create a new conference (<xref
   target="defn.createconference"/>) failed due to unsupported
   reservation of talkers or listeners. </c>
   <c></c>

   <c>421</c>
   <c>Unable to configure audio mix</c>
   <c>request to create or modify a conference failed due to unsupported
   audio mix.</c>
   <c></c>

   <c>422</c>
   <c>Unsupported media stream configuration</c>
   <c>request contains one or more &lt;stream> elements (<xref
   target="defn.stream"/>) whose configuration is not supported by the
   MS.</c>
   <c></c>

   <c>423</c>
   <c>Unable to configure video layouts</c>
   <c>request to create or modify a conference failed due to unsupported
   video layout configuration.</c>
   <c></c>

   <c>424</c>
   <c>Unable to configure video switch</c>
   <c>request to create or modify a  conference failed due to 
   unsupported video switch configuration.</c>
   <c></c>

   <c>425</c>
   <c>Unable to configure codecs</c>
   <c>request to create or modify a conference failed due to unsupported
   codec.</c>
   <c></c>

   <c>426</c>
   <c>Unable to join - mixing connections not supported</c>
   <c>request to join connection entities (<xref target="defn.join"/>) 
   failed due lack of support for mixing connections.</c>
   <c></c>
   
   <c>427</c>
   <c>Unable to join - mixing conferences not supported</c>
   <c>request to join conference entities (<xref target="defn.join"/>) 
   failed due lack of support for mixing conferences.</c>
   <c></c>

   <c>428</c>
   <c>Unsupported foreign namespace attribute or element</c>
   <c>the request contains attributes or elements from another namespace
   which the MS does not support</c>
   <c></c>

   <c>435</c>
   <c>Other unsupported capability</c>
   <c>request requires another capability not supported by the MS</c>
   <c></c>

</texttable>


		
</section>

<section anchor="defn.types" title="Type Definitions">


<t>This section defines types referenced in attribute definitions. </t>

      <section toc="exclude" anchor="defn.boolean" title="Boolean">

        <t>The value space of boolean is the set {true, false, 1, 0} as
        defined in Section 3.2.2 of <xref target="XMLSchema:Part2"/>.
        In accordance with this definition, the concept of false can be
        lexically represented by the strings "0" and "false" and the
        concept of true by the strings "1" and "true"; implementations
        MUST support both styles of lexical representation. </t>

      </section>


      <section toc="exclude" anchor="defn.nonneginteger" title="Non-Negative Integer">
        <t>The value space of non-negative integer is the infinite set
        {0,1,2,...} as defined in Section 3.3.20 of <xref
        target="XMLSchema:Part2"/>.</t>
      </section>

      <section toc="exclude" anchor="defn.posinteger" title="Positive Integer">
        <t>The value space of positive integer is the infinite
        set {1,2,...} as defined in Section 3.3.25 of <xref
        target="XMLSchema:Part2"/>.</t>
      </section>



      <section toc="exclude" anchor="defn.string" title="String">
        <t>A string in the character encoding associated with the XML
        element as defined in Section 3.2.1 of <xref
        target="XMLSchema:Part2"/>.</t>
      </section>


      <section toc="exclude" anchor="defn.timedesignation" title="Time Designation">

        <t>A time designation consists of a non-negative real number
        followed by a time unit identifier. </t>

        <t>The time unit identifiers are: "ms" (milliseconds) and "s"
            (seconds). </t>

        <t>Examples include: "3s", "850ms", "0.7s", ".5s" and "+1.5s". </t>

      </section>

      <section toc="exclude" anchor="defn.mimetype" title="MIME Media Type">

          <t>A string formated as an IANA MIME media type (<xref
          target="MIME.mediatypes"/>). The ABNF (<xref
          target="RFC5234"/>) production for the string is: 
<figure>
<artwork><![CDATA[
type-name "/" subtype-name *(";" parameter)

parameter = parameter-name "=" value
]]></artwork>
</figure>

          where "type-name" and "subtype-name" are defined in Section
          4.2 of <xref target="RFC4288"/>, "parameter-name" is defined
          in Section 4.3 of <xref target="RFC4288"/> and "value" is
          defined in Section 5.1 of <xref target="RFC2045"/>.

          </t>

      </section>

      <section toc="exclude" anchor="defn.langid" title="Language Identifier">

          <t>A language identifier labels information content as being
          of a particular human language variant. Following the XML
          specification for language identification <xref
          target="XML"/>, a legal language identifier is identified by a
          RFC5646 code (<xref target="RFC5646"/>) and matched according
          to RFC4647 (<xref target="RFC4647"/>).
          </t>

      </section>
</section>

</section>   <!-- Element Definitions -->


<section anchor="schema" title="Formal Syntax">

<t>This section defines the XML schema for the Mixer Control
Package. The schema is normative. </t>

<t>The schema defines datatypes, attributes, and mixer elements in the
urn:ietf:params:xml:ns:msc-mixer namespace. In most elements the order
of child elements is significant. The schema is extensible: elements
allow attributes and child elements from other namespaces.  Elements
from outside this package's namespace can occur after elements defined
in this package.
</t>

<t>
The schema is dependent upon the schema (framework.xsd) defined in
Section 16.1 of the Control Framework <xref
target="I-D.ietf-mediactrl-sip-control-framework"/>.
</t>


<figure anchor="fig:mixer_schema" title="Mixer Package XML Schema">
 <artwork><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="urn:ietf:params:xml:ns:msc-mixer"
 xmlns:fw="urn:ietf:params:xml:ns:control:framework-attributes"
 elementFormDefault="qualified"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns="urn:ietf:params:xml:ns:msc-mixer"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 <xsd:annotation>
  <xsd:documentation>
   IETF MediaCtrl Mixer 1.0 (20110104)

   This is the schema of the Mixer control package. It
   defines request, response and notification elements for
   mixing.

   The schema namespace is urn:ietf:params:xml:ns:msc-mixer

  </xsd:documentation>
 </xsd:annotation>


 <!-- 
  #############################################################
  
  SCHEMA IMPORTS 
  
  ############################################################# 
 -->


 <xsd:import
  namespace="urn:ietf:params:xml:ns:control:framework-attributes"
  schemaLocation="framework.xsd">
  <xsd:annotation>
   <xsd:documentation>
    This import brings in the framework attributes for
    conferenceid and connectionid.
   </xsd:documentation>
  </xsd:annotation>
 </xsd:import>


 <!-- 
  #####################################################
  
  Extensible core type 
  
  #####################################################
 -->


 <xsd:complexType name="Tcore">
  <xsd:annotation>
   <xsd:documentation>
    This type is extended by other (non-mixed) component types to
    allow attributes from other namespaces.   
   </xsd:documentation>
  </xsd:annotation>
  <xsd:sequence/>
  <xsd:anyAttribute namespace="##other" processContents="lax" />
 </xsd:complexType>


 <!-- 
  #####################################################
  
  TOP LEVEL ELEMENT: mscmixer
  
  #####################################################
 -->

 <xsd:complexType name="mscmixerType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:choice>
      <xsd:element ref="createconference" />
      <xsd:element ref="modifyconference" />
      <xsd:element ref="destroyconference" />
      <xsd:element ref="join" />
      <xsd:element ref="unjoin" />
      <xsd:element ref="modifyjoin" />
      <xsd:element ref="response" />
      <xsd:element ref="event" />
      <xsd:element ref="audit" />
      <xsd:element ref="auditresponse" />
      <xsd:any namespace="##other" minOccurs="0"
       maxOccurs="unbounded" processContents="lax" />
     </xsd:choice>
    </xsd:sequence>
    <xsd:attribute name="version" type="version.datatype"
     use="required" /> 
    <xsd:attribute name="desclang" type="xsd:language"
     default="i-default" />         
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="mscmixer" type="mscmixerType" />


 <!-- 
  #####################################################
  
  CONFERENCE MANAGEMENT TYPES 
  
  #####################################################
 -->

 <!--  createconference -->

 <xsd:complexType name="createconferenceType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="codecs" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="audio-mixing" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="video-layouts" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="video-switch" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="subscribe" minOccurs="0"
      maxOccurs="1" />
     <xsd:any namespace="##other"
      processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
    <xsd:attribute name="conferenceid" type="xsd:string" />
    <xsd:attribute name="reserved-talkers"
     type="xsd:nonNegativeInteger" default="0" />
    <xsd:attribute name="reserved-listeners"
     type="xsd:nonNegativeInteger" default="0" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="createconference" type="createconferenceType" />

 <!--  modifyconference -->

 <xsd:complexType name="modifyconferenceType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="codecs" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="audio-mixing" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="video-layouts" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="video-switch" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="subscribe" />
     <xsd:any namespace="##other"
      processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
    <xsd:attribute name="conferenceid" type="xsd:string"
     use="required" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="modifyconference" type="modifyconferenceType" />


 <!--  destroyconference -->

 <xsd:complexType name="destroyconferenceType">
 <xsd:complexContent>
   <xsd:extension base="Tcore">
   <xsd:sequence>
    <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>   
   <xsd:attribute name="conferenceid" type="xsd:string"
   use="required" />
   </xsd:extension>
   </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="destroyconference"
  type="destroyconferenceType" />




 <!-- 
  #####################################################
  
  JOIN TYPES 
  
  #####################################################
 -->

 <xsd:complexType name="joinType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="stream" minOccurs="0"
      maxOccurs="unbounded" />
     <xsd:any namespace="##other"
      processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
    <xsd:attribute name="id1" type="xsd:string"
     use="required" />
    <xsd:attribute name="id2" type="xsd:string"
     use="required" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="join" type="joinType" />

 <xsd:complexType name="modifyjoinType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="stream" minOccurs="0"
      maxOccurs="unbounded" />
     <xsd:any namespace="##other"
      processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
    <xsd:attribute name="id1" type="xsd:string"
     use="required" />
    <xsd:attribute name="id2" type="xsd:string"
     use="required" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="modifyjoin" type="modifyjoinType" />


 <xsd:complexType name="unjoinType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="stream" minOccurs="0"
      maxOccurs="unbounded" />
     <xsd:any namespace="##other"
      processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
    <xsd:attribute name="id1" type="xsd:string"
     use="required" />
    <xsd:attribute name="id2" type="xsd:string"
     use="required" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="unjoin" type="unjoinType" />

 <!-- 
  #####################################################
  
  OTHER TYPES 
  
  #####################################################
 -->

 <xsd:complexType name="eventType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:choice>
      <xsd:element ref="active-talkers-notify"
       minOccurs="0" maxOccurs="1" />
      <xsd:element ref="unjoin-notify"
       minOccurs="0" maxOccurs="1" />
      <xsd:element ref="conferenceexit"
       minOccurs="0" maxOccurs="1" />
      <xsd:any namespace="##other" minOccurs="0"
       maxOccurs="unbounded" processContents="lax" />
     </xsd:choice>
    </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="event" type="eventType" />

 <xsd:complexType name="activetalkersnotifyType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="active-talker" minOccurs="0"
      maxOccurs="unbounded" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
    <xsd:attribute name="conferenceid" type="xsd:string"
     use="required" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="active-talkers-notify"
  type="activetalkersnotifyType" />


 <xsd:complexType name="activetalkerType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
    <xsd:attributeGroup ref="fw:framework-attributes" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="active-talker" type="activetalkerType" />


 <xsd:complexType name="unjoinnotifyType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
    <xsd:attribute name="status" type="xsd:nonNegativeInteger"
      use="required" />
    <xsd:attribute name="reason" type="xsd:string" />
      <xsd:attribute name="desclang" type="xsd:language"/>        
    <xsd:attribute name="id1" type="xsd:string"
     use="required" />
    <xsd:attribute name="id2" type="xsd:string"
     use="required" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="unjoin-notify" type="unjoinnotifyType" />



 <!--  conferenceexit-->

 <xsd:complexType name="conferenceexitType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
    <xsd:attribute name="conferenceid" type="xsd:string"
     use="required" />
    <xsd:attribute name="status"
     type="xsd:nonNegativeInteger" use="required" />
    <xsd:attribute name="reason" type="xsd:string" />
      <xsd:attribute name="desclang" type="xsd:language"/>        
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="conferenceexit" type="conferenceexitType" />



 <xsd:complexType name="responseType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
   <xsd:sequence>
    <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>      
    <xsd:attribute name="status" type="status.datatype"
     use="required" />
    <xsd:attribute name="reason" type="xsd:string" />
      <xsd:attribute name="desclang" type="xsd:language"/>    
    <xsd:attributeGroup ref="fw:framework-attributes" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>


 <xsd:element name="response" type="responseType" />


 <xsd:complexType name="subscribeType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="active-talkers-sub"
      minOccurs="0" maxOccurs="1" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="subscribe" type="subscribeType" />

 <xsd:complexType name="activetalkerssubType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
    <xsd:attribute name="interval"
     type="xsd:nonNegativeInteger" default="3" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="active-talkers-sub"
  type="activetalkerssubType" />


 <xsd:complexType name="streamType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="volume" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="clamp" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="region" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="priority" minOccurs="0"
      maxOccurs="1" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
    <xsd:attribute name="media" type="media.datatype"
     use="required" />
    <xsd:attribute name="label" type="label.datatype" />
    <xsd:attribute name="direction"
     type="direction.datatype" default="sendrecv" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="stream" type="streamType" />


 <xsd:complexType name="volumeType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
    <xsd:attribute name="controltype"
     type="volumecontroltype.datatype" use="required" />
    <xsd:attribute name="value" type="xsd:string" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="volume" type="volumeType" />


 <xsd:complexType name="clampType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
    <xsd:attribute name="tones" type="xsd:string"
     default="1 2 3 4 5 6 7 8 9 0 * # A B C D"/>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="clamp" type="clampType" />


 <!--  region  -->
 <xsd:simpleType name="regionType">
  <xsd:restriction base="xsd:NMTOKEN" />
 </xsd:simpleType>

 <xsd:element name="region" type="regionType" />


 <!--  priority  -->
 <xsd:simpleType name="priorityType">
  <xsd:restriction base="xsd:positiveInteger" />
 </xsd:simpleType>

 <xsd:element name="priority" type="priorityType" />

 <xsd:complexType name="audiomixingType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
   <xsd:sequence>
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>   
    <xsd:attribute name="type" type="audiomix.datatype"
     default="nbest" />
    <xsd:attribute name="n" type="xsd:nonNegativeInteger"
     default="0" />     
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="audio-mixing" type="audiomixingType" />

 <!-- video-switch -->

 <xsd:complexType name="videoswitchType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
      <xsd:choice>
       <xsd:element name="vas" type="Tcore"/>
       <xsd:element name="controller" type="Tcore"/>
       <xsd:any namespace="##other" processContents="lax" />          
     </xsd:choice>
    </xsd:sequence>
    <xsd:attribute name="interval"
     type="xsd:nonNegativeInteger" default="3" />
    <xsd:attribute name="activespeakermix"
     type="xsd:boolean" default="false" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="video-switch" type="videoswitchType" />

 <!-- video-layouts -->

 <xsd:complexType name="videolayoutsType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="video-layout" minOccurs="0"
      maxOccurs="unbounded" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="video-layouts" type="videolayoutsType" />


 <!-- video-layout -->
 <xsd:complexType name="videolayoutType">
 <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:choice>
       <xsd:element name="single-view" type="Tcore"/>
       <xsd:element name="dual-view" type="Tcore"/>
       <xsd:element name="dual-view-crop" type="Tcore"/>
       <xsd:element name="dual-view-2x1" type="Tcore"/>
       <xsd:element name="dual-view-2x1-crop" type="Tcore"/>       
       <xsd:element name="quad-view" type="Tcore"/>
       <xsd:element name="multiple-3x3" type="Tcore"/>
       <xsd:element name="multiple-4x4" type="Tcore"/>
       <xsd:element name="multiple-5x1" type="Tcore"/>   
       <xsd:any namespace="##other" processContents="lax" />      
     </xsd:choice>
    </xsd:sequence>
   <xsd:attribute name="min-participants"
     type="xsd:positiveInteger" default="1" />    
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="video-layout" type="videolayoutType" />

 <xsd:complexType name="auditType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
   <xsd:sequence>
   <xsd:any namespace="##other" minOccurs="0"
    maxOccurs="unbounded" processContents="lax" />
   </xsd:sequence>   
    <xsd:attribute name="capabilities"
     type="xsd:boolean" default="true" />
    <xsd:attribute name="mixers" type="xsd:boolean"
     default="true" />
    <xsd:attribute name="conferenceid" type="xsd:string" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="audit" type="auditType" />


 <xsd:complexType name="auditresponseType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="capabilities" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="mixers" minOccurs="0"
      maxOccurs="1" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
    <xsd:attribute name="status" type="status.datatype"
     use="required" />
    <xsd:attribute name="reason" type="xsd:string" />
      <xsd:attribute name="desclang" type="xsd:language"/>        
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="auditresponse" type="auditresponseType" />

 <!-- mixers -->

 <xsd:complexType name="mixersType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="conferenceaudit" minOccurs="0"
      maxOccurs="unbounded" />
     <xsd:element ref="joinaudit" minOccurs="0"
      maxOccurs="unbounded" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="mixers" type="mixersType" />

 <!--  joinaudit -->

 <xsd:complexType name="joinauditType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:any namespace="##other"
      processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
    <xsd:attribute name="id1" type="xsd:string"
     use="required" />
    <xsd:attribute name="id2" type="xsd:string"
     use="required" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="joinaudit" type="joinauditType" />

 <!-- conferenceaudit -->

 <xsd:complexType name="conferenceauditType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="codecs" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="participants" minOccurs="0"
      maxOccurs="1" />
     <xsd:element ref="video-layout" minOccurs="0"
      maxOccurs="1" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
    <xsd:attribute name="conferenceid" type="xsd:string"
     use="required" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="conferenceaudit" type="conferenceauditType" />


 <!-- participants -->

 <xsd:complexType name="participantsType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="participant" minOccurs="0"
      maxOccurs="unbounded" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="participants" type="participantsType" />

 <!-- participant -->

 <xsd:complexType name="participantType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:string"
     use="required" />
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="participant" type="participantType" />

 <!-- capabilities -->

 <xsd:complexType name="capabilitiesType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="codecs" minOccurs="1"
      maxOccurs="1" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="capabilities" type="capabilitiesType" />


 <!-- codecs -->

 <xsd:complexType name="codecsType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="codec" minOccurs="0"
      maxOccurs="unbounded" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="codecs" type="codecsType" />

 <!-- codec -->

 <xsd:complexType name="codecType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="subtype" minOccurs="1"
      maxOccurs="1" />
     <xsd:element ref="params" minOccurs="0"
      maxOccurs="1" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
     <xsd:attribute name="name" type="xsd:string"
     use="required" />    
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="codec" type="codecType" />

 <!-- subtype -->

 <xsd:simpleType name="subtypeType">
  <xsd:restriction base="xsd:string" />
 </xsd:simpleType>

 <xsd:element name="subtype" type="subtypeType" />


 <!-- params -->
 <xsd:complexType name="paramsType">
  <xsd:complexContent>
   <xsd:extension base="Tcore">
    <xsd:sequence>
     <xsd:element ref="param" minOccurs="0"
      maxOccurs="unbounded" />
     <xsd:any namespace="##other" minOccurs="0"
      maxOccurs="unbounded" processContents="lax" />
    </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

 <xsd:element name="params" type="paramsType" />


 <!--  param -->
    <!--  doesn't extend tCore since its content model is mixed -->
 <xsd:complexType name="paramType" mixed="true">
  <xsd:sequence/>
  <xsd:attribute name="name" type="xsd:string" use="required" />
  <xsd:attribute name="type" type="mime.datatype" 
  default="text/plain" />
     <xsd:attribute name="encoding" type="xsd:string"/>   
 </xsd:complexType>

 <xsd:element name="param" type="paramType" />


 <!-- 
  ####################################################
  
  DATATYPES 
  
  ####################################################
 -->

<xsd:simpleType name="version.datatype">
  <xsd:restriction base="xsd:NMTOKEN">
   <xsd:enumeration value="1.0" />
  </xsd:restriction>
 </xsd:simpleType>

 <xsd:simpleType name="eventname.datatype">
  <xsd:restriction base="xsd:NMTOKEN">
   <xsd:pattern value="[a-zA-Z0-9\.]+" />
  </xsd:restriction>
 </xsd:simpleType>

 <xsd:simpleType name="audiomix.datatype">
  <xsd:restriction base="xsd:NMTOKEN">
   <xsd:enumeration value="nbest" />
   <xsd:enumeration value="controller" />
  </xsd:restriction>
 </xsd:simpleType>

 <xsd:simpleType name="media.datatype">
  <xsd:restriction base="xsd:string" />
 </xsd:simpleType>

 <xsd:simpleType name="label.datatype">
  <xsd:restriction base="xsd:string" />
 </xsd:simpleType>

 <xsd:simpleType name="status.datatype">
  <xsd:restriction base="xsd:positiveInteger">
   <xsd:pattern value="[0-9][0-9][0-9]" />
  </xsd:restriction>
 </xsd:simpleType>

 <xsd:simpleType name="direction.datatype">
  <xsd:restriction base="xsd:NMTOKEN">
   <xsd:enumeration value="sendonly" />
   <xsd:enumeration value="recvonly" />
   <xsd:enumeration value="sendrecv" />
   <xsd:enumeration value="inactive" />
  </xsd:restriction>
 </xsd:simpleType>

 
 <xsd:simpleType name="mime.datatype">
  <xsd:restriction base="xsd:string" />
 </xsd:simpleType>


 <xsd:simpleType name="volumecontroltype.datatype">
  <xsd:restriction base="xsd:NMTOKEN">
   <xsd:enumeration value="automatic" />
   <xsd:enumeration value="setgain" />
   <xsd:enumeration value="setstate" />
  </xsd:restriction>
 </xsd:simpleType>

 
</xsd:schema>
 ]]></artwork>
</figure>
    
</section>

<!-- Formal Syntax: XML Schema  -->


<section anchor="examples" title="Examples">


<t>This section provides examples of the Mixer Control package. </t>


<section anchor="examples.protocol" title="AS-MS Framework Interaction Examples">

<t>The following example assume a control channel has been established
and synced as described in the Media Control Channel Framework (<xref
target="I-D.ietf-mediactrl-sip-control-framework"/>). </t>

<t>The XML messages are in angled brackets (with the root &lt;mscmixer>
and other details omitted for clarity); the REPORT status is in round
brackets. Other aspects of the protocol are omitted for readability.
</t>

<section title="Creating a conference mixer and joining a participant">

<t>A conference mixer is created successfully and a participant is joined.
</t>

<figure>
<artwork><![CDATA[
          Application Server (AS)                   Media Server (MS)
             |                                             |
             |       (1) CONTROL: <createconference>       |
             |  ---------------------------------------->  |
             |                                             |
             |       (2) 202                               |
             |  <---------------------------------------   |
             |                                             |
             |                                             |
             |       (3) REPORT: <response status="200"/>  |
             |                   (terminate)               |
             |  <----------------------------------------  |
             |                                             |
             |       (4) 200                               |
             |  ---------------------------------------->  |
             |                                             |
             |       (5) CONTROL: <join id1=.. id2=..>     |
             |  ---------------------------------------->  |
             |                                             |
             |       (6) 202                               |
             |  <---------------------------------------   |
             |                                             |
             |       (7) REPORT: <response status="200"/>  |
             |                   (terminate)               |
             |  <----------------------------------------  |
             |                                             |
             |       (8) 200                               |
             |  ---------------------------------------->  |

]]></artwork>
</figure>

</section>


<section title="Receiving active talker notifications">

<t>An active talker notification event is sent by the MS.</t>

<figure>
<artwork><![CDATA[

          Application Server (AS)                   Media Server (MS)
             |                                             |
             |       (1) CONTROL: <event ...>              |
             |  <---------------------------------------   |
             |                                             |
             |       (4) 200                               |
             |  ---------------------------------------->  |
             |                                             |
]]></artwork>
</figure>

</section>


<section title="Conference termination">

<t>The MS receives a request to terminate the conference, resulting in
conferenceexit and participant unjoined notifications. </t>

<figure>
<artwork><![CDATA[
          Application Server (AS)                   Media Server (MS)
             |                                             |
             |       (1) CONTROL: <destroyconference>      |
             |  ---------------------------------------->  |
             |                                             |
             |       (2) 200: <response status="200"/>     |
             |  <---------------------------------------   |
             |                                             |
             |       (3) CONTROL: <event ..>               |
             |                   (unjoin-notify)           |
             |  <----------------------------------------  |
             |                                             |
             |       (4) 200                               |
             |  ---------------------------------------->  |
             |                                             |
             |       (5) CONTROL:  <event ..>              |
             |                   (conferenceexit)          |
             |  <----------------------------------------  |
             |                                             |
             |       (6) 200                               |
             |  ---------------------------------------->  |

]]></artwork>
</figure>

</section>


</section> <!-- end of framework examples -->

<section anchor="examples.mixing" title="Mixing Examples">

<t>The following examples show how the mixing package can be used to
create audio conferences, bridge connections and video conferences. </t>

<t>The examples do not specify all messages between the AS and MS. </t>

<section title="Audio conferencing">

<t>The AS sends a request to create a conference mixer:</t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <createconference conferenceid="conf1" 
  reserved-talkers="2" reserved-listeners="3">
  <audio-mixing type="nbest"/>
  <subscribe>
   <active-talkers-sub interval="5"/>
  </subscribe>
 </createconference>
</mscmixer>
]]></artwork>
</figure>

<t>The request specifies that the conference is assigned the conference
id "conf1" and is configured with 2 reserved talkers, 3 reserved
listener slots, audio mixing policy set to nbest and with active talkers
notifications set to 5 seconds. </t>

<t>If the MS is able to create this conference mixer, it sends 200
response:</t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <response status="200" reason="conference created" 
           conferenceid="conf1"/>
</mscmixer>
]]></artwork>
</figure>


<t>The AS is now able to join connections to the conference as
participants. A participant able to contribute to the audio mix would be
joined as follows:
</t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <join id1="1536067209:913cd14c" id2="conf1">
  <stream media="audio" direction="sendrecv"/>
 </join>
</mscmixer>
]]></artwork>
</figure>

<t>If the MS can join the participant 1536067209:913cd14c to the
conference conf1 with audio in both directions, then it sends a
successful response:</t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <response status="200" reason="join successful"/> 
</mscmixer>
]]></artwork>
</figure>


<t>The AS could also join listener-only participants to the conference
by setting the stream direction to receive only:
</t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <join id1="9936067209:914cd14c" id2="conf1">
  <stream media="audio" direction="recvonly"/>
 </join>
</mscmixer>
]]></artwork>
</figure>

<t>If the MS can join the participant 9936067209:914cd14c to the
conference conf1 then it would send a successful response (not shown).
</t>


<t>As the active talker changes, the MS sends an active talker
notification to the AS: </t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <event>
  <active-talkers-notify conferenceid="conf1">
   <active-talker connectionid="1536067209:913cd14c"/>
  </active-talkers-notify>
 </event>
</mscmixer>
]]></artwork>
</figure>


<t>The AS could decide to change the status of a talker connection so
that they can only listen:</t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <modifyjoin id1="1536067209:913cd14c" id2="conf1">
  <stream media="audio" direction="recvonly"/>
 </modifyjoin>
</mscmixer>
]]></artwork>
</figure>

<t>Where the participant 1536067209:913cd14c is no longer able to
contribute to the audio mix on the conference. If the MS is able to
execute this request, it would send a 200 response. </t>

<t>The AS could decide to remove this participant from the conference:</t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <unjoin id1="1536067209:913cd14c" id2="conf1"/>
</mscmixer>
]]></artwork>
</figure>

<t>Again, if the MS can execute this request, a 200 response would be sent.</t>


<t>Finally, the AS terminates the conference: </t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <destroyconference conferenceid="conf1"/>
</mscmixer>
]]></artwork>
</figure>

<t>If the MS is able to destroy the conference conf1, it sends a 200
response: </t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <response status="200" conferenceid="conf1"/>
</mscmixer>
]]></artwork>
</figure>

<t>For each participant attached to the conference when it is destroyed,
the MS sends an unjoin notification event: </t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <event>
  <unjoin-notify status="2" id1="9936067209:914cd14c" 
      id2="conf1"/>
 </event>
</mscmixer>
]]></artwork>
</figure>

<t>And the MS sends a conferenceexit notification event when the
conference finally exits:
</t> 

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <event>
  <conferenceexit status="0" conferenceid="conf1"/>
 </event>
</mscmixer>
]]></artwork>
</figure>


</section>

<section title="Bridging connections">

<t>The mixer package can be used to join connections to one another. In
a call center scenario, for example, this package can be used to set up
and modify connections between a caller, agent and supervisor. </t>


<t>A caller is joined to an agent with bi-directional audio: </t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <join id1="caller:001" id2="agent:002">
  <stream media="audio" direction="sendrecv"/>
 </join>
</mscmixer>
]]></artwork>
</figure>

<t>If the MS is able to establish this connection, then it would send a
200 response:</t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <response status="200"/>
</mscmixer>
]]></artwork>
</figure>

<t>Now assume that the AS wants a supervisor to listen into the agent
conversation with the caller and provide whispered guidance to the
agent.  First the AS would send a request to join the supervisor and the
caller connections: </t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <join  id1="supervisor:003" id2="caller:001">
  <stream media="audio" direction="recvonly"/>
 </join>
</mscmixer>
]]></artwork>
</figure>

<t>If this request was successful, audio output from the caller
connection would now be sent to both the agent and the supervisor.
</t>

<t>Second, the AS would send a request to join the supervisor and the
agent connections:</t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <join id1="supervisor:001" id2="agent:002">
  <stream media="audio" direction="sendrecv"/>
 </join>
</mscmixer>
]]></artwork>
</figure>

<t>If this request was successful, the audio mixing would occur on both
the agent and supervisor connections: the agent would hear the caller
and supervisor, and the supervisor would hear the agent and caller. The
caller would only hear the agent. If the MS is unable to join and mix
connections in this way, it would send a 426 response. </t>

</section>


<section title="Video conferencing">

<t>In this example, an audio video-conference is created with the
loudest participant has the most prominent region in the video
layout.</t>


<t>The AS sends a request to create an audio-video conference: </t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <createconference conferenceid="conf2">
  <audio-mixing type="nbest"/>
  <video-layouts>
   <video-layout min-participants="1"><single-view/></video-layout>
   <video-layout min-participants="2"><dual-view/></video-layout>
   <video-layout min-participants="3"><quad-view/></video-layout>
   <video-layout min-participants="5"><multiple-5x1/></video-layout>
  </video-layouts>
  <video-switch><vas/></video-switch>
 </createconference>
</mscmixer>
]]></artwork>
</figure>

<t>In this configuration, the conference uses a nbest audio mixing
policy and a &lt;vas/> video switch policy, so that the loudest speaker
receives the most prominent region in the layout. Multiple video layouts
are specified and active one depends on the number of participants.
</t>

<t>Assume that 4 participants are already joined to the conference. In
that case, the video layout will be quad-view (<xref
target="fig.quad-view"/>) with the most active speaker displayed in
region 1. When a fifth participant joins, the video layout automatically
switches to a multiple-5x1 layout (<xref target="fig.multiple-5x1"/>),
again with the most active speaker in region 1. </t>

<t>The AS can manipulate which participants are displayed in the
remaining regions.  For example, it could force an existing conference
participant to be displayed in region 2: </t>

<figure>
<artwork><![CDATA[
<mscmixer version="1.0" xmlns="urn:ietf:params:xml:ns:msc-mixer">
 <modifyjoin id1="1536067209:913cd14c" id2="conf2">
  <stream media="video">
   <region>2</region>
  </stream>
 </modifyjoin>
</mscmixer>
]]></artwork>
</figure>


</section>


</section> <!-- end of mixer examples -->

</section> <!-- end of examples -->



<section anchor="security" title="Security Considerations">
			
  <t>As this control package processes XML markup, implementations MUST
  address the security considerations of <xref target="RFC3023"/>.
  </t>

  <t>As a Control Package of the Media Control Channel Framework,
  security, confidentiality and integrity of messages transported over
  the control channel MUST be addressed as described in Section 12 of
  the Media Control channel Framework (<xref
  target="I-D.ietf-mediactrl-sip-control-framework"/>), including
  Transport Level Protection, Control Channel Policy Management and
  Session Establishment. 

In addition, implementations MUST address security, confidentiality and
integrity of User Agent sessions with the MS, both in terms of SIP
signaling and associated RTP media flow; see <xref
target="I-D.ietf-mediactrl-sip-control-framework"/> for further details
on this topic.

</t>


<t>Adequate transport protection and authentication are critical,
especially when the implementation is deployed in open networks.  If the
implementation fails to correctly address these issues, it risks
exposure to malicious attacks, including (but not limited to):

  <list style="hanging">

  <t hangText="Denial of Service:">An attacker could insert a request
  message into the transport stream causing specific conferences or join
  mixers on the MS to be destroyed. For example, &lt;destroyconference
  conferenceid="XXXX">, where the value of "XXXX" could be guessed or
  discovered by auditing active mixers on the MS using an &lt;audit>
  request. Likewise, an attacker could impersonate the MS and insert
  error responses into the transport stream so denying the AS access to
  package capabilities.
  </t>

  <t hangText="Resource Exhaustion:">An attacker could insert into the
  control channel new request messages (or modify existing ones) with,
  for instance, &lt;createconference> elements causing large numbers of
  conference mixer resources to be allocated. At some point this will
  exhaust the number of conference mixers that the MS is able to
  allocate.
  </t>

</list>
</t>


<t>The Media Control Channel Framework permits additional policy
management, including resource access and control channel usage, to be
specified at the control package level beyond that specified for the
Media Control Channel Framework (see Section 12.3 of <xref
target="I-D.ietf-mediactrl-sip-control-framework"/>). 
  </t>


<t>Since creation of conference and join mixers is associated with
media mixing resources on the MS, the security policy for this control
package needs to address how such mixers are securely managed across
more than one control channel. Such a security policy is only useful
for secure, confidential and integrity protected channels. The identity
of control channels is determined by the channel identifier: i.e. the
value of the cfw-id attribute in the SDP and Dialog-ID header in the
channel protocol (see <xref
target="I-D.ietf-mediactrl-sip-control-framework"/>). Channels are the
same if they have the same identifier; otherwise, they are
different. This control package imposes the following additional
security policies:

<list style="hanging">

<t hangText="Responses:">The MS MUST only send a response to a mixer
management or audit request using the same control channel as the one
used to send the request. </t>

<t hangText="Notifications:">The MS MUST only send notification events
for conference and join mixers using the same control channel as it
received the request creating the mixer. </t>

<t hangText="Auditing:">The MS MUST only provide audit information about
conference and join mixers which have been created on the same control
channel as the one upon the &lt;audit> request is sent. For example, if
a join between two connections has been created on one channel, then a
request on another channel to audit all mixers - &lt;audit
mixers="true"/> - would not report on this join mixer. 
</t>

<t hangText="Rejection:">The MS SHOULD reject requests to audit or
manipulate an existing conference or join mixer on the MS if the channel
is not the same as the one used when the mixer was created. The MS
rejects a request by sending a Control Framework 403 response (see
Section 7.4 and Section 12.3 of <xref
target="I-D.ietf-mediactrl-sip-control-framework"/>). For example, if a
channel with identifier 'cfw1234' has been used to send a request to
create a particular conference and the MS receives on channel 'cfw98969'
a request to audit or destroy this particular conference, then the MS
sends a 403 framework response.
</t>

</list>
 </t>

<t>There can be valid reasons why an implementation does not reject an
audit or mixer manipulation request on a different channel from the one
which created the mixer. For example, a system administrator might
require a separate channel to audit mixer resources created by system
users and to terminate mixers consuming excessive system
resources. Alternatively, a system monitor or resource broker might
require a separate channel to audit mixers managed by this package on a
MS. However, the full implications need to be understood by the
implementation and carefully weighted before accepting these reasons as
valid. If the reasons are not valid in their particular circumstances,
the MS rejects such requests.
</t>


<t>There can also be valid reasons for 'channel handover' including high
availability support or where one AS needs to take over management of
mixers after the AS which created them has failed. This could be
achieved by the control channels using the same channel identifier, one
after another. For example, assume a channel is created with the
identifier 'cfw1234' and the channel is used to create mixers on the
MS. This channel (and associated SIP dialog) then terminates due to a
failure on the AS. As permitted by the Control Framework, the channel
identifier 'cfw1234' could then be reused so that another channel is
created with the same identifier 'cfw1234', allowing it to 'take over'
management of the mixers on the MS. Again, the implementation needs to
understand the full implications and carefully weight them before
accepting these reasons as valid. If the reasons are not valid for their
particular circumstances, the MS uses the appropriate SIP mechanisms to
prevent session establishment when the same channel identifier is used
in setting up another control channel (see Section 4 of <xref
target="I-D.ietf-mediactrl-sip-control-framework"/>). </t>


</section> <!-- Security Consideration -->
		

<section anchor="sec:IANA_Considerations" title="IANA Considerations">

<t>This specification instructs IANA to register a new Media Control
Channel Framework Package, a new XML namespace, a new XML schema and a
new MIME type.</t>

<section anchor="sec:Control_Package_Reg" title="Control Package Registration">
		     
<t>This section registers a new Media Control Channel Framework package,
per the instructions in Section 12.1 of <xref
target="I-D.ietf-mediactrl-sip-control-framework"/>.
</t>

<t>
<figure>
<artwork><![CDATA[
   To: ietf-sip-control@iana.org
   Subject: Registration of new Channel Framework package
   Package Name: msc-mixer/1.0
     [NOTE TO IANA/RFC-EDITOR: Please replace XXXX
     with the RFC number for this specification.]
   Published Specification(s): RFCXXXX
   Person & email address to contact for further information:
   IETF, MEDIACTRL working group, (mediactrl@ietf.org), 
   Scott McGlashan (smcg.stds01@mcglashan.org).
]]></artwork>
</figure>
</t>

</section>


<section anchor="sec:URN_Reg" title="URN Sub-Namespace Registration">

<t>This section registers a new XML namespace,
"urn:ietf:params:xml:ns:msc-mixer", per the guidelines in <xref
target="RFC3688">RFC 3688</xref>.</t>

	<figure>
<artwork><![CDATA[
      URI: urn:ietf:params:xml:ns:msc-mixer
      Registrant Contact: IETF, MEDIACTRL working group,
      (mediactrl@ietf.org), Scott McGlashan 
      (smcg.stds01@mcglashan.org).
      XML:
         BEGIN
         <?xml version="1.0"?>
         <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
             "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
           <head>
            <title>Media Control Channel Framework Mixer
                   Package attributes</title>
           </head>
           <body>
            <h1>Namespace for Media Control Channel 
                Framework Mixer Package attributes</h1>
            <h2>urn:ietf:params:xml:ns:msc-mixer</h2>
     [NOTE TO IANA/RFC-EDITOR: Please replace XXXX
     with the RFC number for this specification.]
              <p>See RFCXXXX</p>
           </body>
          </html>
         END
]]></artwork>
</figure>

</section>

<section anchor="sec:XML_SCHEMA_IANA" title="XML Schema Registration">

<t>This section registers an XML schema as per the guidelines in <xref
target="RFC3688">RFC 3688</xref>.</t>

<figure>
<artwork><![CDATA[
   URI:  urn:ietf:params:xml:ns:msc-mixer
   Registrant Contact: IETF, MEDIACTRL working group, 
      (mediactrl@ietf.org), Scott McGlashan 
      (smcg.stds01@mcglashan.org).
   Schema:  The XML for this schema can be found in 
      Section 5 of this document.
]]></artwork>
</figure>

</section>


<section anchor="sec:MIME_Reg" title="MIME Media Type Registration for 
'application/msc-mixer+xml'">
  
<t>This section registers the "application/msc-mixer+xml" MIME type.</t>


<figure>
<artwork><![CDATA[
  To:  ietf-types@iana.org
   Subject:  Registration of MIME media type
             application/msc-mixer+xml
   MIME media type name:  application
   MIME subtype name:  msc-mixer+xml
   Required parameters:  (none)
   Optional parameters:  charset
      Indicates the character encoding of enclosed XML.  Default is
      UTF-8.
   Encoding considerations:  Uses XML, which can employ 8-bit
      characters, depending on the character encoding used.  See RFC
      3023 [RFC3023], section 3.2.
   Security considerations:  No known security considerations outside
      of those provided by the Media Control Channel Framework Mixer
      Package.
   Interoperability considerations:  This content type provides 
      constructs for the Media Control Channel Framework Mixer package.
   Published specification:  RFC XXXX [NOTE TO IANA/RFC-EDITOR: Please
      replace XXXX with the RFC number for this specification.]
   Applications which use this media type:  Implementations of 
      the Media Control Channel Framework Mixer package.
   Additional Information:  Magic Number(s): (none)
      File extension(s): (none)
      Macintosh File Type Code(s): (none)
   Person & email address to contact for further information:  Scott
      McGlashan <smcg.stds01@mcglashan.org>
   Intended usage:  LIMITED USE
   Author/Change controller:  The IETF
   Other information:  None.
]]></artwork>
</figure>

</section>

	 
<!-- IANA Considerations -->

</section>


<section title="Change Summary">


<t>Note to RFC Editor:  Please remove this whole section.</t>

<t> The following are the changes between the -14 and -13 versions
(addressing remaining IESG DISCUSS):

<list style="symbols">

<t>4.7.7 Language Identifier: deleted statement "where the language
code is required and a country code or other subtag identifier is
optional" and clarified that RFC 4647 specifies the matching procedure.
</t>

</list>

</t>

<t> The following are the changes between the -13 and -12 versions
(addressing remaining IESG DISCUSS):

<list style="symbols">

<t>4.0, 4.1, etc: Added language tags to identify the language of
descriptive text attributes. A desclang attribute is added to the root
element and has a default value of i-default. Subordinate elements with
descriptive text attributes also have this attribute defined - if it is
not specified on the subordinate element, then the desclang value on the
root element applies. Added example of desclang in 4.1.
</t>

<t>5: Updated schema with desclang attributes</t>

<t>Section 4.7.6: Corrected ABNF definition of IANA MIME media type to
allow parameter values.
</t>

</list>

</t>

<t> The following are the changes between the -12 and -11 versions
(primarily addressing IESG DISCUSS, comments and nits):

<list style="symbols">

<t>Introduction: Clarified that Control Framework is an equivalent term
for the Media Control Channel Framework. </t>

<t>4.2.4.2, 4.2.4.3, 4.5: Replaced reference to standards-tracks RFC for
assignment of new values, with reference to using Standards Action
process defined in RFC 5226. </t>

<t>4.0: Clarified that while some elements contain attributes whose
value is descriptive text, this descriptive text is for diagnostic use
only and does not require a language indicator such as a language tag.
</t>

<t>4.2.2.5.2: expanded DTMF acronym.</t>

<t>4.2.1.4.2.1: Changed &lt;video-layout> so that the layout is a child
element rather than content value. Changed examples to match. Updated
XML schema.</t>

<t>4.2.1.4.3: Changed &lt;video-switch> so that the policy is a child
element rather than content value. Changed examples to match. Updated
XML schema.</t>

<t>4.4.1: changed &lt;codec> to include name attribute; aligned
definition with RFC4288; updated XML schema.</t>


<t>4.2.2.5: Clarified that the media attribute of &lt;stream> is a MIME
type-name with reference to RFC 4288.</t>

<t>4.5.1: Added encoding attribute to &lt;param> to allow for
specification of content-transfer-encoding schema. Updated XML
schema.</t>

<t>4.5.1: Simplified content model of &lt;param> to be text
only. Updated XML schema.</t>

<t>4.6.6: Clarified MIME media type format with ABNF production
referencing RFC 4288.</t>

<t>4.2.2.5.3: clarified the definition of &lt;region> as an area in a
video layout</t>

<t>5: Stated that the schema is normative.</t>

<t>5: Corrected default value of tones attribute in schema to match
definition in 4.2.2.5.2.</t>

<t>4.6: Type definitions; added references to XML Schema datatypes where
appropriate; changed definition of boolean to match W3C definition and
updated boolean type in schema. </t>

<t>Typos: in 4.2.1.4.2.1, added '/' to &lt;video-layout>; in 4.2.1.4.3
&lt;video-switch>, replaced second &lt;join> with &lt;unjoin>; in 4.2.3,
corrected code and status in &lt;response> examples;
</t>

<t>Validated all examples against XML schema and corrected where
necessary.</t>

</list>

</t>


<t> The following are the changes between the -11 and -10
versions (addressing IETF Last Call comments):  

<list style="symbols">


<t>4.2.2.3: For &lt;modifyjoin>, removed the statement "It MUST NOT
change the configuration of any streams not included as child elements."
since modifications in stream directionality can affect other streams of
the same type. </t>

<t>4.2.2.5.2: Changed definition of tones attribute of &lt;clamp>
element so that if the element is specified, then all DTMF tones are
clamped by default. Updated XML schema. </t>

<t>7: Corrected references from Section 11 to Section 12 in Control Framework.</t>

<t>Fixed various typos.</t>

</list>

</t>


<t> The following are the changes between the -10 and -09
versions:  

<list style="symbols">

<t>References: Moved the XCON reference to the Normative References
section.</t>

<t>4.2: Mixer Elements: clarified that when a requested mixer operation
(partially) fails, the MS carries out no part of the operation and sends
an error response.
</t>

</list>


</t>


<t> The following are the changes between the -09 and -08
versions following shepherd writeup:  

<list style="symbols">

<t>4.2.4.1.1: &lt;active-talker>: Removed the statement that it is an
error if an &lt;active-talker> element has both connectionid and
conferenceid attributes specified because the AS always sends a
framework 200 in response to notification events, including active
talker events. Instead, clarified that no active talker is described if
both attributes are specified or if neither attribute is specified. </t>

<t>Various spelling and grammatical errors fixed. </t>

</list>

</t>

<t> The following are the changes between the -08 and -07
versions.

<list style="symbols">

<t>8.4: Changed file extension from '.xml' to (none) </t>

<t>Changed "~" to a ":" for connectionid </t>

<t>4.2.6.1: Clarified that &lt;param> can contain an XML value.</t>


<t>4.2.4.2: Changed &lt;unjoin-notify> status codes so that only 0-2
defined and all others are reserved for future use requiring a
standard-track RFC.
</t>

<t>4.2.4.3: Changed &lt;conferenceexit> status codes so that only 0-2
defined and all others are reserved for future use requiring a
standard-track RFC.
</t>

<t>4.5: Changed status code for &lt;response> and &lt;auditresponse> so
that certain codes are defined and all others are reserved for future
use requiring a standard-track RFC.
</t>


</list>

</t>



<t> The following are the changes between the -07 and -06
versions.

<list style="symbols">

<t>Generally corrected references from Section 17.1 to Section 16.1 of
Control Channel Framework.</t>

<t>4.2.2.2: removed "is" in "unless this is leads to a stream conflict"</t>

<t>4.2.2.3: corrected error code from 408 to 409 for "If the specified entities
are not already joined, then the MS reports an error (408)." </t>

<t>4.2.1.4.3: corrected error code from 409 to 424 for "If the MS does
not support the specified video switching policy or ..., then MS reports
a 409 error". </t>

<t>4.2.1.4.2: corrected error code from 408 to 423 for "If the MS does
not support video conferencing at all, or ...., the MS reports an 408
error ..." </t>

<t>4.2.1.1, 4.2.1.2, 4.2.2.2, 4.2.2.3: Clarified that &lt;codecs>
specified in &lt;createconference> or &lt;modifyconference> impose a
limitation in the media capability of a conference and this limitation
affects whether the conference can be &lt;join> or &lt;modifyjoin>ed to
another entity.</t>

</list>

</t>


<t> The following are the changes between the -06 and -05
versions.

<list style="symbols">

<t>4.4.1: &lt;codec>: corrected typos, added an example of &lt;params>
usage, added a &lt;subtype> section and moved the &lt;params> section
inside this section. </t>

<t>8: IANA Considerations: Updated IANA registration information and
added registration for the XML Schema </t>

</list>

</t>

<t> The following are the changes between the -05 and -04
versions.

<list style="symbols">

<t>Schema: Fixed problem with non-deterministic content models. </t>

<t>7. Security Considerations: Added requirement that implementations
need to secure SIP and RTP sessions with User Agents. </t>


</list>

</t>


<t> The following are the changes between the -04 and -03
versions.

<list style="symbols">

<t>4.2.1.4.3: corrected typo</t>

<t>4.2.2.3: Clarified the behavior of &lt;modifyjoin> for cases where
each direction of a stream is independently controlled. </t>

<t>4.2.2.5: Corrected syntax error in examples.</t>

<t>4.2.2.5.1: Clarified that when an audio stream is in the muted state,
then a &lt;volume> automatic or setgain control causes the state to
change automatically to unmuted. </t>

<t>7 Security: Clarified that both conference and join mixers are
covered by the package security policies. </t>

<t>7 Security: Added a denial of service example where the attacker
impersonates the MS. </t>

<t>7 Security: Clarified that the package security policy for multiple
channels is only useful if the channels themselves are secured. </t>

<t>Updated acknowledgements. </t>

</list>

</t>



<t> The following are the major changes between the -03 and -02
versions.

<list style="symbols">

<t>Corrected various typos and nits.</t>

<t>Conformance language: Removed unnecessary MUSTs, especially for error
codes. Changed most RECOMMENDEDs to MUST or MAY. Removed lowercase
'should', 'must' and 'may'. </t>

<t>Tidied up Abstract</t>

<t>Removed old Introduction section (it just duplicated the
abstract). Replaced it with the old Overview Section. Section numbering
changed! </t>

<t>Introduction: Clarified which MediaCtrl Requirements are satisfied by
this package. </t>

<t>4.2.1.1: &lt;createconference>: Clarified that an attempt to create a
conference with an identifier already used by an existing conference
does not affect the existing conference (405 error response). </t>

<t>4.2.1.4.1: &lt;audio-mixing>: Added a 'n' attribute for the number of
participants to be included in nbest audio mixing. </t>

<t>4.2.1.4.3: &lt;video-switch>: Clarified that the active speaker in
video switching is the loudest speaker. </t>

<t>4.2.1.4.4: &lt;subscribe>: Clarified that if a subscription specified
in a foreign namespace element or attribute is not supported by the MS,
then the MS generates a 428 error response. Changed conformance support
for &lt;active-talkers-sub> from SHOULD to MUST. Removed 422 error
response. </t>

<t>4.2.2: Joining Elements: Added text to the empty section. </t>

<t>4.2.2.2, 4.2.2.3, 4.2.2.4: &lt;join>, &lt;modifyjoin> and
&lt;unjoin>: Clarified that join operation failures do not affect
existing stream properties of the entities (407 and new 422 error
response). Clarified stream failure errors in &lt;modifyjoin> and
&lt;unjoin>.
 </t>

<t>4.2.2.2: &lt;join>. Clarified that &lt;stream> elements can be used
to independently control properties of the media flow in different
directions. Added a response code (422) for when the MS does not support
a media stream configuation.
</t>


<t>4.2.2.2: &lt;join>. Clarified that error responses are generated if
id1 or id2 reference a conference or connection which does not
exist. Added an error status code (412) for non-existant
connections. </t>

<t>4.2.2.5: &lt;stream>: Changed the definition so that in each child
element, the media stream affected is indicated by the value of the
direction attribute of the parent element. Added examples of controlling
the media flow properties. </t>

<t>4.2.4.2: &lt;unjoin-notify>. Added reserved range of status
codes. Changed code from 1 to 0 for the unjoin case. Changed code from 3
to 1 for execution error.  </t>

<t>4.2.4.3: &lt;conferenceexit>. Added reserved range of status
codes. Changed code from 1 to 0 for the destroyconference case (align
with IVR). Added a code for conference exiting due to exceeding its
maximum duration. </t>

<t>Schema: Adding missing version attribute on &lt;mscmixer>. </t>

<t>Security Considerations: Major update. Added examples showing
malicious attacks when channel security is not correctly
addressed. Added more details on multiple channel cases including
administrator and monitor channels as well as channel handover. </t>

<t>Removed affliations in Contributors section. </t>

</list>

</t>

<t> The following are the major changes between the -02 and -01
versions.

<list style="symbols">

<t>Section 4: Aligned Control Package definitions with requirements in
Section 8 of the Control Framework. </t>

<t>Following October Interim meeting discussion on response codes,
generally clarified usage of error status codes, modified some codes and
re-organized the response codes section (<xref
target="defn.statuscodes"/>) with more guidance and details.
</t>

<t>MIXER-006. No action required following October 2008 interim
discussion.
</t>

<t>MIXER-008. No action required following October 2008 interim
discussion. </t>

<t>MIXER-009. No action required for control package - addressed in -05
framework draft following interim October 2008 discussion.
</t>

<t>MIXER-010/5.2.2.5: Clarified that in the &lt;stream> element, an
"inactive" direction value indicates the stream is established but there
is no media flow. Such a stream can be manipulated by &lt;modifyjoin>
and &lt;unjoin>.
</t> 

<t>5.2.2.5: &lt;stream>: Clarified that the media stream specified in
child elements &lt;volume>, &lt;clamp>, &lt;region> and &lt;priority> is
the stream originating from the entity identified as id1. </t>

<t>5.2.1.4.3: &lt;video-switch>: Clarified that it is not an error if a
&lt;stream> specifies a region which is not defined for the currently
active video layout. </t>

<t>5.2.1.4.2.1: &lt;video-layout>: Added descriptions and ASCII art for
layout and regions of XCON video layouts. </t>

<t>Added examples of audio conferencing, connection bridging and video
conferencing.</t>

</list>
</t>

<t> The following are the major changes between the -01 and -00
versions.

<list style="symbols">

<t>[MIXER-001]/5.2.4.3: Added &lt;conferenceexit> notification event. </t>

<t>[MIXER-003]/5.2.1.4.2.1: Added ASCII diagrams for video layouts. </t>

<t>[MIXER-004]/5.3.2.2.1: Added active &lt;video-layout> information to
&lt;conferenceaudit>.</t>

<t>[MIXER-007]/5.4.1: Added &lt;params> inside &lt;codec> so additional
codec information can be specified.</t>

<t>5.2.1.1: Fixed &lt;createconference> example with missing
min-participants attributes. </t>

<t>5: Changed handling of unsupported foreign namespace elements and
attributes. The MS send a 427 error response if it encounters foreign
elements and attributes it does not support. </t>

<t>5.2.1.4.3: &lt;video-switch>. Clarified that the VAS policy is
implementation-specific if a participant provides more than one audio
stream. </t>

<t>5.2.2.2/5.2.2.3/5.2.2.4: Clarified that joining behavior so that
streams which have previously been &lt;modifiedjoin>ed or &lt;unjoin>ed
are not affected by a general &lt;unjoin>. </t>


<t>5.2.1.4.3: &lt;video-switch>: Added support for whether active
speaker is displayed on their video layout ('activespeakermix'
attribute) and clarified that personal video mixes are out of scope for
this package. </t>

<t>5.2.1.4.3/5.2.2.5.4: &lt;video-switch>: Added support for a priority
mechanism in video switching policy and a &lt;priority child element on
&lt;stream>.</t>

<t>8:Updated security section</t>

<t>13:Updated references</t>

<t>5.2.1.4.4.1: Added default of 3 seconds for &lt;active-talkers-sub>
interval. </t>

<t>5.2.2.5.1: &lt;volume> controltype attribute set to mandatory. </t>

<t>Updated schema </t>

</list>

</t>

<t> The following are the major changes between the -00 of this work
group item draft and the individual submission -04 version.

<list style="symbols">

  <t>Control package name is now 'msc-mixer/1.0'. Namespace is
  now 'urn:ietf:params:xml:ns:msc-mixer'. Mime type is now
  'application/msc-mixer+xml'. 
  </t>
  <t>Added XML root element &lt;mscmixer>.</t>
  <t>Editorial tidy up of sections. </t>
  <t>Added audit request/response elements.</t>
  <t>Added video layout and switching conference configuration.</t>
  <t>&lt;audio-mixing>: changed 'mix-type' attribute to 'type'
  (consistency with video-switch) </t>

  <t>Added "inactive" as value of &lt;stream>'s direction
  attribute. </t>

  <t>Added &lt;region> child to &lt;stream> element.</t>

  <t>&lt;createconference>: &lt;audio-mixing> element is no longer
  mandatory; added &lt;video-layouts> and &lt;video-switch> child
  elements. reserved-talkers and reserved-listeners as attributes. </t>

  <t>replaced conf-id attribute with conferenceid attribute. </t> 

  <t>Removed &lt;data> element. Active talkers subscription and
  notifications used dedicated elements now. </t>

  <t>Added &lt;unjoin-notify> notification event to indicate when
  (un)expected joins occur. Use case: connection or conference joined to
  a conference and conference exits (either by request or runtime
  error. </t>


</list>
</t>


<t>
The following are the major changes between the -04 of the draft and
the -03 version. 

<list style="symbols">

    <t>Updated reference for Media Control Channel Framework </t>
    
</list>

</t>

<t>
The following are the major changes between the -03 of the draft and
the -02 version. 

<list style="symbols">

    <t>None </t>
    
</list>

</t>

<t>
The following are the major changes between the -02 of the draft and
the -01 version. 

<list style="symbols">

    <t>clarified the model for join operations and introduced
    several new package error codes</t>
    
    <t>added definition for MS connection</t>

</list>

</t>

<t>
The following are the major changes between the -01 of the draft and
the -00 version. 

<list style="symbols">

    <t>restructured into single request response model for non-trivial
    operations </t>
    
    <t>aligned with XML structure of other control framework packages
    </t>

</list>

</t>



</section>


<section title="Contributors">


	<t> Asher Shiratzky provided valuable support and contributions to
	early versions of this document.
	</t>

	<t>The authors would like to thank the Mixer design team consisting
	of Roni Even, Lorenzo Miniero, Adnan Saleem, Diego Besprosvan and
	Mary Barnes who provided valuable feedback, input, diagrams and text
	to this document. </t>
   
</section>

<section title="Acknowledgments">

<t> The authors would like to thank Roni Even, Lorenzo Miniero, Steve
Buko and Stephane Bastien for expert reviews of this work.
</t>

<t>Shawn Emery carried out a thorough security review. </t>

</section>



<!-- Acknowledgments -->

	
	</middle>

	<back>
		
		<references title="Normative References">
        &rfc2119;
		&mediactrl-cfw;
        &rfc3023;
		&rfc4574;
        &rfc3688;
        &xcon-conf-data;
        &rfc4288;
        &rfc5234;
        &rfc2045;
        &rfc5226;
        &rfc5646;
        &rfc4647;

   <reference anchor="XMLSchema:Part2">
        <front>
          <title>XML Schema Part 2: Datatypes Second Edition
          </title>
            <author initials="P" surname="Biron">
        <organization> </organization>
        </author>
            <author initials="A" surname="Malhotra">
        <organization> </organization>
            </author>
            <date month="October" year="2004" />
        </front>
        <seriesInfo name="W3C" value="Recommendation" />
    </reference>

   <reference anchor="XML">
        <front>
            <title>Extensible Markup Language (XML) 1.0 (Third Edition) </title>
            <author initials="T" surname="Bray">
        <organization> </organization>
        </author>
            <author initials="J" surname="Paoli">
        <organization> </organization>
        </author>
            <author initials="C M" surname="Sperberg-McQueen">
        <organization> </organization>
        </author>
            <author initials="E" surname="Maler">
        <organization> </organization>
        </author>
            <author initials="F" surname="Yergeau">
        <organization> </organization>
        </author>
            <date month="February" year="2004" />
        </front>
        <seriesInfo name="W3C" value="Recommendation" />
    </reference>
    
		</references>
		
		<references title="Informative References">
		&rfc3261;
		&rfc3550;
		&rfc5167;
        &rfc5022;
        &rfc5707;
        &rfc2277;

   <reference anchor="MIME.mediatypes" target="http://www.iana.org/assignments/media-types/">
        <front>
          <title>IANA registry for MIME Media Types
          </title>
          <author initials="" surname="" fullname="">
                <organization />
            </author>
        </front>
    </reference>

   <reference anchor="IANA" target="http://www.iana.org/assignments/rtp-parameters">
        <front>
          <title>IANA registry for RTP Payload Types
          </title>
          <author initials="" surname="" fullname="">
                <organization />
            </author>
        </front>
    </reference>


</references>
	</back>
</rfc>
