Mercurial > public > mercurial-scm > hg-stable
comparison tests/tinyproxy.py @ 31025:d8d698bcdcd6
tinyproxy: use IPv6 if HGIPV6 is set to 1
This patch makes tinyproxy.py work in IPv6 mode if HGIPV6 is set to 1.
This will make test-http-proxy.t pass on IPv6 machines.
author | Jun Wu <quark@fb.com> |
---|---|
date | Wed, 15 Feb 2017 22:53:45 -0800 |
parents | 075146e85bb6 |
children | b2a41a826d71 |
comparison
equal
deleted
inserted
replaced
31024:d05fefbb5ab3 | 31025:d8d698bcdcd6 |
---|---|
23 from mercurial import util | 23 from mercurial import util |
24 | 24 |
25 httpserver = util.httpserver | 25 httpserver = util.httpserver |
26 urlparse = util.urlparse | 26 urlparse = util.urlparse |
27 socketserver = util.socketserver | 27 socketserver = util.socketserver |
28 | |
29 if os.environ.get('HGIPV6', '0') == '1': | |
30 family = socket.AF_INET6 | |
31 else: | |
32 family = socket.AF_INET | |
28 | 33 |
29 class ProxyHandler (httpserver.basehttprequesthandler): | 34 class ProxyHandler (httpserver.basehttprequesthandler): |
30 __base = httpserver.basehttprequesthandler | 35 __base = httpserver.basehttprequesthandler |
31 __base_handle = __base.handle | 36 __base_handle = __base.handle |
32 | 37 |
63 self.send_error(404, msg) | 68 self.send_error(404, msg) |
64 return 0 | 69 return 0 |
65 return 1 | 70 return 1 |
66 | 71 |
67 def do_CONNECT(self): | 72 def do_CONNECT(self): |
68 soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | 73 soc = socket.socket(family, socket.SOCK_STREAM) |
69 try: | 74 try: |
70 if self._connect_to(self.path, soc): | 75 if self._connect_to(self.path, soc): |
71 self.log_request(200) | 76 self.log_request(200) |
72 self.wfile.write(self.protocol_version + | 77 self.wfile.write(self.protocol_version + |
73 " 200 Connection established\r\n") | 78 " 200 Connection established\r\n") |
83 (scm, netloc, path, params, query, fragment) = urlparse.urlparse( | 88 (scm, netloc, path, params, query, fragment) = urlparse.urlparse( |
84 self.path, 'http') | 89 self.path, 'http') |
85 if scm != 'http' or fragment or not netloc: | 90 if scm != 'http' or fragment or not netloc: |
86 self.send_error(400, "bad url %s" % self.path) | 91 self.send_error(400, "bad url %s" % self.path) |
87 return | 92 return |
88 soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | 93 soc = socket.socket(family, socket.SOCK_STREAM) |
89 try: | 94 try: |
90 if self._connect_to(netloc, soc): | 95 if self._connect_to(netloc, soc): |
91 self.log_request() | 96 self.log_request() |
92 soc.send("%s %s %s\r\n" % ( | 97 soc.send("%s %s %s\r\n" % ( |
93 self.command, | 98 self.command, |