Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/compression/compressor/factory.h" 4 : #include "envoy/extensions/compression/zstd/compressor/v3/zstd.pb.h" 5 : #include "envoy/extensions/compression/zstd/compressor/v3/zstd.pb.validate.h" 6 : 7 : #include "source/common/http/headers.h" 8 : #include "source/extensions/compression/common/compressor/factory_base.h" 9 : #include "source/extensions/compression/zstd/compressor/zstd_compressor_impl.h" 10 : 11 : namespace Envoy { 12 : namespace Extensions { 13 : namespace Compression { 14 : namespace Zstd { 15 : namespace Compressor { 16 : 17 : namespace { 18 : 19 0 : const std::string& zstdStatsPrefix() { CONSTRUCT_ON_FIRST_USE(std::string, "zstd."); } 20 2 : const std::string& zstdExtensionName() { 21 2 : CONSTRUCT_ON_FIRST_USE(std::string, "envoy.compression.zstd.compressor"); 22 2 : } 23 : 24 : } // namespace 25 : 26 : class ZstdCompressorFactory : public Envoy::Compression::Compressor::CompressorFactory { 27 : public: 28 : ZstdCompressorFactory(const envoy::extensions::compression::zstd::compressor::v3::Zstd& zstd, 29 : Event::Dispatcher& dispatcher, Api::Api& api, 30 : ThreadLocal::SlotAllocator& tls); 31 : 32 : // Envoy::Compression::Compressor::CompressorFactory 33 : Envoy::Compression::Compressor::CompressorPtr createCompressor() override; 34 0 : const std::string& statsPrefix() const override { return zstdStatsPrefix(); } 35 0 : const std::string& contentEncoding() const override { 36 0 : return Http::CustomHeaders::get().ContentEncodingValues.Zstd; 37 0 : } 38 : 39 : private: 40 : const uint32_t compression_level_; 41 : const bool enable_checksum_; 42 : const uint32_t strategy_; 43 : const uint32_t chunk_size_; 44 : ZstdCDictManagerPtr cdict_manager_{nullptr}; 45 : }; 46 : 47 : class ZstdCompressorLibraryFactory 48 : : public Compression::Common::Compressor::CompressorLibraryFactoryBase< 49 : envoy::extensions::compression::zstd::compressor::v3::Zstd> { 50 : public: 51 2 : ZstdCompressorLibraryFactory() : CompressorLibraryFactoryBase(zstdExtensionName()) {} 52 : 53 : private: 54 : Envoy::Compression::Compressor::CompressorFactoryPtr createCompressorFactoryFromProtoTyped( 55 : const envoy::extensions::compression::zstd::compressor::v3::Zstd& config, 56 : Server::Configuration::FactoryContext& context) override; 57 : }; 58 : 59 : DECLARE_FACTORY(ZstdCompressorLibraryFactory); 60 : 61 : } // namespace Compressor 62 : } // namespace Zstd 63 : } // namespace Compression 64 : } // namespace Extensions 65 : } // namespace Envoy