1
#include "source/extensions/compression/zstd/decompressor/config.h"
2

            
3
namespace Envoy {
4
namespace Extensions {
5
namespace Compression {
6
namespace Zstd {
7
namespace Decompressor {
8

            
9
ZstdDecompressorFactory::ZstdDecompressorFactory(
10
    const envoy::extensions::compression::zstd::decompressor::v3::Zstd& zstd, Stats::Scope& scope,
11
    Event::Dispatcher& dispatcher, Api::Api& api, ThreadLocal::SlotAllocator& tls)
12
329
    : scope_(scope),
13
329
      chunk_size_(PROTOBUF_GET_WRAPPED_OR_DEFAULT(zstd, chunk_size, ZSTD_DStreamOutSize())) {
14
329
  if (zstd.dictionaries_size() > 0) {
15
169
    ddict_manager_ = std::make_unique<ZstdDDictManager>(
16
169
        zstd.dictionaries(), dispatcher, api, tls, false,
17
174
        [](const void* dict_buffer, size_t dict_size) -> ZSTD_DDict* {
18
173
          return ZSTD_createDDict(dict_buffer, dict_size);
19
173
        });
20
169
  }
21
329
}
22

            
23
Envoy::Compression::Decompressor::DecompressorPtr
24
334
ZstdDecompressorFactory::createDecompressor(const std::string& stats_prefix) {
25
334
  return std::make_unique<ZstdDecompressorImpl>(scope_, stats_prefix, ddict_manager_, chunk_size_);
26
334
}
27

            
28
Envoy::Compression::Decompressor::DecompressorFactoryPtr
29
ZstdDecompressorLibraryFactory::createDecompressorFactoryFromProtoTyped(
30
    const envoy::extensions::compression::zstd::decompressor::v3::Zstd& proto_config,
31
329
    Server::Configuration::FactoryContext& context) {
32
329
  auto& server_context = context.serverFactoryContext();
33
329
  return std::make_unique<ZstdDecompressorFactory>(
34
329
      proto_config, context.scope(), server_context.mainThreadDispatcher(), server_context.api(),
35
329
      server_context.threadLocal());
36
329
}
37

            
38
/**
39
 * Static registration for the zstd decompressor. @see NamedDecompressorLibraryConfigFactory.
40
 */
41
REGISTER_FACTORY(ZstdDecompressorLibraryFactory,
42
                 Envoy::Compression::Decompressor::NamedDecompressorLibraryConfigFactory);
43
} // namespace Decompressor
44
} // namespace Zstd
45
} // namespace Compression
46
} // namespace Extensions
47
} // namespace Envoy