diff options
-rw-r--r-- | libmproxy/proxy.py | 15 | ||||
-rw-r--r-- | test/test_proxy.py | 27 |
2 files changed, 17 insertions, 25 deletions
diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py index 8200c725..280bab93 100644 --- a/libmproxy/proxy.py +++ b/libmproxy/proxy.py @@ -92,7 +92,7 @@ def parse_url(url): def parse_request_line(request): """ - Parse a proxy request line. Return (method, scheme, host, port, path). + Parse a proxy request line. Return (method, scheme, host, port, path, minor). Raise ProxyError on error. """ try: @@ -228,9 +228,9 @@ class Request(controller.Msg): class Response(controller.Msg): FMT = '%s\r\n%s\r\n%s' - def __init__(self, request, code, msg, headers, content, timestamp=None): + def __init__(self, request, code, proto, msg, headers, content, timestamp=None): self.request = request - self.code, self.msg = code, msg + self.code, self.proto, self.msg = code, proto, msg self.headers, self.content = headers, content self.timestamp = timestamp or time.time() self.cached = False @@ -438,7 +438,7 @@ class ServerConnection: content = None else: content = read_http_body(self.rfile, self, headers, True) - return Response(self.request, code, msg, headers, content) + return Response(self.request, code, proto, msg, headers, content) def terminate(self): try: @@ -534,15 +534,16 @@ class ProxyHandler(SocketServer.StreamRequestHandler): '\r\n' ) self.wfile.flush() - self.connection = ssl.wrap_socket( - self.connection, + kwargs = dict( certfile = self.find_cert(host,port), keyfile = self.find_key(host,port), server_side = True, ssl_version = ssl.PROTOCOL_SSLv23, - ciphers = config.ciphers, do_handshake_on_connect = False ) + if sys.version_info[1] > 6: + kwargs["ciphers"] = config.ciphers + self.connection = ssl.wrap_socket(self.connection, **kwargs) self.rfile = FileLike(self.connection) self.wfile = FileLike(self.connection) method, scheme, host, port, path, httpminor = parse_request_line(self.rfile.readline()) diff --git a/test/test_proxy.py b/test/test_proxy.py index e343e693..39689746 100644 --- a/test/test_proxy.py +++ b/test/test_proxy.py @@ -147,33 +147,31 @@ class uProxy(_ProxTests): -class u_parse_proxy_request(libpry.AutoTree): +class u_parse_request_line(libpry.AutoTree): def test_simple(self): - libpry.raises(proxy.ProxyError, proxy.parse_proxy_request, "") + libpry.raises(proxy.ProxyError, proxy.parse_request_line, "") u = "GET ... HTTP/1.1" - libpry.raises("invalid url", proxy.parse_proxy_request, u) - - u = "MORK / HTTP/1.1" - libpry.raises("unknown request method", proxy.parse_proxy_request, u) + libpry.raises("invalid url", proxy.parse_request_line, u) u = "GET http://foo.com:8888/test HTTP/1.1" - m, s, h, po, pa = proxy.parse_proxy_request(u) + m, s, h, po, pa, minor = proxy.parse_request_line(u) assert m == "GET" assert s == "http" assert h == "foo.com" assert po == 8888 assert pa == "/test" + assert minor == 1 def test_connect(self): u = "CONNECT host.com:443 HTTP/1.0" - expected = ('CONNECT', None, 'host.com', 443, None) - ret = proxy.parse_proxy_request(u) + expected = ('CONNECT', None, 'host.com', 443, None, 0) + ret = proxy.parse_request_line(u) assert expected == ret def test_inner(self): u = "GET / HTTP/1.1" - assert proxy.parse_proxy_request(u) == ('GET', None, None, None, '/') + assert proxy.parse_request_line(u) == ('GET', None, None, None, '/', 1) class u_parse_url(libpry.AutoTree): @@ -200,12 +198,6 @@ class u_parse_url(libpry.AutoTree): assert po == 443 -class uConfig(libpry.AutoTree): - def test_pem(self): - c = proxy.Config(pemfile="data/testkey.pem") - assert c.pemfile - - class uFileLike(libpry.AutoTree): def test_wrap(self): s = cStringIO.StringIO("foobar\nfoobar") @@ -282,8 +274,7 @@ tests = [ uRequest(), uResponse(), uFileLike(), - uConfig(), - u_parse_proxy_request(), + u_parse_request_line(), u_parse_url(), uError(), _TestServers(), [ |