// 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_DECODER_HPACK_STRING_DECODER_H_ #define QUICHE_HTTP2_HPACK_DECODER_HPACK_STRING_DECODER_H_ // HpackStringDecoder decodes strings encoded per the HPACK spec; this does // not mean decompressing Huffman encoded strings, just identifying the length, // encoding and contents for a listener. #include <stddef.h> #include <algorithm> #include <cstdint> #include <string> #include "absl/base/macros.h" #include "quiche/http2/decoder/decode_buffer.h" #include "quiche/http2/decoder/decode_status.h" #include "quiche/http2/hpack/varint/hpack_varint_decoder.h" #include "quiche/common/platform/api/quiche_export.h" #include "quiche/common/platform/api/quiche_logging.h" namespace http2 { // Decodes a single string in an HPACK header entry. The high order bit of // the first byte of the length is the H (Huffman) bit indicating whether // the value is Huffman encoded, and the remainder of the byte is the first // 7 bits of an HPACK varint. // // Call Start() to begin decoding; if it returns kDecodeInProgress, then call // Resume() when more input is available, repeating until kDecodeInProgress is // not returned. If kDecodeDone or kDecodeError is returned, then Resume() must // not be called until Start() has been called to start decoding a new string. class QUICHE_EXPORT HpackStringDecoder { … }; QUICHE_EXPORT std::ostream& operator<<(std::ostream& out, const HpackStringDecoder& v); } // namespace http2 #endif // QUICHE_HTTP2_HPACK_DECODER_HPACK_STRING_DECODER_H_