DeflateDecoder Class — netty Architecture
Architecture documentation for the DeflateDecoder class in DeflateDecoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 42259036_5c94_ec21_9d9a_f9cda6ed6e54["DeflateDecoder"] 245e585d_791f_2180_22d0_325a850f78b8["DeflateDecoder.java"] 42259036_5c94_ec21_9d9a_f9cda6ed6e54 -->|defined in| 245e585d_791f_2180_22d0_325a850f78b8 1e732325_97eb_9174_4893_763c72b0238e["DeflateDecoder()"] 42259036_5c94_ec21_9d9a_f9cda6ed6e54 -->|method| 1e732325_97eb_9174_4893_763c72b0238e 001d6266_558b_dc78_dc88_64e1f5a72039["WebSocketExtensionFilter()"] 42259036_5c94_ec21_9d9a_f9cda6ed6e54 -->|method| 001d6266_558b_dc78_dc88_64e1f5a72039 507ed1f8_ae2a_8bfd_39e5_4457113d2837["appendFrameTail()"] 42259036_5c94_ec21_9d9a_f9cda6ed6e54 -->|method| 507ed1f8_ae2a_8bfd_39e5_4457113d2837 62bf3801_45d0_4bd1_bee0_99acc0429aa3["newRsv()"] 42259036_5c94_ec21_9d9a_f9cda6ed6e54 -->|method| 62bf3801_45d0_4bd1_bee0_99acc0429aa3 fb637de4_d05f_0309_5edc_a6707ab4cccb["decode()"] 42259036_5c94_ec21_9d9a_f9cda6ed6e54 -->|method| fb637de4_d05f_0309_5edc_a6707ab4cccb 54ea9670_933b_21f7_8163_a658686fef33["handlerRemoved()"] 42259036_5c94_ec21_9d9a_f9cda6ed6e54 -->|method| 54ea9670_933b_21f7_8163_a658686fef33 22f1dbec_4f45_3332_5439_555608357adf["channelInactive()"] 42259036_5c94_ec21_9d9a_f9cda6ed6e54 -->|method| 22f1dbec_4f45_3332_5439_555608357adf 82e2e233_0a09_a0ee_cf5b_f63c2adbdd16["ByteBuf()"] 42259036_5c94_ec21_9d9a_f9cda6ed6e54 -->|method| 82e2e233_0a09_a0ee_cf5b_f63c2adbdd16 7f7b9aa8_4ffe_38a1_2a50_c6bab89f05e5["cleanup()"] 42259036_5c94_ec21_9d9a_f9cda6ed6e54 -->|method| 7f7b9aa8_4ffe_38a1_2a50_c6bab89f05e5
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/compression/DeflateDecoder.java lines 42–166
abstract class DeflateDecoder extends WebSocketExtensionDecoder {
static final ByteBuf FRAME_TAIL = Unpooled.unreleasableBuffer(
Unpooled.wrappedBuffer(new byte[] {0x00, 0x00, (byte) 0xff, (byte) 0xff}))
.asReadOnly();
static final ByteBuf EMPTY_DEFLATE_BLOCK = Unpooled.unreleasableBuffer(
Unpooled.wrappedBuffer(new byte[] { 0x00 }))
.asReadOnly();
private final boolean noContext;
private final WebSocketExtensionFilter extensionDecoderFilter;
private final int maxAllocation;
private EmbeddedChannel decoder;
/**
* Constructor
*
* @param noContext true to disable context takeover.
* @param extensionDecoderFilter extension decoder filter.
*/
DeflateDecoder(boolean noContext, WebSocketExtensionFilter extensionDecoderFilter, int maxAllocation) {
this.noContext = noContext;
this.extensionDecoderFilter = checkNotNull(extensionDecoderFilter, "extensionDecoderFilter");
this.maxAllocation = maxAllocation;
}
/**
* Returns the extension decoder filter.
*/
protected WebSocketExtensionFilter extensionDecoderFilter() {
return extensionDecoderFilter;
}
protected abstract boolean appendFrameTail(WebSocketFrame msg);
protected abstract int newRsv(WebSocketFrame msg);
@Override
protected void decode(ChannelHandlerContext ctx, WebSocketFrame msg, List<Object> out) throws Exception {
final ByteBuf decompressedContent = decompressContent(ctx, msg);
final WebSocketFrame outMsg;
if (msg instanceof TextWebSocketFrame) {
outMsg = new TextWebSocketFrame(msg.isFinalFragment(), newRsv(msg), decompressedContent);
} else if (msg instanceof BinaryWebSocketFrame) {
outMsg = new BinaryWebSocketFrame(msg.isFinalFragment(), newRsv(msg), decompressedContent);
} else if (msg instanceof ContinuationWebSocketFrame) {
outMsg = new ContinuationWebSocketFrame(msg.isFinalFragment(), newRsv(msg), decompressedContent);
} else {
throw new CodecException("unexpected frame type: " + msg.getClass().getName());
}
out.add(outMsg);
}
@Override
public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
cleanup();
super.handlerRemoved(ctx);
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
cleanup();
super.channelInactive(ctx);
}
private ByteBuf decompressContent(ChannelHandlerContext ctx, WebSocketFrame msg) {
if (decoder == null) {
if (!(msg instanceof TextWebSocketFrame) && !(msg instanceof BinaryWebSocketFrame)) {
throw new CodecException("unexpected initial frame type: " + msg.getClass().getName());
}
decoder = EmbeddedChannel.builder()
.handlers(ZlibCodecFactory.newZlibDecoder(ZlibWrapper.NONE, maxAllocation))
.build();
}
boolean readable = msg.content().isReadable();
boolean emptyDeflateBlock = EMPTY_DEFLATE_BLOCK.equals(msg.content());
Source
Frequently Asked Questions
What is the DeflateDecoder class?
DeflateDecoder is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/compression/DeflateDecoder.java.
Where is DeflateDecoder defined?
DeflateDecoder is defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/compression/DeflateDecoder.java at line 42.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free