[tor-commits] [snowflake/master] Initial broker registration of browser proxies

arlo at torproject.org arlo at torproject.org
Thu Jan 21 20:36:18 UTC 2016


commit 28e557fb4368878134c345f0951d8ee824525617
Author: Serene Han <keroserene+git at gmail.com>
Date:   Wed Jan 20 16:16:20 2016 -0800

    Initial broker registration of browser proxies
    - broker.coffee contains the xhr stuff
    - COR enabled on the go broker
    - POST body reflection works
---
 broker/snowflake-broker.go |    2 +-
 proxy/Cakefile             |    1 +
 proxy/broker.coffee        |   49 ++++++++++++++++++++++++++++++++++++++++++++
 proxy/snowflake.coffee     |   13 ++++++------
 4 files changed, 57 insertions(+), 8 deletions(-)

diff --git a/broker/snowflake-broker.go b/broker/snowflake-broker.go
index 6bcff63..4c0e62f 100644
--- a/broker/snowflake-broker.go
+++ b/broker/snowflake-broker.go
@@ -48,7 +48,7 @@ func regHandler(w http.ResponseWriter, r *http.Request) {
 		return
 		log.Println("Invalid data.")
 	}
-
+	w.Header().Set("Access-Control-Allow-Origin", "*")
 	// TODO: Get browser snowflake to talkto this appengine instance
 	// so it can reply with an answer, and not just the offer again :)
 	// TODO: Real broker which matches clients and snowflake proxies.
diff --git a/proxy/Cakefile b/proxy/Cakefile
index d657e17..499de94 100644
--- a/proxy/Cakefile
+++ b/proxy/Cakefile
@@ -7,6 +7,7 @@ FILES = [
   'util.coffee'
   'proxypair.coffee'
   'websocket.coffee'
+  'broker.coffee'
   'snowflake.coffee'
 ]
 FILES_TEST = [
diff --git a/proxy/broker.coffee b/proxy/broker.coffee
new file mode 100644
index 0000000..fb2add9
--- /dev/null
+++ b/proxy/broker.coffee
@@ -0,0 +1,49 @@
+###
+Communication with the snowflake broker.
+
+Browser snowflakes must register with the broker in order
+to get assigned to clients.
+###
+
+# Represents a broker running remotely.
+class Broker
+  # When interacting with the Broker, snowflake must generate a unique session
+  # ID so the Broker can keep track of which signalling channel it's speaking
+  # to.
+  constructor: (@url) ->
+    log 'Using Broker at ' + @url
+
+  # Snowflake registers with the broker using an HTTP POST request, and expects
+  # a response from the broker containing some client offer
+  register: ->
+    # base_url = this.fac_url.replace(/\?.*/, "");
+    # url = base_url + "?" + build_query_string(params);
+    xhr = new XMLHttpRequest()
+    try
+      xhr.open 'POST', @url
+      xhr
+    catch err
+      ###
+      An exception happens here when, for example, NoScript allows the domain on
+      which the proxy badge runs, but not the domain to which it's trying to
+      make the HTTP request. The exception message is like "Component returned
+      failure code: 0x805e0006 [nsIXMLHttpRequest.open]" on Firefox.
+      ###
+      log 'Broker: exception while connecting: ' + err.message
+      return
+
+    # xhr.responseType = 'text'
+    xhr.onreadystatechange = ->
+      if xhr.DONE == xhr.readyState
+        if 200 == xhr.status
+          log 'Broker: success'
+          log 'Response: ' + xhr.responseText
+          # @fac_complete xhr.responseText
+        else
+          log 'Broker error ' + xhr.status + ' - ' + xhr.statusText
+
+    xhr.send 'snowflake-testing'
+
+  sendAnswer: (answer) ->
+    log 'Sending answer to broker.'
+    log answer
diff --git a/proxy/snowflake.coffee b/proxy/snowflake.coffee
index a7f64a8..ac59419 100644
--- a/proxy/snowflake.coffee
+++ b/proxy/snowflake.coffee
@@ -8,6 +8,7 @@ Assume that the webrtc client plugin is always the offerer, in which case
 this must always act as the answerer.
 ###
 DEFAULT_WEBSOCKET = '192.81.135.242:9901'
+DEFAULT_BROKER = 'https://snowflake-reg.appspot.com/reg/test'
 DEFAULT_PORTS =
   http:  80
   https: 443
@@ -207,15 +208,10 @@ Signalling =
 
 log = (msg) ->  # Log to the message window.
   console.log msg
-  # Scroll to latest
-  if $msglog
+  if $msglog                        # Scroll to latest
     $msglog.value += msg + '\n'
     $msglog.scrollTop = $msglog.scrollHeight
 
-welcome = ->
-  log '== snowflake browser proxy =='
-  log 'Input desired relay address:'
-
 init = ->
   $msglog = document.getElementById('msglog')
   $msglog.value = ''
@@ -227,8 +223,11 @@ init = ->
   $input.focus()
   $input.onkeydown = (e) -> $send.onclick() if 13 == e.keyCode  # enter
 
+  log '== snowflake browser proxy =='
   snowflake = new Snowflake()
   window.snowflake = snowflake
-  welcome()
+  broker = new Broker DEFAULT_BROKER
+  broker.register()
+  log 'Input desired relay address:'
 
 window.onload = init if window



More information about the tor-commits mailing list