| #ifndef QUICHE_HTTP2_TEST_TOOLS_HTTP2_TRACE_PRINTER_H_ |
| #define QUICHE_HTTP2_TEST_TOOLS_HTTP2_TRACE_PRINTER_H_ |
| |
| #include <cstddef> |
| |
| #include "absl/strings/string_view.h" |
| #include "quiche/http2/core/http2_frame_decoder_adapter.h" |
| #include "quiche/http2/core/http2_trace_logging.h" |
| #include "quiche/http2/core/spdy_no_op_visitor.h" |
| #include "quiche/common/platform/api/quiche_export.h" |
| |
| namespace http2 { |
| namespace test { |
| |
| // A debugging utility that prints HTTP/2 wire bytes into logical HTTP/2 frame |
| // sequences using `Http2TraceLogger`. |
| class QUICHE_NO_EXPORT Http2TracePrinter { |
| public: |
| // Creates a printer with the given `perspective` prefixed with each log line |
| // (e.g., "CLIENT" or "SERVER"). The given `connection_id` is also included |
| // with each log line and distinguishes among multiple printed connections |
| // with the same `perspective`. If `consume_connection_preface` is true, the |
| // printer will attempt to consume and log the HTTP/2 client connection |
| // preface from the wire bytes. |
| explicit Http2TracePrinter(absl::string_view perspective, |
| const void* connection_id = nullptr, |
| bool consume_connection_preface = false); |
| |
| // Processes the `bytes` as HTTP/2 wire format and INFO logs the received |
| // frames. See `Http2TraceLogger` for more details on the logging format. If |
| // `consume_connection_preface` was passed as true to the constructor, then |
| // errors in processing the connection preface will be logged and subsequent |
| // calls to `ProcessInput()` will be a no-op. |
| void ProcessInput(absl::string_view bytes); |
| |
| private: |
| spdy::SpdyNoOpVisitor visitor_; |
| Http2TraceLogger logger_; |
| Http2DecoderAdapter decoder_; |
| const absl::string_view perspective_; |
| absl::string_view remaining_preface_; |
| bool preface_error_ = false; |
| }; |
| |
| } // namespace test |
| } // namespace http2 |
| |
| #endif // QUICHE_HTTP2_TEST_TOOLS_HTTP2_TRACE_PRINTER_H_ |