From 85a3a92a8adbb07663b6e4bb8ecc017de1b7b286 Mon Sep 17 00:00:00 2001 From: Thomas Kriechbaumer Date: Sat, 21 May 2016 20:18:49 +0200 Subject: [PATCH] kill streams if connection gets terminated --- mitmproxy/protocol/http2.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mitmproxy/protocol/http2.py b/mitmproxy/protocol/http2.py index 3c4b59e9f..98728c8ad 100644 --- a/mitmproxy/protocol/http2.py +++ b/mitmproxy/protocol/http2.py @@ -209,6 +209,11 @@ class Http2Layer(Layer): if zombie and zombie <= death_time: self.streams.pop(stream_id, None) + def _kill_all_streams(self): + for stream in self.streams.values(): + if not stream.zombie: + stream.zombie = time.time() + def __call__(self): if self.server_conn: self._initiate_server_conn() @@ -230,9 +235,7 @@ class Http2Layer(Layer): raw_frame = b''.join(http2_read_raw_frame(source_conn.rfile)) except: # read frame failed: connection closed - # kill all streams - for stream in self.streams.values(): - stream.zombie = time.time() + self._kill_all_streams() return incoming_events = source_conn.h2.receive_data(raw_frame) @@ -240,6 +243,8 @@ class Http2Layer(Layer): for event in incoming_events: if not self._handle_event(event, source_conn, other_conn, is_server): + # connection terminated: GoAway + self._kill_all_streams() return self._cleanup_streams()