| #ifndef QUICHE_HTTP2_ADAPTER_NGHTTP2_CALLBACKS_H_ |
| #define QUICHE_HTTP2_ADAPTER_NGHTTP2_CALLBACKS_H_ |
| |
| #include <cstdint> |
| |
| #include "http2/adapter/http2_protocol.h" |
| #include "http2/adapter/nghttp2.h" |
| #include "http2/adapter/nghttp2_util.h" |
| |
| namespace http2 { |
| namespace adapter { |
| namespace callbacks { |
| |
| // The following functions are nghttp2 callbacks that Nghttp2Adapter sets at the |
| // beginning of its lifetime. It is expected that |user_data| holds an |
| // Http2VisitorInterface. |
| |
| // Callback once the library is ready to send serialized frames. |
| ssize_t OnReadyToSend(nghttp2_session* session, |
| const uint8_t* data, |
| size_t length, |
| int flags, |
| void* user_data); |
| |
| // Callback once a frame header has been received. |
| int OnBeginFrame(nghttp2_session* session, const nghttp2_frame_hd* header, |
| void* user_data); |
| |
| // Callback once a complete frame has been received. |
| int OnFrameReceived(nghttp2_session* session, const nghttp2_frame* frame, |
| void* user_data); |
| |
| // Callback at the start of a frame carrying headers. |
| int OnBeginHeaders(nghttp2_session* session, |
| const nghttp2_frame* frame, |
| void* user_data); |
| |
| // Callback once a name-value header has been received. |
| int OnHeader(nghttp2_session* session, const nghttp2_frame* frame, |
| nghttp2_rcbuf* name, nghttp2_rcbuf* value, uint8_t flags, |
| void* user_data); |
| |
| // Invoked immediately before sending a frame. |
| int OnBeforeFrameSent(nghttp2_session* session, const nghttp2_frame* frame, |
| void* user_data); |
| |
| // Invoked immediately after a frame is sent. |
| int OnFrameSent(nghttp2_session* session, const nghttp2_frame* frame, |
| void* user_data); |
| |
| // Invoked when a non-DATA frame is not sent because of an error. |
| int OnFrameNotSent(nghttp2_session* session, const nghttp2_frame* frame, |
| int lib_error_code, void* user_data); |
| |
| // Invoked when an invalid frame is received. |
| int OnInvalidFrameReceived(nghttp2_session* session, const nghttp2_frame* frame, |
| int lib_error_code, void* user_data); |
| |
| // Invoked when a chunk of data (from a DATA frame payload) has been received. |
| int OnDataChunk(nghttp2_session* session, uint8_t flags, |
| Http2StreamId stream_id, const uint8_t* data, size_t len, |
| void* user_data); |
| |
| // Callback once a stream has been closed. |
| int OnStreamClosed(nghttp2_session* session, Http2StreamId stream_id, |
| uint32_t error_code, void* user_data); |
| |
| // Invoked when nghttp2 has a chunk of extension frame data to pass to the |
| // application. |
| int OnExtensionChunkReceived(nghttp2_session* session, |
| const nghttp2_frame_hd* hd, const uint8_t* data, |
| size_t len, void* user_data); |
| |
| // Invoked when nghttp2 wants the application to unpack an extension payload. |
| int OnUnpackExtensionCallback(nghttp2_session* session, void** payload, |
| const nghttp2_frame_hd* hd, void* user_data); |
| |
| // Invoked when nghttp2 is ready to pack an extension payload. Returns the |
| // number of bytes serialized to |buf|. |
| ssize_t OnPackExtensionCallback(nghttp2_session* session, uint8_t* buf, |
| size_t len, const nghttp2_frame* frame, |
| void* user_data); |
| |
| // Invoked when the library has an error message to deliver. |
| int OnError(nghttp2_session* session, int lib_error_code, const char* msg, |
| size_t len, void* user_data); |
| |
| nghttp2_session_callbacks_unique_ptr Create(); |
| |
| } // namespace callbacks |
| } // namespace adapter |
| } // namespace http2 |
| |
| #endif // QUICHE_HTTP2_ADAPTER_NGHTTP2_CALLBACKS_H_ |