ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
ice.h
Go to the documentation of this file.
1
54
55#pragma once
56
57/* Storage capacities in elements; text buffers include the terminating NUL. */
58#define NETWORK_WEBRTC_ICE_FOUNDATION_BUFFER_SIZE 32
59#define NETWORK_WEBRTC_ICE_RADDR_BUFFER_SIZE 64
60#define NETWORK_WEBRTC_ICE_EXTENSIONS_BUFFER_SIZE 256
61
63#include <stdint.h>
64#include <stdbool.h>
65#include <stddef.h>
66#include "../../common.h"
68
69#ifdef __cplusplus
70extern "C" {
71#endif
72
73/* ============================================================================
74 * ICE Candidate Types
75 * ============================================================================ */
76
87
95
104
118typedef struct {
119 /* Core candidate info */
124
125 /* Address info */
128
129 /* Candidate type and attributes */
131
132 /* For srflx/prflx candidates: original address before NAT */
135
136 /* For TCP candidates */
138
139 /* Extensions */
144
145/* ============================================================================
146 * ICE Gathering and Exchange
147 * ============================================================================ */
148
161typedef asciichat_error_t (*ice_send_candidate_callback_t)(const ice_candidate_t *candidate, const char *mid,
162 void *user_data);
163
171typedef struct {
172 const char *ufrag;
173 const char *pwd;
175 void *user_data;
177
192
193/* ============================================================================
194 * ICE Candidate Parsing and Formatting
195 * ============================================================================ */
196
208asciichat_error_t ice_parse_candidate(const char *line, ice_candidate_t *candidate);
209
220asciichat_error_t ice_format_candidate(const ice_candidate_t *candidate, char *line, size_t line_size);
221
233uint32_t ice_calculate_priority(ice_candidate_type_t type, uint16_t local_preference, uint8_t component_id);
234
264
265/* ============================================================================
266 * ICE Connectivity
267 * ============================================================================ */
268
269/* Forward declaration */
271
284 const char *mid);
285
293
304
317 ice_candidate_t *remote_candidate);
318
319/* ============================================================================
320 * Utility Functions
321 * ============================================================================ */
322
329
335const char *ice_protocol_name(ice_protocol_t protocol);
336
337#ifdef __cplusplus
338}
339#endif
Synchronized per-thread pending error stacks and value snapshots. SET_ERRNO pushes,...
Application limits and constraints.
⚙️ Common definitions, error codes, macros, and types shared throughout the application
unsigned short uint16_t
Definition common.h:61
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
#define IP_ADDRESS_BUFFER_SIZE
ice_protocol_t
ICE candidate transport protocol.
Definition ice.h:91
@ ICE_PROTOCOL_UDP
Definition ice.h:92
@ ICE_PROTOCOL_TCP
Definition ice.h:93
uint32_t ice_calculate_priority_for_candidate(const ice_candidate_t *candidate)
Calculate candidate priority with IP-aware local preference.
Definition ice.c:136
int webrtc_get_rtc_id(struct webrtc_peer_connection *pc)
Get the internal libdatachannel peer connection ID.
asciichat_error_t ice_get_selected_pair(struct webrtc_peer_connection *pc, ice_candidate_t *local_candidate, ice_candidate_t *remote_candidate)
Get selected candidate pair.
Definition ice.c:462
const char * ice_protocol_name(ice_protocol_t protocol)
Get human-readable protocol name.
Definition ice.c:44
uint32_t ice_calculate_priority(ice_candidate_type_t type, uint16_t local_preference, uint8_t component_id)
Calculate candidate priority.
Definition ice.c:104
ice_candidate_type_t
Credentials and callback used while gathering ICE candidates.
Definition ice.h:81
@ ICE_CANDIDATE_SRFLX
Server-reflexive (NAT-discovered via STUN).
Definition ice.h:83
@ ICE_CANDIDATE_HOST
Host candidate (local IP address).
Definition ice.h:82
@ ICE_CANDIDATE_RELAY
Relay candidate (TURN server).
Definition ice.h:85
@ ICE_CANDIDATE_PRFLX
Peer-reflexive (discovered during checks).
Definition ice.h:84
asciichat_error_t(* ice_send_candidate_callback_t)(const ice_candidate_t *candidate, const char *mid, void *user_data)
Single ICE candidate for connectivity.
Definition ice.h:161
#define NETWORK_WEBRTC_ICE_FOUNDATION_BUFFER_SIZE
Definition ice.h:58
asciichat_error_t ice_format_candidate(const ice_candidate_t *candidate, char *line, size_t line_size)
Format ICE candidate to attribute string.
Definition ice.c:323
asciichat_error_t ice_parse_candidate(const char *line, ice_candidate_t *candidate)
Parse ICE candidate from attribute string.
Definition ice.c:319
#define NETWORK_WEBRTC_ICE_EXTENSIONS_BUFFER_SIZE
Definition ice.h:60
asciichat_error_t ice_add_remote_candidate(struct webrtc_peer_connection *pc, const ice_candidate_t *candidate, const char *mid)
Add remote candidate to peer connection.
Definition ice.c:423
bool ice_is_connected(struct webrtc_peer_connection *pc)
Check ICE connection state.
Definition ice.c:448
#define NETWORK_WEBRTC_ICE_RADDR_BUFFER_SIZE
Definition ice.h:59
ice_tcp_type_t
ICE candidate TCP type (if applicable).
Definition ice.h:99
@ ICE_TCP_TYPE_SO
Simultaneous open.
Definition ice.h:102
@ ICE_TCP_TYPE_ACTIVE
Actively opens connection.
Definition ice.h:100
@ ICE_TCP_TYPE_PASSIVE
Passively waits for connection.
Definition ice.h:101
const char * ice_candidate_type_name(ice_candidate_type_t type)
Get human-readable candidate type name.
Definition ice.c:29
asciichat_error_t ice_gather_candidates(const ice_config_t *config)
Start ICE candidate gathering.
Definition ice.c:389
Single ICE candidate for connectivity.
Definition ice.h:118
char ip_address[64]
IP address (IPv4 or IPv6).
Definition ice.h:126
char foundation[32]
Unique identifier for candidate (for pairing).
Definition ice.h:120
uint16_t port
Port number.
Definition ice.h:127
uint32_t component_id
Component (1=RTP, 2=RTCP; usually 1).
Definition ice.h:121
ice_candidate_type_t type
host, srflx, prflx, or relay
Definition ice.h:130
uint32_t priority
Candidate priority (used for preference).
Definition ice.h:123
uint16_t rport
Related port.
Definition ice.h:134
ice_protocol_t protocol
UDP or TCP.
Definition ice.h:122
char extensions[256]
Additional extensions (e.g., "tcptype passive").
Definition ice.h:140
ice_tcp_type_t tcp_type
active, passive, so
Definition ice.h:137
char raddr[64]
Related address (for srflx/prflx).
Definition ice.h:133
Credentials and callback used while gathering ICE candidates.
Definition ice.h:171
void * user_data
Passed to callback.
Definition ice.h:175
const char * ufrag
Username fragment for ICE (from offer).
Definition ice.h:172
ice_send_candidate_callback_t send_callback
Called for each gathered candidate.
Definition ice.h:174
const char * pwd
Password for ICE (from offer).
Definition ice.h:173
WebRTC data channel for sending/receiving messages.