in source/event_stream_rpc_client.c [59:121]
static int s_create_connection_on_channel(
struct aws_event_stream_rpc_client_connection *connection,
struct aws_channel *channel) {
struct aws_channel_handler *event_stream_handler = NULL;
struct aws_channel_slot *slot = NULL;
struct aws_event_stream_channel_handler_options handler_options = {
.on_message_received = s_on_message_received,
.user_data = connection,
.initial_window_size = connection->initial_window_size,
.manual_window_management = connection->enable_read_back_pressure,
};
AWS_LOGF_TRACE(
AWS_LS_EVENT_STREAM_RPC_CLIENT,
"id=%p: creating an event-stream handler on channel %p",
(void *)connection,
(void *)channel);
event_stream_handler = aws_event_stream_channel_handler_new(connection->allocator, &handler_options);
if (!event_stream_handler) {
AWS_LOGF_ERROR(
AWS_LS_EVENT_STREAM_RPC_CLIENT,
"id=%p: creating an event-stream handler failed with error %s",
(void *)connection,
aws_error_debug_str(aws_last_error()));
goto error;
}
slot = aws_channel_slot_new(channel);
if (!slot) {
AWS_LOGF_ERROR(
AWS_LS_EVENT_STREAM_RPC_CLIENT,
"id=%p: creating channel slot failed with error %s",
(void *)connection,
aws_error_debug_str(aws_last_error()));
goto error;
}
aws_channel_slot_insert_end(channel, slot);
if (aws_channel_slot_set_handler(slot, event_stream_handler)) {
AWS_LOGF_ERROR(
AWS_LS_EVENT_STREAM_RPC_CLIENT,
"id=%p: setting handler on channel slot failed with error %s",
(void *)connection,
aws_error_debug_str(aws_last_error()));
goto error;
}
connection->event_stream_handler = event_stream_handler;
connection->channel = channel;
aws_channel_acquire_hold(channel);
return AWS_OP_SUCCESS;
error:
if (!slot && event_stream_handler) {
aws_channel_handler_destroy(event_stream_handler);
}
return AWS_OP_ERR;
}