[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