ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
client.c File Reference

WebSocket client implementation. More...

Go to the source code of this file.

Functions

websocket_client_t * websocket_client_create (void)
 Create and initialize WebSocket client.
 
void websocket_client_destroy (websocket_client_t **client_ptr)
 Destroy WebSocket client and free resources.
 
bool websocket_client_is_active (const websocket_client_t *client)
 Check if connection is currently active.
 
bool websocket_client_is_lost (const websocket_client_t *client)
 Check if connection was lost.
 
void websocket_client_signal_lost (websocket_client_t *client)
 Signal that connection was lost.
 
void websocket_client_close (websocket_client_t *client)
 Close connection gracefully.
 
void websocket_client_shutdown (websocket_client_t *client)
 Shutdown connection forcefully.
 
acip_transport_t * websocket_client_connect (websocket_client_t *client, const char *url, struct crypto_context_t *crypto_ctx)
 Establish WebSocket connection to server.
 
acip_transport_t * websocket_client_get_transport (const websocket_client_t *client)
 Get active transport instance.
 

Detailed Description

WebSocket client implementation.

Thin implementation that delegates to acip_websocket_client_transport_create() for actual connection setup. Mirrors tcp_client.c structure for consistency.

Author
Zachary Fogg me@zf.nosp@m.o.gg
Date
February 2026

Definition in file lib/network/websocket/client.c.

Function Documentation

◆ websocket_client_close()

void websocket_client_close ( websocket_client_t *  client)

Close connection gracefully.

Definition at line 100 of file lib/network/websocket/client.c.

100 {
101 if (!client) {
102 return;
103 }
104
105 log_debug("Closing WebSocket client");
106
107 if (client->transport) {
108 acip_transport_close(client->transport);
109 }
110
111 atomic_store(&client->connection_active, false);
112}

◆ websocket_client_connect()

acip_transport_t * websocket_client_connect ( websocket_client_t *  client,
const char *  url,
struct crypto_context_t *  crypto_ctx 
)

Establish WebSocket connection to server.

Delegates to acip_websocket_client_transport_create() which handles:

  • URL parsing and validation
  • WebSocket handshake
  • Transport setup and lifecycle

Definition at line 141 of file lib/network/websocket/client.c.

142 {
143 if (!client || !url) {
144 log_error("Invalid arguments to websocket_client_connect");
145 return NULL;
146 }
147
148 log_info("Connecting WebSocket client to %s", url);
149
150 // Store URL for reference
151 strncpy(client->url, url, sizeof(client->url) - 1);
152 client->url[sizeof(client->url) - 1] = '\0';
153
154 // Create transport using ACIP layer
155 acip_transport_t *transport = acip_websocket_client_transport_create(url, crypto_ctx);
156 if (!transport) {
157 log_error("Failed to create WebSocket transport");
158 atomic_store(&client->connection_lost, true);
159 return NULL;
160 }
161
162 // Store transport and mark as active
163 client->transport = transport;
164 atomic_store(&client->connection_active, true);
165 atomic_store(&client->connection_lost, false);
166
167 log_info("WebSocket client connected to %s", url);
168
169 return transport;
170}
acip_transport_t * acip_websocket_client_transport_create(const char *url, crypto_context_t *crypto_ctx)
Create WebSocket client transport.

References acip_websocket_client_transport_create().

Referenced by connection_attempt_tcp(), and connection_attempt_websocket().

◆ websocket_client_create()

websocket_client_t * websocket_client_create ( void  )

Create and initialize WebSocket client.

Definition at line 24 of file lib/network/websocket/client.c.

24 {
25 websocket_client_t *client = SAFE_MALLOC(sizeof(websocket_client_t), websocket_client_t *);
26 if (!client) {
27 log_error("Failed to allocate websocket_client_t");
28 return NULL;
29 }
30
31 // Zero-initialize all fields
32 memset(client, 0, sizeof(*client));
33
34 // Initialize connection state
35 atomic_store(&client->connection_active, false);
36 atomic_store(&client->connection_lost, false);
37 client->transport = NULL;
38
39 log_debug("WebSocket client created");
40
41 return client;
42}

Referenced by connection_attempt_tcp(), connection_attempt_websocket(), and session_client_like_run().

◆ websocket_client_destroy()

void websocket_client_destroy ( websocket_client_t **  client_ptr)

Destroy WebSocket client and free resources.

Definition at line 47 of file lib/network/websocket/client.c.

47 {
48 if (!client_ptr || !*client_ptr) {
49 return; // No-op if NULL
50 }
51
52 websocket_client_t *client = *client_ptr;
53
54 log_debug("Destroying WebSocket client");
55
56 // Close and destroy transport if it exists
57 if (client->transport) {
58 acip_transport_destroy(client->transport);
59 client->transport = NULL;
60 }
61
62 SAFE_FREE(*client_ptr);
63}
void acip_transport_destroy(acip_transport_t *transport)

References acip_transport_destroy().

Referenced by connection_attempt_tcp(), connection_attempt_websocket(), connection_context_cleanup(), and session_client_like_run().

◆ websocket_client_get_transport()

acip_transport_t * websocket_client_get_transport ( const websocket_client_t *  client)

Get active transport instance.

Definition at line 175 of file lib/network/websocket/client.c.

175 {
176 if (!client) {
177 return NULL;
178 }
179 return client->transport;
180}

◆ websocket_client_is_active()

bool websocket_client_is_active ( const websocket_client_t *  client)

Check if connection is currently active.

Definition at line 68 of file lib/network/websocket/client.c.

68 {
69 if (!client) {
70 return false;
71 }
72 return atomic_load(&client->connection_active);
73}

◆ websocket_client_is_lost()

bool websocket_client_is_lost ( const websocket_client_t *  client)

Check if connection was lost.

Definition at line 78 of file lib/network/websocket/client.c.

78 {
79 if (!client) {
80 return false;
81 }
82 return atomic_load(&client->connection_lost);
83}

◆ websocket_client_shutdown()

void websocket_client_shutdown ( websocket_client_t *  client)

Shutdown connection forcefully.

Definition at line 117 of file lib/network/websocket/client.c.

117 {
118 if (!client) {
119 return;
120 }
121
122 log_debug("Shutting down WebSocket client");
123
124 // Force close the transport
125 if (client->transport) {
126 acip_transport_close(client->transport);
127 }
128
129 atomic_store(&client->connection_active, false);
130 atomic_store(&client->connection_lost, true);
131}

◆ websocket_client_signal_lost()

void websocket_client_signal_lost ( websocket_client_t *  client)

Signal that connection was lost.

Definition at line 88 of file lib/network/websocket/client.c.

88 {
89 if (!client) {
90 return;
91 }
92 atomic_store(&client->connection_lost, true);
93 atomic_store(&client->connection_active, false);
94 log_debug("WebSocket connection marked as lost");
95}