Move encode of chunked content to an extra method, this allows for inline. Related to #1812
encode of chunked content is not the most common pattern so moving it to an extra method makes it possible to inline the rest as it is a smaller method now.
This commit is contained in:
parent
9331226406
commit
e46ba9e8de
@ -93,42 +93,46 @@ public abstract class HttpObjectEncoder<H extends HttpMessage> extends MessageTo
|
||||
state = ST_INIT;
|
||||
}
|
||||
} else if (state == ST_CONTENT_CHUNK) {
|
||||
if (contentLength > 0) {
|
||||
byte[] length = Integer.toHexString(contentLength).getBytes(CharsetUtil.US_ASCII);
|
||||
ByteBuf buf = ctx.alloc().buffer(length.length + 2);
|
||||
buf.writeBytes(length);
|
||||
buf.writeBytes(CRLF);
|
||||
out.add(buf);
|
||||
out.add(encodeAndRetain(msg));
|
||||
out.add(CRLF_BUF.duplicate());
|
||||
}
|
||||
|
||||
if (msg instanceof LastHttpContent) {
|
||||
HttpHeaders headers = ((LastHttpContent) msg).trailingHeaders();
|
||||
if (headers.isEmpty()) {
|
||||
out.add(ZERO_CRLF_CRLF_BUF.duplicate());
|
||||
} else {
|
||||
ByteBuf buf = ctx.alloc().buffer();
|
||||
buf.writeBytes(ZERO_CRLF);
|
||||
encodeHeaders(buf, headers);
|
||||
buf.writeBytes(CRLF);
|
||||
out.add(buf);
|
||||
}
|
||||
|
||||
state = ST_INIT;
|
||||
} else {
|
||||
if (contentLength == 0) {
|
||||
// Need to produce some output otherwise an
|
||||
// IllegalstateException will be thrown
|
||||
out.add(EMPTY_BUFFER);
|
||||
}
|
||||
}
|
||||
encodeChunkedContent(ctx, msg, contentLength, out);
|
||||
} else {
|
||||
throw new Error();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void encodeChunkedContent(ChannelHandlerContext ctx, Object msg, int contentLength, List<Object> out) {
|
||||
if (contentLength > 0) {
|
||||
byte[] length = Integer.toHexString(contentLength).getBytes(CharsetUtil.US_ASCII);
|
||||
ByteBuf buf = ctx.alloc().buffer(length.length + 2);
|
||||
buf.writeBytes(length);
|
||||
buf.writeBytes(CRLF);
|
||||
out.add(buf);
|
||||
out.add(encodeAndRetain(msg));
|
||||
out.add(CRLF_BUF.duplicate());
|
||||
}
|
||||
|
||||
if (msg instanceof LastHttpContent) {
|
||||
HttpHeaders headers = ((LastHttpContent) msg).trailingHeaders();
|
||||
if (headers.isEmpty()) {
|
||||
out.add(ZERO_CRLF_CRLF_BUF.duplicate());
|
||||
} else {
|
||||
ByteBuf buf = ctx.alloc().buffer();
|
||||
buf.writeBytes(ZERO_CRLF);
|
||||
encodeHeaders(buf, headers);
|
||||
buf.writeBytes(CRLF);
|
||||
out.add(buf);
|
||||
}
|
||||
|
||||
state = ST_INIT;
|
||||
} else {
|
||||
if (contentLength == 0) {
|
||||
// Need to produce some output otherwise an
|
||||
// IllegalstateException will be thrown
|
||||
out.add(EMPTY_BUFFER);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptOutboundMessage(Object msg) throws Exception {
|
||||
return msg instanceof HttpObject || msg instanceof ByteBuf || msg instanceof FileRegion;
|
||||
|
Loading…
Reference in New Issue
Block a user