diff options
author | Maximilian Hils <git@maximilianhils.com> | 2015-08-16 23:33:11 +0200 |
---|---|---|
committer | Thomas Kriechbaumer <thomas@kriechbaumer.name> | 2015-08-18 21:08:42 +0200 |
commit | 231656859fcf82cb1252d1aad8dbc0f77dfb8bba (patch) | |
tree | 241bd55949b69ab6263b79d1f7d08ec6313fa264 /netlib/tcp.py | |
parent | 62416daa4a3776563556fb45ef9bd749fb44c334 (diff) | |
download | mitmproxy-231656859fcf82cb1252d1aad8dbc0f77dfb8bba.tar.gz mitmproxy-231656859fcf82cb1252d1aad8dbc0f77dfb8bba.tar.bz2 mitmproxy-231656859fcf82cb1252d1aad8dbc0f77dfb8bba.zip |
TCPClient: more sophisticated address handling
Diffstat (limited to 'netlib/tcp.py')
-rw-r--r-- | netlib/tcp.py | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/netlib/tcp.py b/netlib/tcp.py index b05e84f5..289618a7 100644 --- a/netlib/tcp.py +++ b/netlib/tcp.py @@ -283,7 +283,6 @@ class Reader(_FileLike): raise NetLibSSLError(str(e)) - class Address(object): """ @@ -498,6 +497,29 @@ class TCPClient(_Connection): rbufsize = -1 wbufsize = -1 + def __init__(self, address, source_address=None): + self.connection, self.rfile, self.wfile = None, None, None + self.address = address + self.source_address = Address.wrap( + source_address) if source_address else None + self.cert = None + self.ssl_established = False + self.ssl_verification_error = None + self.sni = None + + @property + def address(self): + return self.__address + + @address.setter + def address(self, address): + if self.connection: + raise RuntimeError("Cannot change server address after establishing connection") + if address: + self.__address = Address.wrap(address) + else: + self.__address = None + def close(self): # Make sure to close the real socket, not the SSL proxy. # OpenSSL is really good at screwing up, i.e. when trying to recv from a failed connection, @@ -507,16 +529,6 @@ class TCPClient(_Connection): else: close_socket(self.connection) - def __init__(self, address, source_address=None): - self.address = Address.wrap(address) - self.source_address = Address.wrap( - source_address) if source_address else None - self.connection, self.rfile, self.wfile = None, None, None - self.cert = None - self.ssl_established = False - self.ssl_verification_error = None - self.sni = None - def create_ssl_context(self, cert=None, alpn_protos=None, **sslctx_kwargs): context = self._create_ssl_context( alpn_protos=alpn_protos, |