commit 6208413a9582736325602e1900b788aff09b922b Author: David Fifield david@bamsoftware.com Date: Sat Jun 11 09:53:24 2011 -0700
rm reconnector.py, not used in our model now. --- reconnector.py | 179 -------------------------------------------------------- 1 files changed, 0 insertions(+), 179 deletions(-)
diff --git a/reconnector.py b/reconnector.py deleted file mode 100755 index c22bde6..0000000 --- a/reconnector.py +++ /dev/null @@ -1,179 +0,0 @@ -#!/usr/bin/env python - -import getopt -import httplib -import re -import select -import socket -import sys -import urllib - -DEFAULT_RELAY_ADDRESS = "localhost" -DEFAULT_RELAY_PORT = 9001 -DEFAULT_LISTEN_ADDRESS = "0.0.0.0" -DEFAULT_LISTEN_PORT = 9002 - -""" FIXME: update when finished with writing program. """ -def usage(f = sys.stdout): - print >> f, """ -Usage: %(progname)s -Maintains connections to multiple proxies. For any group of proxies that -serve a unique client, only one proxy of that group is "activated" at -any one time and connects to the relay. When this proxy shuts down the -client selects another proxy to use and this program will note the newly -activated proxy and connect it to the relay. - - -h, --help show help. -""" % { - "progname": sys.argv[0], -} - -def format_addr(addr): - host, port = addr - if not host: - return u":%d" % port - # Numeric IPv6 address? - try: - addrs = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM, socket.IPPROTO_TCP, socket.AI_NUMERICHOST) - af = addrs[0][0] - except socket.gaierror, e: - af = 0 - if af == socket.AF_INET6: - return u"[%s]:%d" % (host, port) - else: - return u"%s:%d" % (host, port) - -def parse_addr_spec(spec, defhost = None, defport = None): - host = None - port = None - m = None - # IPv6 syntax. - if not m: - m = re.match(ur'^[(.+)]:(\d+)$', spec) - if m: - host, port = m.groups() - af = socket.AF_INET6 - if not m: - m = re.match(ur'^[(.+)]:?$', spec) - if m: - host, = m.groups() - af = socket.AF_INET6 - # IPv4 syntax. - if not m: - m = re.match(ur'^(.+):(\d+)$', spec) - if m: - host, port = m.groups() - af = socket.AF_INET - if not m: - m = re.match(ur'^:?(\d+)$', spec) - if m: - port, = m.groups() - af = 0 - if not m: - host = spec - af = 0 - host = host or defhost - port = port or defport - if not (host and port): - raise ValueError("Bad address specification "%s"" % spec) - return host, int(port) - -def listen_socket(addr): - """Return a nonblocking socket listenting on the given address.""" - addrinfo = socket.getaddrinfo(addr[0], addr[1], 0, socket.SOCK_STREAM, socket.IPPROTO_TCP)[0] - s = socket.socket(addrinfo[0], addrinfo[1], addrinfo[2]) - s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - s.bind(addr) - s.listen(10) - s.setblocking(0) - return s - - -if __name__ == "__main__": - """ Parameter defaults. """ - relay_addr = (DEFAULT_RELAY_ADDRESS, DEFAULT_RELAY_PORT) - listen_addr = (DEFAULT_LISTEN_ADDRESS, DEFAULT_LISTEN_PORT) - - """ Mutual dictionaries for linking connections. """ - relay_for = {} - proxy_for = {} - - """ Parse options. """ - opts, args = getopt.gnu_getopt(sys.argv[1:], "r:l:h", ["relay", -"listen", "help"]) - for o, a in opts: - if o == "-r" or o == "--relay": - relay_addr = parse_addr_spec(a, None, DEFAULT_RELAY_PORT) - elif o == "-l" or o == "--listen": - listen_addr = parse_addr_spec(a, None, DEFAULT_LISTEN_PORT) - elif o == "-h" or o == "--help": - usage() - sys.exit() - - """ Setup listening socket for proxies. """ - listen_s = listen_socket(listen_addr) - - print "Listening on " + str(listen_addr) + " for proxy connections." - - """ Setup relay address information. """ - relay_addrinfo = socket.getaddrinfo(relay_addr[0], relay_addr[1], 0, socket.SOCK_STREAM, socket.IPPROTO_TCP)[0] - - while True: - rset = [listen_s] + relay_for.keys() + proxy_for.keys() - rset, _, _ = select.select(rset, [], [], 0) - for fd in rset: - """ Connecton on listening socket. """ - if fd == listen_s: - proxy_s, addr = fd.accept() - print "Proxy connection from %s." % format_addr(addr) - - """ New connection to relay. """ - try: - relay_s = socket.socket(relay_addrinfo[0], relay_addrinfo[1], relay_addrinfo[2]) - except socket.error, msg: - print msg - relay_s = None - - try: - relay_s.connect(relay_addrinfo[4]) - except socket.error, msg: - print msg - relay_s.close() - relay_s = None - - if relay_s is None: - print "ERROR: Could not open socket to relay " + str(relay_addr) - sys.exit(1) - - """ Pair up the sockets. """ - relay_for[proxy_s] = relay_s - proxy_for[relay_s] = proxy_s - - """ Data from a proxy. Forward to relay. """ - elif fd in relay_for: - relay = relay_for[fd] - data = fd.recv(1024) - if not data: - print "EOF from proxy %s." % format_addr(fd.getpeername()) - fd.close() - relay.close() - del relay_for[fd] - del proxy_for[relay] - else: - print "Sending " + str(len(data)) + " bytes to relay from " + format_addr(fd.getpeername()) - relay.sendall(data) - - """ Data from a relay. Forward to proxy. """ - elif fd in proxy_for: - proxy = proxy_for[fd] - data = fd.recv(1024) - if not data: - print "EOF from relay %s." % format_addr(fd.getpeername()) - fd.close() - proxy.close() - del proxy_for[fd] - del relay_for[proxy] - else: - print "Sending " + str(len(data)) + " bytes from relay to " + format_addr(proxy.getpeername()) - proxy.sendall(data) -
tor-commits@lists.torproject.org