in source/event_stream_rpc_server.c [249:307]
static void s_on_accept_channel_setup(
struct aws_server_bootstrap *bootstrap,
int error_code,
struct aws_channel *channel,
void *user_data) {
(void)bootstrap;
struct aws_event_stream_rpc_server_listener *server = user_data;
if (!error_code) {
AWS_LOGF_INFO(
AWS_LS_EVENT_STREAM_RPC_SERVER,
"id=%p: incoming connection with channel %p.",
(void *)server,
(void *)channel);
AWS_FATAL_ASSERT(channel && "Channel should never be null with a 0 error code.");
struct aws_event_stream_rpc_server_connection *connection = s_create_connection_on_channel(server, channel);
if (!connection) {
int error = aws_last_error();
server->on_new_connection(NULL, error, NULL, server->user_data);
aws_channel_shutdown(channel, error);
}
struct aws_event_stream_rpc_connection_options connection_options;
AWS_ZERO_STRUCT(connection_options);
aws_event_stream_rpc_server_connection_acquire(connection);
AWS_LOGF_TRACE(
AWS_LS_EVENT_STREAM_RPC_SERVER,
"id=%p: invoking on_new_connection with connection %p.",
(void *)server,
(void *)connection);
if (server->on_new_connection(connection, AWS_ERROR_SUCCESS, &connection_options, server->user_data)) {
aws_channel_shutdown(channel, aws_last_error());
aws_event_stream_rpc_server_connection_release(connection);
return;
}
AWS_FATAL_ASSERT(
connection_options.on_connection_protocol_message && "on_connection_protocol_message must be specified!");
AWS_FATAL_ASSERT(connection_options.on_incoming_stream && "on_connection_protocol_message must be specified");
connection->on_incoming_stream = connection_options.on_incoming_stream;
connection->on_connection_protocol_message = connection_options.on_connection_protocol_message;
connection->user_data = connection_options.user_data;
connection->bootstrap_owned = true;
aws_event_stream_rpc_server_connection_release(connection);
} else {
AWS_LOGF_ERROR(
AWS_LS_EVENT_STREAM_RPC_SERVER,
"id=%p: invoking on_new_connection with error %s",
(void *)server,
aws_error_debug_str(error_code));
server->on_new_connection(NULL, error_code, NULL, server->user_data);
}
}