Home / Class/ PerMessageDeflateEncoder Class — netty Architecture

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;
        }
    }

}

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