device; hixie: peer-to-peer ideas: make the configuration stuff async and repeatable, and make it possible to give the server object details of some third-party server that does routing or whatnot. (whatwg r4858)

device; hixie: peer-to-peer ideas: make the configuration stuff async
and repeatable, and make it possible to give the server object details
of some third-party server that does routing or whatnot. (whatwg r4858)

http://dev.w3.org/cvsweb/html5/html-device/Overview.html?r1=1.26&r2=1.27&f=h
http://html5.org/tools/web-apps-tracker?from=4857&to=4858

===================================================================
RCS file: /sources/public/html5/html-device/Overview.html,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- Overview.html 5 Mar 2010 22:00:55 -0000 1.26
+++ Overview.html 22 Mar 2010 22:40:55 -0000 1.27
@@ -283,7 +283,7 @@
    <h1>HTML Device</h1>
    <h2 class="no-num no-toc" id="an-addition-to-html">An addition to HTML</h2>
 
-   <h2 class="no-num no-toc" id="editor-s-draft-5-march-2010">Editor's Draft 5 March 2010</h2>
+   <h2 class="no-num no-toc" id="editor-s-draft-22-march-2010">Editor's Draft 22 March 2010</h2>
    <dl><dt>Latest Published Version:</dt>
     <dd><a href="http://www.w3.org/TR/html-device/">http://www.w3.org/TR/html-device/</a></dd>
     <dt>Latest Editor's Draft:</dt>
@@ -362,7 +362,7 @@
   specification's progress along the W3C Recommendation
   track.
 
-  This specification is the 5 March 2010 Editor's Draft.
+  This specification is the 22 March 2010 Editor's Draft.
   </p><!-- UNDER NO CIRCUMSTANCES IS THE PRECEDING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST --><!-- relationship to other work (required) --><p>This specification is part of <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">a
   larger specification</a> being produced by the <a href="http://www.whatwg.org/">WHATWG</a>.
   <!-- UNDER NO CIRCUMSTANCES IS THE FOLLOWING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST -->
@@ -472,36 +472,97 @@
   <code><a href="#devices">device</a></code> element to allow reviewers to look at it.<pre class="idl">[NoInterfaceObject]
 interface <dfn id="abstractpeer">AbstractPeer</dfn> {
   void sendText(in DOMString text);
-  attribute Function ontext; // receiving
+  attribute <span>Function</span> ontext; // receiving
 
   void sendBitmap(in HTMLImageElement image);
-  attribute Function onbitmap; // receiving
+  attribute <span>Function</span> onbitmap; // receiving
 
   void sendFile(in File file);
-  attribute Function onfile; // receiving
+  attribute <span>Function</span> onfile; // receiving
 
-  attribute Stream localStream; // video/audio to send
-  readonly attribute Stream remoteStream; // video/audio from remote peer
-  attribute Function onstreamchange; // when the remote peer changes whether the video is being sent or not
+  attribute <a href="#stream">Stream</a> localStream; // video/audio to send
+  readonly attribute <a href="#stream">Stream</a> remoteStream; // video/audio from remote peer
+  attribute <span>Function</span> onstreamchange; // when the remote peer changes whether the video is being sent or not
 
-  attribute Function onconnect; // called when the connection is established
-  attribute Function ondisconnect;
+  attribute <span>Function</span> onconnect;
+  attribute <span>Function</span> onerror;
+  attribute <span>Function</span> ondisconnect;
 };
 
-[Constructor]
+[Constructor(in DOMString serverConfiguration)]
 interface <dfn id="peertopeerserver">PeerToPeerServer</dfn> : <a href="#abstractpeer">AbstractPeer</a> {
-  DOMString <span title="dom-PeerToPeerServer-getAddress">getAddress</span>(); // returns a string that encodes all the various ways to connect to this peer
-
-  attribute Function onincoming; // incoming call detected
+  void <span title="dom-PeerToPeerServer-getClientConfiguration">getClientConfiguration</span>(in <a href="#peertopeerconfigurationcallback">PeerToPeerConfigurationCallback</a> callback);
+<!--(doesn't make much sense to not accept it, after going to all the effort of setting it up)
+  attribute <span>Function</span> onincoming; // incoming call detected
   void accept(); // accepts incoming call
   void reject(in optional DOMString message); // explicitly rejects incoming call
-
+-->
   void close(); // disconnects and stops listening
 };
 
-[Constructor(in DOMString address)] // pass it the result of getAddress() from the other peer
+[Constructor]
 interface <dfn id="peertopeerclient">PeerToPeerClient</dfn> : <a href="#abstractpeer">AbstractPeer</a> {
-};</pre><p class="XXX">...<h2 class="no-num" id="references">References</h2><!--REFS--><p>All references are normative unless marked "Non-normative".</p><!-- Dates are only included for standards older than the Web,
+  void <span title="dom-PeerToPeerClient-addConfiguration">addConfiguration</span>(in DOMString configuration);
+  void close(); // disconnects
+};
+
+[Callback=FunctionOnly, NoInterfaceObject]
+interface <dfn id="peertopeerconfigurationcallback">PeerToPeerConfigurationCallback</dfn> {
+  void <span title="dom-PeerToPeerConfigurationCallback-handleEvent">handleEvent</span>(in <a href="#peertopeerserver">PeerToPeerServer</a> server, in DOMString configuration);
+};</pre><p class="XXX">...<div class="XXX">
+
+   <p>This relies on some currently hypothetical other standard to
+   define:</p>
+
+   <ul><li>The format of server configuration strings.
+    <li>The format of client configuration strings.
+    <li>The protocols that servers and clients use to talk to third-party servers mentioned in the server configuration strings.
+    <li>The protocols that servers and clients use to talk to each other.
+   </ul></div><div class="example">
+
+   <p>Server:</p>
+
+   <pre>var serverConfig = ...; // configuration string obtained from server
+// contains details such as the IP address of a server that can speak some
+// protocol to help the client determine its public IP address, route packets
+// if necessary, etc.
+
+var local = new PeerToPeerServer(serverConfig);
+local.getClientConfiguration(function (configuration) {
+  if (configuration != '') {
+    ...; // send configuration to other peer using out-of-band mechanism
+  } else {
+    // we've exhausted our options; wait for connection
+  }
+});</pre>
+
+   <p>Client:</p>
+
+   <pre>var local = new PeerToPeerClient();
+function ... (configuration) {
+  // called whenever we get configuration information out-of-band
+  local.addConfiguration(configuration);
+}</pre>
+
+   <p>Both client and server:</p>
+
+   <pre>local.onconnect = function (event) {
+  // we are connected!
+  local.sendText('Hello');
+  local.localStream = ...; // send video
+  local.onstreamchange = function (event) {
+    // receive video
+    // (videoElement is some &lt;video&gt; element)
+    videoElement.src = local.remoteStream.URL;
+  };
+};</pre>
+
+  </div><p class="warning">To prevent network sniffing from allowing a
+  fourth party to establish a connection to the
+  <code><a href="#peertopeerserver">PeerToPeerServer</a></code> using the information sent out-of-band
+  to the <code><a href="#peertopeerclient">PeerToPeerClient</a></code> and thus spoofing the client,
+  the configuration information should always be transmitted using an
+  encrypted connection.<h2 class="no-num" id="references">References</h2><!--REFS--><p>All references are normative unless marked "Non-normative".</p><!-- Dates are only included for standards older than the Web,
   because the newer ones keep changing. --><dl><dt id="refsFILEAPI">[FILEAPI]</dt>
    <dd><cite><a href="http://dev.w3.org/2006/webapi/FileUpload/publish/FileAPI.html">File
    API</a></cite>, A. Ranganathan. W3C.</dd>

Received on Monday, 22 March 2010 22:41:44 UTC