private FullHttpResponse notModified() { NettyMutableHttpResponse response = (NettyMutableHttpResponse) HttpResponse.notModified(); setDateHeader(response); return response.getNativeResponse(); }
@Override public void write(HttpRequest<?> request, MutableHttpResponse<?> response, ChannelHandlerContext context) { if (response instanceof NettyMutableHttpResponse) { FullHttpResponse nettyResponse = ((NettyMutableHttpResponse) response).getNativeResponse(); // Write the request data context.write(new DefaultHttpResponse(nettyResponse.protocolVersion(), nettyResponse.status(), nettyResponse.headers()), context.voidPromise()); context.writeAndFlush(new HttpChunkedInput(new ChunkedStream(getInputStream()))); } else { throw new IllegalArgumentException("Unsupported response type. Not a Netty response: " + response); } } }
FullHttpResponse nettyResponse = ((NettyMutableHttpResponse) response).getNativeResponse();
out.add(((NettyMutableHttpResponse) response).getNativeResponse()); } else { io.netty.handler.codec.http.HttpHeaders nettyHeaders = new DefaultHttpHeaders();
private void writeFinalNettyResponse(MutableHttpResponse<?> message, AtomicReference<HttpRequest<?>> requestReference, ChannelHandlerContext context) { NettyMutableHttpResponse nettyHttpResponse = (NettyMutableHttpResponse) message; FullHttpResponse nettyResponse = nettyHttpResponse.getNativeResponse(); HttpRequest<?> httpRequest = requestReference.get(); io.netty.handler.codec.http.HttpHeaders nettyHeaders = nettyResponse.headers(); // default Connection header if not set explicitly if (!nettyHeaders.contains(HttpHeaderNames.CONNECTION)) { boolean expectKeepAlive = nettyResponse.protocolVersion().isKeepAliveDefault() || httpRequest.getHeaders().isKeepAlive(); HttpStatus status = nettyHttpResponse.status(); if (!expectKeepAlive || status.getCode() > 299) { nettyHeaders.add(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE); } else { nettyHeaders.add(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); } } // default to Transfer-Encoding: chunked if Content-Length not set or not already set if (!nettyHeaders.contains(HttpHeaderNames.CONTENT_LENGTH) && !nettyHeaders.contains(HttpHeaderNames.TRANSFER_ENCODING)) { nettyHeaders.add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); } final Object body = message.body(); if (body instanceof NettyCustomizableResponseTypeHandlerInvoker) { NettyCustomizableResponseTypeHandlerInvoker handler = (NettyCustomizableResponseTypeHandlerInvoker) body; handler.invoke(httpRequest, nettyHttpResponse, context); } else { // close handled by HttpServerKeepAliveHandler context.writeAndFlush(nettyResponse); context.read(); } }