Line data Source code
1 : #include "source/extensions/compression/zstd/compressor/config.h" 2 : 3 : namespace Envoy { 4 : namespace Extensions { 5 : namespace Compression { 6 : namespace Zstd { 7 : namespace Compressor { 8 : 9 : ZstdCompressorFactory::ZstdCompressorFactory( 10 : const envoy::extensions::compression::zstd::compressor::v3::Zstd& zstd, 11 : Event::Dispatcher& dispatcher, Api::Api& api, ThreadLocal::SlotAllocator& tls) 12 : : compression_level_( 13 : PROTOBUF_GET_WRAPPED_OR_DEFAULT(zstd, compression_level, ZSTD_CLEVEL_DEFAULT)), 14 : enable_checksum_(zstd.enable_checksum()), strategy_(zstd.strategy()), 15 0 : chunk_size_(PROTOBUF_GET_WRAPPED_OR_DEFAULT(zstd, chunk_size, ZSTD_CStreamOutSize())) { 16 0 : if (zstd.has_dictionary()) { 17 0 : Protobuf::RepeatedPtrField<envoy::config::core::v3::DataSource> dictionaries; 18 0 : dictionaries.Add()->CopyFrom(zstd.dictionary()); 19 0 : cdict_manager_ = std::make_unique<ZstdCDictManager>( 20 0 : dictionaries, dispatcher, api, tls, true, 21 0 : [this](const void* dict_buffer, size_t dict_size) -> ZSTD_CDict* { 22 0 : return ZSTD_createCDict(dict_buffer, dict_size, compression_level_); 23 0 : }); 24 0 : } 25 0 : } 26 : 27 0 : Envoy::Compression::Compressor::CompressorPtr ZstdCompressorFactory::createCompressor() { 28 0 : return std::make_unique<ZstdCompressorImpl>(compression_level_, enable_checksum_, strategy_, 29 0 : cdict_manager_, chunk_size_); 30 0 : } 31 : 32 : Envoy::Compression::Compressor::CompressorFactoryPtr 33 : ZstdCompressorLibraryFactory::createCompressorFactoryFromProtoTyped( 34 : const envoy::extensions::compression::zstd::compressor::v3::Zstd& proto_config, 35 0 : Server::Configuration::FactoryContext& context) { 36 0 : auto& server_context = context.serverFactoryContext(); 37 0 : return std::make_unique<ZstdCompressorFactory>( 38 0 : proto_config, server_context.mainThreadDispatcher(), server_context.api(), 39 0 : server_context.threadLocal()); 40 0 : } 41 : 42 : /** 43 : * Static registration for the zstd compressor library. @see NamedCompressorLibraryConfigFactory. 44 : */ 45 : REGISTER_FACTORY(ZstdCompressorLibraryFactory, 46 : Envoy::Compression::Compressor::NamedCompressorLibraryConfigFactory); 47 : 48 : } // namespace Compressor 49 : } // namespace Zstd 50 : } // namespace Compression 51 : } // namespace Extensions 52 : } // namespace Envoy