diff --git a/netty/src/main/java/io/grpc/netty/NettyClientHandler.java b/netty/src/main/java/io/grpc/netty/NettyClientHandler.java index c9b12a767a..0028f0b2ad 100644 --- a/netty/src/main/java/io/grpc/netty/NettyClientHandler.java +++ b/netty/src/main/java/io/grpc/netty/NettyClientHandler.java @@ -123,17 +123,19 @@ class NettyClientHandler extends AbstractNettyHandler { Http2Connection connection = new DefaultHttp2Connection(false); return newHandler(connection, frameReader, frameWriter, lifecycleManager, keepAliveManager, - flowControlWindow, ticker); + flowControlWindow, maxHeaderListSize, ticker); } @VisibleForTesting static NettyClientHandler newHandler(Http2Connection connection, Http2FrameReader frameReader, Http2FrameWriter frameWriter, ClientTransportLifecycleManager lifecycleManager, - KeepAliveManager keepAliveManager, int flowControlWindow, Ticker ticker) { + KeepAliveManager keepAliveManager, int flowControlWindow, int maxHeaderListSize, + Ticker ticker) { Preconditions.checkNotNull(connection, "connection"); Preconditions.checkNotNull(frameReader, "frameReader"); Preconditions.checkNotNull(lifecycleManager, "lifecycleManager"); Preconditions.checkArgument(flowControlWindow > 0, "flowControlWindow must be positive"); + Preconditions.checkArgument(maxHeaderListSize > 0, "maxHeaderListSize must be positive"); Preconditions.checkNotNull(ticker, "ticker"); Http2FrameLogger frameLogger = new Http2FrameLogger(LogLevel.DEBUG, NettyClientHandler.class); @@ -154,6 +156,7 @@ class NettyClientHandler extends AbstractNettyHandler { settings.pushEnabled(false); settings.initialWindowSize(flowControlWindow); settings.maxConcurrentStreams(0); + settings.maxHeaderListSize(maxHeaderListSize); return new NettyClientHandler(decoder, encoder, settings, lifecycleManager, keepAliveManager, ticker); diff --git a/netty/src/main/java/io/grpc/netty/NettyServerHandler.java b/netty/src/main/java/io/grpc/netty/NettyServerHandler.java index 163c406dfd..d89b1ce81a 100644 --- a/netty/src/main/java/io/grpc/netty/NettyServerHandler.java +++ b/netty/src/main/java/io/grpc/netty/NettyServerHandler.java @@ -113,7 +113,7 @@ class NettyServerHandler extends AbstractNettyHandler { Http2FrameWriter frameWriter = new Http2OutboundFrameLogger(new DefaultHttp2FrameWriter(), frameLogger); return newHandler(frameReader, frameWriter, transportListener, maxStreams, flowControlWindow, - maxMessageSize); + maxHeaderListSize, maxMessageSize); } @VisibleForTesting @@ -121,9 +121,11 @@ class NettyServerHandler extends AbstractNettyHandler { ServerTransportListener transportListener, int maxStreams, int flowControlWindow, + int maxHeaderListSize, int maxMessageSize) { Preconditions.checkArgument(maxStreams > 0, "maxStreams must be positive"); Preconditions.checkArgument(flowControlWindow > 0, "flowControlWindow must be positive"); + Preconditions.checkArgument(maxHeaderListSize > 0, "maxHeaderListSize must be positive"); Preconditions.checkArgument(maxMessageSize > 0, "maxMessageSize must be positive"); Http2Connection connection = new DefaultHttp2Connection(true); @@ -140,6 +142,7 @@ class NettyServerHandler extends AbstractNettyHandler { Http2Settings settings = new Http2Settings(); settings.initialWindowSize(flowControlWindow); settings.maxConcurrentStreams(maxStreams); + settings.maxHeaderListSize(maxHeaderListSize); return new NettyServerHandler(transportListener, decoder, encoder, settings, maxMessageSize); } diff --git a/netty/src/test/java/io/grpc/netty/NettyClientHandlerTest.java b/netty/src/test/java/io/grpc/netty/NettyClientHandlerTest.java index 5ccdd90ceb..9149a13f1b 100644 --- a/netty/src/test/java/io/grpc/netty/NettyClientHandlerTest.java +++ b/netty/src/test/java/io/grpc/netty/NettyClientHandlerTest.java @@ -109,6 +109,7 @@ public class NettyClientHandlerTest extends NettyHandlerTestBase captor = ArgumentCaptor.forClass(Http2Settings.class); + verifyWrite().writeSettings( + any(ChannelHandlerContext.class), captor.capture(), any(ChannelPromise.class)); + + assertEquals(maxHeaderListSize, captor.getValue().maxHeaderListSize().intValue()); + } + @Test @Ignore("Re-enable once https://github.com/grpc/grpc-java/issues/1175 is fixed") public void connectionWindowShouldBeOverridden() throws Exception { @@ -357,7 +370,7 @@ public class NettyServerHandlerTest extends NettyHandlerTestBase