[tor-commits] [flashproxy/master] Use read_client_registrations in facilitator.cgi.

infinity0 at torproject.org infinity0 at torproject.org
Mon Oct 28 14:47:41 UTC 2013


commit 6eccd89f1c83b98047e47dd9d9db04a668b1d084
Author: David Fifield <david at bamsoftware.com>
Date:   Thu Oct 17 04:38:05 2013 -0700

    Use read_client_registrations in facilitator.cgi.
    
    This takes care of the other registration mechanism (apart from
    facilitator-reg-daemon). Now we're using the
    	client=<addr:port>&client-transport=websocket
    style, rather than the
    	client-websocket=<addr:port>
    style.
    
    This is basically the same as the facilitator.cgi part of
    "New unified url-param syntax for both facilitator responses and client registrations."
    https://github.com/infinity0/flashproxy/commit/0377b7aba8026710bd2168b6ceb31d3937c164b0
---
 facilitator/facilitator.cgi |   31 +++++++++----------------------
 1 file changed, 9 insertions(+), 22 deletions(-)

diff --git a/facilitator/facilitator.cgi b/facilitator/facilitator.cgi
index 05286fd..47497b0 100755
--- a/facilitator/facilitator.cgi
+++ b/facilitator/facilitator.cgi
@@ -92,7 +92,8 @@ def do_post():
     # Old style client registration:
     #   client=1.2.3.4:9000
     # New style client registration:
-    #   client-websocket=1.2.3.4:9000&client-obfs3|websocket=1.2.3.4:10000
+    #   client-addr=1.2.3.4:9000&client-transport=websocket
+    #   client-addr=1.2.3.4:9090&client-transport=obfs3|websocket
 
     if path_info != "/":
         exit_error(400)
@@ -101,29 +102,15 @@ def do_post():
     # them look like "client-websocket=1.2.3.4:9000". We then split
     # all those items and send them as separate registrations to the
     # facilitator.
-    for key in fs.keys():
-        if key != "client" and not key.startswith("client-"):
-            continue
-
-        if key == "client": # reg without transport info -- default to websocket.
-            transport = "websocket"
-        else: # reg with transport info -- get the "websocket" part out of "client-websocket".
-            transport = key[len("client-"):]
-
-        # Get the "1.2.3.4:9000" part of "client-websocket=1.2.3.4:9000".
-        client_spec = fs[key].value.strip()
-        try:
-            client_addr = fac.parse_addr_spec(client_spec, defhost=remote_addr[0])
-        except ValueError:
-            exit_error(400)
-
-        # XXX what if previous registrations passed through
-        # successfully, but the last one failed and called
-        # exit_error()?
+    try:
+        regs = list(fac.read_client_registrations(sys.stdin.read(), defhost=remote_addr[0]))
+    except ValueError:
+        exit_error(400)
 
+    for reg in regs:
         # XXX need to link these registrations together, so that
-        # when one is answerered the rest are invalidated.
-        if not fac.put_reg(FACILITATOR_ADDR, client_addr, transport):
+        # when one is answerered (or errors) the rest are invalidated.
+        if not fac.put_reg(FACILITATOR_ADDR, reg.addr, reg.transport):
             exit_error(500)
 
     print """\





More information about the tor-commits mailing list