aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmproxy/proxy.py15
-rw-r--r--test/test_proxy.py27
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(), [