ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
include/ascii-chat/network/webrtc/webrtc.h
Go to the documentation of this file.
1
15#pragma once
16
17#include <stdint.h>
18#include <stdbool.h>
19#include <stddef.h>
20#include "../../common.h"
21#include "../../network/webrtc/stun.h"
22#include "../../network/webrtc/turn.h"
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
34// Forward declarations
37
49
58
66
76typedef void (*webrtc_local_description_callback_t)(webrtc_peer_connection_t *pc, const char *sdp, const char *type,
77 void *user_data);
78
88typedef void (*webrtc_local_candidate_callback_t)(webrtc_peer_connection_t *pc, const char *candidate, const char *mid,
89 void *user_data);
90
98 void *user_data);
99
106
114typedef void (*webrtc_datachannel_message_callback_t)(webrtc_data_channel_t *dc, const uint8_t *data, size_t size,
115 void *user_data);
116
123typedef void (*webrtc_datachannel_error_callback_t)(webrtc_data_channel_t *dc, const char *error, void *user_data);
124
149
150// ============================================================================
151// Initialization and Cleanup
152// ============================================================================
153
162
169void webrtc_destroy(void);
170
171// ============================================================================
172// Peer Connection Management
173// ============================================================================
174
185
194
201
208
216
223
224// ============================================================================
225// SDP Offer/Answer Exchange
226// ============================================================================
227
237
248asciichat_error_t webrtc_set_remote_description(webrtc_peer_connection_t *pc, const char *sdp, const char *type);
249
250// ============================================================================
251// ICE Candidate Exchange
252// ============================================================================
253
263asciichat_error_t webrtc_add_remote_candidate(webrtc_peer_connection_t *pc, const char *candidate, const char *mid);
264
265// ============================================================================
266// DataChannel Management
267// ============================================================================
268
280 webrtc_data_channel_t **dc_out);
281
294
301
311
318
325typedef struct {
326 void (*on_open)(webrtc_data_channel_t *dc, void *user_data);
327 void (*on_close)(webrtc_data_channel_t *dc, void *user_data);
328 void (*on_error)(webrtc_data_channel_t *dc, const char *error, void *user_data);
329 void (*on_message)(webrtc_data_channel_t *dc, const uint8_t *data, size_t len, void *user_data);
330 void *user_data;
332
342 const webrtc_datachannel_callbacks_t *callbacks);
343
351
358static inline void webrtc_datachannel_close(webrtc_data_channel_t *dc) {
360}
361
371
380
390
401
// end of webrtc group
403
404#ifdef __cplusplus
405}
406#endif
unsigned int uint32_t
Definition common.h:58
unsigned char uint8_t
Definition common.h:56
asciichat_error_t
Error and exit codes - unified status values (0-255)
Definition error_codes.h:49
stun_server_t
Definition stun.h:75
turn_server_t
Definition turn.h:101
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.
asciichat_error_t webrtc_add_remote_candidate(webrtc_peer_connection_t *pc, const char *candidate, const char *mid)
Add remote ICE candidate.
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
WebRTC connection state.
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.
ClangTool/LibTooling compatibility shim for stdbool.h.
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 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
WebRTC data channel for sending/receiving messages.
webrtc_peer_connection_t * pc
Parent peer connection.
void * user_data
User data for per-channel callbacks.
WebRTC peer connection state.