@ -27,6 +27,12 @@
&stpeter;
&hildjj;
&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 >
<version > 0.16</version>
<date > 2008-02-29</date>
@ -203,7 +209,7 @@ INITIATOR RESPONDER
]]></code>
</section2>
<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-tc p' 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-ud p' namespace &NSNOTE; .</p>
<example caption= "Initiation" > < ![CDATA[
<iq from= 'romeo@montague.net/orchard'
id='jingle1'
@ -217,11 +223,34 @@ INITIATOR RESPONDER
<description xmlns= 'urn:xmpp:tmp:jingle:apps:audio-rtp' >
[ ... ]
</description>
<transport xmlns= 'urn:xmpp:tmp:jingle:transports:ice-tcp' />
<transport xmlns= 'urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'/>
</content>
</jingle>
</iq>
]]></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 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>
@ -247,9 +276,7 @@ INITIATOR RESPONDER
port='8998'
priority='2130706431'
protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
type='host'
ufrag='8hhy'/>
type='host'/>
]]></example>
<p > The attributes of the < candidate/> element are described in the following table:</p>
<table caption= 'Candidate Attributes' >
@ -309,12 +336,6 @@ INITIATOR RESPONDER
<td > Transport protocol field in a=candidate line</td>
<td > udp</td>
</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 > rel-addr</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 > srflx</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>
</section3>
<section3 topic= 'Exchange of Candidates' anchor= 'protocol-candidates-exchange' >
@ -368,7 +383,9 @@ INITIATOR RESPONDER
initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'>
<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'
foundation='1'
generation='0'
@ -377,9 +394,7 @@ INITIATOR RESPONDER
port='8998'
priority='2130706431'
protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
type='host'
ufrag='8hhy'/>
type='host'/>
</transport>
</content>
</jingle>
@ -394,7 +409,9 @@ INITIATOR RESPONDER
initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'>
<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'
foundation='2'
generation='0'
@ -403,11 +420,9 @@ INITIATOR RESPONDER
port='45664'
priority='1694498815'
protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
rel-addr='10.0.1.1'
rel-port='8998'
type='srflx'
ufrag='8hhy'/>
type='srflx'/>
</transport>
</content>
</jingle>
@ -436,7 +451,9 @@ INITIATOR RESPONDER
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<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'
foundation='1'
generation='0'
@ -445,9 +462,7 @@ INITIATOR RESPONDER
port='3478'
priority='2130706431'
protocol='udp'
pwd='YH75Fviy6338Vbrhrlp8Yh'
type='host'
ufrag='9uB6'/>
type='host'/>
</transport>
</content>
</jingle>
@ -548,7 +563,9 @@ INITIATOR NAT RESPONDER
<description xmlns= 'urn:xmpp:tmp:jingle:apps:audio-rtp' >
[ ... ]
</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'
foundation='1'
generation='0'
@ -557,13 +574,11 @@ INITIATOR NAT RESPONDER
port='45664'
priority='1694498815'
protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
rel-addr='10.0.1.1'
rel-port='8998'
rem-addr='192.0.2.1'
rem-port='3478'
type='srflx'
ufrag='8hhy'/>
type='srflx'/>
</transport>
</content>
</jingle>
@ -591,7 +606,7 @@ INITIATOR NAT RESPONDER
<description xmlns= 'urn:xmpp:tmp:jingle:apps:audio-rtp' >
[ ... ]
</description>
<transport xmlns= 'urn:xmpp:tmp:jingle:transports:ice- tc p'>
<transport xmlns= 'urn:xmpp:tmp:jingle:transports:ice- ud p'>
<candidate component= '1'
foundation='1'
generation='0'
@ -600,13 +615,11 @@ INITIATOR NAT RESPONDER
port='45664'
priority='1694498815'
protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
rel-addr='10.0.1.1'
rel-port='8998'
rem-addr='192.0.2.1'
rem-port='3478'
type='srflx'
ufrag='8hhy'/>
type='srflx'/>
</transport>
</content>
</jingle>
@ -647,7 +660,9 @@ INITIATOR NAT RESPONDER
initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'>
<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'
foundation='1'
generation='1'
@ -656,9 +671,7 @@ INITIATOR NAT RESPONDER
port='45665'
priority='1694498815'
protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
type='srflx'
ufrag='8hhy'/>
type='srflx'/>
</transport>
</content>
</jingle>
@ -686,7 +699,9 @@ INITIATOR NAT RESPONDER
<description xmlns= 'urn:xmpp:tmp:jingle:apps:audio-rtp' >
[ ... ]
</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'
foundation='1'
generation='1'
@ -695,9 +710,7 @@ INITIATOR NAT RESPONDER
port='45665'
priority='1694498815'
protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
type='srflx'
ufrag='8hhy'/>
type='srflx'/>
</transport>
</content>
</jingle>
@ -724,7 +737,9 @@ INITIATOR NAT RESPONDER
initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'>
<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'
foundation='1'
generation='0'
@ -733,9 +748,7 @@ INITIATOR NAT RESPONDER
port='9001'
priority='21149780477'
protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
type='host'
ufrag='8hhy'/>
type='host'/<
</transport>
</content>
</jingle>
@ -763,7 +776,9 @@ INITIATOR NAT RESPONDER
<description xmlns= 'urn:xmpp:tmp:jingle:apps:audio-rtp' profile= 'RTP/AVP' >
[ ... ]
</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'
foundation='1'
generation='0'
@ -772,9 +787,7 @@ INITIATOR NAT RESPONDER
port='9001'
priority='21149780477'
protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
type='host'
ufrag='8hhy'/>
type='host'/>
</transport>
</content>
</jingle>
@ -802,7 +815,9 @@ INITIATOR NAT RESPONDER
<description xmlns= 'urn:xmpp:tmp:jingle:apps:audio-rtp' >
[ ... ]
</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'
foundation='1'
generation='0'
@ -811,9 +826,7 @@ INITIATOR NAT RESPONDER
port='9001'
priority='21149780477'
protocol='udp'
pwd='asd88fgpdd777uzjYhagZg'
type='host'
ufrag='8hhy'/>
type='host'/>
</transport>
</content>
</jingle>
@ -831,7 +844,7 @@ INITIATOR NAT RESPONDER
</section1>
<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-tc p" &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-ud p" &NSNOTE; in response to &xep0030; information requests.</p>
<example caption= "Service discovery information request" > < ![CDATA[
<iq from= 'romeo@montague.net/orchard'
id='disco1'
@ -847,7 +860,7 @@ INITIATOR NAT RESPONDER
type='result'>
<query xmlns= 'http://jabber.org/protocol/disco#info' >
...
<feature var= 'urn:xmpp:tmp:jingle:transports:ice- tc p'/>
<feature var= 'urn:xmpp:tmp:jingle:transports:ice- ud p'/>
...
</query>
</iq>
@ -875,7 +888,7 @@ INITIATOR NAT RESPONDER
<section2 topic= 'Protocol Namespaces' anchor= 'ns' >
<p > Until this specification advances to a status of Draft, its associated namespaces shall be:</p>
<ul >
<li > urn:xmpp:tmp:jingle:transports:ice-tc p</li>
<li > urn:xmpp:tmp:jingle:transports:ice-ud p</li>
</ul>
<p > Upon advancement of this specification, the ®ISTRAR; 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>
@ -907,17 +920,17 @@ INITIATOR NAT RESPONDER
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='urn:xmpp:tmp:jingle:transports:ice-tc p'
xmlns='urn:xmpp:tmp:jingle:transports:ice-tc p'
targetNamespace='urn:xmpp:tmp:jingle:transports:ice-ud p'
xmlns='urn:xmpp:tmp:jingle:transports:ice-ud p'
elementFormDefault='qualified'>
<xs:element name= 'transport' >
<xs:complexType >
<xs: choi ce>
<xs: sequence >
<xs:element ref= 'candidate' minOccurs= '0' maxOccurs= '1' / >
</xs:sequence >
< /xs:choice >
<xs: sequen ce>
<xs: element ref= 'candidate' minOccurs= '0' maxOccurs= '1' / >
</xs:sequence >
<xs:attribute name= 'pwd' type= 'xs:string' use= 'optional' / >
< xs:attribute name= 'ufrag' type= 'xs:string' use= 'optional' / >
</xs:complexType>
</xs:element>
@ -933,7 +946,6 @@ INITIATOR NAT RESPONDER
<xs:attribute name= 'port' type= 'xs:unsignedShort' use= 'required' />
<xs:attribute name= 'priority' type= 'xs:positiveInteger' 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-port' type= 'xs:unsignedShort' use= 'optional' />
<xs:attribute name= 'rem-addr' type= 'xs:string' use= 'optional' />
@ -948,7 +960,6 @@ INITIATOR NAT RESPONDER
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name= 'ufrag' type= 'xs:string' use= 'required' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
@ -964,6 +975,6 @@ INITIATOR NAT RESPONDER
]]></code>
</section1>
<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>
</xep>