git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@1777 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
Peter Saint-Andre 2008-04-18 16:34:08 +00:00
parent 1f4af785cd
commit c3a6f0abdd
1 changed files with 81 additions and 70 deletions

View File

@ -27,6 +27,12 @@
&stpeter; &stpeter;
&hildjj; &hildjj;
&seanegan; &seanegan;
<revision>
<version>0.17</version>
<date>2008-03-20</date>
<initials>psa</initials>
<remark><p>Moved pwd and ufrag attributes from candidate element to transport element since they describe session-level or media-level information.</p></remark>
</revision>
<revision> <revision>
<version>0.16</version> <version>0.16</version>
<date>2008-02-29</date> <date>2008-02-29</date>
@ -203,7 +209,7 @@ INITIATOR RESPONDER
]]></code> ]]></code>
</section2> </section2>
<section2 topic='Transport Initiation' anchor='protocol-initiate'> <section2 topic='Transport Initiation' anchor='protocol-initiate'>
<p>In order for the initiator in a Jingle exchange to start the negotiation, it MUST send a Jingle "session-initiate" stanza as described in <cite>XEP-0166</cite>. A content type MUST include one transport method. If the initiator wishes to negotiate the ice-udp transport method for an application format, it MUST include an empty &TRANSPORT; child element qualified by the 'urn:xmpp:tmp:jingle:transports:ice-tcp' namespace &NSNOTE;.</p> <p>In order for the initiator in a Jingle exchange to start the negotiation, it MUST send a Jingle "session-initiate" stanza as described in <cite>XEP-0166</cite>. A content type MUST include one transport method. If the initiator wishes to negotiate the ice-udp transport method for an application format, it MUST include an empty &TRANSPORT; child element qualified by the 'urn:xmpp:tmp:jingle:transports:ice-udp' namespace &NSNOTE;.</p>
<example caption="Initiation"><![CDATA[ <example caption="Initiation"><![CDATA[
<iq from='romeo@montague.net/orchard' <iq from='romeo@montague.net/orchard'
id='jingle1' id='jingle1'
@ -217,11 +223,34 @@ INITIATOR RESPONDER
<description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'> <description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'>
[ ... ] [ ... ]
</description> </description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp'/> <transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'/>
</content> </content>
</jingle> </jingle>
</iq> </iq>
]]></example> ]]></example>
<p>The 'pwd' and 'ufrag' attributes MUST be included in the session-initate request, in subsequent content-add and content-replace actions, and when offering candidates via the transport-info action. The attributes SHOULD NOT be included in a session-accept action. The values are separately generated for both the initiator and the receiver, in accordance with &icecore; and as shown in the examples. The attributes are defined as follows.</p>
<table caption='Transport Attributes'>
<tr>
<th>Name</th>
<th>Description</th>
<th>SDP Syntax</th>
<th>Example</th>
</tr>
<tr>
<td>pwd</td>
<td>A Password as defined in &icecore;.</td>
<td>a=ice-pwd line</td>
<td>asd88fgpdd777uzjYhagZg</td>
</tr>
<tr>
<td>ufrag</td>
<td>A User Fragment as defined in &icecore;.</td>
<td>a=ice-ufrag line</td>
<td>8hhy</td>
</tr>
</table>
</section2> </section2>
<section2 topic='Response' anchor='protocol-response'> <section2 topic='Response' anchor='protocol-response'>
<p>As described in <cite>XEP-0166</cite>, to acknowledge receipt of the session initiation request, the responder returns an IQ-result:</p> <p>As described in <cite>XEP-0166</cite>, to acknowledge receipt of the session initiation request, the responder returns an IQ-result:</p>
@ -247,9 +276,7 @@ INITIATOR RESPONDER
port='8998' port='8998'
priority='2130706431' priority='2130706431'
protocol='udp' protocol='udp'
pwd='asd88fgpdd777uzjYhagZg' type='host'/>
type='host'
ufrag='8hhy'/>
]]></example> ]]></example>
<p>The attributes of the &lt;candidate/&gt; element are described in the following table:</p> <p>The attributes of the &lt;candidate/&gt; element are described in the following table:</p>
<table caption='Candidate Attributes'> <table caption='Candidate Attributes'>
@ -309,12 +336,6 @@ INITIATOR RESPONDER
<td>Transport protocol field in a=candidate line</td> <td>Transport protocol field in a=candidate line</td>
<td>udp</td> <td>udp</td>
</tr> </tr>
<tr>
<td>pwd</td>
<td>A Password as defined in &icecore;.</td>
<td>a=ice-pwd line</td>
<td>asd88fgpdd777uzjYhagZg</td>
</tr>
<tr> <tr>
<td>rel-addr</td> <td>rel-addr</td>
<td>A related address as defined in &icecore;.</td> <td>A related address as defined in &icecore;.</td>
@ -345,12 +366,6 @@ INITIATOR RESPONDER
<td>Typ field in a=candidate line</td> <td>Typ field in a=candidate line</td>
<td>srflx</td> <td>srflx</td>
</tr> </tr>
<tr>
<td>ufrag</td>
<td>A User Fragment as defined in &icecore;.</td>
<td>a=ice-ufrag line</td>
<td>8hhy</td>
</tr>
</table> </table>
</section3> </section3>
<section3 topic='Exchange of Candidates' anchor='protocol-candidates-exchange'> <section3 topic='Exchange of Candidates' anchor='protocol-candidates-exchange'>
@ -368,7 +383,9 @@ INITIATOR RESPONDER
initiator='romeo@montague.net/orchard' initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'> sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'> <content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp'> <transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
<candidate component='1' <candidate component='1'
foundation='1' foundation='1'
generation='0' generation='0'
@ -377,9 +394,7 @@ INITIATOR RESPONDER
port='8998' port='8998'
priority='2130706431' priority='2130706431'
protocol='udp' protocol='udp'
pwd='asd88fgpdd777uzjYhagZg' type='host'/>
type='host'
ufrag='8hhy'/>
</transport> </transport>
</content> </content>
</jingle> </jingle>
@ -394,7 +409,9 @@ INITIATOR RESPONDER
initiator='romeo@montague.net/orchard' initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'> sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'> <content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp'> <transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
<candidate component='1' <candidate component='1'
foundation='2' foundation='2'
generation='0' generation='0'
@ -403,11 +420,9 @@ INITIATOR RESPONDER
port='45664' port='45664'
priority='1694498815' priority='1694498815'
protocol='udp' protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
rel-addr='10.0.1.1' rel-addr='10.0.1.1'
rel-port='8998' rel-port='8998'
type='srflx' type='srflx'/>
ufrag='8hhy'/>
</transport> </transport>
</content> </content>
</jingle> </jingle>
@ -436,7 +451,9 @@ INITIATOR RESPONDER
initiator='romeo@montague.lit/orchard' initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'> sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'> <content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp-udp'> <transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='YH75Fviy6338Vbrhrlp8Yh'
ufrag='9uB6'>
<candidate component='1' <candidate component='1'
foundation='1' foundation='1'
generation='0' generation='0'
@ -445,9 +462,7 @@ INITIATOR RESPONDER
port='3478' port='3478'
priority='2130706431' priority='2130706431'
protocol='udp' protocol='udp'
pwd='YH75Fviy6338Vbrhrlp8Yh' type='host'/>
type='host'
ufrag='9uB6'/>
</transport> </transport>
</content> </content>
</jingle> </jingle>
@ -548,7 +563,9 @@ INITIATOR NAT RESPONDER
<description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'> <description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'>
[ ... ] [ ... ]
</description> </description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp'> <transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
<candidate component='1' <candidate component='1'
foundation='1' foundation='1'
generation='0' generation='0'
@ -557,13 +574,11 @@ INITIATOR NAT RESPONDER
port='45664' port='45664'
priority='1694498815' priority='1694498815'
protocol='udp' protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
rel-addr='10.0.1.1' rel-addr='10.0.1.1'
rel-port='8998' rel-port='8998'
rem-addr='192.0.2.1' rem-addr='192.0.2.1'
rem-port='3478' rem-port='3478'
type='srflx' type='srflx'/>
ufrag='8hhy'/>
</transport> </transport>
</content> </content>
</jingle> </jingle>
@ -591,7 +606,7 @@ INITIATOR NAT RESPONDER
<description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'> <description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'>
[ ... ] [ ... ]
</description> </description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp'> <transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'>
<candidate component='1' <candidate component='1'
foundation='1' foundation='1'
generation='0' generation='0'
@ -600,13 +615,11 @@ INITIATOR NAT RESPONDER
port='45664' port='45664'
priority='1694498815' priority='1694498815'
protocol='udp' protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
rel-addr='10.0.1.1' rel-addr='10.0.1.1'
rel-port='8998' rel-port='8998'
rem-addr='192.0.2.1' rem-addr='192.0.2.1'
rem-port='3478' rem-port='3478'
type='srflx' type='srflx'/>
ufrag='8hhy'/>
</transport> </transport>
</content> </content>
</jingle> </jingle>
@ -647,7 +660,9 @@ INITIATOR NAT RESPONDER
initiator='romeo@montague.net/orchard' initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'> sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'> <content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp'> <transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
<candidate component='1' <candidate component='1'
foundation='1' foundation='1'
generation='1' generation='1'
@ -656,9 +671,7 @@ INITIATOR NAT RESPONDER
port='45665' port='45665'
priority='1694498815' priority='1694498815'
protocol='udp' protocol='udp'
pwd='asd88fgpdd777uzjYhagZg' type='srflx'/>
type='srflx'
ufrag='8hhy'/>
</transport> </transport>
</content> </content>
</jingle> </jingle>
@ -686,7 +699,9 @@ INITIATOR NAT RESPONDER
<description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'> <description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'>
[ ... ] [ ... ]
</description> </description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp'> <transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
<candidate component='1' <candidate component='1'
foundation='1' foundation='1'
generation='1' generation='1'
@ -695,9 +710,7 @@ INITIATOR NAT RESPONDER
port='45665' port='45665'
priority='1694498815' priority='1694498815'
protocol='udp' protocol='udp'
pwd='asd88fgpdd777uzjYhagZg' type='srflx'/>
type='srflx'
ufrag='8hhy'/>
</transport> </transport>
</content> </content>
</jingle> </jingle>
@ -724,7 +737,9 @@ INITIATOR NAT RESPONDER
initiator='romeo@montague.net/orchard' initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'> sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'> <content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp'> <transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
<candidate component='1' <candidate component='1'
foundation='1' foundation='1'
generation='0' generation='0'
@ -733,9 +748,7 @@ INITIATOR NAT RESPONDER
port='9001' port='9001'
priority='21149780477' priority='21149780477'
protocol='udp' protocol='udp'
pwd='asd88fgpdd777uzjYhagZg' type='host'/<
type='host'
ufrag='8hhy'/>
</transport> </transport>
</content> </content>
</jingle> </jingle>
@ -763,7 +776,9 @@ INITIATOR NAT RESPONDER
<description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp' profile='RTP/AVP'> <description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp' profile='RTP/AVP'>
[ ... ] [ ... ]
</description> </description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp'> <transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
<candidate component='1' <candidate component='1'
foundation='1' foundation='1'
generation='0' generation='0'
@ -772,9 +787,7 @@ INITIATOR NAT RESPONDER
port='9001' port='9001'
priority='21149780477' priority='21149780477'
protocol='udp' protocol='udp'
pwd='asd88fgpdd777uzjYhagZg' type='host'/>
type='host'
ufrag='8hhy'/>
</transport> </transport>
</content> </content>
</jingle> </jingle>
@ -802,7 +815,9 @@ INITIATOR NAT RESPONDER
<description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'> <description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'>
[ ... ] [ ... ]
</description> </description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp'> <transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
<candidate component='1' <candidate component='1'
foundation='1' foundation='1'
generation='0' generation='0'
@ -811,9 +826,7 @@ INITIATOR NAT RESPONDER
port='9001' port='9001'
priority='21149780477' priority='21149780477'
protocol='udp' protocol='udp'
pwd='asd88fgpdd777uzjYhagZg' type='host'/>
type='host'
ufrag='8hhy'/>
</transport> </transport>
</content> </content>
</jingle> </jingle>
@ -831,7 +844,7 @@ INITIATOR NAT RESPONDER
</section1> </section1>
<section1 topic='Determining Support' anchor='support'> <section1 topic='Determining Support' anchor='support'>
<p>If an entity supports the Jingle ice-udp transport, it MUST return a feature of "urn:xmpp:tmp:jingle:transports:ice-tcp" &NSNOTE; in response to &xep0030; information requests.</p> <p>If an entity supports the Jingle ice-udp transport, it MUST return a feature of "urn:xmpp:tmp:jingle:transports:ice-udp" &NSNOTE; in response to &xep0030; information requests.</p>
<example caption="Service discovery information request"><![CDATA[ <example caption="Service discovery information request"><![CDATA[
<iq from='romeo@montague.net/orchard' <iq from='romeo@montague.net/orchard'
id='disco1' id='disco1'
@ -847,7 +860,7 @@ INITIATOR NAT RESPONDER
type='result'> type='result'>
<query xmlns='http://jabber.org/protocol/disco#info'> <query xmlns='http://jabber.org/protocol/disco#info'>
... ...
<feature var='urn:xmpp:tmp:jingle:transports:ice-tcp'/> <feature var='urn:xmpp:tmp:jingle:transports:ice-udp'/>
... ...
</query> </query>
</iq> </iq>
@ -875,7 +888,7 @@ INITIATOR NAT RESPONDER
<section2 topic='Protocol Namespaces' anchor='ns'> <section2 topic='Protocol Namespaces' anchor='ns'>
<p>Until this specification advances to a status of Draft, its associated namespaces shall be:</p> <p>Until this specification advances to a status of Draft, its associated namespaces shall be:</p>
<ul> <ul>
<li>urn:xmpp:tmp:jingle:transports:ice-tcp</li> <li>urn:xmpp:tmp:jingle:transports:ice-udp</li>
</ul> </ul>
<p>Upon advancement of this specification, the &REGISTRAR; shall issue permanent namespaces in accordance with the process defined in Section 4 of &xep0053;.</p> <p>Upon advancement of this specification, the &REGISTRAR; shall issue permanent namespaces in accordance with the process defined in Section 4 of &xep0053;.</p>
<p>The following namespaces are requested, and are thought to be unique per the XMPP Registrar's requirements:</p> <p>The following namespaces are requested, and are thought to be unique per the XMPP Registrar's requirements:</p>
@ -907,17 +920,17 @@ INITIATOR NAT RESPONDER
<xs:schema <xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='urn:xmpp:tmp:jingle:transports:ice-tcp' targetNamespace='urn:xmpp:tmp:jingle:transports:ice-udp'
xmlns='urn:xmpp:tmp:jingle:transports:ice-tcp' xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
elementFormDefault='qualified'> elementFormDefault='qualified'>
<xs:element name='transport'> <xs:element name='transport'>
<xs:complexType> <xs:complexType>
<xs:choice> <xs:sequence>
<xs:sequence> <xs:element ref='candidate' minOccurs='0' maxOccurs='1'/>
<xs:element ref='candidate' minOccurs='0' maxOccurs='1'/> </xs:sequence>
</xs:sequence> <xs:attribute name='pwd' type='xs:string' use='optional'/>
</xs:choice> <xs:attribute name='ufrag' type='xs:string' use='optional'/>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@ -933,7 +946,6 @@ INITIATOR NAT RESPONDER
<xs:attribute name='port' type='xs:unsignedShort' use='required'/> <xs:attribute name='port' type='xs:unsignedShort' use='required'/>
<xs:attribute name='priority' type='xs:positiveInteger' use='required'/> <xs:attribute name='priority' type='xs:positiveInteger' use='required'/>
<xs:attribute name='protocol' type='xs:NCName' use='required'/> <xs:attribute name='protocol' type='xs:NCName' use='required'/>
<xs:attribute name='pwd' type='xs:string' use='required'/>
<xs:attribute name='rel-addr' type='xs:string' use='optional'/> <xs:attribute name='rel-addr' type='xs:string' use='optional'/>
<xs:attribute name='rel-port' type='xs:unsignedShort' use='optional'/> <xs:attribute name='rel-port' type='xs:unsignedShort' use='optional'/>
<xs:attribute name='rem-addr' type='xs:string' use='optional'/> <xs:attribute name='rem-addr' type='xs:string' use='optional'/>
@ -948,7 +960,6 @@ INITIATOR NAT RESPONDER
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
</xs:attribute> </xs:attribute>
<xs:attribute name='ufrag' type='xs:string' use='required'/>
</xs:extension> </xs:extension>
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
@ -964,6 +975,6 @@ INITIATOR NAT RESPONDER
]]></code> ]]></code>
</section1> </section1>
<section1 topic='Acknowledgements' anchor='ack'> <section1 topic='Acknowledgements' anchor='ack'>
<p>Thanks to Steffen Larsen for his helpful feedback.</p> <p>Thanks to Steffen Larsen and Paul Witty for their comments.</p>
</section1> </section1>
</xep> </xep>