in source/h2_connection.c [27:177]
static int s_handler_process_read_message(
struct aws_channel_handler *handler,
struct aws_channel_slot *slot,
struct aws_io_message *message);
static int s_handler_process_write_message(
struct aws_channel_handler *handler,
struct aws_channel_slot *slot,
struct aws_io_message *message);
static int s_handler_increment_read_window(
struct aws_channel_handler *handler,
struct aws_channel_slot *slot,
size_t size);
static int s_handler_shutdown(
struct aws_channel_handler *handler,
struct aws_channel_slot *slot,
enum aws_channel_direction dir,
int error_code,
bool free_scarce_resources_immediately);
static size_t s_handler_initial_window_size(struct aws_channel_handler *handler);
static size_t s_handler_message_overhead(struct aws_channel_handler *handler);
static void s_handler_destroy(struct aws_channel_handler *handler);
static void s_handler_installed(struct aws_channel_handler *handler, struct aws_channel_slot *slot);
static struct aws_http_stream *s_connection_make_request(
struct aws_http_connection *client_connection,
const struct aws_http_make_request_options *options);
static void s_connection_close(struct aws_http_connection *connection_base);
static bool s_connection_is_open(const struct aws_http_connection *connection_base);
static bool s_connection_new_requests_allowed(const struct aws_http_connection *connection_base);
static void s_connection_update_window(struct aws_http_connection *connection_base, uint32_t increment_size);
static int s_connection_change_settings(
struct aws_http_connection *connection_base,
const struct aws_http2_setting *settings_array,
size_t num_settings,
aws_http2_on_change_settings_complete_fn *on_completed,
void *user_data);
static int s_connection_send_ping(
struct aws_http_connection *connection_base,
const struct aws_byte_cursor *optional_opaque_data,
aws_http2_on_ping_complete_fn *on_completed,
void *user_data);
static int s_connection_send_goaway(
struct aws_http_connection *connection_base,
uint32_t http2_error,
bool allow_more_streams,
const struct aws_byte_cursor *optional_debug_data);
static int s_connection_get_sent_goaway(
struct aws_http_connection *connection_base,
uint32_t *out_http2_error,
uint32_t *out_last_stream_id);
static int s_connection_get_received_goaway(
struct aws_http_connection *connection_base,
uint32_t *out_http2_error,
uint32_t *out_last_stream_id);
static void s_connection_get_local_settings(
const struct aws_http_connection *connection_base,
struct aws_http2_setting out_settings[AWS_HTTP2_SETTINGS_COUNT]);
static void s_connection_get_remote_settings(
const struct aws_http_connection *connection_base,
struct aws_http2_setting out_settings[AWS_HTTP2_SETTINGS_COUNT]);
static void s_cross_thread_work_task(struct aws_channel_task *task, void *arg, enum aws_task_status status);
static void s_outgoing_frames_task(struct aws_channel_task *task, void *arg, enum aws_task_status status);
static int s_encode_outgoing_frames_queue(struct aws_h2_connection *connection, struct aws_byte_buf *output);
static int s_encode_data_from_outgoing_streams(struct aws_h2_connection *connection, struct aws_byte_buf *output);
static int s_record_closed_stream(
struct aws_h2_connection *connection,
uint32_t stream_id,
enum aws_h2_stream_closed_when closed_when);
static void s_stream_complete(struct aws_h2_connection *connection, struct aws_h2_stream *stream, int error_code);
static void s_write_outgoing_frames(struct aws_h2_connection *connection, bool first_try);
static void s_finish_shutdown(struct aws_h2_connection *connection);
static void s_send_goaway(
struct aws_h2_connection *connection,
uint32_t h2_error_code,
bool allow_more_streams,
const struct aws_byte_cursor *optional_debug_data);
static struct aws_h2_pending_settings *s_new_pending_settings(
struct aws_allocator *allocator,
const struct aws_http2_setting *settings_array,
size_t num_settings,
aws_http2_on_change_settings_complete_fn *on_completed,
void *user_data);
static struct aws_h2err s_decoder_on_headers_begin(uint32_t stream_id, void *userdata);
static struct aws_h2err s_decoder_on_headers_i(
uint32_t stream_id,
const struct aws_http_header *header,
enum aws_http_header_name name_enum,
enum aws_http_header_block block_type,
void *userdata);
static struct aws_h2err s_decoder_on_headers_end(
uint32_t stream_id,
bool malformed,
enum aws_http_header_block block_type,
void *userdata);
static struct aws_h2err s_decoder_on_push_promise(uint32_t stream_id, uint32_t promised_stream_id, void *userdata);
static struct aws_h2err s_decoder_on_data_begin(
uint32_t stream_id,
uint32_t payload_len,
uint32_t total_padding_bytes,
bool end_stream,
void *userdata);
static struct aws_h2err s_decoder_on_data_i(uint32_t stream_id, struct aws_byte_cursor data, void *userdata);
static struct aws_h2err s_decoder_on_end_stream(uint32_t stream_id, void *userdata);
static struct aws_h2err s_decoder_on_rst_stream(uint32_t stream_id, uint32_t h2_error_code, void *userdata);
static struct aws_h2err s_decoder_on_ping_ack(uint8_t opaque_data[AWS_HTTP2_PING_DATA_SIZE], void *userdata);
static struct aws_h2err s_decoder_on_ping(uint8_t opaque_data[AWS_HTTP2_PING_DATA_SIZE], void *userdata);
static struct aws_h2err s_decoder_on_settings(
const struct aws_http2_setting *settings_array,
size_t num_settings,
void *userdata);
static struct aws_h2err s_decoder_on_settings_ack(void *userdata);
static struct aws_h2err s_decoder_on_window_update(uint32_t stream_id, uint32_t window_size_increment, void *userdata);
struct aws_h2err s_decoder_on_goaway(
uint32_t last_stream,
uint32_t error_code,
struct aws_byte_cursor debug_data,
void *userdata);
static struct aws_http_connection_vtable s_h2_connection_vtable = {
.channel_handler_vtable =
{
.process_read_message = s_handler_process_read_message,
.process_write_message = s_handler_process_write_message,
.increment_read_window = s_handler_increment_read_window,
.shutdown = s_handler_shutdown,
.initial_window_size = s_handler_initial_window_size,
.message_overhead = s_handler_message_overhead,
.destroy = s_handler_destroy,
},
.on_channel_handler_installed = s_handler_installed,
.make_request = s_connection_make_request,
.new_server_request_handler_stream = NULL,
.stream_send_response = NULL,
.close = s_connection_close,
.is_open = s_connection_is_open,
.new_requests_allowed = s_connection_new_requests_allowed,
.update_window = s_connection_update_window,
.change_settings = s_connection_change_settings,
.send_ping = s_connection_send_ping,
.send_goaway = s_connection_send_goaway,
.get_sent_goaway = s_connection_get_sent_goaway,
.get_received_goaway = s_connection_get_received_goaway,
.get_local_settings = s_connection_get_local_settings,
.get_remote_settings = s_connection_get_remote_settings,
};