blob: b7012b4f7ff0c9ab45b366f3ef5acdbb8cf82b8a [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef QUICHE_HTTP2_HPACK_HUFFMAN_HPACK_HUFFMAN_ENCODER_H_
#define QUICHE_HTTP2_HPACK_HUFFMAN_HPACK_HUFFMAN_ENCODER_H_
// Functions supporting the encoding of strings using the HPACK-defined Huffman
// table.
#include <cstddef> // For size_t
#include <string>
#include "net/third_party/quiche/src/common/platform/api/quiche_export.h"
#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
namespace http2 {
// Returns the size of the Huffman encoding of |plain|, which may be greater
// than plain.size(). Mostly present for testing.
QUICHE_EXPORT_PRIVATE size_t ExactHuffmanSize(quiche::QuicheStringPiece plain);
// Returns the size of the Huffman encoding of |plain|, unless it is greater
// than or equal to plain.size(), in which case a value greater than or equal to
// plain.size() is returned. The advantage of this over ExactHuffmanSize is that
// it doesn't read as much of the input string in the event that the string is
// not compressible by HuffmanEncode (i.e. when the encoding is longer than the
// original string, it stops reading the input string as soon as it knows that).
QUICHE_EXPORT_PRIVATE size_t
BoundedHuffmanSize(quiche::QuicheStringPiece plain);
// Encode the plain text string |plain| with the Huffman encoding defined in the
// HPACK RFC, 7541. |encoded_size| is used to pre-allocate storage and it
// should be the value returned by ExactHuffmanSize(). |*huffman| does not have
// to be empty, it is cleared at the beginning of this function. This allows
// reusing the same string object across multiple invocations.
QUICHE_EXPORT_PRIVATE void HuffmanEncode(quiche::QuicheStringPiece plain,
size_t encoded_size,
std::string* huffman);
} // namespace http2
#endif // QUICHE_HTTP2_HPACK_HUFFMAN_HPACK_HUFFMAN_ENCODER_H_