1
#pragma once
2

            
3
#include "envoy/compression/decompressor/config.h"
4
#include "envoy/extensions/compression/gzip/decompressor/v3/gzip.pb.h"
5
#include "envoy/extensions/compression/gzip/decompressor/v3/gzip.pb.validate.h"
6

            
7
#include "source/common/http/headers.h"
8
#include "source/extensions/compression/common/decompressor/factory_base.h"
9
#include "source/extensions/compression/gzip/decompressor/zlib_decompressor_impl.h"
10

            
11
namespace Envoy {
12
namespace Extensions {
13
namespace Compression {
14
namespace Gzip {
15
namespace Decompressor {
16

            
17
namespace {
18
4
const std::string& gzipStatsPrefix() { CONSTRUCT_ON_FIRST_USE(std::string, "gzip."); }
19
6
const std::string& gzipExtensionName() {
20
6
  CONSTRUCT_ON_FIRST_USE(std::string, "envoy.compression.gzip.decompressor");
21
6
}
22

            
23
} // namespace
24

            
25
class GzipDecompressorFactory : public Envoy::Compression::Decompressor::DecompressorFactory {
26
public:
27
  GzipDecompressorFactory(const envoy::extensions::compression::gzip::decompressor::v3::Gzip& gzip,
28
                          Stats::Scope& scope);
29

            
30
  // Envoy::Compression::Decompressor::DecompressorFactory
31
  Envoy::Compression::Decompressor::DecompressorPtr
32
  createDecompressor(const std::string& stats_prefix) override;
33
4
  const std::string& statsPrefix() const override { return gzipStatsPrefix(); }
34
9
  const std::string& contentEncoding() const override {
35
9
    return Http::CustomHeaders::get().ContentEncodingValues.Gzip;
36
9
  }
37

            
38
private:
39
  Stats::Scope& scope_;
40
  const int32_t window_bits_;
41
  const uint32_t chunk_size_;
42
  const uint64_t max_inflate_ratio_;
43
};
44

            
45
class GzipDecompressorLibraryFactory
46
    : public Compression::Common::Decompressor::DecompressorLibraryFactoryBase<
47
          envoy::extensions::compression::gzip::decompressor::v3::Gzip> {
48
public:
49
6
  GzipDecompressorLibraryFactory() : DecompressorLibraryFactoryBase(gzipExtensionName()) {}
50

            
51
private:
52
  Envoy::Compression::Decompressor::DecompressorFactoryPtr createDecompressorFactoryFromProtoTyped(
53
      const envoy::extensions::compression::gzip::decompressor::v3::Gzip& proto_config,
54
      Server::Configuration::FactoryContext& context) override;
55
};
56

            
57
DECLARE_FACTORY(GzipDecompressorLibraryFactory);
58

            
59
} // namespace Decompressor
60
} // namespace Gzip
61
} // namespace Compression
62
} // namespace Extensions
63
} // namespace Envoy