diff options
Diffstat (limited to 'libmproxy/proxy')
-rw-r--r-- | libmproxy/proxy/connection.py | 2 | ||||
-rw-r--r-- | libmproxy/proxy/server.py | 12 |
2 files changed, 11 insertions, 3 deletions
diff --git a/libmproxy/proxy/connection.py b/libmproxy/proxy/connection.py index 372bee2e..38436233 100644 --- a/libmproxy/proxy/connection.py +++ b/libmproxy/proxy/connection.py @@ -68,6 +68,7 @@ class ServerConnection(tcp.TCPClient, stateobject.SimpleStateObject): tcp.TCPClient.__init__(self, address) self.priority = priority + self.state = [] # a list containing (conntype, state) tuples self.peername = None self.sockname = None self.timestamp_start = None @@ -76,6 +77,7 @@ class ServerConnection(tcp.TCPClient, stateobject.SimpleStateObject): self.timestamp_ssl_setup = None _stateobject_attributes = dict( + state=list, peername=tuple, sockname=tuple, timestamp_start=float, diff --git a/libmproxy/proxy/server.py b/libmproxy/proxy/server.py index c817b3b5..c3f1e048 100644 --- a/libmproxy/proxy/server.py +++ b/libmproxy/proxy/server.py @@ -7,7 +7,7 @@ from netlib import tcp from .primitives import ProxyServerError, Log, ProxyError, ConnectionTypeChange, \ AddressPriority from .connection import ClientConnection, ServerConnection -from ..protocol.handle import handle_messages, handle_error +from ..protocol.handle import handle_messages, handle_error, handle_server_reconnect from .. import version @@ -207,16 +207,22 @@ class ConnectionHandler: ca_file=self.config.ca_file ) - def server_reconnect(self, no_ssl=False): + def server_reconnect(self): address = self.server_conn.address had_ssl = self.server_conn.ssl_established priority = self.server_conn.priority + state = self.server_conn.state sni = self.sni self.log("(server reconnect follows)", "debug") self.del_server_connection() self.set_server_address(address, priority) self.establish_server_connection() - if had_ssl and not no_ssl: + + for s in state: + handle_server_reconnect(s[0], self, s[1]) + self.server_conn.state = state + + if had_ssl: self.sni = sni self.establish_ssl(server=True) |