broker successfully passing client offers to snowflake proxy (#1)

This commit is contained in:
Serene Han 2016-01-21 11:40:42 -08:00
parent 0cd6852ad0
commit 7081e6328c
3 changed files with 75 additions and 46 deletions

View file

@ -5,43 +5,51 @@ Browser snowflakes must register with the broker in order
to get assigned to clients.
###
STATUS_OK = 200
STATUS_GATEWAY_TIMEOUT = 504
# Represents a broker running remotely.
class Broker
clients: 0
# 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
clients = 0
# 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
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
# a response from the broker containing some client offer.
# TODO: Actually support multiple clients.
getClientOffer: ->
new Promise (fulfill, reject) =>
xhr = new XMLHttpRequest()
try
xhr.open 'POST', @url
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.onreadystatechange = ->
return if xhr.DONE != xhr.readyState
switch xhr.status
when STATUS_OK
fulfill xhr.responseText # Should contain offer.
when STATUS_GATEWAY_TIMEOUT
reject 'Timed out waiting for a client to serve. Retrying...'
else
log 'Broker ERROR: Unexpected ' + xhr.status +
' - ' + xhr.statusText
# xhr.responseType = 'text'
xhr.onreadystatechange = ->
if xhr.DONE == xhr.readyState
log 'Broker: ' + xhr.status
if 200 == xhr.status
log 'Response: ' + xhr.responseText
log xhr
else
log 'Broker error ' + xhr.status + ' - ' + xhr.statusText
xhr.send 'snowflake-testing'
log "Broker: sent a registration message, waiting for reply..."
xhr.send 'snowflake-testing'
log "Broker: polling for client offer..."
sendAnswer: (answer) ->
log 'Sending answer to broker.'