commit 1cdf6a435cbb00ef341fb847b98dda2f63a4f399
Author: Serene Han <keroserene+...@gmail.com>
Date:   Fri Jan 29 09:09:37 2016 -0800

    CORS preflight func, and consts
---
 broker/broker.go | 34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/broker/broker.go b/broker/broker.go
index dda20cb..ae039a5 100644
--- a/broker/broker.go
+++ b/broker/broker.go
@@ -18,10 +18,14 @@ import (
        "time"
 )
 
+const (
+       ClientTimeout = 10
+       ProxyTimeout  = 10
+)
+
 // This is minimum viable client-proxy registration.
 // TODO(#13): better, more secure registration corresponding to what's in
 // the python flashproxy facilitator.
-
 var snowflakes *SnowflakeHeap
 
 // Map keeping track of snowflakeIDs required to match SDP answers from
@@ -54,6 +58,16 @@ func ipHandler(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte(remoteAddr))
 }
 
+// Return early if it's CORS preflight.
+func isPreflight(w http.ResponseWriter, r *http.Request) bool {
+       w.Header().Set("Access-Control-Allow-Origin", "*")
+       w.Header().Set("Access-Control-Allow-Headers", "Origin, X-Session-ID")
+       if "OPTIONS" == r.Method {
+               return true
+       }
+       return false
+}
+
 /*
 Expects a WebRTC SDP offer in the Request to give to an assigned
 snowflake proxy, which responds with the SDP answer to be sent in
@@ -70,7 +84,7 @@ func clientHandler(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Access-Control-Allow-Headers", "X-Session-ID")
 
        // Find the most available snowflake proxy, and pass the offer to it.
-       // TODO: Needs improvement.
+       // TODO: Needs improvement - maybe shouldn'
        snowflake := heap.Pop(snowflakes).(*Snowflake)
        if nil == snowflake {
                w.WriteHeader(http.StatusServiceUnavailable)
@@ -87,7 +101,7 @@ func clientHandler(w http.ResponseWriter, r *http.Request) {
                // Only remove from the snowflake map once the answer is set.
                delete(snowflakeMap, snowflake.id)
 
-       case <-time.After(time.Second * 10):
+       case <-time.After(time.Second * ClientTimeout):
                w.WriteHeader(http.StatusGatewayTimeout)
                w.Write([]byte("timed out waiting for answer!"))
        }
@@ -97,13 +111,9 @@ func clientHandler(w http.ResponseWriter, r *http.Request) {
 For snowflake proxies to request a client from the Broker.
 */
 func proxyHandler(w http.ResponseWriter, r *http.Request) {
-       w.Header().Set("Access-Control-Allow-Origin", "*")
-       w.Header().Set("Access-Control-Allow-Headers", "Origin, X-Session-ID")
-       // For CORS preflight.
-       if "OPTIONS" == r.Method {
+       if isPreflight(w, r) {
                return
        }
-
        id := r.Header.Get("X-Session-ID")
        body, err := ioutil.ReadAll(r.Body)
        if nil != err {
@@ -125,7 +135,7 @@ func proxyHandler(w http.ResponseWriter, r *http.Request) {
                log.Println("Passing client offer to snowflake.")
                w.Write(offer)
 
-       case <-time.After(time.Second * 10):
+       case <-time.After(time.Second * ProxyTimeout):
                // This snowflake is no longer available to serve clients.
                heap.Remove(snowflakes, snowflake.index)
                delete(snowflakeMap, snowflake.id)
@@ -139,13 +149,9 @@ an offer from proxyHandler to respond with an answer in an 
HTTP POST,
 which the broker will pass back to the original client.
 */
 func answerHandler(w http.ResponseWriter, r *http.Request) {
-       w.Header().Set("Access-Control-Allow-Origin", "*")
-       w.Header().Set("Access-Control-Allow-Headers", "X-Session-ID")
-       // For CORS preflight.
-       if "OPTIONS" == r.Method {
+       if isPreflight(w, r) {
                return
        }
-
        id := r.Header.Get("X-Session-ID")
        snowflake, ok := snowflakeMap[id]
        if !ok || nil == snowflake {

_______________________________________________
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to