Correctly include the stream id when convert from Http2HeadersFrame to HttpMessage
Motivation: We did not correctly set the stream id in the headers of HttpMessage when converting a Http2HeadersFrame. This is based on https://github.com/netty/netty/pull/7778 so thanks to @jprante. Modifications: - Correctly set the id when possible in the header. - Add test case Result: Correctly include stream id.
This commit is contained in:
parent
0adccfdb50
commit
2c90b6235d
@ -81,9 +81,10 @@ public class Http2StreamFrameToHttpObjectCodec extends MessageToMessageCodec<Htt
|
||||
@Override
|
||||
protected void decode(ChannelHandlerContext ctx, Http2StreamFrame frame, List<Object> out) throws Exception {
|
||||
if (frame instanceof Http2HeadersFrame) {
|
||||
int id = 0; // not really the id
|
||||
Http2HeadersFrame headersFrame = (Http2HeadersFrame) frame;
|
||||
Http2Headers headers = headersFrame.headers();
|
||||
Http2FrameStream stream = headersFrame.stream();
|
||||
int id = stream == null ? 0 : stream.id();
|
||||
|
||||
final CharSequence status = headers.status();
|
||||
|
||||
|
@ -745,12 +745,36 @@ public class Http2StreamFrameToHttpObjectCodecTest {
|
||||
|
||||
@Test
|
||||
public void testDecodeFullResponseHeaders() throws Exception {
|
||||
testDecodeFullResponseHeaders(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecodeFullResponseHeadersWithStreamID() throws Exception {
|
||||
testDecodeFullResponseHeaders(true);
|
||||
}
|
||||
|
||||
private void testDecodeFullResponseHeaders(boolean withStreamId) throws Exception {
|
||||
EmbeddedChannel ch = new EmbeddedChannel(new Http2StreamFrameToHttpObjectCodec(false));
|
||||
Http2Headers headers = new DefaultHttp2Headers();
|
||||
headers.scheme(HttpScheme.HTTP.name());
|
||||
headers.status(HttpResponseStatus.OK.codeAsText());
|
||||
|
||||
assertTrue(ch.writeInbound(new DefaultHttp2HeadersFrame(headers, true)));
|
||||
Http2HeadersFrame frame = new DefaultHttp2HeadersFrame(headers, true);
|
||||
if (withStreamId) {
|
||||
frame.stream(new Http2FrameStream() {
|
||||
@Override
|
||||
public int id() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Http2Stream.State state() {
|
||||
return Http2Stream.State.OPEN;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
assertTrue(ch.writeInbound(frame));
|
||||
|
||||
FullHttpResponse response = ch.readInbound();
|
||||
try {
|
||||
@ -759,6 +783,10 @@ public class Http2StreamFrameToHttpObjectCodecTest {
|
||||
assertThat(response.content().readableBytes(), is(0));
|
||||
assertTrue(response.trailingHeaders().isEmpty());
|
||||
assertFalse(HttpUtil.isTransferEncodingChunked(response));
|
||||
if (withStreamId) {
|
||||
assertEquals(1,
|
||||
(int) response.headers().getInt(HttpConversionUtil.ExtensionHeaderNames.STREAM_ID.text()));
|
||||
}
|
||||
} finally {
|
||||
response.release();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user