blob: 4243347e75865bdef14965fb6009bd5ec0089426 [file] [log] [blame]
#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