xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/spdy/core/recording_headers_handler.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright (c) 2020 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 QUICHE_SPDY_CORE_RECORDING_HEADERS_HANDLER_H_
6 #define QUICHE_SPDY_CORE_RECORDING_HEADERS_HANDLER_H_
7 
8 #include <cstddef>
9 
10 #include "absl/strings/string_view.h"
11 #include "quiche/common/platform/api/quiche_export.h"
12 #include "quiche/spdy/core/http2_header_block.h"
13 #include "quiche/spdy/core/spdy_headers_handler_interface.h"
14 
15 namespace spdy {
16 
17 // RecordingHeadersHandler copies the headers emitted from the deframer, and
18 // when needed can forward events to another wrapped handler.
19 class QUICHE_EXPORT RecordingHeadersHandler
20     : public SpdyHeadersHandlerInterface {
21  public:
22   explicit RecordingHeadersHandler(
23       SpdyHeadersHandlerInterface* wrapped = nullptr);
24   RecordingHeadersHandler(const RecordingHeadersHandler&) = delete;
25   RecordingHeadersHandler& operator=(const RecordingHeadersHandler&) = delete;
26 
27   void OnHeaderBlockStart() override;
28 
29   void OnHeader(absl::string_view key, absl::string_view value) override;
30 
31   void OnHeaderBlockEnd(size_t uncompressed_header_bytes,
32                         size_t compressed_header_bytes) override;
33 
decoded_block()34   const Http2HeaderBlock& decoded_block() const { return block_; }
uncompressed_header_bytes()35   size_t uncompressed_header_bytes() const {
36     return uncompressed_header_bytes_;
37   }
compressed_header_bytes()38   size_t compressed_header_bytes() const { return compressed_header_bytes_; }
39 
40  private:
41   SpdyHeadersHandlerInterface* wrapped_ = nullptr;
42   Http2HeaderBlock block_;
43   size_t uncompressed_header_bytes_ = 0;
44   size_t compressed_header_bytes_ = 0;
45 };
46 
47 }  // namespace spdy
48 
49 #endif  // QUICHE_SPDY_CORE_RECORDING_HEADERS_HANDLER_H_
50