Home / Class/ CompressorHttp2ConnectionEncoder Class — netty Architecture

CompressorHttp2ConnectionEncoder Class — netty Architecture

Architecture documentation for the CompressorHttp2ConnectionEncoder class in CompressorHttp2ConnectionEncoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  8d787c1c_5f3d_4d80_1537_18462b224aaf["CompressorHttp2ConnectionEncoder"]
  132801ab_f5f3_3384_2091_8a230ecf9483["CompressorHttp2ConnectionEncoder.java"]
  8d787c1c_5f3d_4d80_1537_18462b224aaf -->|defined in| 132801ab_f5f3_3384_2091_8a230ecf9483
  a8d7ae06_b532_59bb_bf87_da372910c2dd["CompressorHttp2ConnectionEncoder()"]
  8d787c1c_5f3d_4d80_1537_18462b224aaf -->|method| a8d7ae06_b532_59bb_bf87_da372910c2dd
  0103adf6_a534_4791_ec3c_5e671a167d8c["defaultCompressionOptions()"]
  8d787c1c_5f3d_4d80_1537_18462b224aaf -->|method| 0103adf6_a534_4791_ec3c_5e671a167d8c
  379ae9ad_6cf0_7b95_0348_d4a8f9f0c7c1["ChannelFuture()"]
  8d787c1c_5f3d_4d80_1537_18462b224aaf -->|method| 379ae9ad_6cf0_7b95_0348_d4a8f9f0c7c1
  ad5be4b8_f500_4d94_8f0a_49015942574d["EmbeddedChannel()"]
  8d787c1c_5f3d_4d80_1537_18462b224aaf -->|method| ad5be4b8_f500_4d94_8f0a_49015942574d
  9133a6f7_1526_b3e2_3d9c_1f88b3ba4a62["CharSequence()"]
  8d787c1c_5f3d_4d80_1537_18462b224aaf -->|method| 9133a6f7_1526_b3e2_3d9c_1f88b3ba4a62
  05f589c3_391d_c20c_d485_95f6c4f2230c["bindCompressorToStream()"]
  8d787c1c_5f3d_4d80_1537_18462b224aaf -->|method| 05f589c3_391d_c20c_d485_95f6c4f2230c
  c2a3977b_4edd_973b_0b72_4eff08ff08ac["cleanup()"]
  8d787c1c_5f3d_4d80_1537_18462b224aaf -->|method| c2a3977b_4edd_973b_0b72_4eff08ff08ac
  b4e55b7b_85ba_020e_b75e_18673536c9de["ByteBuf()"]
  8d787c1c_5f3d_4d80_1537_18462b224aaf -->|method| b4e55b7b_85ba_020e_b75e_18673536c9de

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/CompressorHttp2ConnectionEncoder.java lines 63–460

public class CompressorHttp2ConnectionEncoder extends DecoratingHttp2ConnectionEncoder {
    // We cannot remove this because it'll be breaking change
    public static final int DEFAULT_COMPRESSION_LEVEL = 6;
    public static final int DEFAULT_WINDOW_BITS = 15;
    public static final int DEFAULT_MEM_LEVEL = 8;

    private int compressionLevel;
    private int windowBits;
    private int memLevel;
    private final Http2Connection.PropertyKey propertyKey;

    private final boolean supportsCompressionOptions;

    private BrotliOptions brotliOptions;
    private GzipOptions gzipCompressionOptions;
    private DeflateOptions deflateOptions;
    private ZstdOptions zstdOptions;
    private SnappyOptions snappyOptions;

    /**
     * Create a new {@link CompressorHttp2ConnectionEncoder} instance
     * with default implementation of {@link StandardCompressionOptions}
     */
    public CompressorHttp2ConnectionEncoder(Http2ConnectionEncoder delegate) {
        this(delegate, defaultCompressionOptions());
    }

    private static CompressionOptions[] defaultCompressionOptions() {
        List<CompressionOptions> compressionOptions = new ArrayList<CompressionOptions>();
        compressionOptions.add(StandardCompressionOptions.gzip());
        compressionOptions.add(StandardCompressionOptions.deflate());
        compressionOptions.add(StandardCompressionOptions.snappy());
        if (Brotli.isAvailable()) {
            compressionOptions.add(StandardCompressionOptions.brotli());
        }
        if (Zstd.isAvailable()) {
            compressionOptions.add(StandardCompressionOptions.zstd());
        }
        return compressionOptions.toArray(new CompressionOptions[0]);
    }

    /**
     * Create a new {@link CompressorHttp2ConnectionEncoder} instance
     */
    @Deprecated
    public CompressorHttp2ConnectionEncoder(Http2ConnectionEncoder delegate, int compressionLevel, int windowBits,
                                            int memLevel) {
        super(delegate);
        this.compressionLevel = ObjectUtil.checkInRange(compressionLevel, 0, 9, "compressionLevel");
        this.windowBits = ObjectUtil.checkInRange(windowBits, 9, 15, "windowBits");
        this.memLevel = ObjectUtil.checkInRange(memLevel, 1, 9, "memLevel");

        propertyKey = connection().newKey();
        connection().addListener(new Http2ConnectionAdapter() {
            @Override
            public void onStreamRemoved(Http2Stream stream) {
                final EmbeddedChannel compressor = stream.getProperty(propertyKey);
                if (compressor != null) {
                    cleanup(stream, compressor);
                }
            }
        });

        supportsCompressionOptions = false;
    }

    /**
     * Create a new {@link CompressorHttp2ConnectionEncoder} with
     * specified {@link StandardCompressionOptions}
     */
    public CompressorHttp2ConnectionEncoder(Http2ConnectionEncoder delegate,
                                            CompressionOptions... compressionOptionsArgs) {
        super(delegate);
        ObjectUtil.checkNotNull(compressionOptionsArgs, "CompressionOptions");
        ObjectUtil.deepCheckNotNull("CompressionOptions", compressionOptionsArgs);

        for (CompressionOptions compressionOptions : compressionOptionsArgs) {
            // BrotliOptions' class initialization depends on Brotli classes being on the classpath.
            // The Brotli.isAvailable check ensures that BrotliOptions will only get instantiated if Brotli is on
            // the classpath.
            // This results in the static analysis of native-image identifying the instanceof BrotliOptions check

Frequently Asked Questions

What is the CompressorHttp2ConnectionEncoder class?
CompressorHttp2ConnectionEncoder is a class in the netty codebase, defined in codec-http2/src/main/java/io/netty/handler/codec/http2/CompressorHttp2ConnectionEncoder.java.
Where is CompressorHttp2ConnectionEncoder defined?
CompressorHttp2ConnectionEncoder is defined in codec-http2/src/main/java/io/netty/handler/codec/http2/CompressorHttp2ConnectionEncoder.java at line 63.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free