From 7e818352e2178fb77550b8cdf7f4820d9b6b6079 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Tue, 16 Jul 2019 13:24:45 +0200 Subject: [PATCH] Move responsibility for creating upgrade stream to Http2FrameCodec (#9360) Motivation: The Http2FrameCodec should be responsible to create the upgrade stream. Modifications: Move code to create stream to Http2FrameCodec Result: More correct responsibility --- .../handler/codec/http2/Http2FrameCodec.java | 16 ++++++++++++---- .../handler/codec/http2/Http2MultiplexCodec.java | 9 +++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2FrameCodec.java b/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2FrameCodec.java index d806244e75..83321e1eba 100644 --- a/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2FrameCodec.java +++ b/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2FrameCodec.java @@ -232,6 +232,13 @@ public class Http2FrameCodec extends Http2ConnectionHandler { // sub-class can override this for extra steps that needs to be done when the handler is added. } + @Override + public void onHttpClientUpgrade() throws Http2Exception { + super.onHttpClientUpgrade(); + // Now make a new Http2FrameStream, set it's underlying Http2Stream, and initialize it. + newStream().setStreamAndProperty(streamKey, connection().stream(HTTP_UPGRADE_STREAM_ID)); + } + /** * Handles the cleartext HTTP upgrade event. If an upgrade occurred, sends a simple response via * HTTP/2 on stream 1 (the stream specifically reserved for cleartext HTTP upgrade). @@ -430,14 +437,15 @@ public class Http2FrameCodec extends Http2ConnectionHandler { @Override public void onStreamClosed(Http2Stream stream) { - Http2FrameStream stream2 = stream.getProperty(streamKey); - if (stream2 != null) { - onHttp2StreamStateChanged(ctx, stream2); - } + onHttp2StreamStateChanged0(stream); } @Override public void onStreamHalfClosed(Http2Stream stream) { + onHttp2StreamStateChanged0(stream); + } + + private void onHttp2StreamStateChanged0(Http2Stream stream) { Http2FrameStream stream2 = stream.getProperty(streamKey); if (stream2 != null) { onHttp2StreamStateChanged(ctx, stream2); diff --git a/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2MultiplexCodec.java b/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2MultiplexCodec.java index 72ab031ffc..e9fe656e28 100644 --- a/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2MultiplexCodec.java +++ b/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2MultiplexCodec.java @@ -116,10 +116,6 @@ public class Http2MultiplexCodec extends Http2FrameCodec { } // Creates the Http2Stream in the Connection. super.onHttpClientUpgrade(); - // Now make a new FrameStream, set it's underlying Http2Stream, and initialize it. - DefaultHttp2FrameStream codecStream = newStream(); - codecStream.setStreamAndProperty(streamKey, connection().stream(HTTP_UPGRADE_STREAM_ID)); - onHttp2UpgradeStreamInitialized(ctx, codecStream); } @Override @@ -174,6 +170,11 @@ public class Http2MultiplexCodec extends Http2FrameCodec { DefaultHttp2FrameStream s = (DefaultHttp2FrameStream) stream; switch (stream.state()) { + case HALF_CLOSED_LOCAL: + if (stream.id() == HTTP_UPGRADE_STREAM_ID) { + onHttp2UpgradeStreamInitialized(ctx, s); + } + break; case HALF_CLOSED_REMOTE: case OPEN: if (s.attachment != null) {