Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(263)

Unified Diff: net/spdy/hpack/hpack_input_stream.h

Issue 1914193002: Implements incremental decode in HPACK. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/hpack/hpack_decoder_test.cc ('k') | net/spdy/hpack/hpack_input_stream.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/hpack/hpack_input_stream.h
diff --git a/net/spdy/hpack/hpack_input_stream.h b/net/spdy/hpack/hpack_input_stream.h
index ab716d0eff41f46602dc5d082d80cd95c028dbd1..b7ec8effa4749a562a7125cb91cd04455c4315c4 100644
--- a/net/spdy/hpack/hpack_input_stream.h
+++ b/net/spdy/hpack/hpack_input_stream.h
@@ -22,12 +22,18 @@
namespace net {
+namespace test {
+class HpackInputStreamPeer;
+} // namespace test
+
typedef std::pair<size_t, uint32_t> InitialPeekResult;
// An HpackInputStream handles all the low-level details of decoding
// header fields.
class NET_EXPORT_PRIVATE HpackInputStream {
public:
+ friend class test::HpackInputStreamPeer;
+
// |max_string_literal_size| is the largest that any one string
// literal (header name or header value) can be.
HpackInputStream(uint32_t max_string_literal_size, base::StringPiece buffer);
@@ -72,14 +78,31 @@ class NET_EXPORT_PRIVATE HpackInputStream {
// remaining bits in the current byte.
void ConsumeByteRemainder();
- // Accessors for testing.
+ // Return the total bytes that have been parsed SUCCESSFULLY.
+ uint32_t ParsedBytes() const;
+
+ // When incrementally decode the header, need to remember the current
+ // position in the buffer after we successfully decode one opcode.
+ void MarkCurrentPosition();
- void SetBitOffsetForTest(size_t bit_offset) { bit_offset_ = bit_offset; }
+ // Returning true indicates this instance of HpackInputStream
+ // doesn't have enough data to parse the current opcode, and we
+ // are done with this instance. When more data arrive, a new
+ // HpackInputStream should be created to restart the parsing.
+ bool NeedMoreData() const;
private:
const uint32_t max_string_literal_size_;
base::StringPiece buffer_;
size_t bit_offset_;
+ // Total number of bytes parsed successfully. Only get updated when an
+ // opcode is parsed successfully.
+ uint32_t parsed_bytes_;
+ // Total number of bytes parsed currently. Get updated when an octet,
+ // a number or a string has been parsed successfully. Can point to the
+ // middle of an opcode.
+ uint32_t parsed_bytes_current_;
+ bool need_more_data_;
bool PeekNextOctet(uint8_t* next_octet);
« no previous file with comments | « net/spdy/hpack/hpack_decoder_test.cc ('k') | net/spdy/hpack/hpack_input_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698