DeflateEncoder Class — netty Architecture
Architecture documentation for the DeflateEncoder class in DeflateEncoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 3e2d1413_1ae5_e37c_290b_57bfb2bcef3b["DeflateEncoder"] 29ec22bc_6790_b5e6_9fb9_17f1e4c04901["DeflateEncoder.java"] 3e2d1413_1ae5_e37c_290b_57bfb2bcef3b -->|defined in| 29ec22bc_6790_b5e6_9fb9_17f1e4c04901 1219c019_8461_8eff_b573_46486ddeb031["DeflateEncoder()"] 3e2d1413_1ae5_e37c_290b_57bfb2bcef3b -->|method| 1219c019_8461_8eff_b573_46486ddeb031 46361d11_83a3_62c3_6000_f3c54c59a185["WebSocketExtensionFilter()"] 3e2d1413_1ae5_e37c_290b_57bfb2bcef3b -->|method| 46361d11_83a3_62c3_6000_f3c54c59a185 bb225e07_e5ba_a989_94c1_9124f03babdb["rsv()"] 3e2d1413_1ae5_e37c_290b_57bfb2bcef3b -->|method| bb225e07_e5ba_a989_94c1_9124f03babdb c9f595db_eee6_5a26_839f_89649b69e378["removeFrameTail()"] 3e2d1413_1ae5_e37c_290b_57bfb2bcef3b -->|method| c9f595db_eee6_5a26_839f_89649b69e378 4584d63c_2bfa_360c_1fe1_572d00814f47["encode()"] 3e2d1413_1ae5_e37c_290b_57bfb2bcef3b -->|method| 4584d63c_2bfa_360c_1fe1_572d00814f47 c76df0b0_aebe_148b_20b7_0aa71dd53dfc["handlerRemoved()"] 3e2d1413_1ae5_e37c_290b_57bfb2bcef3b -->|method| c76df0b0_aebe_148b_20b7_0aa71dd53dfc 8d7d3ab9_dfc3_34dd_a261_4cec62c8a737["ByteBuf()"] 3e2d1413_1ae5_e37c_290b_57bfb2bcef3b -->|method| 8d7d3ab9_dfc3_34dd_a261_4cec62c8a737 26a67d80_d395_9e0d_89dd_ee6bdf9c7f91["cleanup()"] 3e2d1413_1ae5_e37c_290b_57bfb2bcef3b -->|method| 26a67d80_d395_9e0d_89dd_ee6bdf9c7f91
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/compression/DeflateEncoder.java lines 42–168
abstract class DeflateEncoder extends WebSocketExtensionEncoder {
private final int compressionLevel;
private final int windowSize;
private final boolean noContext;
private final WebSocketExtensionFilter extensionEncoderFilter;
private EmbeddedChannel encoder;
/**
* Constructor
* @param compressionLevel compression level of the compressor.
* @param windowSize maximum size of the window compressor buffer.
* @param noContext true to disable context takeover.
* @param extensionEncoderFilter extension encoder filter.
*/
DeflateEncoder(int compressionLevel, int windowSize, boolean noContext,
WebSocketExtensionFilter extensionEncoderFilter) {
this.compressionLevel = compressionLevel;
this.windowSize = windowSize;
this.noContext = noContext;
this.extensionEncoderFilter = checkNotNull(extensionEncoderFilter, "extensionEncoderFilter");
}
/**
* Returns the extension encoder filter.
*/
protected WebSocketExtensionFilter extensionEncoderFilter() {
return extensionEncoderFilter;
}
/**
* @param msg the current frame.
* @return the rsv bits to set in the compressed frame.
*/
protected abstract int rsv(WebSocketFrame msg);
/**
* @param msg the current frame.
* @return true if compressed payload tail needs to be removed.
*/
protected abstract boolean removeFrameTail(WebSocketFrame msg);
@Override
protected void encode(ChannelHandlerContext ctx, WebSocketFrame msg, List<Object> out) throws Exception {
final ByteBuf compressedContent;
if (msg.content().isReadable()) {
compressedContent = compressContent(ctx, msg);
} else if (msg.isFinalFragment()) {
// Set empty DEFLATE block manually for unknown buffer size
// https://tools.ietf.org/html/rfc7692#section-7.2.3.6
compressedContent = EMPTY_DEFLATE_BLOCK.duplicate();
} else {
throw new CodecException("cannot compress content buffer");
}
final WebSocketFrame outMsg;
if (msg instanceof TextWebSocketFrame) {
outMsg = new TextWebSocketFrame(msg.isFinalFragment(), rsv(msg), compressedContent);
} else if (msg instanceof BinaryWebSocketFrame) {
outMsg = new BinaryWebSocketFrame(msg.isFinalFragment(), rsv(msg), compressedContent);
} else if (msg instanceof ContinuationWebSocketFrame) {
outMsg = new ContinuationWebSocketFrame(msg.isFinalFragment(), rsv(msg), compressedContent);
} 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);
}
private ByteBuf compressContent(ChannelHandlerContext ctx, WebSocketFrame msg) {
if (encoder == null) {
encoder = EmbeddedChannel.builder()
.handlers(ZlibCodecFactory.newZlibEncoder(
ZlibWrapper.NONE, compressionLevel, windowSize, 8))
Source
Frequently Asked Questions
What is the DeflateEncoder class?
DeflateEncoder is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/compression/DeflateEncoder.java.
Where is DeflateEncoder defined?
DeflateEncoder is defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/compression/DeflateEncoder.java at line 42.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free