diff options
author | Aldo Cortesi <aldo@corte.si> | 2015-08-01 11:38:33 +1200 |
---|---|---|
committer | Aldo Cortesi <aldo@corte.si> | 2015-08-01 11:38:33 +1200 |
commit | c31b6c3c36f681d1dbc3ce11922741b7e1e41837 (patch) | |
tree | f63a0f56534d16437aaa5464cf585cac82f90985 /libmproxy/proxy/connection.py | |
parent | cdc84f52d213cb2b2b2a06a17378ebe757908865 (diff) | |
parent | 4f38c6b90e239d192863dee271e267b498c72206 (diff) | |
download | mitmproxy-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/connection.py')
-rw-r--r-- | libmproxy/proxy/connection.py | 21 |
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() |