W3C home > Mailing lists > Public > public-webrtc@w3.org > June 2014

Re: What should happen to the ICE gathering state when iceTransports is changed?

From: Justin Uberti <juberti@google.com>
Date: Sun, 8 Jun 2014 18:45:10 -0700
Message-ID: <CAOJ7v-3xnW94GW3vYgPP2ymVUh+suUode9ckvJizntp7N7SQhA@mail.gmail.com>
To: "Makaraju, Maridi Raju (Raju)" <Raju.Makaraju@alcatel-lucent.com>
Cc: "public-webrtc@w3.org" <public-webrtc@w3.org>
What you are suggesting is actually #3 in my list of options - the
gathering sequence with the new .iceTransports doesn't happen until the
next ICE restart (which is done via createOffer, or a remote ICE restart
request).

#1 would result in the local candidates being emitted immediately.


On Sun, Jun 8, 2014 at 5:16 PM, Makaraju, Maridi Raju (Raju) <
Raju.Makaraju@alcatel-lucent.com> wrote:

>
> >Consider the scenario where .iceTransports is set to 'relay', and so
> relay gathering >occurs first; non-relay gathering only occurs after
> .iceTransports is changed to 'all'. This is the scenario where a callee
> wants to avoid disclosing their location (real ip address) until accepting
> the call.
> >The flow goes something like:new PC({iceTransports:
> 'relay'})setRD(offer)createAnswersetLD(answer)onicegatheringstatechange(gathering)onicecandidate(relay1)onicecandidate(relay2)A:
> setConfiguration({iceTransports:
> 'all'})onicecandidate(null)onicegatheringstatechange(complete)B:
> setConfiguration({iceTransports: 'all'})
> >In case A, we could definitely release the gathered ICE candidates
> immediately, with no issues. But in case B, does it make sense to emit
> them, since gathering has completed?
> >Options:1) Emit them. No state change occurs. You called this API, you
> deal with it. (Simple, but may cause issues, especially if
> onicecandidate(null) has triggered an end-of-candidates signal to the
> remote side.)
> >2) Transition back to gathering, emit the candidates (which will happen
> immediately, necessarily), go back to complete. (Changes the meaning of a
> "complete"->"gathering" transition, which previously only occurred on a new
> m= line being added, or an ICE restart. May have the same issues as above,
> with end-of-candidates)
> >3) No candidates are emitted, no state change occurs. The new type of
> candidates is gathered on the next ICE restart. (Complicates the use case
> above; remote side would need to re-offer with ice restart after accepting
> the call. But no signaling issues, and allows changing iceTransports to a
> more restrictive type.)
> >
> <Raju>
>
> IMHO Option 1 more appropriate and it fits with the overall design of the
> APIs; i.e. if the end of ICE was already triggered then, change gathering
> state, emit the candidates but no further action (like doing ICE checks or
> updating local SDP) should be taken by browser until user calls
> createOffer(). If end of ICE is not triggered then newly emitted candidates
> will happily piggyback on createOffer (or tricke ice).
>
> From my understanding changing iceTransports share similar API behavior as
> two, but not limited, use cases below.
> - changing remote destination via setRD, which triggers ice restart.
> - adding a new media stream/track. Triggers ice restart for that stream.
>
> In any of these cases I see the following flow:
> 1. user calls a trigger API (setConfig for iceTransport change, setRD for
> remote media change, addTrack/Stream to add a new stream/track).
> 2. Browser processes the API. While doing so it won't disrupt the current
> media. This processing includes emitting new candidates, preparing for ice
> restart, adding stream/track etc. At the end browser does callbacks to
> inform the applications about these changes.
> 3. At this point it is up to the application to make the next API call to
> follow up on the earlier request. This API could be
> createOffer()/createAnswer()/setLD()/setRD() etc. If the application does
> not do this then the earlier "temp" changes done by browser will remain
> temp and wait until user calls relevant APIs. Earlier media configuration
> will remain active until the sequence is completed (via createAnswer/setLD
> or createOffer/setLD/setRD).
>
> If application fails to do createOffer() while adding "relay" transport
> then next time createOffer() is done to add a track/stream, for example,
> the new candidates will be made part of the new SDP.
>
> To summarize, application is in control and as Justin mentioned "You
> called this API, you deal with it"; and "You have to follow up with it".
>
> </Raju>
>
> BR
> Raju
>
Received on Monday, 9 June 2014 01:45:57 UTC

This archive was generated by hypermail 2.3.1 : Monday, 23 October 2017 15:19:40 UTC