From 306299323cd47fed6d15767291a3d52e48d16786 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 | 18 +++++++++++++----- .../codec/http2/Http2MultiplexCodec.java | 9 +++++---- 2 files changed, 18 insertions(+), 9 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 fe4fdc988d..939ff223fb 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 @@ -161,7 +161,7 @@ public class Http2FrameCodec extends Http2ConnectionHandler { new IntObjectHashMap(8); private final ChannelFutureListener bufferedStreamsListener = new ChannelFutureListener() { @Override - public void operationComplete(ChannelFuture future) throws Exception { + public void operationComplete(ChannelFuture future) { numBufferedStreams--; } }; @@ -240,6 +240,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). @@ -438,14 +445,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 07adf6a622..17e6e7d2f1 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) {