void writeContent(ChannelHandlerContext ctx, SegmentedData data, ChannelPromise promise) { Http2MessageSession messageSession = lazyCreateSession(ctx); messageSession.onOutboundResponseData(data); boolean dataEos = data.endOfMessage() && data.trailingHeaders().size() == 0; Http2Response response = Http2Response.build( data.streamId(), new DefaultHttp2DataFrame(data.content(), dataEos), dataEos); Headers trailingHeaders = data.trailingHeaders(); if (trailingHeaders != null && trailingHeaders.size() != 0) { Http2Headers headers = trailingHeaders.http2Headers(); Http2Response last = Http2Response.build(data.streamId(), headers, true); PromiseCombiner combiner = new PromiseCombiner(); combiner.add(ctx.write(response, ctx.newPromise())); combiner.add(ctx.write(last, ctx.newPromise())); combiner.finish(promise); } else { ctx.write(response, promise); } }
private void writeContent(ChannelHandlerContext ctx, SegmentedData data, ChannelPromise promise) { Headers trailingHeaders = data.trailingHeaders(); boolean hasTrailing = trailingHeaders != null && trailingHeaders.size() > 0; boolean dataEos = data.endOfMessage() && !hasTrailing; int streamId = data.streamId(); Http2Request request = Http2Request.build(streamId, new DefaultHttp2DataFrame(data.content(), dataEos), dataEos); if (hasTrailing) { Http2Headers headers = trailingHeaders.http2Headers(); Http2Request last = Http2Request.build(streamId, headers, true); PromiseCombiner combiner = new PromiseCombiner(); combiner.add(ctx.write(request, ctx.newPromise())); combiner.add(ctx.write(last, ctx.newPromise())); combiner.finish(promise); } else { ctx.write(request, promise); } }
assertFalse(trailersOut.body() == null); assertEquals(0, trailersOut.body().readableBytes()); assertEquals(1, trailersOut.trailingHeaders().size()); assertEquals("bar", trailersOut.trailingHeaders().get("foo")); assertTrue(trailersOut.endOfMessage());
assertNotNull(trailersOut.body()); assertEquals(0, trailersOut.body().readableBytes()); assertEquals(1, ((SegmentedRequestData) trailersOut).trailingHeaders().size()); assertEquals("bar", ((SegmentedRequestData) trailersOut).trailingHeaders().get("foo")); assertTrue(trailersOut.endOfMessage());