commit 33e513526cc8541afb9345e14c2c9a0abf9ffcfb Author: George Kadianakis desnacked@riseup.net Date: Thu Sep 19 13:27:08 2013 +0300
GET command: Do "TRANSPORT=obfs2 TRANPSORT=obfs3" instead of "TRASPORTS=obfs2,obfs3". --- facilitator/fac.py | 23 +++++++++++++++++++++-- facilitator/facilitator | 9 ++++----- 2 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/facilitator/fac.py b/facilitator/fac.py index f6fb43c..5e1737a 100644 --- a/facilitator/fac.py +++ b/facilitator/fac.py @@ -206,11 +206,22 @@ def parse_transaction(line): return command, tuple(pairs)
def param_first(key, params): + """Search 'params' for 'key' and return the first value that + occurs. If 'key' was not found, return None.""" for k, v in params: if key == k: return v return None
+def param_getlist(key, params): + """Search 'params' for 'key' and return a list with its values. If + 'key' did not appear in 'params', return the empty list.""" + result = [] + for k, v in params: + if key == k: + result.append(v) + return result + def quote_string(s): chars = [] for c in s: @@ -265,9 +276,17 @@ def get_reg(facilitator_addr, proxy_addr, transport_list): mapped to the value "" if there are no registrations available for proxy_addr. Raises an exception otherwise.""" f = fac_socket(facilitator_addr) - transports = ",".join(transport_list) # xxx wtf + + # Form a list (in transact() format) with the transports that we + # should send to the facilitator. Then pass that list to the + # transact() function. + # For example, TRANSPORT=obfs2 TRANSPORT=obfs3. + transports = [] + for transport in transport_list: + transports += ("TRANSPORT", transport) + try: - command, params = transact(f, "GET", ("FROM", format_addr(proxy_addr)), ("TRANSPORTS", transports)) + command, params = transact(f, "GET", ("FROM", format_addr(proxy_addr)), transports) finally: f.close() response = {} diff --git a/facilitator/facilitator b/facilitator/facilitator index e7e0325..d674769 100755 --- a/facilitator/facilitator +++ b/facilitator/facilitator @@ -274,7 +274,7 @@ class Handler(SocketServer.StreamRequestHandler): print >> self.wfile, "ERROR"
# Handle a GET request (got flashproxy poll; need to return a proper client registration) - # Example: GET FROM="3.3.3.3:3333" TRANSPORTS="websocket,webrtc" + # Example: GET FROM="3.3.3.3:3333" TRANSPORT="websocket" TRANSPORT="webrtc" def do_GET(self, params): proxy_spec = fac.param_first("FROM", params) if proxy_spec is None: @@ -288,12 +288,11 @@ class Handler(SocketServer.StreamRequestHandler): self.send_error() return False
- transports = fac.param_first("TRANSPORTS", params) - if transports is None: - log(u"TRANSPORTS missing FROM param") + transport_list = fac.param_getlist("TRANSPORT", params) + if not transport_list: + log(u"TRANSPORT missing FROM param") self.send_error() return False - transport_list = transports.split(",") # XXX messy
try: reg = get_reg_for_proxy(proxy_addr, transport_list)
tor-commits@lists.torproject.org