Do not write LastHttpContent twice in HttpStaticFileServer example
Related: #3122 Motivation: The HttpStaticFileServer example writes the LastHttpContent twice at the end of the transfer. HttpChunkedInput already produces a LastHttpContent at the end of the stream, so there's no reason to write another. Modifications: Do not write LastHttpContent in HttpStaticFileServerHandler when HttpChunkedInput is used to transfer a file. Result: HttpStaticFileServer does not violates the protocol anymore.
This commit is contained in:
parent
f8a13cc3e9
commit
b9f575352b
@ -186,13 +186,18 @@ public class HttpStaticFileServerHandler extends SimpleChannelInboundHandler<Ful
|
||||
|
||||
// Write the content.
|
||||
ChannelFuture sendFileFuture;
|
||||
ChannelFuture lastContentFuture;
|
||||
if (ctx.pipeline().get(SslHandler.class) == null) {
|
||||
sendFileFuture =
|
||||
ctx.write(new DefaultFileRegion(raf.getChannel(), 0, fileLength), ctx.newProgressivePromise());
|
||||
// Write the end marker.
|
||||
lastContentFuture = ctx.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
|
||||
} else {
|
||||
sendFileFuture =
|
||||
ctx.write(new HttpChunkedInput(new ChunkedFile(raf, 0, fileLength, 8192)),
|
||||
ctx.newProgressivePromise());
|
||||
// HttpChunkedInput will write the end marker (LastHttpContent) for us.
|
||||
lastContentFuture = sendFileFuture;
|
||||
}
|
||||
|
||||
sendFileFuture.addListener(new ChannelProgressiveFutureListener() {
|
||||
@ -211,9 +216,6 @@ public class HttpStaticFileServerHandler extends SimpleChannelInboundHandler<Ful
|
||||
}
|
||||
});
|
||||
|
||||
// Write the end marker
|
||||
ChannelFuture lastContentFuture = ctx.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
|
||||
|
||||
// Decide whether to close the connection or not.
|
||||
if (!HttpHeaders.isKeepAlive(request)) {
|
||||
// Close the connection when the whole content is written out.
|
||||
|
Loading…
Reference in New Issue
Block a user