/** * Translate the SegmentedData object into a netty HttpContent and fire write on the next handler. */ private void buildContent(ChannelHandlerContext ctx, SegmentedData data, ChannelPromise promise) { Http1MessageSession session = setDefaultMessageSession(ctx); try { session.onResponseData(data); HttpObject obj; if (data.endOfMessage()) { LastHttpContent last = new DefaultLastHttpContent(data.content()); if (data.trailingHeaders() != null) { last.trailingHeaders().add(data.trailingHeaders().http1Headers(true, false)); } obj = last; } else { obj = new DefaultHttpContent(data.content()); } ChannelFuture future = ctx.write(obj, promise); if (session.closeConnection() && data.endOfMessage()) { future.addListener(ChannelFutureListener.CLOSE); } } finally { session.flush(); } }
boolean closeConnection = session.closeConnection() && (response instanceof FullResponse); if (session.closeConnection()) { response.headers().set(HttpHeaderNames.CONNECTION, "close");
@Test public void testOnRequestPipeline() { Request request = DefaultFullRequest.builder() .body(Unpooled.EMPTY_BUFFER) .headers(new DefaultHeaders()) .method(GET) .path("/") .build(); session.onRequest(request); assertTrue(session.initialRequest().requestFinished); assertFalse(session.initialRequest().responseFinished); assertFalse(session.closeConnection()); session.onRequest(request); assertTrue(session.closeConnection()); }
@Test public void testOnRequestData() { Request request = DefaultSegmentedRequest.builder() .headers(new DefaultHeaders()) .method(GET) .path("/") .build(); session.onRequest(request); assertFalse(session.initialRequest().requestFinished); assertFalse(session.initialRequest().responseFinished); assertFalse(session.closeConnection()); SegmentedData data = DefaultSegmentedData.builder() .content(Unpooled.EMPTY_BUFFER) .endOfMessage(true) .trailingHeaders(new DefaultHeaders()) .build(); session.onRequestData(data); assertTrue(session.initialRequest().requestFinished); }