- From: Justin Uberti <juberti@google.com>
- Date: Mon, 18 Jun 2012 21:21:37 -0400
- To: Eric Rescorla <ekr@rtfm.com>
- Cc: public-webrtc@w3.org
- Message-ID: <CAOJ7v-0e-nULQta=H8dBJ5Y34J5LA30rbGuAmnoz5zkK=zMJDQ@mail.gmail.com>
On Mon, Jun 18, 2012 at 7:56 PM, Eric Rescorla <ekr@rtfm.com> wrote: > On Fri, Jun 15, 2012 at 11:21 AM, Justin Uberti <juberti@google.com> > wrote: > > [TL;DR - see proposed IceCandidate declaration at end of this email] > > > > An IceCandidate needs to contain an a=candidate line and an indication of > > which m= line it should be associated with. The m= indication is needed > when > > using trickle candidates, so that senders or candidate messages can > > construct the proper protocol representation, and receivers of candidate > > messages can know which ICE session the ICE candidate should be used in. > > > > For example, > > see http://xmpp.org/extensions/xep-0176.html#protocol-renegotiate, > where the > > following candidate XML stanza is used; it must be possible to generate > this > > stanza from an IceCandidate. > > > > <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='0' > > > > > > id='m3110wc4nd' > > > > > > ip='2001:db8::9:1' > > > > > > network='0' > > > > > > port='9001' > > > > > > priority='21149780477' > > > > > > protocol='udp' > > > > > > type='host'/> > > > > > > </transport> > > </content> > > > > The info in <candidate> will come from the IceCandidate.candidate line, > but > > content.name and transport.pwd/transport.ufrag will need to come from > > elsewhere. If IceCandidate has the a=mid: value that identifies a media > > block, this a=mid: value can be used as the content.name, and > > transport.pwd/transport.ufrag can be looked up from the a=ice-ufrag, and > > a=ice-pwd fields present in the corresponding SessionDescription media > > block. (A SessionDescription.mediaBlock(id) method would be very helpful > > here). > > Note that RFC 5245 also permits a session-level ufrag/passwd. I assume > that would still be OK? > Good point. The app would have to look up the credentials from the session level if they weren't present at the media level. > > > > Therefore, I suggest the following declaration of IceCandidate. I think > it > > is useful for this to be an object as opposed to a dictionary, since in > the > > future we could add accessors to get at all the various candidate fields > > (component, foundation, etc). > > > > [Constructor (DOMString mediaId, DOMString candidate)] > > > > // e.g. ("audio", <a=candidate>) > > > > [Constructor (DOMString json)] > > > > // e.g. ("{ "mediaId": "audio", "candidate": <a=candidate> }") > > interface IceCandidate { > > > > attribute DOMString mediaId; // corresponds to a=mid: > > attribute DOMString candidate; // corresponds to a=candidate: > > stringifier DOMString (); // to JSON > > }; > > This looks generally fine. > > -Ekr >
Received on Tuesday, 19 June 2012 01:22:26 UTC