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
328
const std::string& zstdStatsPrefix() { CONSTRUCT_ON_FIRST_USE(std::string, "zstd."); }
20
334
const std::string& zstdExtensionName() {
21
334
  CONSTRUCT_ON_FIRST_USE(std::string, "envoy.compression.zstd.compressor");
22
334
}
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
328
  const std::string& statsPrefix() const override { return zstdStatsPrefix(); }
35
328
  const std::string& contentEncoding() const override {
36
328
    return Http::CustomHeaders::get().ContentEncodingValues.Zstd;
37
328
  }
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
334
  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::GenericFactoryContext& context) override;
57
};
58

            
59
DECLARE_FACTORY(ZstdCompressorLibraryFactory);
60

            
61
} // namespace Compressor
62
} // namespace Zstd
63
} // namespace Compression
64
} // namespace Extensions
65
} // namespace Envoy