Package io.netty.handler.codec.http
Class HttpObjectEncoder<H extends HttpMessage>
java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelOutboundHandlerAdapter
io.netty.handler.codec.MessageToMessageEncoder<Object>
io.netty.handler.codec.http.HttpObjectEncoder<H>
- All Implemented Interfaces:
ChannelHandler,ChannelOutboundHandler
- Direct Known Subclasses:
HttpRequestEncoder,HttpResponseEncoder,RtspEncoder,RtspObjectEncoder
public abstract class HttpObjectEncoder<H extends HttpMessage>
extends MessageToMessageEncoder<Object>
Encodes an
HttpMessage or an HttpContent into
a ByteBuf.
Extensibility
Please note that this encoder is designed to be extended to implement a protocol derived from HTTP, such as RTSP and ICAP. To implement the encoder of such a derived protocol, extend this class and implement all abstract methods properly.-
Nested Class Summary
Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
ChannelHandler.Sharable -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final intprivate static final ByteBuf(package private) static final intprivate static final floatprivate static final floatprivate floatUsed to calculate an exponential moving average of the encoded size of the initial line and the headers for a guess for future buffer allocations.private static final intprivate static final intprivate static final intprivate static final intprivate intprivate static final floatprivate static final floatprivate floatUsed to calculate an exponential moving average of the encoded size of the trailers for a guess for future buffer allocations.private static final byte[]private static final ByteBufprivate static final int -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanReturnstrueif the given message should be handled.private static voidaddEncodedLengthHex(ChannelHandlerContext ctx, long contentLength, List<Object> out) private static booleanbypassEncoderIfEmpty(ByteBuf msg, List<Object> out) private static booleancheckContentState(int state) protected voidencode(ChannelHandlerContext ctx, Object msg, List<Object> out) Encode from one message to an other.protected static voidencodeAscii(String s, ByteBuf buf) Deprecated.private voidencodeByteBufAndTrailers(int state, ChannelHandlerContext ctx, List<Object> out, ByteBuf content, HttpHeaders trailingHeaders) private voidencodeByteBufContent(ChannelHandlerContext ctx, ByteBuf content, List<Object> out) private voidencodeByteBufHttpContent(int state, ChannelHandlerContext ctx, ByteBuf buf, ByteBuf content, HttpHeaders trailingHeaders, List<Object> out) private voidencodeChunkedHttpContent(ChannelHandlerContext ctx, ByteBuf content, HttpHeaders trailingHeaders, List<Object> out) private static booleanencodeContentNonChunk(List<Object> out, ByteBuf buf, ByteBuf content) private static voidencodedChunkedFileRegionContent(ChannelHandlerContext ctx, FileRegion msg, List<Object> out) private static intencodeEmptyLastHttpContent(int state, List<Object> out) private voidencodeFileRegionContent(ChannelHandlerContext ctx, FileRegion msg, List<Object> out) private voidencodeFullHttpMessage(ChannelHandlerContext ctx, Object o, List<Object> out) protected voidencodeHeaders(HttpHeaders headers, ByteBuf buf) Encode theHttpHeadersinto aByteBuf.private voidencodeHttpContent(ChannelHandlerContext ctx, HttpContent msg, List<Object> out) private voidencodeHttpMessageLastContent(ChannelHandlerContext ctx, H m, List<Object> out) private voidencodeHttpMessageNotLastContent(ChannelHandlerContext ctx, H m, List<Object> out) private ByteBufprotected abstract voidencodeInitialLine(ByteBuf buf, H message) private voidencodeJustHttpMessage(ChannelHandlerContext ctx, H m, List<Object> out) private voidencodeLastHttpContent(ChannelHandlerContext ctx, LastHttpContent msg, List<Object> out) private voidencodeNotHttpMessageContentTypes(ChannelHandlerContext ctx, Object msg, List<Object> out) private voidencodeTrailingHeaders(ChannelHandlerContext ctx, HttpHeaders trailingHeaders, List<Object> out) protected booleanisContentAlwaysEmpty(H msg) Determine whether a message has a content or not.private static intpadSizeForAccumulation(int readableBytes) Add some additional overhead to the buffer.protected voidsanitizeHeadersBeforeEncode(H msg, boolean isAlwaysEmpty) Allows to sanitize headers of the message before encoding these.private static voidthrowUnexpectedMessageTypeEx(Object msg, int state) voidwrite(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) CallsChannelOutboundInvoker.write(Object, ChannelPromise)to forward to the nextChannelOutboundHandlerin theChannelPipeline.private static voidwriteOutList(ChannelHandlerContext ctx, List<Object> out, ChannelPromise promise) private static voidwritePromiseCombiner(ChannelHandlerContext ctx, List<Object> out, ChannelPromise promise) private static voidwriteVoidPromise(ChannelHandlerContext ctx, List<Object> out) Methods inherited from class io.netty.channel.ChannelOutboundHandlerAdapter
bind, close, connect, deregister, disconnect, flush, readMethods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, exceptionCaught, handlerAdded, handlerRemoved, isSharableMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface io.netty.channel.ChannelHandler
exceptionCaught, handlerAdded, handlerRemoved
-
Field Details
-
COPY_CONTENT_THRESHOLD
private static final int COPY_CONTENT_THRESHOLD- See Also:
-
CRLF_SHORT
static final int CRLF_SHORT- See Also:
-
ZERO_CRLF_MEDIUM
private static final int ZERO_CRLF_MEDIUM- See Also:
-
ZERO_CRLF_CRLF
private static final byte[] ZERO_CRLF_CRLF -
CRLF_BUF
-
ZERO_CRLF_CRLF_BUF
-
HEADERS_WEIGHT_NEW
private static final float HEADERS_WEIGHT_NEW- See Also:
-
HEADERS_WEIGHT_HISTORICAL
private static final float HEADERS_WEIGHT_HISTORICAL- See Also:
-
TRAILERS_WEIGHT_NEW
private static final float TRAILERS_WEIGHT_NEW- See Also:
-
TRAILERS_WEIGHT_HISTORICAL
private static final float TRAILERS_WEIGHT_HISTORICAL- See Also:
-
ST_INIT
private static final int ST_INIT- See Also:
-
ST_CONTENT_NON_CHUNK
private static final int ST_CONTENT_NON_CHUNK- See Also:
-
ST_CONTENT_CHUNK
private static final int ST_CONTENT_CHUNK- See Also:
-
ST_CONTENT_ALWAYS_EMPTY
private static final int ST_CONTENT_ALWAYS_EMPTY- See Also:
-
state
private int state -
headersEncodedSizeAccumulator
private float headersEncodedSizeAccumulatorUsed to calculate an exponential moving average of the encoded size of the initial line and the headers for a guess for future buffer allocations. -
trailersEncodedSizeAccumulator
private float trailersEncodedSizeAccumulatorUsed to calculate an exponential moving average of the encoded size of the trailers for a guess for future buffer allocations. -
out
-
-
Constructor Details
-
HttpObjectEncoder
public HttpObjectEncoder()
-
-
Method Details
-
checkContentState
private static boolean checkContentState(int state) -
write
Description copied from class:ChannelOutboundHandlerAdapterCallsChannelOutboundInvoker.write(Object, ChannelPromise)to forward to the nextChannelOutboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
writein interfaceChannelOutboundHandler- Overrides:
writein classMessageToMessageEncoder<Object>- Parameters:
ctx- theChannelHandlerContextfor which the write operation is mademsg- the message to writepromise- theChannelPromiseto notify once the operation completes- Throws:
Exception- thrown if an error occurs
-
writeOutList
private static void writeOutList(ChannelHandlerContext ctx, List<Object> out, ChannelPromise promise) -
writeVoidPromise
-
writePromiseCombiner
private static void writePromiseCombiner(ChannelHandlerContext ctx, List<Object> out, ChannelPromise promise) -
encode
Description copied from class:MessageToMessageEncoderEncode from one message to an other. This method will be called for each written message that can be handled by this encoder.- Specified by:
encodein classMessageToMessageEncoder<Object>- Parameters:
ctx- theChannelHandlerContextwhich thisMessageToMessageEncoderbelongs tomsg- the message to encode to an other oneout- theListinto which the encoded msg should be added needs to do some kind of aggregation- Throws:
Exception- is thrown if an error occurs
-
encodeJustHttpMessage
private void encodeJustHttpMessage(ChannelHandlerContext ctx, H m, List<Object> out) throws Exception - Throws:
Exception
-
encodeByteBufHttpContent
private void encodeByteBufHttpContent(int state, ChannelHandlerContext ctx, ByteBuf buf, ByteBuf content, HttpHeaders trailingHeaders, List<Object> out) -
encodeHttpMessageNotLastContent
private void encodeHttpMessageNotLastContent(ChannelHandlerContext ctx, H m, List<Object> out) throws Exception - Throws:
Exception
-
encodeHttpMessageLastContent
private void encodeHttpMessageLastContent(ChannelHandlerContext ctx, H m, List<Object> out) throws Exception - Throws:
Exception
-
encodeNotHttpMessageContentTypes
private void encodeNotHttpMessageContentTypes(ChannelHandlerContext ctx, Object msg, List<Object> out) -
encodeFullHttpMessage
private void encodeFullHttpMessage(ChannelHandlerContext ctx, Object o, List<Object> out) throws Exception - Throws:
Exception
-
encodeContentNonChunk
-
throwUnexpectedMessageTypeEx
-
encodeFileRegionContent
-
bypassEncoderIfEmpty
-
encodeByteBufContent
-
encodeEmptyLastHttpContent
-
encodeLastHttpContent
private void encodeLastHttpContent(ChannelHandlerContext ctx, LastHttpContent msg, List<Object> out) -
encodeHttpContent
-
encodeByteBufAndTrailers
private void encodeByteBufAndTrailers(int state, ChannelHandlerContext ctx, List<Object> out, ByteBuf content, HttpHeaders trailingHeaders) -
encodeChunkedHttpContent
private void encodeChunkedHttpContent(ChannelHandlerContext ctx, ByteBuf content, HttpHeaders trailingHeaders, List<Object> out) -
encodeTrailingHeaders
private void encodeTrailingHeaders(ChannelHandlerContext ctx, HttpHeaders trailingHeaders, List<Object> out) -
encodeInitHttpMessage
- Throws:
Exception
-
encodeHeaders
Encode theHttpHeadersinto aByteBuf. -
encodedChunkedFileRegionContent
private static void encodedChunkedFileRegionContent(ChannelHandlerContext ctx, FileRegion msg, List<Object> out) -
addEncodedLengthHex
private static void addEncodedLengthHex(ChannelHandlerContext ctx, long contentLength, List<Object> out) -
sanitizeHeadersBeforeEncode
Allows to sanitize headers of the message before encoding these. -
isContentAlwaysEmpty
Determine whether a message has a content or not. Some message may have headers indicating a content without having an actual content, e.g the response to an HEAD or CONNECT request.- Parameters:
msg- the message to test- Returns:
trueto signal the message has no content
-
acceptOutboundMessage
Description copied from class:MessageToMessageEncoderReturnstrueif the given message should be handled. Iffalseit will be passed to the nextChannelOutboundHandlerin theChannelPipeline.- Overrides:
acceptOutboundMessagein classMessageToMessageEncoder<Object>- Throws:
Exception
-
padSizeForAccumulation
private static int padSizeForAccumulation(int readableBytes) Add some additional overhead to the buffer. The rational is that it is better to slightly over allocate and waste some memory, rather than under allocate and require a resize/copy.- Parameters:
readableBytes- The readable bytes in the buffer.- Returns:
- The
readableByteswith some additional padding.
-
encodeAscii
Deprecated. -
encodeInitialLine
- Throws:
Exception
-