From 9b5acc19e2171cb70f7c87c62a283b9398156883 Mon Sep 17 00:00:00 2001 From: Thomas Kriechbaumer Date: Tue, 23 Aug 2016 19:12:03 +0200 Subject: http2: improve zombie exception handling --- mitmproxy/exceptions.py | 3 +++ mitmproxy/protocol/http2.py | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/mitmproxy/exceptions.py b/mitmproxy/exceptions.py index 94876514..9ecfa8e5 100644 --- a/mitmproxy/exceptions.py +++ b/mitmproxy/exceptions.py @@ -61,6 +61,9 @@ class HttpProtocolException(ProtocolException): class Http2ProtocolException(ProtocolException): pass +class Http2ZombieException(ProtocolException): + pass + class ServerException(ProxyException): pass diff --git a/mitmproxy/protocol/http2.py b/mitmproxy/protocol/http2.py index ee105781..7ae7f09d 100644 --- a/mitmproxy/protocol/http2.py +++ b/mitmproxy/protocol/http2.py @@ -422,10 +422,11 @@ class Http2SingleStreamLayer(http._HttpTransmissionLayer, basethread.BaseThread) self.request_queued_data_length = v def raise_zombie(self, pre_command=None): - if self.zombie is not None: + connection_closed = self.h2_connection.state_machine.state == h2.connection.ConnectionState.CLOSED + if self.zombie is not None or connection_closed: if pre_command is not None: pre_command() - raise exceptions.Http2ProtocolException("Zombie Stream") + raise exceptions.Http2ZombieException("Connection already dead") @detect_zombie_stream def read_request(self): @@ -582,6 +583,8 @@ class Http2SingleStreamLayer(http._HttpTransmissionLayer, basethread.BaseThread) try: layer() + except exceptions.Http2ZombieException as e: # pragma: no cover + pass except exceptions.ProtocolException as e: # pragma: no cover self.log(repr(e), "info") self.log(traceback.format_exc(), "debug") -- cgit v1.2.3