Line data Source code
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 0 : const std::string& gzipStatsPrefix() { CONSTRUCT_ON_FIRST_USE(std::string, "gzip."); } 19 2 : const std::string& gzipExtensionName() { 20 2 : CONSTRUCT_ON_FIRST_USE(std::string, "envoy.compression.gzip.decompressor"); 21 2 : } 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 0 : const std::string& statsPrefix() const override { return gzipStatsPrefix(); } 34 0 : const std::string& contentEncoding() const override { 35 0 : return Http::CustomHeaders::get().ContentEncodingValues.Gzip; 36 0 : } 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 2 : 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