1
#include "source/extensions/compression/gzip/compressor/config.h"
2

            
3
namespace Envoy {
4
namespace Extensions {
5
namespace Compression {
6
namespace Gzip {
7
namespace Compressor {
8

            
9
GzipCompressorFactory::GzipCompressorFactory(
10
    const envoy::extensions::compression::gzip::compressor::v3::Gzip& gzip)
11
71
    : compression_level_(compressionLevelEnum(gzip.compression_level())),
12
71
      compression_strategy_(compressionStrategyEnum(gzip.compression_strategy())),
13
71
      memory_level_(PROTOBUF_GET_WRAPPED_OR_DEFAULT(gzip, memory_level, DefaultMemoryLevel)),
14
71
      window_bits_(PROTOBUF_GET_WRAPPED_OR_DEFAULT(gzip, window_bits, DefaultWindowBits) |
15
71
                   GzipHeaderValue),
16
71
      chunk_size_(PROTOBUF_GET_WRAPPED_OR_DEFAULT(gzip, chunk_size, DefaultChunkSize)) {}
17

            
18
ZlibCompressorImpl::CompressionLevel GzipCompressorFactory::compressionLevelEnum(
19
    envoy::extensions::compression::gzip::compressor::v3::Gzip::CompressionLevel
20
71
        compression_level) {
21
71
  switch (compression_level) {
22
2
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::BEST_SPEED:
23
2
    return ZlibCompressorImpl::CompressionLevel::Speed;
24
1
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::COMPRESSION_LEVEL_2:
25
1
    return ZlibCompressorImpl::CompressionLevel::Level2;
26
1
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::COMPRESSION_LEVEL_3:
27
1
    return ZlibCompressorImpl::CompressionLevel::Level3;
28
1
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::COMPRESSION_LEVEL_4:
29
1
    return ZlibCompressorImpl::CompressionLevel::Level4;
30
1
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::COMPRESSION_LEVEL_5:
31
1
    return ZlibCompressorImpl::CompressionLevel::Level5;
32
1
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::COMPRESSION_LEVEL_6:
33
1
    return ZlibCompressorImpl::CompressionLevel::Level6;
34
1
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::COMPRESSION_LEVEL_7:
35
1
    return ZlibCompressorImpl::CompressionLevel::Level7;
36
1
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::COMPRESSION_LEVEL_8:
37
1
    return ZlibCompressorImpl::CompressionLevel::Level8;
38
17
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::BEST_COMPRESSION:
39
17
    return ZlibCompressorImpl::CompressionLevel::Best;
40
45
  default:
41
45
    return ZlibCompressorImpl::CompressionLevel::Standard;
42
71
  }
43
71
}
44

            
45
ZlibCompressorImpl::CompressionStrategy GzipCompressorFactory::compressionStrategyEnum(
46
    envoy::extensions::compression::gzip::compressor::v3::Gzip::CompressionStrategy
47
71
        compression_strategy) {
48
71
  switch (compression_strategy) {
49
1
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::FILTERED:
50
1
    return ZlibCompressorImpl::CompressionStrategy::Filtered;
51
9
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::FIXED:
52
9
    return ZlibCompressorImpl::CompressionStrategy::Fixed;
53
1
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::HUFFMAN_ONLY:
54
1
    return ZlibCompressorImpl::CompressionStrategy::Huffman;
55
15
  case envoy::extensions::compression::gzip::compressor::v3::Gzip::RLE:
56
15
    return ZlibCompressorImpl::CompressionStrategy::Rle;
57
45
  default:
58
45
    return ZlibCompressorImpl::CompressionStrategy::Standard;
59
71
  }
60
71
}
61

            
62
38
Envoy::Compression::Compressor::CompressorPtr GzipCompressorFactory::createCompressor() {
63
38
  auto compressor = std::make_unique<ZlibCompressorImpl>(chunk_size_);
64
38
  compressor->init(compression_level_, compression_strategy_, window_bits_, memory_level_);
65
38
  return compressor;
66
38
}
67

            
68
Envoy::Compression::Compressor::CompressorFactoryPtr
69
GzipCompressorLibraryFactory::createCompressorFactoryFromProtoTyped(
70
    const envoy::extensions::compression::gzip::compressor::v3::Gzip& proto_config,
71
57
    Server::Configuration::GenericFactoryContext&) {
72
57
  return std::make_unique<GzipCompressorFactory>(proto_config);
73
57
}
74

            
75
/**
76
 * Static registration for the gzip compressor library. @see NamedCompressorLibraryConfigFactory.
77
 */
78
REGISTER_FACTORY(GzipCompressorLibraryFactory,
79
                 Envoy::Compression::Compressor::NamedCompressorLibraryConfigFactory);
80

            
81
} // namespace Compressor
82
} // namespace Gzip
83
} // namespace Compression
84
} // namespace Extensions
85
} // namespace Envoy