diff options
author | Maximilian Hils <git@maximilianhils.com> | 2014-01-30 20:11:01 +0100 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2014-01-30 20:11:01 +0100 |
commit | 5fce7be592dfe1ab922044862cc34afa486986d5 (patch) | |
tree | 66b3b4261350c8587b82d0d2d8ae30f470bb0f45 /libmproxy | |
parent | 8544a5ba4b75bd42a97fe0949834175121f4cb38 (diff) | |
download | mitmproxy-5fce7be592dfe1ab922044862cc34afa486986d5.tar.gz mitmproxy-5fce7be592dfe1ab922044862cc34afa486986d5.tar.bz2 mitmproxy-5fce7be592dfe1ab922044862cc34afa486986d5.zip |
complete state handling
Diffstat (limited to 'libmproxy')
-rw-r--r-- | libmproxy/protocol/http.py | 17 | ||||
-rw-r--r-- | libmproxy/proxy.py | 16 |
2 files changed, 27 insertions, 6 deletions
diff --git a/libmproxy/protocol/http.py b/libmproxy/protocol/http.py index b79fc7b3..a33962a6 100644 --- a/libmproxy/protocol/http.py +++ b/libmproxy/protocol/http.py @@ -617,7 +617,7 @@ class HTTPResponse(HTTPMessage): timestamp_end: Timestamp indicating when request transmission ended """ def __init__(self, httpversion, code, msg, headers, content, timestamp_start, timestamp_end): - assert isinstance(headers, ODictCaseless) + assert isinstance(headers, ODictCaseless) or headers is None HTTPMessage.__init__(self) self.httpversion = httpversion @@ -643,7 +643,7 @@ class HTTPResponse(HTTPMessage): @classmethod def _from_state(cls, state): - f = cls(None, None, None, None, None, None, None, None) + f = cls(None, None, None, None, None, None, None) f._load_state(state) return f @@ -948,6 +948,19 @@ class HTTPHandler(ProtocolHandler): if flow.request.form_in == "authority": self.ssl_upgrade(flow.request) + + flow.server_conn = self.c.server_conn + + """ + FIXME: Remove state test + d = flow._get_state() + print d + flow._load_state(d) + print flow._get_state() + copy = HTTPFlow._from_state(d) + print copy._get_state() + """ + return True except (HttpAuthenticationError, http.HttpError, ProxyError, tcp.NetLibError), e: self.handle_error(e, flow) diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py index afd1d3fc..6d5dd236 100644 --- a/libmproxy/proxy.py +++ b/libmproxy/proxy.py @@ -36,7 +36,11 @@ class ProxyConfig: class ClientConnection(tcp.BaseHandler, stateobject.SimpleStateObject): def __init__(self, client_connection, address, server): - tcp.BaseHandler.__init__(self, client_connection, address, server) + if client_connection: # Eventually, this object is restored from state + tcp.BaseHandler.__init__(self, client_connection, address, server) + else: + self.address = None + self.clientcert = None self.timestamp_start = utils.timestamp() self.timestamp_end = None @@ -52,7 +56,9 @@ class ClientConnection(tcp.BaseHandler, stateobject.SimpleStateObject): @classmethod def _from_state(cls, state): - raise NotImplementedError # FIXME + f = cls(None, None, None) + f._load_state(state) + return f def convert_to_ssl(self, *args, **kwargs): tcp.BaseHandler.convert_to_ssl(self, *args, **kwargs) @@ -86,7 +92,9 @@ class ServerConnection(tcp.TCPClient, stateobject.SimpleStateObject): @classmethod def _from_state(cls, state): - raise NotImplementedError # FIXME + f = cls(None) + f._load_state(state) + return f def connect(self): self.timestamp_start = utils.timestamp() @@ -163,7 +171,7 @@ class ConnectionHandler: def del_server_connection(self): if self.server_conn and self.server_conn.connection: self.server_conn.finish() - self.log("serverdisconnect", ["%s:%s" % self.server_conn.address]) + self.log("serverdisconnect", ["%s:%s" % (self.server_conn.address.host, self.server_conn.address.port)]) self.channel.tell("serverdisconnect", self) self.server_conn = None self.sni = None |