11. Formal Syntax
The following syntax specification uses XML Schema as described in XML [7].11.1. Schema
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="MediaServerControl"> <xs:complexType> <xs:choice> <xs:element name="request"> <xs:complexType> <xs:choice> <xs:element name="configure_conference" type="configure_conferenceRequestType"/> <xs:element name="configure_leg" type="configure_legRequestType"/> <xs:element name="play" type="playRequestType"/> <xs:element name="playcollect" type="playcollectRequestType"/> <xs:element name="playrecord" type="playrecordRequestType"/>
<xs:element name="managecontent" type="managecontentRequestType"/> <xs:element name="faxplay" type="faxRequestType"/> <xs:element name="faxrecord" type="faxRequestType"/> <xs:element name="stop" type="stopRequestType"/> </xs:choice> </xs:complexType> </xs:element> <xs:element name="response" type="responseType"/> <xs:element name="notification"> <xs:complexType> <xs:choice> <xs:element name="conference" type="conferenceNotificationType"/> <xs:element name="keypress" type="keypressNotificationType"/> <xs:element name="signal" type="signalNotificationType"/> </xs:choice> </xs:complexType> </xs:element> </xs:choice> <xs:attribute name="version" use="required"/> </xs:complexType> </xs:element> <!-- Definitions for base and concrete MSCML requests --> <!-- and embedded types. --> <xs:complexType name="base_requestType" abstract="true"> <xs:attribute name="id" type="xs:string"/> </xs:complexType> <xs:complexType name="playRequestType"> <xs:complexContent> <xs:extension base="base_requestType"> <xs:sequence> <xs:element name="prompt" type="promptType" minOccurs="0"/> </xs:sequence> <xs:attribute name="prompturl" type="xs:string"/> <xs:attribute name="offset" type="xs:string"/> <xs:attribute name="promptencoding" type="xs:string"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="configure_conferenceRequestType"> <xs:complexContent> <xs:extension base="base_requestType">
<xs:sequence> <xs:element name="subscribe" type="conference_eventsubscriptionType" minOccurs="0"/> </xs:sequence> <xs:attribute name="reservedtalkers" type="xs:positiveInteger"/> <xs:attribute name="reserveconfmedia" type="yesnoType" default="yes"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="configure_legRequestType"> <xs:complexContent> <xs:extension base="base_requestType"> <xs:sequence> <xs:element name="inputgain" type="gainType" minOccurs="0"/> <xs:element name="outputgain" type="gainType" minOccurs="0"/> <xs:element name="configure_team" type="configure_teamType" minOccurs="0"/> <xs:element name="subscribe" type="leg_eventsubscriptionType" minOccurs="0"/> </xs:sequence> <xs:attribute name="type"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="talker"/> <xs:enumeration value="listener"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="mixmode"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="full"/> <xs:enumeration value="mute"/> <xs:enumeration value="preferred"/> <xs:enumeration value="parked"/> <xs:enumeration value="private"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="dtmfclamp" type="yesnoType"/> <xs:attribute name="toneclamp" type="yesnoType"/> </xs:extension> </xs:complexContent> </xs:complexType>
<xs:complexType name="configure_teamType"> <xs:sequence> <xs:element name="teammate" type="teammateType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:string"/> <xs:attribute name="action" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="add"/> <xs:enumeration value="delete"/> <xs:enumeration value="query"/> <xs:enumeration value="set"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> <xs:complexType name="teammateType"> <xs:attribute name="id" type="xs:string" use="required"/> </xs:complexType> <xs:complexType name="playcollectRequestType"> <xs:complexContent> <xs:extension base="base_requestType"> <xs:sequence> <xs:element name="prompt" type="promptType" minOccurs="0"/> <xs:element name="pattern" type="dtmfGrammarType" minOccurs="0"/> </xs:sequence> <xs:attribute name="prompturl" type="xs:string"/> <xs:attribute name="offset" type="xs:string"/> <xs:attribute name="barge" type="yesnoType" default="yes"/> <xs:attribute name="promptencoding" type="xs:string"/> <xs:attribute name="cleardigits" type="yesnoType" default="no"/> <xs:attribute name="maxdigits" type="xs:string"/> <xs:attribute name="firstdigittimer" type="xs:string" default="5000ms"/> <xs:attribute name="interdigittimer" type="xs:string" default="2000ms"/> <xs:attribute name="extradigittimer" type="xs:string" default="1000ms"/> <xs:attribute name="interdigitcriticaltimer" type="xs:string"/> <xs:attribute name="skipinterval" type="xs:string" default="6s"/> <xs:attribute name="ffkey" type="DTMFkeyType"/> <xs:attribute name="rwkey" type="DTMFkeyType"/>
<xs:attribute name="returnkey" type="DTMFkeyType" default="#"/> <xs:attribute name="escapekey" type="DTMFkeyType" default="*"/> <xs:attribute name="maskdigits" type="yesnoType" default="no"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="playrecordRequestType"> <xs:complexContent> <xs:extension base="base_requestType"> <xs:sequence> <xs:element name="prompt" type="promptType" minOccurs="0"/> </xs:sequence> <xs:attribute name="prompturl" type="xs:string"/> <xs:attribute name="promptencoding" type="xs:string"/> <xs:attribute name="offset" type="xs:string" default="0"/> <xs:attribute name="barge" type="yesnoType" default="yes"/> <xs:attribute name="cleardigits" type="yesnoType" default="no"/> <xs:attribute name="escapekey" type="xs:string" default="*"/> <xs:attribute name="recurl" type="xs:string" use="required"/> <xs:attribute name="mode" default="overwrite"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="append"/> <xs:enumeration value="overwrite"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="recencoding" type="xs:string"/> <xs:attribute name="initsilence" type="xs:string"/> <xs:attribute name="endsilence" type="xs:string"/> <xs:attribute name="duration" type="xs:string"/> <xs:attribute name="beep" type="yesnoType" default="yes"/> <xs:attribute name="recstopmask" type="xs:string" default="01234567890*#"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="managecontentRequestType"> <xs:complexContent> <xs:extension base="base_requestType"> <xs:attribute name="fetchtimeout" type="xs:string" default="10000"/> <xs:attribute name="mimetype" type="xs:string"/>
<xs:attribute name="name" type="xs:string"/> <xs:attribute name="httpmethod"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="put"/> <xs:enumeration value="post"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="action"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="move"/> <xs:enumeration value="delete"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="dest" type="xs:string"/> <xs:attribute name="src" type="xs:string" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="stopRequestType"> <xs:complexContent> <xs:extension base="base_requestType"/> </xs:complexContent> </xs:complexType> <xs:complexType name="faxRequestType"> <xs:complexContent> <xs:extension base="base_requestType"> <xs:sequence> <xs:element name="prompt" type="promptType" minOccurs="0"/> </xs:sequence> <xs:attribute name="lclid" type="xs:string"/> <xs:attribute name="prompturl" type="xs:string"/> <xs:attribute name="recurl" type="xs:string"/> <xs:attribute name="rmtid" type="xs:string"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="dtmfGrammarType"> <xs:choice> <xs:element name="regex" type="dtmfPatternType" maxOccurs="unbounded"/> <xs:element name="mgcpdigitmap" type="dtmfPatternType"/> <xs:element name="megacodigitmap" type="dtmfPatternType"/> </xs:choice> </xs:complexType>
<xs:complexType name="dtmfPatternType"> <xs:attribute name="value" type="xs:string" use="required"/> <xs:attribute name="name" type="xs:string"/> </xs:complexType> <!-- Definitions for base and concrete MSCML responses --> <!-- and embedded types. --> <xs:complexType name="base_responseType" abstract="true"> <xs:attribute name="request" use="required"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="configure_conference"/> <xs:enumeration value="configure_leg"/> <xs:enumeration value="play"/> <xs:enumeration value="playcollect"/> <xs:enumeration value="playrecord"/> <xs:enumeration value="managecontent"/> <xs:enumeration value="faxplay"/> <xs:enumeration value="faxrecord"/> <xs:enumeration value="stop"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="id" type="xs:string"/> <xs:attribute name="code" type="xs:string" use="required"/> <xs:attribute name="text" type="xs:string" use="required"/> </xs:complexType> <xs:complexType name="responseType"> <xs:complexContent> <xs:extension base="base_responseType"> <xs:sequence> <xs:element name="error_info" type="stoponerrorResponseType" minOccurs="0"/> <xs:element name="team" type="configure_teamResponseType" minOccurs="0"/> </xs:sequence> <xs:attribute name="reason" type="xs:string"/> <xs:attribute name="reclength" type="xs:string"/> <xs:attribute name="recduration" type="xs:string"/> <xs:attribute name="digits" type="xs:string"/> <xs:attribute name="name" type="xs:string"/> <xs:attribute name="playduration" type="xs:string"/> <xs:attribute name="playoffset" type="xs:string"/> <xs:attribute name="faxcode" type="xs:string"/> <xs:attribute name="pages_sent" type="xs:string"/> <xs:attribute name="pages_recv" type="xs:string"/> </xs:extension> </xs:complexContent> </xs:complexType>
<xs:complexType name="stoponerrorResponseType"> <xs:attribute name="code" type="xs:string" use="required"/> <xs:attribute name="text" type="xs:string" use="required"/> <xs:attribute name="context" type="xs:string" use="required"/> </xs:complexType> <xs:complexType name="configure_teamResponseType"> <xs:sequence> <xs:element name="teammate" type="teammateType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="numteam" type="xs:integer" use="required"/> </xs:complexType> <!-- Definitions for MSCML event subscriptions and --> <!-- embedded types --> <xs:complexType name="conference_eventsubscriptionType"> <xs:sequence> <xs:element name="events"> <xs:complexType> <xs:sequence> <xs:element name="activetalkers" type="activetalkersSubscriptionType"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="activetalkersSubscriptionType"> <xs:attribute name="report" type="yesnoType" use="required"/> <xs:attribute name="interval" type="xs:string" default="60s"/> </xs:complexType> <xs:complexType name="leg_eventsubscriptionType"> <xs:sequence> <xs:element name="events"> <xs:complexType> <xs:sequence> <xs:element name="keypress" type="keypressSubscriptionType" minOccurs="0" maxOccurs="1"/> <xs:element name="signal" type="signalSubscriptionType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="keypressSubscriptionType"> <xs:attribute name="report" use="required">
<xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="standard"/> <xs:enumeration value="long"/> <xs:enumeration value="both"/> <xs:enumeration value="none"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="maskdigits" type="yesnoType" default="no"/> </xs:complexType> <xs:complexType name="signalSubscriptionType"> <xs:attribute name="type" type="xs:NMTOKEN" use="required"/> <xs:attribute name="report" type="yesnoType" use="required"/> </xs:complexType> <!-- Definitions for MSCML event notifications and --> <!-- embedded types. --> <xs:complexType name="conferenceNotificationType"> <xs:sequence> <xs:element name="activetalkers" type="activetalkersNotificationType" minOccurs="0"/> </xs:sequence> <xs:attribute name="uniqueid" type="xs:string" use="required"/> <xs:attribute name="numtalkers" type="xs:string" use="required"/> </xs:complexType> <xs:complexType name="activetalkersNotificationType"> <xs:sequence minOccurs="0"> <xs:element name="talker" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="callid" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="keypressNotificationType"> <xs:sequence> <xs:element name="status" type="statusType"/> </xs:sequence> <xs:attribute name="digit" type="DTMFkeyType" use="required"/> <xs:attribute name="length" use="required"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="standard"/> <xs:enumeration value="long"/> </xs:restriction> </xs:simpleType>
</xs:attribute> <xs:attribute name="method" use="required"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="standard"/> <xs:enumeration value="long"/> <xs:enumeration value="double"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="interdigittime" type="xs:string" use="required"/> </xs:complexType> <xs:complexType name="statusType"> <xs:attribute name="command" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="idle"/> <xs:enumeration value="play"/> <xs:enumeration value="collect"/> <xs:enumeration value="record"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="duration" type="xs:string" use="required"/> </xs:complexType> <xs:complexType name="signalNotificationType"> <xs:attribute name="type" use="required" fixed="busy"/> </xs:complexType> <!-- Definitions for miscellaneous embedded, helper data types --> <xs:complexType name="promptType"> <xs:choice maxOccurs="unbounded"> <xs:element name="audio" type="promptcontentType"/> <xs:element name="variable" type="spokenvariableType"/> </xs:choice> <xs:attribute name="locale" type="xs:string"/> <xs:attribute name="baseurl" type="xs:string"/> <xs:attribute name="stoponerror" type="yesnoType" default="no"/> <xs:attribute name="gain" type="xs:string" default="0"/> <xs:attribute name="gaindelta" type="xs:string" default="0"/> <xs:attribute name="rate" type="xs:string" default="0"/> <xs:attribute name="ratedelta" type="xs:string" default="0"/> <xs:attribute name="repeat" type="xs:string" default="1"/> <xs:attribute name="duration" type="xs:string" default="infinite"/> <xs:attribute name="offset" type="xs:string" default="0"/> <xs:attribute name="delay" type="xs:string" default="0"/> </xs:complexType>
<xs:complexType name="promptcontentType"> <xs:attribute name="url" type="xs:string" use="required"/> <xs:attribute name="encoding" type="xs:string"/> <xs:attribute name="gain" type="xs:string" default="0"/> <xs:attribute name="gaindelta" type="xs:string" default="0"/> <xs:attribute name="rate" type="xs:string" default="0"/> <xs:attribute name="ratedelta" type="xs:string" default="0"/> </xs:complexType> <xs:complexType name="spokenvariableType"> <xs:attribute name="type" use="required"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="dat"/> <xs:enumeration value="dig"/> <xs:enumeration value="dur"/> <xs:enumeration value="mth"/> <xs:enumeration value="mny"/> <xs:enumeration value="num"/> <xs:enumeration value="sil"/> <xs:enumeration value="str"/> <xs:enumeration value="tme"/> <xs:enumeration value="wkd"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="subtype"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="mdy"/> <xs:enumeration value="dmy"/> <xs:enumeration value="ymd"/> <xs:enumeration value="ndn"/> <xs:enumeration value="t12"/> <xs:enumeration value="t24"/> <xs:enumeration value="USD"/> <xs:enumeration value="gen"/> <xs:enumeration value="ndn"/> <xs:enumeration value="crd"/> <xs:enumeration value="ord"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="value" type="xs:string" use="required"/> </xs:complexType> <xs:simpleType name="yesnoType"> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="yes"/> <xs:enumeration value="no"/>
<xs:enumeration value="1"/> <xs:enumeration value="0"/> <xs:enumeration value="true"/> <xs:enumeration value="false"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="DTMFkeyType"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]"/> <xs:pattern value="[A-D]"/> <xs:pattern value="[a-d]"/> <xs:pattern value="#"/> <xs:pattern value="\*"/> </xs:restriction> </xs:simpleType> <xs:complexType name="gainType"> <xs:choice> <xs:element name="auto" type="autogainType"/> <xs:element name="fixed" type="fixedgainType"/> </xs:choice> </xs:complexType> <xs:complexType name="autogainType"> <xs:attribute name="startlevel" type="xs:string"/> <xs:attribute name="targetlevel" type="xs:string"/> <xs:attribute name="silencethreshold" type="xs:string"/> </xs:complexType> <xs:complexType name="fixedgainType"> <xs:attribute name="level" type="xs:string"/> </xs:complexType> </xs:schema>12. IANA Considerations
12.1. IANA Registration of MIME Media Type application/ mediaservercontrol+xml
MIME media type name: application MIME subtype name: mediaservercontrol+xml Required parameters: none Optional parameters: charset charset This parameter has identical semantics to the charset parameter of the "application/xml" media type, as specified in XML Media Types [8]. Encoding considerations: See RFC 3023 [8]. Interoperability considerations: See RFC 2023 [8] and RFC 5022. Published specification: RFC 5022
Applications that use this media type: Multimedia, enhanced conferencing and interactive applications. Personal and email address for further information: eburger@cantata.com [31] Intended usage: COMMON13. Security Considerations
Because media flows through a media server in a conference, the media server itself MUST protect the integrity, confidentiality, and security of the sessions. It should not be possible for a conference participant, on her own behalf, to be able to "tap in" to another conference without proper authorization. Because conferencing is a high-value application, the media server SHOULD implement appropriate security measures. This includes, but is not limited to, access lists for application servers. That is, the media server only allows a select list of application or proxy servers to create conferences, to invite participants to sessions, etc. Note that the mechanisms for such security, like private networks, shared certificates, MAC white/black lists, are beyond the scope of this document. Security concerns are one important reason MSCML limits requests with conference scope to a separate control leg per conference. MSCML uses the simple, proven, Internet-scale security model of SIP to determine if a client is who they say they are (authentication) and if they are allowed to create and manipulate a conference. However, the security model to enable a control leg to manipulate arbitrary conferences on the media server is extremely difficult. Not only would one need to authenticate and authorize the basic conference primitives, but privacy considerations require policies for one client to access another client's conferences, even if the two clients are on the same host. For example, if the media server allowed any control leg to control any conference, an authorized but unrelated client could maliciously attach itself to an existing session and record or tap the conversation without the participant's knowledge or consent. Participants give implicit authorization to their applications by virtue of the INVITE to the application. However, there is no trust, explicit or implicit, between the users of one service and a distinct client of another service. All MSCML messages are sent within an INVITE-created SIP dialog. As a result, it would be difficult for an entity other than the original requestor to interfere with an established MSCML session, as this would require detailed information on the dialog state. This allows
multiple applications to utilize the resources of a single media server simultaneously without interfering with one another. Because of the sensitive nature of collected data, such as credit card numbers or other identifying information, the media server MUST support sips: and TLS. Clients, who presumably know the value of the information they collect, as well as the privacy expectations of their users, are free to use clear text signaling or encrypted secure signaling, depending on the application's needs. Likewise, the media server SHOULD support Secure Realtime Transport Protocol (SRTP) [9]. Again, the clients are free to negotiate the appropriate level of media security. The media management facilities of MSCML, such as the <managecontent> (Section 8) request, assume a trust relationship between the media server and file server. This scenario is similar to the one addressed by URLAUTH [20]. Namely, the media server is acting on behalf of a given user, yet the media server does not have credentials for that user. One might be tempted to use the user:pass facility of the HTTP URI to offer per-user security, but that also requires that the media server be secure, as the media server would need to know the user credentials in a form that is easily compromised (clear text passwords). The IETF is investigating methods for providing per-user or per- instance authorization of third-party http writing, as is needed for other protocols as well, such as WEBDAV [21]. However, until that work is completed, media server implementations MUST be prepared to authenticate themselves to file and web servers using appropriate authentication means. At a minimum, the media server MUST support HTTPS basic authentication. Implementers should note that the media server will need to respond appropriately to whatever authentication mechanism the file server requires. As this is an XML markup, all the security considerations of RFC 3023 [8] apply.14. References
14.1. Normative References
[1] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [2] Burger, E., Van Dyke, J., and A. Spitzer, "Basic Network Media Services with SIP", RFC 4240, December 2005. [3] Donovan, S., "The SIP INFO Method", RFC 2976, October 2000.
[4] 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. [5] "Network call signalling protocol for the delivery of time- critical services over cable television networks using cable modems", ITU-T J.162, March 2001. [6] Groves, C., Pantaleo, M., Anderson, T., and T. Taylor, "Gateway Control Protocol Version 1", RFC 3525, June 2003. [7] Thompson, H., Beech, D., Maloney, M., and N. Mendelsohn, "XML Schema Part 1: Structures", W3C REC REC-xmlschema-1-20010502, May 2001. [8] Murata, M., St. Laurent, S., and D. Kohn, "XML Media Types", RFC 3023, January 2001. [9] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. Norrman, "The Secure Real-time Transport Protocol (SRTP)", RFC 3711, March 2004.14.2. Informative References
[10] Rosenberg, J., "A Framework for Conferencing with the Session Initiation Protocol (SIP)", RFC 4353, February 2006. [11] Carter, J., Danielsen, P., Hunt, A., Ferrans, J., Lucas, B., Porter, B., Rehor, K., Tryphonas, S., McGlashan, S., and D. Burnett, "Voice Extensible Markup Language (VoiceXML) Version 2.0", W3C REC REC-voicexml20-20040316, March 2004. [12] International Packet Communications Consortium, "IPCC Reference Architecture V2", June 2002. [13] European Telecommunications Standards Institute, "Digital cellular telecommunications system (Phase 2+); Universal Mobile Telecommunications System (UMTS); IP Multimedia Subsystem (IMS); Stage 2 (3GPP TS 23.228 version 7.2.0 Release 7)", December 2005. [14] Hollenbeck, S., Rose, M., and L. Masinter, "Guidelines for the Use of Extensible Markup Language (XML) within IETF Protocols", BCP 70, RFC 3470, January 2003. [15] Jacobs, I., Lie, H., Bos, B., and C. Lilley, "Cascading Style Sheets, level 2 (CSS2) Specification", W3C REC REC-CSS2- 19980512, May 1998.
[16] Rosenberg, J., Schulzrinne, H., and O. Levin, "A Session Initiation Protocol (SIP) Event Package for Conference State", RFC 4575, August 2006. [17] Cable Television Laboratories, Inc., "Audio Server Protocol", January 2005. [18] "Procedures for document facsimile transmission in the general switched telephone network", Recommendation T.30, April 1999. [19] "Procedures for real-time Group 3 facsimile communication over IP networks", Recommendation T.38, March 2002. [20] Crispin, M., "Internet Message Access Protocol (IMAP) - URLAUTH Extension", RFC 4467, May 2006. [21] Dusseault, L., Ed., "HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)", RFC 4918, June 2007. [22] Institute of Electrical and Electronics Engineers, "Information Technology - Portable Operating System Interface (POSIX) - Part 1: Base Definitions, Chapter 9", IEEE Standard 1003.1, June 2001. [23] Burger, E. and M. Dolly, "A Session Initiation Protocol (SIP) Event Package for Key Press Stimulus (KPML)", RFC 4730, November 2006. [24] Klensin, J., "Simple Mail Transfer Protocol", RFC 2821, April 2001. [25] Campbell, B., Ed., Mahy, R., Ed., and C. Jennings, Ed., "The Message Session Relay Protocol", Work in Progress, February 2007.URIs
[26] <http://www.ietf.org/html.charters/sip-charter.html> [27] <http://www.ietf.org/html.charters/sipping-charter.html> [28] <http://www.ietf.org/html.charters/mmusic.html> [29] <http://www.ietf.org/html.charters/xcon-charter.html> [30] <http://www.3gpp.org/ftp/Specs/html-info/23228.htm> [31] <mailto:eburger@cantata.com>
Appendix A. Regex Grammar Syntax
The regular expression syntax used in MSCML is a telephony-oriented subset of POSIX Extended Regular Expressions (ERE) [22] termed Digit REGular EXpression (DRegex). This syntax was first described in KPML [23]. DRegex includes ordinary characters, special characters, bracket expressions, and interval expressions. These entities are defined in the list below. . matches digits 0-9, *, #, and A-D (case insensitive) * matches the * character # matches the # character [character selector] matches any character in selector [range1-range2] matches any character in range from range1 to range2, inclusive x matches any digit 0-9 {m} matches m repetitions of the previous pattern {m,} matches m or more repetitions of the previous pattern {,n} matches at most n (including zero) repetitions of the previous pattern {m,n} at least m and at most n repetitions of the previous pattern L the presence of 'L' in any regex expression causes the media server to enable "long" digit detection mode. See Section 7.1 for the definition of "long" digits. Table 7 illustrates DRegex usage through examples. +--------------+--------------------------------------------+ | Example | Description | +--------------+--------------------------------------------+ | 1 | Matches the digit 1 | | [179] | Matches 1, 7, or 9 | | [2-9] | Matches 2, 3, 4, 5, 6, 7, 8, 9 | | [02-46-9A-D] | Matches 0, 2, 3, 4, 6, 7, 8, 9, A, B, C, D | | x | Matches 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 | | . | Matches 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,| | | C, D, #, * | | *6[179#] | Matches *61, *67, *69, or *6# | | x{10} | Ten digits (0-9) | | 011x{7,15} | 011 followed by seven to fifteen digits | | L* | Long star | +--------------+--------------------------------------------+ Table 7: DRegex Examples
Appendix B. Contributors
Jeff Van Dyke and Andy Spitzer did the concept, development, documentation, and execution for MSCML at SnowShore Networks, Inc., which is now part of Cantata Technology, Inc. Andy Spitzer's original work at The Telephone Connection, Inc., influenced the IVR implementation. Mary Ann Leekley implemented the personalized mix feature and several other enhancements. Cliff Schornak of Commetrex and Jeff Van Dyke developed the facsimile service. Jai Cauvet, Rolando Herrero, Srinivas Motamarri, and Ashish Patel contributed greatly by testing MSCML.Appendix C. Acknowledgements
The following individuals provided valuable assistance in the direction, development, or debugging of MSCML: o Brian Badger and Phil Crable from Verizon Business o Stephane Bastien from BroadSoft o Peter Danielsen of Lucent Technologies o Kevin Flemming, formerly of SnowShore Networks, Inc. o Wesley Hicks and Ravindra Kabre, formerly from Sonus Networks o Jon Hinckley from SkyWave/Sestro o Terence Lobo, formerly of SnowShore Networks, Inc. o Kunal Nawale, formerly of SnowShore Networks, Inc. o Edwina Nowicki, formerly of SnowShore Networks, Inc. o Diana Rawlins and Sharadha Vijay, formerly of WorldCom o Gaurav Srivastva and Subhash Verma from BayPackets o Kevin Summers from Sonus Networks o Tim Wong from at&t The authors would like to thank Cullen Jennings and Dan Wing from Cisco Systems for their helpful review comments. The authors would also like to thank Scotty Farber for applying her technical writing expertise to the documentation of MSCML.
Authors' Addresses
Jeff Van Dyke Cantata Technology, Inc. 18 Keewaydin Dr. Salem, NH 03079 USA EMail: jvandyke@cantata.com Eric Burger (editor) BEA Systems, Inc. USA Email: eburger@standardstrack.com URI: http://www.standardstrack.com Andy Spitzer Bluesocket Inc. 10 North Avenue Burlington, MA 01803 USA EMail: woof@pingtel.com
Full Copyright Statement Copyright (C) The IETF Trust (2007). This document is subject to the rights, licenses and restrictions contained in BCP 78 and at www.rfc-editor.org/copyright.html, and except as set forth therein, the authors retain all their rights. This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST, AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Intellectual Property The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79. Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.