11. Media Service Resource Consumer Interface XML Schema
This section gives the XML Schema Definition [W3C.REC-xmlschema-1-20041028] [W3C.REC-xmlschema-2-20041028] of the "application/mrb-consumer+xml" format. <?xml version="1.0" encoding="UTF-8"?> <xsd:schema targetNamespace="urn:ietf:params:xml:ns:mrb-consumer" elementFormDefault="qualified" blockDefault="#all" xmlns="urn:ietf:params:xml:ns:mrb-consumer" xmlns:ca="urn:ietf:params:xml:ns:pidf:geopriv10:civicAddr" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:annotation> <xsd:documentation> IETF MediaCtrl MRB 1.0 This is the schema of the IETF MediaCtrl MRB Consumer interface. The schema namespace is urn:ietf:params:xml:ns:mrb-consumer </xsd:documentation> </xsd:annotation> <!-- ############################################################# SCHEMA IMPORTS ############################################################# --> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"> <xsd:annotation> <xsd:documentation> This import brings in the XML attributes for xml:base, xml:lang, etc. </xsd:documentation> </xsd:annotation> </xsd:import> <xsd:import namespace="urn:ietf:params:xml:ns:pidf:geopriv10:civicAddr" schemaLocation="civicAddress.xsd"> <xsd:annotation> <xsd:documentation>
This import brings in the civicAddress specification from RFC 5139. </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: mrbconsumer ##################################################### --> <xsd:complexType name="mrbconsumerType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:choice> <xsd:element ref="mediaResourceRequest" /> <xsd:element ref="mediaResourceResponse" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:choice> </xsd:sequence> <xsd:attribute name="version" type="version.datatype" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" />
</xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="mrbconsumer" type="mrbconsumerType" /> <!-- ##################################################### mediaResourceRequest TYPE ##################################################### --> <!-- mediaResourceRequest --> <xsd:complexType name="mediaResourceRequestType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="generalInfo" minOccurs="0" /> <xsd:element ref="ivrInfo" minOccurs="0" /> <xsd:element ref="mixerInfo" minOccurs="0" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="id" type="xsd:string" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="mediaResourceRequest" type="mediaResourceRequestType" />
<!-- ##################################################### generalInfo TYPE ##################################################### --> <!-- generalInfo --> <xsd:complexType name="generalInfoType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="session-info" minOccurs="0" /> <xsd:element ref="packages" minOccurs="0" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="generalInfo" type="generalInfoType" /> <!-- session-info --> <xsd:complexType name="session-infoType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element name="session-id" type="id.datatype"/> <xsd:element name="seq" type="xsd:nonNegativeInteger"/> <xsd:element name="action" type="action.datatype"/> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="session-info" type="session-infoType" />
<!-- packages --> <xsd:complexType name="packagesType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element name="package" type="xsd:string" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="packages" type="packagesType"/> <!-- ##################################################### ivrInfo TYPE ##################################################### --> <!-- ivrInfo --> <xsd:complexType name="ivrInfoType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="ivr-sessions" minOccurs="0" /> <xsd:element ref="file-formats" minOccurs="0" /> <xsd:element ref="dtmf-type" minOccurs="0" /> <xsd:element ref="tones" minOccurs="0" /> <xsd:element ref="asr-tts" minOccurs="0" /> <xsd:element ref="vxml" minOccurs="0" /> <xsd:element ref="location" minOccurs="0" /> <xsd:element ref="encryption" minOccurs="0" /> <xsd:element ref="application-data" minOccurs="0" /> <xsd:element ref="max-prepared-duration" minOccurs="0" /> <xsd:element ref="file-transfer-modes" minOccurs="0" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" />
</xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="ivrInfo" type="ivrInfoType" /> <!-- ##################################################### mixerInfo TYPE ##################################################### --> <!-- mixerInfo --> <xsd:complexType name="mixerInfoType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="mixers" minOccurs="0"/> <xsd:element ref="file-formats" minOccurs="0"/> <xsd:element ref="dtmf-type" minOccurs="0"/> <xsd:element ref="tones" minOccurs="0"/> <xsd:element ref="mixing-modes" minOccurs="0"/> <xsd:element ref="application-data" minOccurs="0"/> <xsd:element ref="location" minOccurs="0"/> <xsd:element ref="encryption" minOccurs="0"/> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="mixerInfo" type="mixerInfoType" />
<!-- ##################################################### mediaResourceResponse TYPE ##################################################### --> <!-- mediaResourceResponse --> <xsd:complexType name="mediaResourceResponseType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="response-session-info" minOccurs="0" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="id" type="xsd:string" use="required" /> <xsd:attribute name="status" type="status.datatype" use="required" /> <xsd:attribute name="reason" type="xsd:string" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="mediaResourceResponse" type="mediaResourceResponseType" /> <!-- #################################################### ELEMENTS #################################################### --> <!-- response-session-info --> <xsd:complexType name="response-session-infoType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element name="session-id" type="id.datatype"/> <xsd:element name="seq" type="xsd:nonNegativeInteger"/>
<xsd:element name="expires" type="xsd:nonNegativeInteger"/> <xsd:element ref="media-server-address" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="response-session-info" type="response-session-infoType" /> <!-- media-server-address --> <xsd:complexType name="media-server-addressTYPE"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element name="connection-id" type="xsd:string" minOccurs="0" maxOccurs="unbounded" /> <xsd:element ref="ivr-sessions" minOccurs="0"/> <xsd:element ref="mixers" minOccurs="0"/> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="uri" type="xsd:anyURI" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="media-server-address" type="media-server-addressTYPE" /> <!-- ivr-sessions --> <xsd:complexType name="ivr-sessionsType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="rtp-codec" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" />
</xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="ivr-sessions" type="ivr-sessionsType" /> <xsd:complexType name="rtp-codecType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element name="decoding" type="xsd:nonNegativeInteger" /> <xsd:element name="encoding" type="xsd:nonNegativeInteger" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="rtp-codec" type="rtp-codecType" /> <!-- file-formats --> <xsd:complexType name="file-formatsType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="required-format" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="file-formats" type="file-formatsType" /> <xsd:complexType name="required-formatType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="required-file-package" minOccurs="0" maxOccurs="unbounded" />
<xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="required-format" type="required-formatType" /> <xsd:complexType name="required-file-packageType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element name="required-file-package-name" type="xsd:string" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="required-file-package" type="required-file-packageType" /> <!-- dtmf-type --> <xsd:complexType name="dtmfType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="detect" /> <xsd:element ref="generate" /> <xsd:element ref="passthrough" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="dtmf" type="dtmfType" /> <xsd:complexType name="detectType">
<xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="dtmf-type" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="detect" type="detectType" /> <xsd:complexType name="generateType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="dtmf-type" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="generate" type="generateType" /> <xsd:complexType name="passthroughType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="dtmf-type" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="passthrough" type="passthroughType" /> <xsd:complexType name="dtmf-typeType">
<xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="name" type="dtmf.datatype" use="required" /> <xsd:attribute name="package" type="xsd:string" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="dtmf-type" type="dtmf-typeType" /> <!-- tones --> <xsd:complexType name="required-tonesType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="country-codes" minOccurs="0" maxOccurs="1" /> <xsd:element ref="h248-codes" minOccurs="0" maxOccurs="1" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="tones" type="required-tonesType" /> <xsd:complexType name="required-country-codesType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="country-code" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType>
<xsd:element name="country-codes" type="required-country-codesType" /> <xsd:complexType name="country-codeType" mixed="true"> <xsd:sequence> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="package" type="xsd:string" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:complexType> <xsd:element name="country-code" type="country-codeType" /> <xsd:complexType name="required-h248-codesType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="h248-code" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="h248-codes" type="required-h248-codesType" /> <xsd:complexType name="h248-codeType" mixed="true"> <xsd:sequence> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="package" type="xsd:string" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:complexType> <xsd:element name="h248-code" type="h248-codeType" /> <!-- asr-tts --> <xsd:complexType name="asr-ttsType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence>
<xsd:element ref="asr-support" minOccurs="0" maxOccurs="1" /> <xsd:element ref="tts-support" minOccurs="0" maxOccurs="1" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="asr-tts" type="asr-ttsType" /> <xsd:complexType name="asr-supportType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="language" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="asr-support" type="asr-supportType" /> <xsd:complexType name="tts-supportType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="language" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="tts-support" type="tts-supportType" /> <xsd:complexType name="languageType"> <xsd:complexContent>
<xsd:extension base="Tcore"> <xsd:sequence> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute ref="xml:lang" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="language" type="languageType" /> <!-- vxml --> <xsd:complexType name="vxmlType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="vxml-mode" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="vxml" type="vxmlType" /> <xsd:complexType name="vxml-modeType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="package" type="xsd:string" use="required" /> <xsd:attribute name="require" type="vxml.datatype" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="vxml-mode" type="vxml-modeType" />
<!-- location --> <xsd:complexType name="locationType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="ca:civicAddress" minOccurs="1" maxOccurs="1" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="location" type="locationType" /> <!-- encryption --> <xsd:complexType name="encryptionType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="encryption" type="encryptionType" /> <!-- application-data --> <xsd:element name="application-data" type="appdata.datatype" /> <!-- max-prepared-duration --> <xsd:complexType name="max-prepared-durationType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="max-time" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="max-prepared-duration" type="max-prepared-durationType" /> <xsd:complexType name="max-timeType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element name="max-time-package" type="xsd:string" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="max-time-seconds" type="xsd:nonNegativeInteger" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="max-time" type="max-timeType" /> <!-- file-transfer-modes --> <xsd:complexType name="file-transfer-modesType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="file-transfer-mode" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="file-transfer-modes" type="file-transfer-modesType" /> <xsd:complexType name="file-transfer-modeType">
<xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="name" type="transfermode.datatype" use="required" /> <xsd:attribute name="package" type="xsd:string" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="file-transfer-mode" type="file-transfer-modeType" /> <!-- mixers --> <xsd:complexType name="mixerssessionsType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="mix" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="mixers" type="mixerssessionsType" /> <xsd:complexType name="mixType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="rtp-codec" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="users" type="xsd:nonNegativeInteger" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent>
</xsd:complexType> <xsd:element name="mix" type="mixType" /> <!-- mixing-modes --> <xsd:complexType name="mixing-modesType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="audio-mixing-modes" minOccurs="0" maxOccurs="1" /> <xsd:element ref="video-mixing-modes" minOccurs="0" maxOccurs="1" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="mixing-modes" type="mixing-modesType" /> <xsd:complexType name="audio-mixing-modesType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="audio-mixing-mode" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="audio-mixing-modes" type="audio-mixing-modesType" /> <xsd:complexType name="audio-mixing-modeType" mixed="true"> <xsd:sequence> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="package" type="xsd:string" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:complexType>
<xsd:element name="audio-mixing-mode" type="audio-mixing-modeType" /> <xsd:complexType name="video-mixing-modesType"> <xsd:complexContent> <xsd:extension base="Tcore"> <xsd:sequence> <xsd:element ref="video-mixing-mode" minOccurs="0" maxOccurs="unbounded" /> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="vas" type="boolean.datatype" default="false" /> <xsd:attribute name="activespeakermix" type="boolean.datatype" default="false" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="video-mixing-modes" type="video-mixing-modesType" /> <xsd:complexType name="video-mixing-modeType" mixed="true"> <xsd:sequence> <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xsd:sequence> <xsd:attribute name="package" type="xsd:string" use="required" /> <xsd:anyAttribute namespace="##other" processContents="lax" /> </xsd:complexType> <xsd:element name="video-mixing-mode" type="video-mixing-modeType" /> <!-- #################################################### DATATYPES #################################################### --> <xsd:simpleType name="version.datatype"> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="1.0" /> </xsd:restriction> </xsd:simpleType>
<xsd:simpleType name="id.datatype"> <xsd:restriction base="xsd:NMTOKEN" /> </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="transfermode.datatype"> <xsd:restriction base="xsd:NMTOKEN"/> </xsd:simpleType> <xsd:simpleType name="action.datatype"> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="remove" /> <xsd:enumeration value="update" /> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="dtmf.datatype"> <xsd:restriction base="xsd:NMTOKEN"/> </xsd:simpleType> <xsd:simpleType name="boolean.datatype"> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="true" /> <xsd:enumeration value="false" /> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="vxml.datatype"> <xsd:restriction base="xsd:NMTOKEN"/> </xsd:simpleType> <xsd:simpleType name="appdata.datatype"> <xsd:restriction base="xsd:string" /> </xsd:simpleType> </xsd:schema>
12. Security Considerations
The MRB network entity has two primary interfaces -- Publish and Consumer -- that carry sensitive information and must therefore be appropriately protected and secured. The Publish interface, as defined in and described in Section 5.1, uses the Media Control Channel Framework [RFC6230] as a mechanism to connect an MRB to a Media Server. It is very important that the communication between the MRB and the Media Server is secured: a malicious entity may change or even delete subscriptions to a Media Server, thus affecting the view the MRB has of the resources actually available on a Media Server, leading it to incorrect selection when media resources are being requested by an Application Server. A malicious entity may even manipulate available resources on a Media Server, for example, to make the MRB think no resources are available at all. Considering that the Publish interface is a CFW Control Package, the same security considerations included in the Media Control Channel Framework specification apply here to protect interactions between an MRB and a Media Server. The Publish interface also allows a Media Server, as explained in Section 5.1.5.18, to provide more or less accurate information about its geographic location, should Application Servers be interested in such details when looking for services at an MRB. While the usage of this information is entirely optional and the level of detail to be provided is implementation specific, it is important to draw attention to the potential security issues that the disclosure of such addresses may introduce. As such, it is important to make sure MRB implementations don't disclose this information as is to interested Application Servers but only exploit those addresses as part of computation algorithms to pick the most adequate resources Application Servers may be looking for. The Consumer interface, as defined in and described in Section 5.2, conceives transactions based on a session ID. These transactions may be transported either by means of HTTP messages or SIP dialogs. This means that malicious users could be able to disrupt or manipulate an MRB session should they have access to the above-mentioned session ID or replicate it somehow: for instance, a malicious entity could modify an existing session between an Application Server and the MRB, e.g., requesting less resources than originally requested to cause media dialogs to be rejected by the Application Server, or requesting many more resources instead to try and lock as many of (if not all) the resources an MRB can provide, thus making them unavailable to other legitimate Application Servers in subsequent requests. In order to prevent this, it is strongly advised that MRB implementations generate session identifiers that are very hard to
replicate, in order to minimize the chances that malicious users could gain access to valid identifiers by just guessing or by means of brute-force attacks. It is very important, of course, to also secure the way that these identifiers are transported by the involved parties, in both requests and responses, in order to prevent network attackers from intercepting Consumer messages and having access to session IDs. The Consumer interface uses either the Hypertext Transfer Protocol (HTTP) or the Session Initiation Protocol (SIP) as the mechanism for clients to connect to an MRB to request media resources. In the case where HTTP is used, any binding using the Consumer interface MUST be capable of being transacted over Transport Layer Security (TLS), as described in RFC 2818 [RFC2818]. In the case where SIP is used, the same security considerations included in the Media Control Channel Framework specification apply here to protect interactions between a client requesting media resources and an MRB. Should a valid session ID be compromised somehow (that is, intercepted or just guessed by a malicious user), as a further means to prevent disruption the Consumer interface also prescribes the use of a sequence number in its transactions. This sequence number is to be increased after each successful transaction, starting from a first value randomly generated by the MRB when the session is first created, and it must match in every request/response. While this adds complexity to the protocol (implementations must pay attention to those sequence numbers, since wrong values will cause "Wrong sequence number" errors and the failure of the related requests), it is an important added value for security. In fact, considering that different transactions related to the same session could be transported in different, unrelated HTTP messages (or SIP INVITEs in cases where the In-line mode is being used), this sequence number protection prevents the chances of session replication or disruption, especially in cases where the session ID has been compromised: that is, it should make it harder for malicious users to manipulate or remove a session for which they have obtained the session ID. It is strongly advised that the MRB doesn't choose 1 as the first sequence number for a new session but rather picks a random value to start from. The reaction to transactions that are out of sequence is left to MRB implementations: a related error code is available, but implementations may decide to enforce further limitations or actions upon the receipt of too many failed attempts in a row or of what looks like blatant attempts to guess what the current, valid sequence number is. It is also worth noting that in In-line mode (both IAMM and IUMM) the MRB may act as a Back-to-Back User Agent (B2BUA). This means that when acting as a B2BUA the MRB may modify SIP bodies: it is the case, for instance, for the IAMM handling multipart/mixed payloads. This
impacts the ability to use any SIP security feature that protects the body (e.g., RFC 4474 [RFC4474], S/MIME, etc.), unless the MRB acts as a mediator for the security association. This should be taken into account when implementing an MRB compliant with this specification. Both the Publishing interface and Consumer interface may address the location of a Media Server: the Publishing interface may be used to inform the MRB where a Media Server is located (approximately or precisely), and the Consumer interface may be used to ask for a Media Server located somewhere in a particular region (e.g., a conference bridge close to San Francisco). Both Media Server and MRB implementers need to take this into account when deciding whether or not to make this location information available, and if so how many bits of information really need to be made available for brokering purposes. It is worthwhile to cover authorization issues related to this specification. Neither the Publishing interface nor the Consumer interface provides an explicit means for implementing authentication, i.e., they do not contain specific protocol interactions to ensure that authorized Application Servers can make use of the services provided by an MRB instance. Considering that both interfaces are transported using well-established protocols (HTTP, SIP, CFW), support for such functionality can be expressed by means of the authentication mechanisms provided by the protocols themselves. Therefore, any MRB-aware entity (Application Servers, Media Servers, MRBs themselves) MUST support HTTP and SIP Digest access authentication. The usage of such Digest access authentications is recommended and not mandatory, which means MRB-aware entities MAY exploit it in deployment. An MRB may want to enforce further constraints on the interactions between an Application Server/Media Server and an MRB. For example, it may choose to only accept requests associated with a specific session ID from the IP address that originated the first request or may just make use of pre-shared certificates to assess the identity of legitimate Application Servers and/or Media Servers.
13. IANA Considerations
There are several IANA considerations associated with this specification.13.1. Media Control Channel Framework Package Registration
This section registers a new Media Control Channel Framework package, per the instructions in Section 13.1 of [RFC6230]. Package Name: mrb-publish/1.0 Published Specification(s): RFC 6917 Person and email address to contact for further information: IETF MediaCtrl working group (mediactrl@ietf.org), Chris Boulton (chris@ns-technologies.com).13.2. application/mrb-publish+xml Media Type
To: application Subject: Registration of media type application/mrb-publish+xml Type name: application Subtype name: mrb-publish+xml Required parameters: none Optional parameters: Same as charset parameter of application/xml as specified in RFC 3023 [RFC3023]. Encoding considerations: Same as encoding considerations of application/xml as specified in RFC 3023 [RFC3023]. Security considerations: See Section 10 of RFC 3023 [RFC3023] and Section 12 of RFC 6917. Interoperability considerations: none. Published specification: Section 10 of RFC 6917. Applications that use this media type: This media type is used to support a Media Resource Broker (MRB) entity.
Additional Information: Magic Number: None File Extension: .xdf Macintosh file type code: "TEXT" Person and email address to contact for further information: Chris Boulton (chris@ns-technologies.com). Intended usage: COMMON Author/Change controller: The IETF.13.3. application/mrb-consumer+xml Media Type
To: application Subject: Registration of media type application/mrb-consumer+xml Type name: application Subtype name: mrb-consumer+xml Mandatory parameters: none Optional parameters: Same as charset parameter of application/xml as specified in RFC 3023 [RFC3023]. Encoding considerations: Same as encoding considerations of application/xml as specified in RFC 3023 [RFC3023]. Security considerations: See Section 10 of RFC 3023 [RFC3023] and Section 12 of RFC 6917. Interoperability considerations: none. Published specification: Section 11 of RFC 6917. Applications that use this media type: This media type is used to support a Media Resource Broker (MRB) entity.
Additional Information: Magic Number: None File Extension: .xdf Macintosh file type code: "TEXT" Person and email address to contact for further information: Chris Boulton (chris@ns-technologies.com). Intended usage: COMMON Author/Change controller: The IETF.13.4. URN Sub-Namespace Registration for mrb-publish
IANA has registered the URN "urn:ietf:params:xml:ns:mrb-publish", with the ID of "mrb-publish". The schema of the XML namespace named urn:ietf:params:xml:ns:mrb-publish is in Section 10.13.5. URN Sub-Namespace Registration for mrb-consumer
IANA has registered the URN "urn:ietf:params:xml:ns:mrb-consumer", with the ID of "mrb-consumer". The schema of the XML namespace named urn:ietf:params:xml:ns:mrb-consumer is in Section 11.13.6. XML Schema Registration for mrb-publish
IANA has registered the schema for mrb-publish: URI: urn:ietf:params:xml:schema:mrb-publish ID: mrb-publish Filename: mrb-publish Registrant Contact: IETF MediaCtrl working group (mediactrl@ietf.org) Schema: The XML for the schema is in Section 10 of this document.
13.7. XML Schema Registration for mrb-consumer
Please register the schema for mrb-consumer: URI: urn:ietf:params:xml:schema:mrb-consumer ID: mrb-consumer Filename: mrb-consumer Registrant Contact: IETF MediaCtrl working group (mediactrl@ietf.org) Schema: The XML for the schema is in Section 11 of this document.14. Acknowledgements
The authors would like to thank the members of the Publish Interface design team, who provided valuable input into this document. The design team consisted of Adnan Saleem, Michael Trank, Victor Paulsamy, Martin Dolly, and Scott McGlashan. The authors would also like to thank John Dally, Bob Epley, Simon Romano, Henry Lum, Christian Groves, and Jonathan Lennox for input into this specification. Ben Campbell carried out the RAI expert review on an early version of this specification and provided a great deal of invaluable input.15. References
15.1. Normative References
[ISO.10646.2012] International Organization for Standardization, "Information technology -- Universal Coded Character Set (UCS)", ISO Standard 10646, 2012. [ISO.3166-1] International Organization for Standardization, "Codes for the representation of names of countries and their subdivisions - Part 1: Country codes", ISO Standard 3166-1:2006, 2006. [ISO.639.2002] International Organization for Standardization, "Codes for the representation of names of languages -- Part 1: Alpha-2 code", ISO Standard 639, 2002.
[ITU-T.Q.1950] International Telecommunication Union, "Bearer independent call bearer control protocol", ITU-T Recommendation Q.1950, December 2002. [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types", RFC 2046, November 1996. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media Types", RFC 3023, January 2001. [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, June 2002. [RFC3311] Rosenberg, J., "The Session Initiation Protocol (SIP) UPDATE Method", RFC 3311, October 2002. [RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. Norrman, "The Secure Real-time Transport Protocol (SRTP)", RFC 3711, March 2004. [RFC5139] Thomson, M. and J. Winterbottom, "Revised Civic Location Format for Presence Information Data Format Location Object (PIDF-LO)", RFC 5139, February 2008. [RFC5763] Fischl, J., Tschofenig, H., and E. Rescorla, "Framework for Establishing a Secure Real-time Transport Protocol (SRTP) Security Context Using Datagram Transport Layer Security (DTLS)", RFC 5763, May 2010. [W3C.REC-xmlschema-1-20041028] Thompson, H., Beech, D., Maloney, M., and N. Mendelsohn, "XML Schema Part 1: Structures Second Edition", World Wide Web Consortium Recommendation REC-xmlschema-1-20041028, October 2004, <http://www.w3.org/TR/2004/REC-xmlschema-1-20041028>.
[W3C.REC-xmlschema-2-20041028] Biron, P. and A. Malhotra, "XML Schema Part 2: Datatypes Second Edition", World Wide Web Consortium Recommendation REC-xmlschema-2-20041028, October 2004, <http://www.w3.org/TR/2004/REC-xmlschema-2-20041028>.15.2. Informative References
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000. [RFC4240] Burger, E., Van Dyke, J., and A. Spitzer, "Basic Network Media Services with SIP", RFC 4240, December 2005. [RFC4474] Peterson, J. and C. Jennings, "Enhancements for Authenticated Identity Management in the Session Initiation Protocol (SIP)", RFC 4474, August 2006. [RFC4733] Schulzrinne, H. and T. Taylor, "RTP Payload for DTMF Digits, Telephony Tones, and Telephony Signals", RFC 4733, December 2006. [RFC5022] Van Dyke, J., Burger, E., and A. Spitzer, "Media Server Control Markup Language (MSCML) and Protocol", RFC 5022, September 2007. [RFC5167] Dolly, M. and R. Even, "Media Server Control Protocol Requirements", RFC 5167, March 2008. [RFC5552] Burke, D. and M. Scott, "SIP Interface to VoiceXML Media Services", RFC 5552, May 2009. [RFC5567] Melanchuk, T., "An Architectural Framework for Media Server Control", RFC 5567, June 2009. [RFC5707] Saleem, A., Xin, Y., and G. Sharratt, "Media Server Markup Language (MSML)", RFC 5707, February 2010. [RFC6230] Boulton, C., Melanchuk, T., and S. McGlashan, "Media Control Channel Framework", RFC 6230, May 2011. [RFC6231] McGlashan, S., Melanchuk, T., and C. Boulton, "An Interactive Voice Response (IVR) Control Package for the Media Control Channel Framework", RFC 6231, May 2011. [RFC6381] Gellens, R., Singer, D., and P. Frojdh, "The 'Codecs' and 'Profiles' Parameters for "Bucket" Media Types", RFC 6381, August 2011.
[RFC6501] Novo, O., Camarillo, G., Morgan, D., and J. Urpalainen, "Conference Information Data Model for Centralized Conferencing (XCON)", RFC 6501, March 2012. [RFC6505] McGlashan, S., Melanchuk, T., and C. Boulton, "A Mixer Control Package for the Media Control Channel Framework", RFC 6505, March 2012.Authors' Addresses
Chris Boulton NS-Technologies EMail: chris@ns-technologies.com Lorenzo Miniero Meetecho Via Carlo Poerio 89 Napoli 80100 Italy EMail: lorenzo@meetecho.com Gary Munson AT&T 200 Laurel Avenue South Middletown, New Jersey 07748 USA EMail: gamunson@gmail.com