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
92cec8d2ac
commit
845a7c5753
@ -93,42 +93,46 @@ public abstract class HttpObjectEncoder<H extends HttpMessage> extends MessageTo
|
|||||||
state = ST_INIT;
|
state = ST_INIT;
|
||||||
}
|
}
|
||||||
} else if (state == ST_CONTENT_CHUNK) {
|
} else if (state == ST_CONTENT_CHUNK) {
|
||||||
if (contentLength > 0) {
|
encodeChunkedContent(ctx, msg, contentLength, out);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
throw new Error();
|
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
|
@Override
|
||||||
public boolean acceptOutboundMessage(Object msg) throws Exception {
|
public boolean acceptOutboundMessage(Object msg) throws Exception {
|
||||||
return msg instanceof HttpObject || msg instanceof ByteBuf || msg instanceof FileRegion;
|
return msg instanceof HttpObject || msg instanceof ByteBuf || msg instanceof FileRegion;
|
||||||
|
Loading…
Reference in New Issue
Block a user