mirror of
https://github.com/zhigang1992/mitmproxy.git
synced 2026-04-24 04:14:57 +08:00
Make the tcp connection closer cancellable
And use this to make pathoc error handling more sophisticated
This commit is contained in:
@@ -291,44 +291,45 @@ class Pathoc(tcp.TCPClient):
|
||||
if self.use_http2 and not self.ssl:
|
||||
raise NotImplementedError("HTTP2 without SSL is not supported.")
|
||||
|
||||
ret = tcp.TCPClient.connect(self)
|
||||
if connect_to:
|
||||
self.http_connect(connect_to)
|
||||
with tcp.TCPClient.connect(self) as closer:
|
||||
if connect_to:
|
||||
self.http_connect(connect_to)
|
||||
|
||||
self.sslinfo = None
|
||||
if self.ssl:
|
||||
try:
|
||||
alpn_protos = [b'http/1.1']
|
||||
if self.use_http2:
|
||||
alpn_protos.append(b'h2')
|
||||
self.sslinfo = None
|
||||
if self.ssl:
|
||||
try:
|
||||
alpn_protos = [b'http/1.1']
|
||||
if self.use_http2:
|
||||
alpn_protos.append(b'h2')
|
||||
|
||||
self.convert_to_ssl(
|
||||
sni=self.sni,
|
||||
cert=self.clientcert,
|
||||
method=self.ssl_version,
|
||||
options=self.ssl_options,
|
||||
cipher_list=self.ciphers,
|
||||
alpn_protos=alpn_protos
|
||||
self.convert_to_ssl(
|
||||
sni=self.sni,
|
||||
cert=self.clientcert,
|
||||
method=self.ssl_version,
|
||||
options=self.ssl_options,
|
||||
cipher_list=self.ciphers,
|
||||
alpn_protos=alpn_protos
|
||||
)
|
||||
except exceptions.TlsException as v:
|
||||
raise PathocError(str(v))
|
||||
|
||||
self.sslinfo = SSLInfo(
|
||||
self.connection.get_peer_cert_chain(),
|
||||
self.get_current_cipher(),
|
||||
self.get_alpn_proto_negotiated()
|
||||
)
|
||||
except exceptions.TlsException as v:
|
||||
raise PathocError(str(v))
|
||||
if showssl:
|
||||
print(str(self.sslinfo), file=fp)
|
||||
|
||||
self.sslinfo = SSLInfo(
|
||||
self.connection.get_peer_cert_chain(),
|
||||
self.get_current_cipher(),
|
||||
self.get_alpn_proto_negotiated()
|
||||
)
|
||||
if showssl:
|
||||
print(str(self.sslinfo), file=fp)
|
||||
if self.use_http2:
|
||||
self.protocol.check_alpn()
|
||||
if not self.http2_skip_connection_preface:
|
||||
self.protocol.perform_client_connection_preface()
|
||||
|
||||
if self.use_http2:
|
||||
self.protocol.check_alpn()
|
||||
if not self.http2_skip_connection_preface:
|
||||
self.protocol.perform_client_connection_preface()
|
||||
if self.timeout:
|
||||
self.settimeout(self.timeout)
|
||||
|
||||
if self.timeout:
|
||||
self.settimeout(self.timeout)
|
||||
return ret
|
||||
return closer.pop()
|
||||
|
||||
def stop(self):
|
||||
if self.ws_framereader:
|
||||
|
||||
Reference in New Issue
Block a user