| // 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_VARINT_HPACK_VARINT_ENCODER_H_ | |
| #define QUICHE_HTTP2_HPACK_VARINT_HPACK_VARINT_ENCODER_H_ | |
| #include <cstdint> | |
| #include "net/third_party/quiche/src/http2/platform/api/http2_export.h" | |
| #include "net/third_party/quiche/src/http2/platform/api/http2_string.h" | |
| namespace http2 { | |
| // HPACK integer encoder class implementing variable length integer | |
| // representation defined in RFC7541, Section 5.1: | |
| // https://httpwg.org/specs/rfc7541.html#integer.representation | |
| class HTTP2_EXPORT_PRIVATE HpackVarintEncoder { | |
| public: | |
| HpackVarintEncoder(); | |
| // Start encoding an integer. Return the first encoded byte (composed of | |
| // optional high bits and 1 to 8 bit long prefix). It is possible that this | |
| // completes the encoding. Must not be called when previously started | |
| // encoding is still in progress. | |
| unsigned char StartEncoding(uint8_t high_bits, | |
| uint8_t prefix_length, | |
| uint64_t varint); | |
| // Continue encoding the integer |varint| passed in to StartEncoding(). | |
| // Append the next at most |max_encoded_bytes| encoded octets to |output|. | |
| // Returns the number of encoded octets. Must not be called unless a | |
| // previously started encoding is still in progress. | |
| size_t ResumeEncoding(size_t max_encoded_bytes, Http2String* output); | |
| // Returns true if encoding an integer has started and is not completed yet. | |
| bool IsEncodingInProgress() const; | |
| private: | |
| // The original integer shifted to the right by the number of bits already | |
| // encoded. The lower bits shifted away have already been encoded, and | |
| // |varint_| has the higher bits that remain to be encoded. | |
| uint64_t varint_; | |
| // True when encoding an integer has started and is not completed yet. | |
| bool encoding_in_progress_; | |
| }; | |
| } // namespace http2 | |
| #endif // QUICHE_HTTP2_HPACK_VARINT_HPACK_VARINT_ENCODER_H_ |