commit 28e557fb4368878134c345f0951d8ee824525617 Author: Serene Han keroserene+git@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