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

Side by Side Diff: net/spdy/hpack/hpack_decoder3.h

Issue 2644683002: Add HpackDecoder3, an adapter using HpackDecoder (in net/http2/hpack/decoder). (Closed)
Patch Set: Nits. Created 3 years, 11 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 unified diff | Download patch
« no previous file with comments | « net/spdy/hpack/hpack_decoder2_test.cc ('k') | net/spdy/hpack/hpack_decoder3.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef NET_SPDY_HPACK_HPACK_DECODER3_H_
6 #define NET_SPDY_HPACK_HPACK_DECODER3_H_
7
8 // HpackDecoder3 implements HpackDecoderInterface, using Http2HpackDecoder to
9 // decode HPACK blocks into HTTP/2 header lists as outlined in
10 // http://tools.ietf.org/html/rfc7541.
11
12 #include <stddef.h>
13
14 #include <memory>
15
16 #include "base/macros.h"
17 #include "base/strings/string_piece.h"
18 #include "net/base/net_export.h"
19 #include "net/http2/hpack/decoder/hpack_decoder_listener.h"
20 #include "net/http2/hpack/decoder/http2_hpack_decoder.h"
21 #include "net/http2/hpack/hpack_string.h"
22 #include "net/http2/hpack/http2_hpack_constants.h"
23 #include "net/spdy/hpack/hpack_decoder_interface.h"
24 #include "net/spdy/hpack/hpack_header_table.h"
25 #include "net/spdy/spdy_header_block.h"
26 #include "net/spdy/spdy_headers_handler_interface.h"
27
28 namespace net {
29 namespace test {
30 class HpackDecoder3Peer;
31 } // namespace test
32
33 class NET_EXPORT_PRIVATE HpackDecoder3 : public HpackDecoderInterface {
34 public:
35 friend test::HpackDecoder3Peer;
36 HpackDecoder3();
37 ~HpackDecoder3() override;
38
39 // Override the HpackDecoderInterface methods:
40
41 void ApplyHeaderTableSizeSetting(size_t size_setting) override;
42 void HandleControlFrameHeadersStart(
43 SpdyHeadersHandlerInterface* handler) override;
44 bool HandleControlFrameHeadersData(const char* headers_data,
45 size_t headers_data_length) override;
46 bool HandleControlFrameHeadersComplete(size_t* compressed_len) override;
47 const SpdyHeaderBlock& decoded_block() const override;
48 void SetHeaderTableDebugVisitor(
49 std::unique_ptr<HpackHeaderTable::DebugVisitorInterface> visitor)
50 override;
51 void set_max_decode_buffer_size_bytes(
52 size_t max_decode_buffer_size_bytes) override;
53
54 private:
55 class NET_EXPORT_PRIVATE ListenerAdapter : public HpackDecoderListener {
56 public:
57 ListenerAdapter();
58 ~ListenerAdapter() override;
59
60 // If a SpdyHeadersHandlerInterface is provided, the decoder will emit
61 // headers to it rather than accumulating them in a SpdyHeaderBlock.
62 // Does not take ownership of the handler, but does use the pointer until
63 // the current HPACK block is completely decoded.
64 void set_handler(SpdyHeadersHandlerInterface* handler);
65 const SpdyHeaderBlock& decoded_block() const { return decoded_block_; }
66
67 // Override the HpackDecoderListener methods:
68
69 void OnHeaderListStart() override;
70 void OnHeader(HpackEntryType entry_type,
71 const HpackString& name,
72 const HpackString& value) override;
73 void OnHeaderListEnd() override;
74 void OnHeaderErrorDetected(base::StringPiece error_message) override;
75
76 private:
77 // If the caller doesn't provide a handler, the header list is stored in
78 // this SpdyHeaderBlock.
79 SpdyHeaderBlock decoded_block_;
80
81 // If non-NULL, handles decoded headers. Not owned.
82 SpdyHeadersHandlerInterface* handler_;
83
84 // Total bytes of the name and value strings in the current HPACK block.
85 size_t total_uncompressed_bytes_;
86 };
87
88 // Converts calls to HpackDecoderListener into calls to
89 // SpdyHeadersHandlerInterface.
90 ListenerAdapter listener_adapter_;
91
92 // The actual decoder.
93 Http2HpackDecoder hpack_decoder_;
94
95 // Total bytes that have been received as input (i.e. HPACK encoded)
96 // in the current HPACK block.
97 size_t total_hpack_bytes_;
98
99 // How much encoded data this decoder is willing to buffer.
100 size_t max_decode_buffer_size_bytes_;
101
102 // Flag to keep track of having seen the header block start. Needed at the
103 // moment because HandleControlFrameHeadersStart won't be called if a handler
104 // is not being provided by the caller.
105 bool header_block_started_;
106
107 DISALLOW_COPY_AND_ASSIGN(HpackDecoder3);
108 };
109
110 } // namespace net
111
112 #endif // NET_SPDY_HPACK_HPACK_DECODER3_H_
OLDNEW
« no previous file with comments | « net/spdy/hpack/hpack_decoder2_test.cc ('k') | net/spdy/hpack/hpack_decoder3.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698