- From: Jan-Ivar Bruaroey <jib@mozilla.com>
- Date: Wed, 08 Jan 2014 14:38:11 -0500
- To: Harald Alvestrand <harald@alvestrand.no>, public-webrtc@w3.org
- Message-ID: <52CDA923.7050009@mozilla.com>
On 1/6/14 4:55 PM, Harald Alvestrand wrote:
> On 01/06/2014 05:06 PM, Eric Rescorla wrote:
>> http://dev.w3.org/2011/webrtc/editor/webrtc.html#dictionary-rtcconfiguration-members
>>
>> has:
>>
>> dictionary RTCIceServer {
>> (DOMString or sequence<DOMString>) urls;
>> DOMString? username = null;
>> DOMString? credential;
>> };
>>
>> AFAICT, username isn't really optional for TURN servers (RFC 5766 says):
>>
>> [RFC5389] specifies an authentication mechanism called the long-term
>> credential mechanism. TURN servers and clients MUST implement this
>> mechanism. The server MUST demand that all requests from the client
>> be authenticated using this mechanism, or that a equally strong or
>> stronger mechanism for client authentication is used.
>>
>> (and username and credential should have the same status in any case).
>>
>> I suspect we either need two classes (one for TURN and one for STUN)
>> or explanatory text saying that you need to provide this for TURN.
>
> Explanatory text seems like the right path to me. Since it contains
> URLs, the syntax doesn't constrain it to be TURN or STUN, and the
> quoted text does seem to make it possible that there will be other
> ways to do this authentication.
+1. A separate class wouldn't do any good because dictionary members are
inherently optional.
I think the prose should say UAs MUST check and throw for TURN.
While we're looking at this...
Having username and credential be nullable (i.e. explicitly supporting
the passing-in of the value null) seems unnecessary and a mistake. Is it
too late to tighten this up as follows?
dictionary RTCIceServer {
(DOMString or sequence<DOMString>) urls;
DOMString username;
DOMString credential;
};
If that looks wrong, consider it really being like this:
dictionary RTCIceServer {
optional (DOMString or sequence<DOMString>) urls;
optional DOMString username;
optional DOMString credential;
};
Which is what it essentially is (optional is inherent in dictionary
members).
A common confusion in webidl is between:
Optional (the keyword 'optional' or anything in a dictionary): The
ability to omit.
Nullable (the '?' operator): Adds null to the values acceptable to pass
in or hold.
Default (the '=' operator, valid only with optional): in practice
removes implementer burden/ability to check whether something was passed in.
.: Jan-Ivar :.
Received on Wednesday, 8 January 2014 19:38:41 UTC