aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/proxy
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@corte.si>2015-08-01 11:38:33 +1200
committerAldo Cortesi <aldo@corte.si>2015-08-01 11:38:33 +1200
commitc31b6c3c36f681d1dbc3ce11922741b7e1e41837 (patch)
treef63a0f56534d16437aaa5464cf585cac82f90985 /libmproxy/proxy
parentcdc84f52d213cb2b2b2a06a17378ebe757908865 (diff)
parent4f38c6b90e239d192863dee271e267b498c72206 (diff)
downloadmitmproxy-c31b6c3c36f681d1dbc3ce11922741b7e1e41837.tar.gz
mitmproxy-c31b6c3c36f681d1dbc3ce11922741b7e1e41837.tar.bz2
mitmproxy-c31b6c3c36f681d1dbc3ce11922741b7e1e41837.zip
Merge pull request #698 from Kriechi/http2-wip
[WIP] Protocol Refactoring for HTTP/2
Diffstat (limited to 'libmproxy/proxy')
-rw-r--r--libmproxy/proxy/connection.py21
1 files changed, 19 insertions, 2 deletions
diff --git a/libmproxy/proxy/connection.py b/libmproxy/proxy/connection.py
index 5219023b..a0bf2af9 100644
--- a/libmproxy/proxy/connection.py
+++ b/libmproxy/proxy/connection.py
@@ -23,6 +23,7 @@ class ClientConnection(tcp.BaseHandler, stateobject.StateObject):
self.timestamp_start = utils.timestamp()
self.timestamp_end = None
self.timestamp_ssl_setup = None
+ self.protocol = None
def __repr__(self):
return "<ClientConnection: {ssl}{host}:{port}>".format(
@@ -58,6 +59,8 @@ class ClientConnection(tcp.BaseHandler, stateobject.StateObject):
return copy.copy(self)
def send(self, message):
+ if isinstance(message, list):
+ message = b''.join(message)
self.wfile.write(message)
self.wfile.flush()
@@ -68,7 +71,15 @@ class ClientConnection(tcp.BaseHandler, stateobject.StateObject):
return f
def convert_to_ssl(self, *args, **kwargs):
- tcp.BaseHandler.convert_to_ssl(self, *args, **kwargs)
+ def alpn_select_callback(conn_, options):
+ if alpn_select in options:
+ return bytes(alpn_select)
+ else: # pragma no cover
+ return options[0]
+
+ # TODO: read ALPN from server and select same proto for client conn
+
+ tcp.BaseHandler.convert_to_ssl(self, alpn_select=alpn_select_callback, *args, **kwargs)
self.timestamp_ssl_setup = utils.timestamp()
def finish(self):
@@ -85,6 +96,7 @@ class ServerConnection(tcp.TCPClient, stateobject.StateObject):
self.timestamp_end = None
self.timestamp_tcp_setup = None
self.timestamp_ssl_setup = None
+ self.protocol = None
def __repr__(self):
if self.ssl_established and self.sni:
@@ -149,6 +161,8 @@ class ServerConnection(tcp.TCPClient, stateobject.StateObject):
self.timestamp_tcp_setup = utils.timestamp()
def send(self, message):
+ if isinstance(message, list):
+ message = b''.join(message)
self.wfile.write(message)
self.wfile.flush()
@@ -160,7 +174,10 @@ class ServerConnection(tcp.TCPClient, stateobject.StateObject):
self.address.host.encode("idna")) + ".pem"
if os.path.exists(path):
clientcert = path
- self.convert_to_ssl(cert=clientcert, sni=sni, **kwargs)
+
+ # TODO: read ALPN from client and use same list for server conn
+
+ self.convert_to_ssl(cert=clientcert, sni=sni, alpn_protos=['h2'], **kwargs)
self.sni = sni
self.timestamp_ssl_setup = utils.timestamp()