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
329
          PROTOBUF_GET_WRAPPED_OR_DEFAULT(zstd, compression_level, ZSTD_CLEVEL_DEFAULT)),
14
329
      enable_checksum_(zstd.enable_checksum()), strategy_(zstd.strategy()),
15
329
      chunk_size_(PROTOBUF_GET_WRAPPED_OR_DEFAULT(zstd, chunk_size, ZSTD_CStreamOutSize())) {
16
329
  if (zstd.has_dictionary()) {
17
169
    Protobuf::RepeatedPtrField<envoy::config::core::v3::DataSource> dictionaries;
18
169
    dictionaries.Add()->CopyFrom(zstd.dictionary());
19
169
    cdict_manager_ = std::make_unique<ZstdCDictManager>(
20
169
        dictionaries, dispatcher, api, tls, true,
21
172
        [this](const void* dict_buffer, size_t dict_size) -> ZSTD_CDict* {
22
171
          return ZSTD_createCDict(dict_buffer, dict_size, compression_level_);
23
171
        });
24
169
  }
25
329
}
26

            
27
334
Envoy::Compression::Compressor::CompressorPtr ZstdCompressorFactory::createCompressor() {
28
334
  return std::make_unique<ZstdCompressorImpl>(compression_level_, enable_checksum_, strategy_,
29
334
                                              cdict_manager_, chunk_size_);
30
334
}
31

            
32
Envoy::Compression::Compressor::CompressorFactoryPtr
33
ZstdCompressorLibraryFactory::createCompressorFactoryFromProtoTyped(
34
    const envoy::extensions::compression::zstd::compressor::v3::Zstd& proto_config,
35
329
    Server::Configuration::GenericFactoryContext& context) {
36
329
  auto& server_context = context.serverFactoryContext();
37
329
  return std::make_unique<ZstdCompressorFactory>(
38
329
      proto_config, server_context.mainThreadDispatcher(), server_context.api(),
39
329
      server_context.threadLocal());
40
329
}
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