31 const std::shared_ptr<std::set<std::string>> compressibleContentTypes)
49 auto& headers = msg.getHeaders();
54 compressor_ = std::make_unique<ZlibStreamCompressor>(
73 DCHECK_EQ(
header_,
true) <<
"Headers should have already been sent.";
102 auto compressedBodyLength = compressed->computeChainDataLength();
113 folly::to<std::string>(compressedBodyLength));
129 auto compressed =
compressor_->compress(emptyBuffer.get(),
true);
153 auto contentLengthHeader =
157 if (!contentLengthHeader.empty()) {
158 contentLength = folly::to<uint32_t>(contentLengthHeader);
167 auto responseContentType =
172 auto parameter_idx = responseContentType.find(
';');
173 if (parameter_idx != std::string::npos) {
174 responseContentType = responseContentType.substr(0, parameter_idx);
201 const std::set<std::string> compressibleContentTypes)
215 if (acceptsSupportedCompressionType(msg)) {
216 auto zlibServerFilter =
221 return zlibServerFilter;
233 std::vector<RFC2616::TokenQPair>
output;
236 auto acceptEncodingHeader =
240 std::vector<RFC2616::TokenQPair>::iterator it = std::find_if(
245 return (it != output.end());
void sendChunkHeader(size_t len) noexceptoverride
void sendAbort() noexceptoverride
void sendHeaders(HTTPMessage &msg) noexceptoverride
constexpr detail::Map< Move > move
void sendEOM() noexceptoverride
const std::shared_ptr< std::set< std::string > > compressibleContentTypes_
void sendBody(std::unique_ptr< folly::IOBuf > body) noexceptoverride
requires E e noexcept(noexcept(s.error(std::move(e))))
std::unique_ptr< ZlibStreamCompressor > compressor_
bool isCompressibleContentType(const HTTPMessage &msg) const noexcept
std::unique_ptr< HTTPMessage > responseMessage_
uint32_t minimumCompressionSize_
uint32_t minimumCompressionSize_
int32_t compressionLevel_
void sendChunkTerminator() noexceptoverride
void sendEOM() noexceptoverride
void sendHeaders(HTTPMessage &msg) noexceptoverride
std::pair< folly::StringPiece, double > TokenQPair
RequestHandler * onRequest(RequestHandler *h, HTTPMessage *msg) noexceptoverride
void toLowerAscii(char *str, size_t length)
ZlibServerFilterFactory(int32_t compressionLevel, uint32_t minimumCompressionSize, const std::set< std::string > compressibleContentTypes)
int32_t compressionLevel_
void onServerStop() noexceptoverride
void sendChunkHeader(size_t len) noexceptoverride
const std::shared_ptr< std::set< std::string > > compressibleContentTypes_
bool acceptsSupportedCompressionType(HTTPMessage *msg) noexcept
bool isMinimumCompressibleSize(const HTTPMessage &msg) const noexcept
ZlibServerFilter(RequestHandler *downstream, int32_t compressionLevel, uint32_t minimumCompressionSize, const std::shared_ptr< std::set< std::string >> compressibleContentTypes)
static std::unique_ptr< IOBuf > copyBuffer(const void *buf, std::size_t size, std::size_t headroom=0, std::size_t minTailroom=0)
void sendBody(std::unique_ptr< folly::IOBuf > body) noexceptoverride
bool parseQvalues(folly::StringPiece value, std::vector< TokenQPair > &output)
void onServerStart(folly::EventBase *) noexceptoverride