syntax = "proto3";

package envoy.config.filter.http.gzip.v2;

import "envoy/config/filter/http/compressor/v2/compressor.proto";

import "google/protobuf/wrappers.proto";

import "udpa/annotations/migrate.proto";
import "udpa/annotations/status.proto";
import "validate/validate.proto";

option java_package = "io.envoyproxy.envoy.config.filter.http.gzip.v2";
option java_outer_classname = "GzipProto";
option java_multiple_files = true;
option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/filter/http/gzip/v2;gzipv2";
option (udpa.annotations.file_migrate).move_to_package = "envoy.extensions.filters.http.gzip.v3";
option (udpa.annotations.file_status).package_version_status = FROZEN;

// [#protodoc-title: Gzip]

// [#next-free-field: 11]
message Gzip {
  enum CompressionStrategy {
    DEFAULT = 0;
    FILTERED = 1;
    HUFFMAN = 2;
    RLE = 3;
  }

  message CompressionLevel {
    enum Enum {
      DEFAULT = 0;
      BEST = 1;
      SPEED = 2;
    }
  }

  // Value from 1 to 9 that controls the amount of internal memory used by zlib. Higher values
  // use more memory, but are faster and produce better compression results. The default value is 5.
  google.protobuf.UInt32Value memory_level = 1 [(validate.rules).uint32 = {lte: 9 gte: 1}];

  // Minimum response length, in bytes, which will trigger compression. The default value is 30.
  // .. attention:
  //
  //    **This field is deprecated**. Set the `compressor` field instead.
  google.protobuf.UInt32Value content_length = 2 [deprecated = true];

  // A value used for selecting the zlib compression level. This setting will affect speed and
  // amount of compression applied to the content. "BEST" provides higher compression at the cost of
  // higher latency, "SPEED" provides lower compression with minimum impact on response time.
  // "DEFAULT" provides an optimal result between speed and compression. This field will be set to
  // "DEFAULT" if not specified.
  CompressionLevel.Enum compression_level = 3 [(validate.rules).enum = {defined_only: true}];

  // A value used for selecting the zlib compression strategy which is directly related to the
  // characteristics of the content. Most of the time "DEFAULT" will be the best choice, though
  // there are situations which changing this parameter might produce better results. For example,
  // run-length encoding (RLE) is typically used when the content is known for having sequences
  // which same data occurs many consecutive times. For more information about each strategy, please
  // refer to zlib manual.
  CompressionStrategy compression_strategy = 4 [(validate.rules).enum = {defined_only: true}];

  // Set of strings that allows specifying which mime-types yield compression; e.g.,
  // application/json, text/html, etc. When this field is not defined, compression will be applied
  // to the following mime-types: "application/javascript", "application/json",
  // "application/xhtml+xml", "image/svg+xml", "text/css", "text/html", "text/plain", "text/xml".
  // .. attention:
  //
  //    **This field is deprecated**. Set the `compressor` field instead.
  repeated string content_type = 6 [deprecated = true];

  // If true, disables compression when the response contains an etag header. When it is false, the
  // filter will preserve weak etags and remove the ones that require strong validation.
  // .. attention:
  //
  //    **This field is deprecated**. Set the `compressor` field instead.
  bool disable_on_etag_header = 7 [deprecated = true];

  // If true, removes accept-encoding from the request headers before dispatching it to the upstream
  // so that responses do not get compressed before reaching the filter.
  // .. attention:
  //
  //    **This field is deprecated**. Set the `compressor` field instead.
  bool remove_accept_encoding_header = 8 [deprecated = true];

  // Value from 9 to 15 that represents the base two logarithmic of the compressor's window size.
  // Larger window results in better compression at the expense of memory usage. The default is 12
  // which will produce a 4096 bytes window. For more details about this parameter, please refer to
  // zlib manual > deflateInit2.
  google.protobuf.UInt32Value window_bits = 9 [(validate.rules).uint32 = {lte: 15 gte: 9}];

  // Set of configuration parameters common for all compression filters. If this field is set then
  // the fields `content_length`, `content_type`, `disable_on_etag_header` and
  // `remove_accept_encoding_header` are ignored.
  compressor.v2.Compressor compressor = 10;
}
