[flashproxy/master] Rename proxy_addr â remote_addr because it could be a proxy or a client.
dcf at torproject.org
dcf at torproject.org
Thu Dec 20 02:33:53 UTC 2012
commit fe80b0fd55a2a5a0c091edb6aadf61595a144667
Author: David Fifield <david at bamsoftware.com>
Date: Wed Dec 19 18:31:17 2012 -0800
Rename proxy_addr â remote_addr because it could be a proxy or a client.
---
facilitator/facilitator | 29 +++++++++++++++++++++++++++--
facilitator/facilitator.cgi | 10 +++++-----
2 files changed, 32 insertions(+), 7 deletions(-)
diff --git a/facilitator/facilitator b/facilitator/facilitator
index af2c04c..bc47281 100755
--- a/facilitator/facilitator
+++ b/facilitator/facilitator
@@ -234,7 +234,30 @@ class Handler(SocketServer.StreamRequestHandler):
print >> self.wfile, "ERROR"
def do_GET(self, params):
- reg = REGS.fetch()
+ # Get the proxy's address so we know what kind of client to give it
+ # (IPv4 or IPv6).
+ proxy_spec = fac.param_first("FROM", params)
+ if proxy_spec is None:
+ log(u"GET missing FROM param")
+ self.send_error()
+ return False
+ try:
+ _, _, af = fac.parse_addr_spec_af(proxy_spec, defport=0)
+ except ValueError, e:
+ log(u"syntax error in proxy address %s: %s" % (safe_str(repr(proxy_spec)), safe_str(repr(str(e)))))
+ self.send_error()
+ return False
+
+ if af == socket.AF_INET:
+ regs = REGS_IPV4
+ elif af == socket.AF_INET6:
+ regs = REGS_IPV6
+ else:
+ log(u"unknown address family %d in proxy address %s" % (af, safe_str(repr(proxy_spec))))
+ self.send_error()
+ return False
+
+ reg = regs.fetch()
if reg:
log(u"proxy gets %s, relay %s (now %d)" %
(safe_str(unicode(reg)), options.relay_spec, len(REGS)))
@@ -273,7 +296,9 @@ class Handler(SocketServer.StreamRequestHandler):
class Server(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
allow_reuse_address = True
-REGS = RegSet()
+# Separate pools for IPv4 and IPv6 clients.
+REGS_IPV4 = RegSet()
+REGS_IPV6 = RegSet()
def main():
opts, args = getopt.gnu_getopt(sys.argv[1:], "dhl:p:r:",
diff --git a/facilitator/facilitator.cgi b/facilitator/facilitator.cgi
index f35c9a3..c21e67d 100755
--- a/facilitator/facilitator.cgi
+++ b/facilitator/facilitator.cgi
@@ -17,10 +17,10 @@ Status: %d\r
sys.exit()
method = os.environ.get("REQUEST_METHOD")
-proxy_addr = (os.environ.get("REMOTE_ADDR"), None)
+remote_addr = (os.environ.get("REMOTE_ADDR"), None)
path_info = os.environ.get("PATH_INFO") or "/"
-if not method or not proxy_addr[0]:
+if not method or not remote_addr[0]:
exit_error(400)
fs = cgi.FieldStorage()
@@ -29,7 +29,7 @@ def do_get():
if path_info != "/":
exit_error(400)
try:
- reg = fac.get_reg(FACILITATOR_ADDR, proxy_addr) or ""
+ reg = fac.get_reg(FACILITATOR_ADDR, remote_addr) or ""
except:
exit_error(500)
# Allow XMLHttpRequest from any domain. http://www.w3.org/TR/cors/.
@@ -49,10 +49,10 @@ def do_post():
exit_error(400)
client_spec = client_specs[0].strip()
try:
- client_addr = fac.parse_addr_spec(client_spec, defhost=proxy_addr[0])
+ client_addr = fac.parse_addr_spec(client_spec, defhost=remote_addr[0])
except ValueError:
exit_error(400)
- if not fac.put_reg(FACILITATOR_ADDR, client_addr, proxy_addr):
+ if not fac.put_reg(FACILITATOR_ADDR, client_addr, remote_addr):
exit_error(500)
print """\
Status: 200\r
More information about the tor-commits
mailing list