Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/compression/compressor/factory.h" 4 : #include "envoy/extensions/compression/brotli/compressor/v3/brotli.pb.h" 5 : #include "envoy/extensions/compression/brotli/compressor/v3/brotli.pb.validate.h" 6 : 7 : #include "source/common/http/headers.h" 8 : #include "source/extensions/compression/brotli/compressor/brotli_compressor_impl.h" 9 : #include "source/extensions/compression/common/compressor/factory_base.h" 10 : 11 : namespace Envoy { 12 : namespace Extensions { 13 : namespace Compression { 14 : namespace Brotli { 15 : namespace Compressor { 16 : 17 : // Default input block size. 18 : const uint32_t DefaultInputBlockBits = 24; 19 : 20 : // Default compression window size. 21 : const uint32_t DefaultWindowBits = 18; 22 : 23 : // Default quality. 24 : const uint32_t DefaultQuality = 3; 25 : 26 : // Default zlib chunk size. 27 : const uint32_t DefaultChunkSize = 4096; 28 : 29 : namespace { 30 : 31 0 : const std::string& brotliStatsPrefix() { CONSTRUCT_ON_FIRST_USE(std::string, "brotli."); } 32 2 : const std::string& brotliExtensionName() { 33 2 : CONSTRUCT_ON_FIRST_USE(std::string, "envoy.compression.brotli.compressor"); 34 2 : } 35 : 36 : } // namespace 37 : 38 : class BrotliCompressorFactory : public Envoy::Compression::Compressor::CompressorFactory { 39 : public: 40 : BrotliCompressorFactory( 41 : const envoy::extensions::compression::brotli::compressor::v3::Brotli& brotli); 42 : 43 : // Envoy::Compression::Compressor::CompressorFactory 44 : Envoy::Compression::Compressor::CompressorPtr createCompressor() override; 45 0 : const std::string& statsPrefix() const override { return brotliStatsPrefix(); } 46 0 : const std::string& contentEncoding() const override { 47 0 : return Http::CustomHeaders::get().ContentEncodingValues.Brotli; 48 0 : } 49 : 50 : private: 51 : static BrotliCompressorImpl::EncoderMode encoderModeEnum( 52 : envoy::extensions::compression::brotli::compressor::v3::Brotli::EncoderMode encoder_mode); 53 : const uint32_t chunk_size_; 54 : const bool disable_literal_context_modeling_; 55 : const BrotliCompressorImpl::EncoderMode encoder_mode_; 56 : const uint32_t input_block_bits_; 57 : const uint32_t quality_; 58 : const uint32_t window_bits_; 59 : }; 60 : 61 : class BrotliCompressorLibraryFactory 62 : : public Compression::Common::Compressor::CompressorLibraryFactoryBase< 63 : envoy::extensions::compression::brotli::compressor::v3::Brotli> { 64 : public: 65 2 : BrotliCompressorLibraryFactory() : CompressorLibraryFactoryBase(brotliExtensionName()) {} 66 : 67 : private: 68 : Envoy::Compression::Compressor::CompressorFactoryPtr createCompressorFactoryFromProtoTyped( 69 : const envoy::extensions::compression::brotli::compressor::v3::Brotli& config, 70 : Server::Configuration::FactoryContext& context) override; 71 : }; 72 : 73 : DECLARE_FACTORY(BrotliCompressorLibraryFactory); 74 : 75 : } // namespace Compressor 76 : } // namespace Brotli 77 : } // namespace Compression 78 : } // namespace Extensions 79 : } // namespace Envoy