1
0
mirror of https://github.com/moparisthebest/xeps synced 2024-12-21 23:28:51 -05:00
git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@2113 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
Peter Saint-Andre 2008-08-01 03:48:02 +00:00
parent e905816570
commit b623503386

View File

@ -11,7 +11,7 @@
<abstract>This specification defines a Jingle transport method that results in sending media data using raw datagram sockets via the User Datagram Protocol (UDP). This transport method is negotiated via the Interactive Connectivity Establishment (ICE) methodology defined by the IETF and thus provides robust NAT traversal for media traffic.</abstract>
&LEGALNOTICE;
<number>0176</number>
<status>Proposed</status>
<status>Experimental</status>
<type>Standards Track</type>
<sig>Standards</sig>
<approver>Council</approver>
@ -27,6 +27,12 @@
&stpeter;
&hildjj;
&seanegan;
<revision>
<version>0.20</version>
<date>2008-07-31</date>
<initials>psa</initials>
<remark><p>For consistency with XEP-0166, removed profile attribute, changed content-replace to transport-replace, and changed content-accept to transport-accept.</p></remark>
</revision>
<revision>
<version>0.19</version>
<date>2008-06-04</date>
@ -200,15 +206,15 @@ INITIATOR RESPONDER
|----------------------------------->|
| STUN Binding Request |
| (dropped) |
| x---------------------------------|
| x=================================|
| STUN Binding Request |
|----------------------------------->|
|===================================>|
| STUN Binding Result |
|<-----------------------------------|
|<===================================|
| STUN Binding Request |
|<-----------------------------------|
|<===================================|
| STUN Binding Result |
|----------------------------------->|
|===================================>|
| Jingle session-accept |
|<-----------------------------------|
| Jingle ack (XMPP IQ-result) |
@ -227,7 +233,7 @@ INITIATOR RESPONDER
action='session-initiate'
initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'>
<content name='this-is-the-audio-content' profile='RTP/AVP'>
<content name='this-is-the-audio-content'>
<description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'>
[ ... ]
</description>
@ -238,7 +244,7 @@ INITIATOR RESPONDER
</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 responder, in accordance with &icecore; and as shown in the examples. The attributes are defined as follows.</p>
<p>The 'pwd' and 'ufrag' attributes MUST be included in the session-initiate request, in subsequent content-add and transport-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 responder, 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>
@ -393,7 +399,7 @@ INITIATOR RESPONDER
action='transport-info'
initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<content creator='initiator' name='this-is-the-audio-content'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
@ -419,7 +425,7 @@ INITIATOR RESPONDER
action='transport-info'
initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<content creator='initiator' name='this-is-the-audio-content'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
@ -461,7 +467,7 @@ INITIATOR RESPONDER
action='transport-info'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<content creator='initiator' name='this-is-the-audio-content'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='YH75Fviy6338Vbrhrlp8Yh'
ufrag='9uB6'>
@ -508,45 +514,48 @@ INITIATOR NAT RESPONDER
| | from 192.0.2.1:3478 |
| | to 10.0.1.1:8998 |
| | (dropped) |
| | x--------------------|
| | x====================|
| STUN Binding Request | |
| from 10.0.1.1:8998 | |
| to 192.0.2.1:3478 | |
| USE-CANDIDATE | |
|---------------------->| |
|======================>| |
| | STUN Binding Request |
| | from 192.0.2.3:45664 |
| | to 192.0.2.1:3478 |
| | USE-CANDIDATE |
| |---------------------->|
| |======================>|
| | STUN Binding Response |
| | from 192.0.2.1:3478 |
| | to 192.0.2.3:45664 |
| |<----------------------|
| |<======================|
| STUN Binding Response | |
| from 192.0.2.1:3478 | |
| to 10.0.1.1:8998 | |
| map 192.0.2.3:45664 | |
|<----------------------| |
|<======================| |
| | |
|================RTP now can flow==============>|
| | |
| | STUN Binding Request |
| | from 192.0.2.1:3478 |
| | to 192.0.2.3:45664 |
| |<----------------------|
| |<======================|
| STUN Binding Request | |
| from 192.0.2.1:3478 | |
| to 10.0.1.1:8998 | |
|<----------------------| |
|<======================| |
| STUN Binding Response | |
| from 10.0.1.1:8998 | |
| to 192.0.2.1:3478 | |
| map 192.0.2.1:3478 | |
|---------------------->| |
|======================>| |
| | STUN Binding Response |
| | from 192.0.2.3:45664 |
| | to 192.0.2.1:3478 |
| | map 192.0.2.1:3478 |
| |---------------------->|
| |======================>|
| | |
|<===============RTP now can flow===============|
| | |
]]></code>
@ -569,7 +578,7 @@ INITIATOR NAT RESPONDER
initiator='romeo@montague.net/orchard'
responder='juliet@capulet.com/balcony'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<content creator='initiator' name='this-is-the-audio-content'>
<description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'>
[ ... ]
</description>
@ -615,7 +624,7 @@ INITIATOR NAT RESPONDER
<p>If the responder cannot find a suitable candidate transport or it receives a &notacceptable; error from the initiator in response to its acceptance of a suitable transport, it SHOULD terminate the session as described in Section 6.8 of <cite>XEP-0166</cite>.</p>
</section2>
<section2 topic='Modifying an Existing Candidate' anchor='protocol-modify'>
<p>The creator of a content type MAY modify an existing, in-use candidate at any time during the session, for example to change the IP address or port. This is done by sending a content-replace action with the changed candidate information, where the value of the 'generation' is incremented to specify that the candidate information is a modification to an existing candidate.</p>
<p>The creator of a content type MAY modify an existing, in-use candidate at any time during the session, for example to change the IP address or port. This is done by sending a transport-replace action with the changed candidate information, where the value of the 'generation' is incremented to specify that the candidate information is a modification to an existing candidate.</p>
<p>An example follows (change to IP address and port).</p>
<example caption="Initiator modifies the in-use candidate"><![CDATA[
<iq from='romeo@montague.net/orchard'
@ -623,10 +632,10 @@ INITIATOR NAT RESPONDER
to='juliet@capulet.com/balcony'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='content-replace'
action='transport-replace'
initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<content creator='initiator' name='this-is-the-audio-content'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
@ -645,27 +654,24 @@ INITIATOR NAT RESPONDER
</iq>
]]></example>
<p>The recipient then acknowledges receipt.</p>
<example caption="Recipient acknowledges content-replace"><![CDATA[
<example caption="Recipient acknowledges transport-replace"><![CDATA[
<iq from='juliet@capulet.com/balcony'
id='rep2'
to='romeo@montague.net/orchard'
type='result'/>
]]></example>
<p>If the content-replace is acceptable, the recipient then sends a content-accept action.</p>
<p>If the transport-replace is acceptable, the recipient then sends a transport-accept action.</p>
<example caption="Responder definitively accepts the replaced candidate"><![CDATA[
<iq from='juliet@capulet.com/balcony'
id='accept2'
to='romeo@montague.net/orchard'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='content-accept'
action='transport-accept'
initiator='romeo@montague.net/orchard'
responder='juliet@capulet.com/balcony'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'>
[ ... ]
</description>
<content creator='initiator' name='this-is-the-audio-content'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
@ -703,7 +709,7 @@ INITIATOR NAT RESPONDER
action='transport-info'
initiator='romeo@montague.net/orchard'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<content creator='initiator' name='this-is-the-audio-content'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
@ -728,21 +734,18 @@ INITIATOR NAT RESPONDER
to='romeo@montague.net/orchard'
type='result'/>
]]></example>
<p>The parties SHOULD check the newly-offered candidate for connectivity, as described previously. If the parties determine that media can flow over the candidate, the initiating party shall send a content-replace action to the responder.</p>
<example caption="Initiator sends content-replace"><![CDATA[
<p>The parties SHOULD check the newly-offered candidate for connectivity, as described previously. If the parties determine that media can flow over the candidate, the initiating party shall send a transport-replace action to the responder.</p>
<example caption="Initiator sends transport-replace"><![CDATA[
<iq from='romeo@montague.net/orchard'
id='rep3'
to='juliet@capulet.com/balcony'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='content-replace'
action='transport-replace'
initiator='romeo@montague.net/orchard'
responder='juliet@capulet.com/balcony'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content'>
<description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp' profile='RTP/AVP'>
[ ... ]
</description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
@ -760,28 +763,25 @@ INITIATOR NAT RESPONDER
</jingle>
</iq>
]]></example>
<p>The responder then acknowledges the replaced content definition.</p>
<example caption="Responder acknowledges content-replace"><![CDATA[
<p>The responder then acknowledges the replaced transport definition.</p>
<example caption="Responder acknowledges transport-replace"><![CDATA[
<iq from='juliet@capulet.com/balcony'
id='rep3'
to='romeo@montague.net/orchard'
type='result'/>
]]></example>
<p>The responder then accepts the replaced content definition.</p>
<example caption="Responder definitively accepts the replaced content definition"><![CDATA[
<p>The responder then accepts the replaced transport definition.</p>
<example caption="Responder definitively accepts the replaced transport definition"><![CDATA[
<iq from='juliet@capulet.com/balcony'
id='accept3'
to='romeo@montague.net/orchard'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='content-accept'
action='transport-accept'
initiator='romeo@montague.net/orchard'
responder='juliet@capulet.com/balcony'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<description xmlns='urn:xmpp:tmp:jingle:apps:audio-rtp'>
[ ... ]
</description>
<content creator='initiator' name='this-is-the-audio-content'>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
@ -942,43 +942,44 @@ INITIATOR NAT RESPONDER
<xs:element name='transport'>
<xs:complexType>
<xs:sequence>
<xs:element ref='candidate' minOccurs='0' maxOccurs='unbounded'/>
<xs:element name='candidate'
type='candidateElementType'
minOccurs='0'
maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='pwd' type='xs:string' use='optional'/>
<xs:attribute name='ufrag' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='candidate'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='component' type='xs:unsignedByte' use='required'/>
<xs:attribute name='foundation' type='xs:unsignedByte' use='required'/>
<xs:attribute name='generation' type='xs:unsignedByte' use='required'/>
<xs:attribute name='ip' type='xs:string' use='required'/>
<xs:attribute name='network' type='xs:unsignedByte' use='required'/>
<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='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'/>
<xs:attribute name='rem-port' type='xs:unsignedShort' use='optional'/>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='host'/>
<xs:enumeration value='prflx'/>
<xs:enumeration value='relay'/>
<xs:enumeration value='srflx'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:complexType name='candidateElementType'>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='component' type='xs:unsignedByte' use='required'/>
<xs:attribute name='foundation' type='xs:unsignedByte' use='required'/>
<xs:attribute name='generation' type='xs:unsignedByte' use='required'/>
<xs:attribute name='ip' type='xs:string' use='required'/>
<xs:attribute name='network' type='xs:unsignedByte' use='required'/>
<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='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'/>
<xs:attribute name='rem-port' type='xs:unsignedShort' use='optional'/>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='host'/>
<xs:enumeration value='prflx'/>
<xs:enumeration value='relay'/>
<xs:enumeration value='srflx'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>