Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/compression/decompressor/config.h" 4 : #include "envoy/extensions/compression/zstd/decompressor/v3/zstd.pb.h" 5 : #include "envoy/extensions/compression/zstd/decompressor/v3/zstd.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/zstd/decompressor/zstd_decompressor_impl.h" 10 : 11 : namespace Envoy { 12 : namespace Extensions { 13 : namespace Compression { 14 : namespace Zstd { 15 : namespace Decompressor { 16 : 17 : namespace { 18 0 : const std::string& zstdStatsPrefix() { CONSTRUCT_ON_FIRST_USE(std::string, "zstd."); } 19 2 : const std::string& zstdExtensionName() { 20 2 : CONSTRUCT_ON_FIRST_USE(std::string, "envoy.compression.zstd.decompressor"); 21 2 : } 22 : 23 : } // namespace 24 : 25 : class ZstdDecompressorFactory : public Envoy::Compression::Decompressor::DecompressorFactory { 26 : public: 27 : ZstdDecompressorFactory(const envoy::extensions::compression::zstd::decompressor::v3::Zstd& zstd, 28 : Stats::Scope& scope, Event::Dispatcher& dispatcher, Api::Api& api, 29 : ThreadLocal::SlotAllocator& tls); 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 zstdStatsPrefix(); } 35 0 : const std::string& contentEncoding() const override { 36 0 : return Http::CustomHeaders::get().ContentEncodingValues.Zstd; 37 0 : } 38 : 39 : private: 40 : Stats::Scope& scope_; 41 : const uint32_t chunk_size_; 42 : ZstdDDictManagerPtr ddict_manager_{nullptr}; 43 : }; 44 : 45 : class ZstdDecompressorLibraryFactory 46 : : public Compression::Common::Decompressor::DecompressorLibraryFactoryBase< 47 : envoy::extensions::compression::zstd::decompressor::v3::Zstd> { 48 : public: 49 2 : ZstdDecompressorLibraryFactory() : DecompressorLibraryFactoryBase(zstdExtensionName()) {} 50 : 51 : private: 52 : Envoy::Compression::Decompressor::DecompressorFactoryPtr createDecompressorFactoryFromProtoTyped( 53 : const envoy::extensions::compression::zstd::decompressor::v3::Zstd& proto_config, 54 : Server::Configuration::FactoryContext& context) override; 55 : }; 56 : 57 : DECLARE_FACTORY(ZstdDecompressorLibraryFactory); 58 : 59 : } // namespace Decompressor 60 : } // namespace Zstd 61 : } // namespace Compression 62 : } // namespace Extensions 63 : } // namespace Envoy