public abstract class FrameDecoder
extends io.netty.channel.ChannelInboundHandlerAdapter
InboundMessageHandler for processing.
Handles work stashing, and together with InboundMessageHandler - flow control.
Unlike most Netty inbound handlers, doesn't use the pipeline to talk to its
upstream handler. Instead, a FrameDecoder.FrameProcessor must be registered with
the frame decoder, to be invoked on new frames. See deliver(FrameProcessor).
See activate(FrameProcessor), reactivate(), and FrameDecoder.FrameProcessor
for flow control implementation.
Five frame decoders currently exist, one used for each connection depending on flags and messaging version:
1. FrameDecoderCrc:
no compression; payload is protected by CRC32
2. FrameDecoderLZ4:
LZ4 compression with custom frame format; payload is protected by CRC32
3. FrameDecoderUnprotected:
no compression; no integrity protection
4. FrameDecoderLegacy:
no compression; no integrity protection; turns unframed streams of legacy messages (< 4.0) into frames
5. FrameDecoderLegacyLZ4
LZ4 compression using standard LZ4 frame format; groups legacy messages (< 4.0) into frames| Modifier and Type | Class and Description |
|---|---|
static class |
FrameDecoder.CorruptFrame
A corrupted frame was encountered; this represents the knowledge we have about this frame,
and whether or not the stream is recoverable.
|
static class |
FrameDecoder.Frame |
static interface |
FrameDecoder.FrameProcessor |
static class |
FrameDecoder.IntactFrame
The payload bytes of a complete frame, i.e.
|
| Modifier and Type | Field and Description |
|---|---|
protected BufferPoolAllocator |
allocator |
| Modifier and Type | Method and Description |
|---|---|
void |
activate(FrameDecoder.FrameProcessor processor)
For use by InboundMessageHandler (or other upstream handlers) that want to start receiving frames.
|
void |
channelInactive(io.netty.channel.ChannelHandlerContext ctx) |
void |
channelRead(io.netty.channel.ChannelHandlerContext ctx,
java.lang.Object msg)
Called by Netty pipeline when a new message arrives; we anticipate in normal operation
this will receive messages of type
BufferPoolAllocator.Wrapped or
BufferPoolAllocator.Wrapped. |
void |
channelReadComplete(io.netty.channel.ChannelHandlerContext ctx) |
void |
discard()
For use by InboundMessageHandler (or other upstream handlers) that want to permanently
stop receiving frames, e.g.
|
void |
handlerAdded(io.netty.channel.ChannelHandlerContext ctx) |
channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggeredensureNotSharable, handlerRemoved, isSharableprotected final BufferPoolAllocator allocator
public void activate(FrameDecoder.FrameProcessor processor)
public void discard()
public void channelRead(io.netty.channel.ChannelHandlerContext ctx,
java.lang.Object msg)
throws java.io.IOException
BufferPoolAllocator.Wrapped or
BufferPoolAllocator.Wrapped.
These buffers are unwrapped and passed to decode(Collection, ShareableBytes),
which collects decoded frames into frames, which we send upstream in deliver(org.apache.cassandra.net.FrameDecoder.FrameProcessor)channelRead in interface io.netty.channel.ChannelInboundHandlerchannelRead in class io.netty.channel.ChannelInboundHandlerAdapterjava.io.IOExceptionpublic void channelReadComplete(io.netty.channel.ChannelHandlerContext ctx)
channelReadComplete in interface io.netty.channel.ChannelInboundHandlerchannelReadComplete in class io.netty.channel.ChannelInboundHandlerAdapterpublic void handlerAdded(io.netty.channel.ChannelHandlerContext ctx)
handlerAdded in interface io.netty.channel.ChannelHandlerhandlerAdded in class io.netty.channel.ChannelHandlerAdapterpublic void channelInactive(io.netty.channel.ChannelHandlerContext ctx)
channelInactive in interface io.netty.channel.ChannelInboundHandlerchannelInactive in class io.netty.channel.ChannelInboundHandlerAdapterCopyright © 2009-2020 The Apache Software Foundation