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