OLD | NEW |
| (Empty) |
1 // Copyright 2016 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_HTTP2_HPACK_DECODER_HPACK_ENTRY_DECODER_LISTENER_H_ | |
6 #define NET_HTTP2_HPACK_DECODER_HPACK_ENTRY_DECODER_LISTENER_H_ | |
7 | |
8 // Defines HpackEntryDecoderListener, the base class of listeners that | |
9 // HpackEntryDecoder calls. Also defines HpackEntryDecoderVLoggingListener | |
10 // which logs before calling another HpackEntryDecoderListener implementation. | |
11 | |
12 #include <stddef.h> | |
13 | |
14 #include "net/base/net_export.h" | |
15 #include "net/http2/hpack/http2_hpack_constants.h" | |
16 | |
17 namespace net { | |
18 | |
19 class NET_EXPORT_PRIVATE HpackEntryDecoderListener { | |
20 public: | |
21 virtual ~HpackEntryDecoderListener() {} | |
22 | |
23 // Called when an indexed header (i.e. one in the static or dynamic table) has | |
24 // been decoded from an HPACK block. index is supposed to be non-zero, but | |
25 // that has not been checked by the caller. | |
26 virtual void OnIndexedHeader(size_t index) = 0; | |
27 | |
28 // Called when the start of a header with a literal value, and maybe a literal | |
29 // name, has been decoded. maybe_name_index is zero if the header has a | |
30 // literal name, else it is a reference into the static or dynamic table, from | |
31 // which the name should be determined. When the name is literal, the next | |
32 // call will be to OnNameStart; else it will be to OnValueStart. entry_type | |
33 // indicates whether the peer has added the entry to its dynamic table, and | |
34 // whether a proxy is permitted to do so when forwarding the entry. | |
35 virtual void OnStartLiteralHeader(HpackEntryType entry_type, | |
36 size_t maybe_name_index) = 0; | |
37 | |
38 // Called when the encoding (Huffman compressed or plain text) and the encoded | |
39 // length of a literal name has been decoded. OnNameData will be called next, | |
40 // and repeatedly until the sum of lengths passed to OnNameData is len. | |
41 virtual void OnNameStart(bool huffman_encoded, size_t len) = 0; | |
42 | |
43 // Called when len bytes of an encoded header name have been decoded. | |
44 virtual void OnNameData(const char* data, size_t len) = 0; | |
45 | |
46 // Called after the entire name has been passed to OnNameData. | |
47 // OnValueStart will be called next. | |
48 virtual void OnNameEnd() = 0; | |
49 | |
50 // Called when the encoding (Huffman compressed or plain text) and the encoded | |
51 // length of a literal value has been decoded. OnValueData will be called | |
52 // next, and repeatedly until the sum of lengths passed to OnValueData is len. | |
53 virtual void OnValueStart(bool huffman_encoded, size_t len) = 0; | |
54 | |
55 // Called when len bytes of an encoded header value have been decoded. | |
56 virtual void OnValueData(const char* data, size_t len) = 0; | |
57 | |
58 // Called after the entire value has been passed to OnValueData, marking the | |
59 // end of a header entry with a literal value, and maybe a literal name. | |
60 virtual void OnValueEnd() = 0; | |
61 | |
62 // Called when an update to the size of the peer's dynamic table has been | |
63 // decoded. | |
64 virtual void OnDynamicTableSizeUpdate(size_t size) = 0; | |
65 }; | |
66 | |
67 class NET_EXPORT_PRIVATE HpackEntryDecoderVLoggingListener | |
68 : public HpackEntryDecoderListener { | |
69 public: | |
70 HpackEntryDecoderVLoggingListener() : wrapped_(nullptr) {} | |
71 explicit HpackEntryDecoderVLoggingListener(HpackEntryDecoderListener* wrapped) | |
72 : wrapped_(wrapped) {} | |
73 ~HpackEntryDecoderVLoggingListener() override {} | |
74 | |
75 void OnIndexedHeader(size_t index) override; | |
76 void OnStartLiteralHeader(HpackEntryType entry_type, | |
77 size_t maybe_name_index) override; | |
78 void OnNameStart(bool huffman_encoded, size_t len) override; | |
79 void OnNameData(const char* data, size_t len) override; | |
80 void OnNameEnd() override; | |
81 void OnValueStart(bool huffman_encoded, size_t len) override; | |
82 void OnValueData(const char* data, size_t len) override; | |
83 void OnValueEnd() override; | |
84 void OnDynamicTableSizeUpdate(size_t size) override; | |
85 | |
86 private: | |
87 HpackEntryDecoderListener* const wrapped_; | |
88 }; | |
89 | |
90 // A no-op implementation of HpackEntryDecoderListener. | |
91 class NET_EXPORT_PRIVATE HpackEntryDecoderNoOpListener | |
92 : public HpackEntryDecoderListener { | |
93 public: | |
94 ~HpackEntryDecoderNoOpListener() override {} | |
95 | |
96 void OnIndexedHeader(size_t index) override {} | |
97 void OnStartLiteralHeader(HpackEntryType entry_type, | |
98 size_t maybe_name_index) override {} | |
99 void OnNameStart(bool huffman_encoded, size_t len) override {} | |
100 void OnNameData(const char* data, size_t len) override {} | |
101 void OnNameEnd() override {} | |
102 void OnValueStart(bool huffman_encoded, size_t len) override {} | |
103 void OnValueData(const char* data, size_t len) override {} | |
104 void OnValueEnd() override {} | |
105 void OnDynamicTableSizeUpdate(size_t size) override {} | |
106 }; | |
107 | |
108 } // namespace net | |
109 | |
110 #endif // NET_HTTP2_HPACK_DECODER_HPACK_ENTRY_DECODER_LISTENER_H_ | |
OLD | NEW |