PerMessageDeflateEncoder Class — netty Architecture
Architecture documentation for the PerMessageDeflateEncoder class in PerMessageDeflateEncoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 93003064_514e_ab61_d358_fa9c1acbd065["PerMessageDeflateEncoder"] d0042986_0e9c_74a3_c770_3c698f6b6044["PerMessageDeflateEncoder.java"] 93003064_514e_ab61_d358_fa9c1acbd065 -->|defined in| d0042986_0e9c_74a3_c770_3c698f6b6044 2283fb9e_27a3_edf1_49ff_013c5d91e005["PerMessageDeflateEncoder()"] 93003064_514e_ab61_d358_fa9c1acbd065 -->|method| 2283fb9e_27a3_edf1_49ff_013c5d91e005 7fa19f35_10d6_2693_6ef0_b240519d2d94["acceptOutboundMessage()"] 93003064_514e_ab61_d358_fa9c1acbd065 -->|method| 7fa19f35_10d6_2693_6ef0_b240519d2d94 ee7484dc_8cbc_c856_4d29_fc5fe13bff90["rsv()"] 93003064_514e_ab61_d358_fa9c1acbd065 -->|method| ee7484dc_8cbc_c856_4d29_fc5fe13bff90 75e8449b_684c_6e59_e8ae_21da9acf9632["removeFrameTail()"] 93003064_514e_ab61_d358_fa9c1acbd065 -->|method| 75e8449b_684c_6e59_e8ae_21da9acf9632 329e9f25_777c_c67e_c89c_463e7a4002e7["encode()"] 93003064_514e_ab61_d358_fa9c1acbd065 -->|method| 329e9f25_777c_c67e_c89c_463e7a4002e7
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/compression/PerMessageDeflateEncoder.java lines 31–101
class PerMessageDeflateEncoder extends DeflateEncoder {
private boolean compressing;
/**
* Constructor
*
* @param compressionLevel compression level of the compressor.
* @param windowSize maximum size of the window compressor buffer.
* @param noContext true to disable context takeover.
*/
PerMessageDeflateEncoder(int compressionLevel, int windowSize, boolean noContext) {
super(compressionLevel, windowSize, noContext, WebSocketExtensionFilter.NEVER_SKIP);
}
/**
* 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 filter for per message deflate encoder.
*/
PerMessageDeflateEncoder(int compressionLevel, int windowSize, boolean noContext,
WebSocketExtensionFilter extensionEncoderFilter) {
super(compressionLevel, windowSize, noContext, extensionEncoderFilter);
}
@Override
public boolean acceptOutboundMessage(Object msg) throws Exception {
if (!super.acceptOutboundMessage(msg)) {
return false;
}
WebSocketFrame wsFrame = (WebSocketFrame) msg;
if (extensionEncoderFilter().mustSkip(wsFrame)) {
if (compressing) {
throw new IllegalStateException("Cannot skip per message deflate encoder, compression in progress");
}
return false;
}
return ((wsFrame instanceof TextWebSocketFrame || wsFrame instanceof BinaryWebSocketFrame) &&
(wsFrame.rsv() & WebSocketExtension.RSV1) == 0) ||
(wsFrame instanceof ContinuationWebSocketFrame && compressing);
}
@Override
protected int rsv(WebSocketFrame msg) {
return msg instanceof TextWebSocketFrame || msg instanceof BinaryWebSocketFrame?
msg.rsv() | WebSocketExtension.RSV1 : msg.rsv();
}
@Override
protected boolean removeFrameTail(WebSocketFrame msg) {
return msg.isFinalFragment();
}
@Override
protected void encode(ChannelHandlerContext ctx, WebSocketFrame msg,
List<Object> out) throws Exception {
super.encode(ctx, msg, out);
if (msg.isFinalFragment()) {
compressing = false;
} else if (msg instanceof TextWebSocketFrame || msg instanceof BinaryWebSocketFrame) {
compressing = true;
}
}
}
Source
Frequently Asked Questions
What is the PerMessageDeflateEncoder class?
PerMessageDeflateEncoder is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/compression/PerMessageDeflateEncoder.java.
Where is PerMessageDeflateEncoder defined?
PerMessageDeflateEncoder is defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/compression/PerMessageDeflateEncoder.java at line 31.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free