git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@3180 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
Peter Saint-Andre 2009-05-28 02:30:53 +00:00
parent e5fa993d83
commit 295dbec93d
1 changed files with 47 additions and 78 deletions

View File

@ -29,6 +29,12 @@
&hildjj;
&seanegan;
&robmcqueen;
<revision>
<version>0.27</version>
<date>2009-05-27</date>
<initials>psa</initials>
<remark><p>Clarified ICE restarts and use of the generation attribute, in accordance with the ICE specification.</p></remark>
</revision>
<revision>
<version>0.26</version>
<date>2009-03-09</date>
@ -348,7 +354,7 @@ INITIATOR RESPONDER
</tr>
<tr>
<td>generation</td>
<td>An index, starting at 0, that enables the parties to keep track of updates to the candidate throughout the life of the session.</td>
<td>An index, starting at 0, that enables the parties to keep track of updates to the candidate throughout the life of the session. For details, see the <link url='#protocol-restart'>ICE Restarts</link> section of this document.</td>
<td>N/A</td>
<td>0</td>
</tr>
@ -561,83 +567,6 @@ INITIATOR NAT RESPONDER
<p>(In accordance with Jingle core, the responder will also acknowledge the transport-info message.)</p>
<p>In the unlikely event that one of the parties determines that it cannot establish connectivity even after sending and checking lower-priority candidates, it SHOULD terminate the session as described in <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 transport-replace message with the changed candidate information, where the value of the 'generation' attribute 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.lit/orchard'
id='kl23fs71'
to='juliet@capulet.lit/balcony'
type='set'>
<jingle xmlns='urn:xmpp:jingle:1'
action='transport-replace'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content'>
<transport xmlns='urn:xmpp:jingle:transports:ice-udp:1'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
<candidate component='1'
foundation='1'
generation='1'
id='y3s2b30v3r'
ip='192.0.2.3'
network='1'
port='45665'
priority='1694498815'
protocol='udp'
type='srflx'/>
</transport>
</content>
</jingle>
</iq>
]]></example>
<p>The recipient then acknowledges receipt.</p>
<example caption="Recipient acknowledges transport-replace"><![CDATA[
<iq from='juliet@capulet.lit/balcony'
id='kl23fs71'
to='romeo@montague.lit/orchard'
type='result'/>
]]></example>
<p>If the transport-replace is acceptable, the recipient then sends a transport-accept message (if not, the recipient sends a transport-reject message).</p>
<example caption="Responder definitively accepts the replaced candidate"><![CDATA[
<iq from='juliet@capulet.lit/balcony'
id='jh329df7'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:1'
action='transport-accept'
initiator='romeo@montague.lit/orchard'
responder='juliet@capulet.lit/balcony'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content'>
<transport xmlns='urn:xmpp:jingle:transports:ice-udp:1'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='9uB6'>
<candidate component='1'
foundation='1'
generation='1'
id='y3s2b30v3r'
ip='192.0.2.3'
network='1'
port='45665'
priority='1694498815'
protocol='udp'
type='srflx'/>
</transport>
</content>
</jingle>
</iq>
]]></example>
<p>The initiator then acknowledges the responder's acceptance:</p>
<example caption="Initiator acknowledges content acceptance"><![CDATA[
<iq from='romeo@montague.lit/orchard'
id='jh329df7'
to='juliet@capulet.lit/balcony'
type='result'/>
]]></example>
<p>The parties then use the modified candidate in subsequent communications.</p>
</section2>
<section2 topic='Negotiating a New Candidate' anchor='protocol-renegotiate'>
<p>Even after media has begun to flow, either party MAY continue to send additional candidates to the other party (e.g., because the user agent has become aware of a new media proxy or network interface card). Such candidates are shared by sending a transport-info message.</p>
<example caption="Initiator sends a subsequent candidate"><![CDATA[
@ -677,6 +606,46 @@ INITIATOR NAT RESPONDER
]]></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, MAY then use the new candidate in subsequent communications.</p>
</section2>
<section2 topic='ICE Restarts' anchor='protocol-restarts'>
<p>At any time, either party MAY restart the process of ICE negotiation by sending a candidate with a 'generation' value that is greater than the previous generation of candidates; when it does so, it MUST generate new values for the 'pwd' and 'ufrag' attributes, consistent with the definition of an ICE restart in Section 9.1.1.1 of &icecore;. As explained in &icecore;, typically the ICE negotiation would be restarted to change the media target (e.g., an IP address change for one of the parties) and certain third-party-call-control scenarios.</p>
<example caption="Initiator restarts ICE negotiation"><![CDATA[
<iq from='romeo@montague.lit/orchard'
id='kl23fs71'
to='juliet@capulet.lit/balcony'
type='set'>
<jingle xmlns='urn:xmpp:jingle:1'
action='transport-info'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content'>
<transport xmlns='urn:xmpp:jingle:transports:ice-udp:1'
pwd='bv71hdn38hgb39hf6xlk33'
ufrag='g7qs'>
<candidate component='1'
foundation='1'
generation='1'
id='y3s2b30v3r'
ip='192.0.2.3'
network='1'
port='45665'
priority='1694498815'
protocol='udp'
type='srflx'/>
</transport>
</content>
</jingle>
</iq>
]]></example>
<p>The recipient then acknowledges receipt.</p>
<example caption="Recipient acknowledges transport-info"><![CDATA[
<iq from='juliet@capulet.lit/balcony'
id='kl23fs71'
to='romeo@montague.lit/orchard'
type='result'/>
]]></example>
<p>The parties would then exchange new candidates to renegotiate connectivity. However, the paties can continue to send media using the existing candidate-in-use while ICE is being renegotiated.</p>
<p>In order to use one of the newly-negotiated candidates, the parties would use the transport-replace action as explained in the <link url='#protocol-renegotiate'>Negotiating a New Candidate</link> section of this document.</p>
</section2>
</section1>
<section1 topic='Fallback to Raw UDP' anchor='fallback'>