ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
connection.c File Reference

Go to the source code of this file.

Functions

void session_connection_init (session_connection_t *connection, session_connection_ops_t ops, void *context)
asciichat_error_t session_connection_start (session_connection_t *connection)
void session_connection_request_stop (session_connection_t *connection)
asciichat_error_t session_connection_stop (session_connection_t *connection)
void session_connection_interrupt_transport (acip_transport_t *transport)

Function Documentation

◆ session_connection_init()

void session_connection_init ( session_connection_t * connection,
session_connection_ops_t ops,
void * context )

◆ session_connection_interrupt_transport()

void session_connection_interrupt_transport ( acip_transport_t * transport)

Definition at line 44 of file src/common/session/connection.c.

44 {
45 acip_transport_interrupt(transport);
46}

Referenced by server_connection_shutdown().

◆ session_connection_request_stop()

void session_connection_request_stop ( session_connection_t * connection)

Definition at line 19 of file src/common/session/connection.c.

19 {
20 if (!connection || atomic_load_int(&connection->state) == SESSION_CONNECTION_STOPPED)
21 return;
22 atomic_store_int(&connection->state, SESSION_CONNECTION_STOPPING);
23 if (connection->ops.interrupt)
24 connection->ops.interrupt(connection->context);
25}

References session_connection_t::context, session_connection_ops_t::interrupt, session_connection_t::ops, SESSION_CONNECTION_STOPPED, SESSION_CONNECTION_STOPPING, and session_connection_t::state.

Referenced by client_connection_request_stop(), and session_connection_stop().

◆ session_connection_start()

asciichat_error_t session_connection_start ( session_connection_t * connection)

Definition at line 10 of file src/common/session/connection.c.

10 {
11 if (!connection || !thread_equal(connection->owner_thread, thread_self()))
12 return SET_ERRNO(ERROR_INVALID_STATE, "Connection startup requires its controlling thread");
13 int expected = SESSION_CONNECTION_STARTING;
14 if (!atomic_cas_int(&connection->state, &expected, SESSION_CONNECTION_RUNNING))
15 return SET_ERRNO(ERROR_INVALID_STATE, "Connection was stopped during startup");
16 return ASCIICHAT_OK;
17}
#define SET_ERRNO(code,...)
@ ERROR_INVALID_STATE
@ ASCIICHAT_OK
Definition error_codes.h:46

References ASCIICHAT_OK, ERROR_INVALID_STATE, session_connection_t::owner_thread, SESSION_CONNECTION_RUNNING, SESSION_CONNECTION_STARTING, SET_ERRNO, and session_connection_t::state.

Referenced by client_connection_start(), session_participant_connect(), session_participant_set_connection(), and session_participant_set_transport().

◆ session_connection_stop()

asciichat_error_t session_connection_stop ( session_connection_t * connection)

Definition at line 27 of file src/common/session/connection.c.

27 {
28 if (!connection || atomic_load_int(&connection->state) == SESSION_CONNECTION_STOPPED)
29 return ASCIICHAT_OK;
31 if (!thread_equal(connection->owner_thread, thread_self()))
32 return SET_ERRNO(ERROR_INVALID_STATE, "Connection cleanup requires its controlling thread");
33 if (connection->ops.join) {
34 asciichat_error_t result = connection->ops.join(connection->context);
35 if (result != ASCIICHAT_OK)
36 return result;
37 }
38 if (connection->ops.release)
39 connection->ops.release(connection->context);
40 atomic_store_int(&connection->state, SESSION_CONNECTION_STOPPED);
41 return ASCIICHAT_OK;
42}
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
void session_connection_request_stop(session_connection_t *connection)
asciichat_error_t(* join)(void *context)

References ASCIICHAT_OK, session_connection_t::context, ERROR_INVALID_STATE, session_connection_ops_t::join, session_connection_t::ops, session_connection_t::owner_thread, session_connection_ops_t::release, session_connection_request_stop(), SESSION_CONNECTION_STOPPED, SET_ERRNO, and session_connection_t::state.

Referenced by client_connection_stop(), session_participant_connect(), session_participant_disconnect(), and session_participant_set_transport().