proxygen
fizz::ZlibCertificateCompressor Class Reference

#include <ZlibCertificateCompressor.h>

Inheritance diagram for fizz::ZlibCertificateCompressor:
fizz::CertificateCompressor

Public Member Functions

 ZlibCertificateCompressor (int compressLevel)
 
 ~ZlibCertificateCompressor () override=default
 
CertificateCompressionAlgorithm getAlgorithm () const override
 
CompressedCertificate compress (const CertificateMsg &) override
 
- Public Member Functions inherited from fizz::CertificateCompressor
virtual ~CertificateCompressor ()=default
 

Private Attributes

const int level_
 

Detailed Description

Definition at line 15 of file ZlibCertificateCompressor.h.

Constructor & Destructor Documentation

fizz::ZlibCertificateCompressor::ZlibCertificateCompressor ( int  compressLevel)
explicit

Definition at line 15 of file ZlibCertificateCompressor.cpp.

16  : level_(compressLevel) {
17  if (compressLevel != Z_DEFAULT_COMPRESSION &&
18  !(compressLevel >= Z_NO_COMPRESSION &&
19  compressLevel <= Z_BEST_COMPRESSION)) {
20  throw std::runtime_error(
21  "Invalid compression level requested:" +
22  to<std::string>(compressLevel));
23  }
24 }
fizz::ZlibCertificateCompressor::~ZlibCertificateCompressor ( )
overridedefault

Member Function Documentation

CompressedCertificate fizz::ZlibCertificateCompressor::compress ( const CertificateMsg cert)
overridevirtual

Implements fizz::CertificateCompressor.

Definition at line 31 of file ZlibCertificateCompressor.cpp.

References fizz::CompressedCertificate::algorithm, cc, fizz::CompressedCertificate::compressed_certificate_message, fizz::encode(), getAlgorithm(), level_, folly::gen::move, folly::size(), and fizz::CompressedCertificate::uncompressed_length.

32  {
33  auto encoded = encode(cert);
34  auto certRange = encoded->coalesce();
35  auto compressedCert = IOBuf::create(compressBound(certRange.size()));
36  unsigned long size = compressedCert->capacity();
37 
38  int status = ::compress2(
39  compressedCert->writableData(),
40  &size,
41  certRange.data(),
42  certRange.size(),
43  level_);
44  switch (status) {
45  case Z_OK:
46  compressedCert->append(size);
47  break;
48  case Z_MEM_ERROR:
49  throw std::runtime_error("Insufficient memory to compress cert");
50  case Z_BUF_ERROR:
51  throw std::runtime_error("Buffer too small for compressed cert");
52  case Z_STREAM_ERROR:
53  throw std::runtime_error(
54  "Compression level invalid: " + to<std::string>(level_));
55  default:
56  throw std::runtime_error(
57  "Failed to compress: " + to<std::string>(status));
58  }
59 
61  cc.uncompressed_length = certRange.size();
62  cc.algorithm = getAlgorithm();
63  cc.compressed_certificate_message = std::move(compressedCert);
64  return cc;
65 }
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
The non test part of the code is expected to have failures gtest_output_test_ cc
CertificateCompressionAlgorithm getAlgorithm() const override
constexpr auto size(C const &c) -> decltype(c.size())
Definition: Access.h:45
Buf encode(TokenBindingMessage &&message)
Definition: Types.cpp:124
CertificateCompressionAlgorithm fizz::ZlibCertificateCompressor::getAlgorithm ( ) const
overridevirtual

Member Data Documentation

const int fizz::ZlibCertificateCompressor::level_
private

Definition at line 25 of file ZlibCertificateCompressor.h.

Referenced by compress().


The documentation for this class was generated from the following files: