Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/compression/decompressor/config.h" 4 : #include "envoy/extensions/compression/brotli/decompressor/v3/brotli.pb.h" 5 : #include "envoy/extensions/compression/brotli/decompressor/v3/brotli.pb.validate.h" 6 : 7 : #include "source/common/http/headers.h" 8 : #include "source/extensions/compression/brotli/decompressor/brotli_decompressor_impl.h" 9 : #include "source/extensions/compression/common/decompressor/factory_base.h" 10 : 11 : namespace Envoy { 12 : namespace Extensions { 13 : namespace Compression { 14 : namespace Brotli { 15 : namespace Decompressor { 16 : 17 : namespace { 18 0 : const std::string& brotliStatsPrefix() { CONSTRUCT_ON_FIRST_USE(std::string, "brotli."); } 19 2 : const std::string& brotliExtensionName() { 20 2 : CONSTRUCT_ON_FIRST_USE(std::string, "envoy.compression.brotli.decompressor"); 21 2 : } 22 : 23 : } // namespace 24 : 25 : class BrotliDecompressorFactory : public Envoy::Compression::Decompressor::DecompressorFactory { 26 : public: 27 : BrotliDecompressorFactory( 28 : const envoy::extensions::compression::brotli::decompressor::v3::Brotli& brotli, 29 : Stats::Scope& scope); 30 : 31 : // Envoy::Compression::Decompressor::DecompressorFactory 32 : Envoy::Compression::Decompressor::DecompressorPtr 33 : createDecompressor(const std::string& stats_prefix) override; 34 0 : const std::string& statsPrefix() const override { return brotliStatsPrefix(); } 35 0 : const std::string& contentEncoding() const override { 36 0 : return Http::CustomHeaders::get().ContentEncodingValues.Brotli; 37 0 : } 38 : 39 : private: 40 : Stats::Scope& scope_; 41 : const uint32_t chunk_size_; 42 : const bool disable_ring_buffer_reallocation_; 43 : }; 44 : 45 : class BrotliDecompressorLibraryFactory 46 : : public Compression::Common::Decompressor::DecompressorLibraryFactoryBase< 47 : envoy::extensions::compression::brotli::decompressor::v3::Brotli> { 48 : public: 49 2 : BrotliDecompressorLibraryFactory() : DecompressorLibraryFactoryBase(brotliExtensionName()) {} 50 : 51 : private: 52 : Envoy::Compression::Decompressor::DecompressorFactoryPtr createDecompressorFactoryFromProtoTyped( 53 : const envoy::extensions::compression::brotli::decompressor::v3::Brotli& proto_config, 54 : Server::Configuration::FactoryContext& context) override; 55 : }; 56 : 57 : DECLARE_FACTORY(BrotliDecompressorLibraryFactory); 58 : 59 : } // namespace Decompressor 60 : } // namespace Brotli 61 : } // namespace Compression 62 : } // namespace Extensions 63 : } // namespace Envoy