git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@1425 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
Peter Saint-Andre 2007-11-27 19:48:28 +00:00
parent 5abc78599f
commit 4a8e54d030
1 changed files with 27 additions and 20 deletions

View File

@ -23,6 +23,12 @@
<shortname>TO BE ASSIGNED</shortname>
&stpeter;
&seanegan;
<revision>
<version>0.7</version>
<date>2007-11-27</date>
<initials>psa</initials>
<remark><p>Editorial review and consistency check; corrected the schema.</p></remark>
</revision>
<revision>
<version>0.6</version>
<date>2007-06-20</date>
@ -67,7 +73,8 @@
</revision>
</header>
<section1 topic='Introduction' anchor='intro'>
<p>Traditional telephony systems use Dual Tone Multi-Frequency (DTMF) for dialing and to issue commands such as those used in Interactive Voice Response (IVR) applications. Internet telephony systems also use DTMF tones for interoperability with the public switched telephone network (PSTN). XMPP clients that use &xep0166; for voice chat (see &xep0167;) MUST use the protocol described in this document if they wish to support DTMF.</p>
<p>Traditional telephony systems use Dual Tone Multi-Frequency (DTMF) for dialing and to issue commands such as those used in Interactive Voice Response (IVR) applications. Internet telephony systems also use DTMF tones for interoperability with the public switched telephone network (PSTN).</p>
<p>XMPP clients that use &xep0166; for voice chat (see &xep0167;) MUST support the protocol described in this document to exchange DTMF information, although they MAY also support other methods of communicating DTMF information.</p>
</section1>
<section1 topic='Tone Format' anchor='format'>
<p>The format for the XML DTMF representation is as follows &NSNOTE;:</p>
@ -81,31 +88,31 @@
<p>The &lt;dtmf&gt; element SHOULD be sent as the payload of a Jingle session-info message as illustrated in the following example &NSNOTE;.</p>
<example caption="Entity Sends DTMF Message"><![CDATA[
<iq from='juliet@capulet.com/balcony'
to='ivr.shakespeare.lit'
id='dtmf1'
to='ivr.shakespeare.lit'
type='set'>
<jingle xmlns='http://www.xmpp.org/extensions/xep-0166.html#ns'
action='session-info'
initiator='juliet@capulet.com/balcony'
sid='a73sjjvkla37jfea'>
<dtmf xmlns='http://www.xmpp.org/extensions/xep-0181.html#ns'
code='7'
action='button-down'/>
action='button-down'
code='7'/>
</jingle>
</iq>
]]></example>
<p>The receiving entity MUST send an IQ result if it can process the DTMF:</p>
<example caption="Receiving Entity Acknowledges DTMF Message"><![CDATA[
<iq from='ivr.shakespeare.lit'
to='juliet@capulet.com/balcony'
id='dtmf1'
to='juliet@capulet.com/balcony'
type='result'/>
]]></example>
<p>If the receiving entity does not understand or cannot process the payload, it MUST return a &feature; stanza error, which SHOULD include a Jingle-specific error condition of &lt;unsupported-info/&gt;.</p>
<example caption="Receiving Does Not Understand DTMF Info Message"><![CDATA[
<iq from='ivr.shakespeare.lit'
to='juliet@capulet.com/balcony'
id='dtmf1'
to='juliet@capulet.com/balcony'
type='error'>
<error type='cancel'>
<feature-not-implemented xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
@ -114,13 +121,13 @@
</iq>
]]></example>
</section1>
<section1 topic='Negotiating RFC 4733' anchor='rfc4733'>
<p>Some applications may want to stream Jingle voice RTP directly to a non-XMPP entity, such as a SIP phone. In this scenario, DTMF needs to be sent in the content channel. Jingle DTMF enables Jingle entities to negotiate whether to send RTP over the XMPP signalling channel as described above, or over the content channel using &rfc4733;.</p>
<p>To request that the voice session switches to RFC 4733, a client sends a &lt;dtmf-method/&gt; element, qualified by the 'http://www.xmpp.org/extensions/xep-0181.html#ns' namespace as the payload of a Jingle session-info message:</p>
<section1 topic='Negotiating Use of the RFC 4733 Format' anchor='rfc4733'>
<p>Some applications may want to stream Jingle voice RTP directly to a non-XMPP entity, such as a SIP phone (see &rfc3261;). In this scenario, DTMF needs to be sent in the content channel. Jingle DTMF enables Jingle entities to negotiate whether to send RTP over the XMPP signalling channel as described above, or over the content channel using &rfc4733;.</p>
<p>To request that the voice session will switch to use of the RFC 4733 format for communicating DTMF, a client sends a &lt;dtmf-method/&gt; element, qualified by the 'http://www.xmpp.org/extensions/xep-0181.html#ns' namespace as the payload of a Jingle session-info message:</p>
<example caption="Client Requests Use of RFC 4733"><![CDATA[
<iq from='juliet@capulet.com/balcony'
to='ivr.shakespeare.lit'
id='dtmf2'
to='ivr.shakespeare.lit'
type='set'>
<jingle xmlns='http://www.xmpp.org/extensions/xep-0166.html#ns'
action='session-info'
@ -152,9 +159,10 @@
]]></example>
</section1>
<section1 topic='Service Discovery' anchor='disco'>
<section1 topic='Determining Support' anchor='disco'>
<p>If an entity supports Jingle DTMF (which natively includes sending of DTMF in the XMPP signalling channel), it MUST return a &xep0030; feature of "http://www.xmpp.org/extensions/xep-0181.html#ns" in response to service discovery information requests.</p>
<p>If an entity also supports sending of DTMF in the content channel, it MUST also return a service discovery feature of "http://www.xmpp.org/extensions/xep-0181.html#ns-rtp" in response to service discovery information requests.</p>
<p>Naturally, support MAY also be determined via the dynamic, presence-based profile of Service Discovery defined in &xep0115;.</p>
</section1>
<section1 topic='Security Considerations' anchor='security'>
@ -186,19 +194,18 @@
elementFormDefault='qualified'>
<xs:element name='dtmf'>
<xs:complexType>
<xs:sequence>
<xs:element ref='tone' minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='tone'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='action' use='optional' default='button-down'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='button-down'/>
<xs:enumeration value='button-up'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='code' type='DTMFString' use='required'/>
<xs:attribute name='duration' type='xs:positiveInteger' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>