ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
include/ascii-chat/network/webrtc/webrtc.h
Go to the documentation of this file.
1
14
15#pragma once
16
17#include <stdint.h>
18#include <stdbool.h>
19#include <stddef.h>
20#include "../../common.h"
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
35
36// Forward declarations
39
52
61
69
79typedef void (*webrtc_local_description_callback_t)(webrtc_peer_connection_t *pc, const char *sdp, const char *type,
80 void *user_data);
81
91typedef void (*webrtc_local_candidate_callback_t)(webrtc_peer_connection_t *pc, const char *candidate, const char *mid,
92 void *user_data);
93
101 void *user_data);
102
109
117typedef void (*webrtc_datachannel_message_callback_t)(webrtc_data_channel_t *dc, const uint8_t *data, size_t size,
118 void *user_data);
119
126typedef void (*webrtc_datachannel_error_callback_t)(webrtc_data_channel_t *dc, const char *error, void *user_data);
127
158
159// ============================================================================
160// Initialization and Cleanup
161// ============================================================================
162
171
178void webrtc_destroy(void);
179
180// ============================================================================
181// Peer Connection Management
182// ============================================================================
183
194
203
210
217
225
232
233// ============================================================================
234// SDP Offer/Answer Exchange
235// ============================================================================
236
246
257asciichat_error_t webrtc_set_remote_description(webrtc_peer_connection_t *pc, const char *sdp, const char *type);
258
259// ============================================================================
260// ICE Candidate Exchange
261// ============================================================================
262
272asciichat_error_t webrtc_add_remote_candidate(webrtc_peer_connection_t *pc, const char *candidate, const char *mid);
273
274// ============================================================================
275// DataChannel Management
276// ============================================================================
277
289 webrtc_data_channel_t **dc_out);
290
303
310
320
327
334typedef struct {
337 void (*on_error)(webrtc_data_channel_t *dc, const char *error, void *user_data);
338 void (*on_message)(webrtc_data_channel_t *dc, const uint8_t *data, size_t len, void *user_data);
339 void *user_data;
341
351 const webrtc_datachannel_callbacks_t *callbacks);
352
360
367static inline void webrtc_datachannel_close(webrtc_data_channel_t *dc) {
369}
370
380
389
399
410 // end of webrtc group
412
413#ifdef __cplusplus
414}
415#endif
⚙️ Common definitions, error codes, macros, and types shared throughout the application
unsigned int uint32_t
Definition common.h:62
unsigned char uint8_t
Definition common.h:60
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
stun_server_t
Definition stun.h:78
turn_server_t
Definition turn.h:106
asciichat_error_t webrtc_create_datachannel(webrtc_peer_connection_t *pc, const char *label, webrtc_data_channel_t **dc_out)
Create a DataChannel (for connection initiator).
void webrtc_close_peer_connection(webrtc_peer_connection_t *pc)
Close and destroy a peer connection.
asciichat_error_t webrtc_create_offer(webrtc_peer_connection_t *pc)
Create and set local SDP offer (for connection initiator).
asciichat_error_t webrtc_datachannel_set_callbacks(webrtc_data_channel_t *dc, const webrtc_datachannel_callbacks_t *callbacks)
Set DataChannel callbacks.
int webrtc_get_rtc_id(webrtc_peer_connection_t *pc)
Get the internal libdatachannel peer connection ID.
struct webrtc_data_channel webrtc_data_channel_t
asciichat_error_t webrtc_add_remote_candidate(webrtc_peer_connection_t *pc, const char *candidate, const char *mid)
Add remote ICE candidate.
struct webrtc_peer_connection webrtc_peer_connection_t
webrtc_state_t webrtc_get_state(webrtc_peer_connection_t *pc)
Get current connection state.
webrtc_gathering_state_t webrtc_get_gathering_state(webrtc_peer_connection_t *pc)
Get current ICE gathering state.
asciichat_error_t webrtc_init(void)
Initialize WebRTC library (libdatachannel).
asciichat_error_t webrtc_datachannel_get_max_message_size(webrtc_data_channel_t *dc, size_t *size)
void webrtc_datachannel_destroy(webrtc_data_channel_t *dc)
Destroy a DataChannel and free resources.
asciichat_error_t webrtc_create_peer_connection(const webrtc_config_t *config, webrtc_peer_connection_t **pc_out)
Create a new WebRTC peer connection.
const char * webrtc_datachannel_get_label(webrtc_data_channel_t *dc)
Get DataChannel label.
void(* webrtc_local_description_callback_t)(webrtc_peer_connection_t *pc, const char *sdp, const char *type, void *user_data)
Callback for local SDP offer/answer generation.
webrtc_gathering_state_t
ICE gathering state.
void * webrtc_get_user_data(webrtc_peer_connection_t *pc)
Get user data pointer from connection.
void(* webrtc_datachannel_message_callback_t)(webrtc_data_channel_t *dc, const uint8_t *data, size_t size, void *user_data)
Callback for DataChannel message received.
asciichat_error_t webrtc_datachannel_get_buffered_amount(webrtc_data_channel_t *dc, size_t *amount)
void(* webrtc_state_callback_t)(webrtc_peer_connection_t *pc, webrtc_state_t state, void *user_data)
Callback for state changes.
void webrtc_peer_connection_close(webrtc_peer_connection_t *pc)
Close a peer connection.
void webrtc_destroy(void)
Cleanup WebRTC library resources.
webrtc_state_t
ICE, signaling, DataChannel, and callback settings for a WebRTC peer.
void(* webrtc_datachannel_open_callback_t)(webrtc_data_channel_t *dc, void *user_data)
Callback for DataChannel open event.
void(* webrtc_local_candidate_callback_t)(webrtc_peer_connection_t *pc, const char *candidate, const char *mid, void *user_data)
Callback for local ICE candidate discovery.
void webrtc_peer_connection_destroy(webrtc_peer_connection_t *pc)
Destroy a peer connection and free resources.
asciichat_error_t webrtc_set_remote_description(webrtc_peer_connection_t *pc, const char *sdp, const char *type)
Set remote SDP offer/answer.
void webrtc_close_datachannel(webrtc_data_channel_t *dc)
Close a DataChannel.
bool webrtc_datachannel_is_open(webrtc_data_channel_t *dc)
Check if DataChannel is open and ready.
asciichat_error_t webrtc_datachannel_send(webrtc_data_channel_t *dc, const uint8_t *data, size_t size)
Send data over DataChannel.
bool webrtc_is_gathering_timed_out(webrtc_peer_connection_t *pc, uint32_t timeout_ms)
Check if ICE gathering has timed out.
void(* webrtc_gathering_state_callback_t)(webrtc_peer_connection_t *pc, webrtc_gathering_state_t state, void *user_data)
Callback for ICE gathering state changes.
void(* webrtc_datachannel_error_callback_t)(webrtc_data_channel_t *dc, const char *error, void *user_data)
Callback for DataChannel error.
void webrtc_datachannel_set_open_state(webrtc_data_channel_t *dc, bool is_open)
Set DataChannel open state (internal use).
@ WEBRTC_GATHERING_COMPLETE
All candidates gathered.
@ WEBRTC_GATHERING_GATHERING
Gathering candidates.
@ WEBRTC_GATHERING_NEW
Not started.
@ WEBRTC_STATE_NEW
Connection created but not started.
@ WEBRTC_STATE_DISCONNECTED
Connection lost.
@ WEBRTC_STATE_FAILED
Connection failed (fatal).
@ WEBRTC_STATE_CLOSED
Connection closed cleanly.
@ WEBRTC_STATE_CONNECTING
ICE gathering/connection in progress.
@ WEBRTC_STATE_CONNECTED
DataChannel established and ready.
ICE, signaling, DataChannel, and callback settings for a WebRTC peer.
webrtc_datachannel_message_callback_t on_datachannel_message
webrtc_local_description_callback_t on_local_description
const char * turn_username
Optional credential override, including full ACDS usernames.
webrtc_local_candidate_callback_t on_local_candidate
size_t stun_count
Number of STUN servers.
webrtc_gathering_state_callback_t on_gathering_state_change
bool port_forwarding
Opt-in UDP mapping before ICE gathering (native peers only).
bool relay_only
Restrict ICE to TURN relay candidates.
webrtc_datachannel_error_callback_t on_datachannel_error
turn_server_t * turn_servers
Array of TURN servers.
stun_server_t * stun_servers
Array of STUN servers.
void * user_data
Passed to all callbacks.
size_t turn_count
Number of TURN servers.
const char * bind_address
Optional local interface address for ICE sockets.
const char * turn_credential
Optional credential override.
webrtc_datachannel_open_callback_t on_datachannel_open
When code needs to work with webrtc peer connection, it keeps mapping, port_reservation,...
webrtc_peer_connection_t * pc
Parent peer connection.
void * user_data
User data for per-channel callbacks.
Event hooks and caller context for one WebRTC DataChannel.
void(* on_close)(webrtc_data_channel_t *dc, void *user_data)
Channel closed.
void(* on_error)(webrtc_data_channel_t *dc, const char *error, void *user_data)
Error occurred.
void(* on_open)(webrtc_data_channel_t *dc, void *user_data)
Channel opened.
void(* on_message)(webrtc_data_channel_t *dc, const uint8_t *data, size_t len, void *user_data)
Message received.
WebRTC data channel for sending/receiving messages.