|  | #include "http2/adapter/mock_nghttp2_callbacks.h" | 
|  |  | 
|  | #include "http2/adapter/nghttp2_util.h" | 
|  |  | 
|  | namespace http2 { | 
|  | namespace adapter { | 
|  | namespace test { | 
|  |  | 
|  | /* static */ | 
|  | nghttp2_session_callbacks_unique_ptr MockNghttp2Callbacks::GetCallbacks() { | 
|  | nghttp2_session_callbacks* callbacks; | 
|  | nghttp2_session_callbacks_new(&callbacks); | 
|  |  | 
|  | // All of the callback implementations below just delegate to the mock methods | 
|  | // of |user_data|, which is assumed to be a MockNghttp2Callbacks*. | 
|  | nghttp2_session_callbacks_set_send_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, const uint8_t* data, size_t length, int flags, | 
|  | void* user_data) -> ssize_t { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->Send(data, length, | 
|  | flags); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_send_data_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, nghttp2_frame* frame, const uint8_t* framehd, | 
|  | size_t length, nghttp2_data_source* source, void* user_data) -> int { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->SendData( | 
|  | frame, framehd, length, source); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_on_begin_headers_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, const nghttp2_frame* frame, void* user_data) -> int { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->OnBeginHeaders( | 
|  | frame); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_on_header_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, const nghttp2_frame* frame, const uint8_t* raw_name, | 
|  | size_t name_length, const uint8_t* raw_value, size_t value_length, | 
|  | uint8_t flags, void* user_data) -> int { | 
|  | absl::string_view name = ToStringView(raw_name, name_length); | 
|  | absl::string_view value = ToStringView(raw_value, value_length); | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->OnHeader( | 
|  | frame, name, value, flags); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_on_data_chunk_recv_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, uint8_t flags, int32_t stream_id, | 
|  | const uint8_t* data, size_t len, void* user_data) -> int { | 
|  | absl::string_view chunk = ToStringView(data, len); | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->OnDataChunkRecv( | 
|  | flags, stream_id, chunk); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_on_begin_frame_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, const nghttp2_frame_hd* hd, void* user_data) -> int { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->OnBeginFrame(hd); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_on_frame_recv_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, const nghttp2_frame* frame, void* user_data) -> int { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->OnFrameRecv( | 
|  | frame); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_on_stream_close_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, int32_t stream_id, uint32_t error_code, | 
|  | void* user_data) -> int { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->OnStreamClose( | 
|  | stream_id, error_code); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_on_frame_send_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, const nghttp2_frame* frame, void* user_data) -> int { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->OnFrameSend( | 
|  | frame); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_before_frame_send_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, const nghttp2_frame* frame, void* user_data) -> int { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->BeforeFrameSend( | 
|  | frame); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_on_frame_not_send_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, const nghttp2_frame* frame, int lib_error_code, | 
|  | void* user_data) -> int { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->OnFrameNotSend( | 
|  | frame, lib_error_code); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_on_invalid_frame_recv_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, const nghttp2_frame* frame, int error_code, | 
|  | void* user_data) -> int { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data) | 
|  | ->OnInvalidFrameRecv(frame, error_code); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_error_callback2( | 
|  | callbacks, | 
|  | [](nghttp2_session* /*session*/, int lib_error_code, const char* msg, | 
|  | size_t len, void* user_data) -> int { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->OnErrorCallback2( | 
|  | lib_error_code, msg, len); | 
|  | }); | 
|  |  | 
|  | nghttp2_session_callbacks_set_pack_extension_callback( | 
|  | callbacks, | 
|  | [](nghttp2_session*, uint8_t* buf, size_t len, const nghttp2_frame* frame, | 
|  | void* user_data) -> ssize_t { | 
|  | return static_cast<MockNghttp2Callbacks*>(user_data)->OnPackExtension( | 
|  | buf, len, frame); | 
|  | }); | 
|  | return MakeCallbacksPtr(callbacks); | 
|  | } | 
|  |  | 
|  | }  // namespace test | 
|  | }  // namespace adapter | 
|  | }  // namespace http2 |