// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef QUICHE_HTTP2_CORE_HTTP2_FRAME_DECODER_ADAPTER_H_ #define QUICHE_HTTP2_CORE_HTTP2_FRAME_DECODER_ADAPTER_H_ #include <stddef.h> #include <cstdint> #include <memory> #include <optional> #include <string> #include "absl/strings/string_view.h" #include "quiche/http2/core/spdy_alt_svc_wire_format.h" #include "quiche/http2/core/spdy_headers_handler_interface.h" #include "quiche/http2/core/spdy_protocol.h" #include "quiche/http2/decoder/decode_status.h" #include "quiche/http2/decoder/http2_frame_decoder.h" #include "quiche/http2/decoder/http2_frame_decoder_listener.h" #include "quiche/http2/http2_constants.h" #include "quiche/http2/http2_structures.h" #include "quiche/common/platform/api/quiche_export.h" #include "quiche/spdy/core/hpack/hpack_decoder_adapter.h" namespace spdy { class SpdyFramerVisitorInterface; class ExtensionVisitorInterface; } // namespace spdy // TODO(dahollings): Perform various renames/moves suggested in cl/164660364. namespace http2 { // Adapts SpdyFramer interface to use Http2FrameDecoder. class QUICHE_EXPORT Http2DecoderAdapter : public http2::Http2FrameDecoderListener { … }; } // namespace http2 namespace spdy { // Http2DecoderAdapter will use the given visitor implementing this // interface to deliver event callbacks as frames are decoded. // // Control frames that contain HTTP2 header blocks (HEADER, and PUSH_PROMISE) // are processed in fashion that allows the decompressed header block to be // delivered in chunks to the visitor. // The following steps are followed: // 1. OnHeaders, or OnPushPromise is called. // 2. OnHeaderFrameStart is called; visitor is expected to return an instance // of SpdyHeadersHandlerInterface that will receive the header key-value // pairs. // 3. OnHeaderFrameEnd is called, indicating that the full header block has // been delivered for the control frame. // During step 2, if the visitor is not interested in accepting the header data, // it should return a no-op implementation of SpdyHeadersHandlerInterface. class QUICHE_EXPORT SpdyFramerVisitorInterface { … }; class QUICHE_EXPORT ExtensionVisitorInterface { … }; } // namespace spdy #endif // QUICHE_HTTP2_CORE_HTTP2_FRAME_DECODER_ADAPTER_H_