ascii-chat 0.6.0
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
ice.h
Go to the documentation of this file.
1
55#pragma once
56
57#include <stdint.h>
58#include <stdbool.h>
59#include <stddef.h>
60#include "common.h"
61#include "asciichat_errno.h"
62
63#ifdef __cplusplus
64extern "C" {
65#endif
66
67/* ============================================================================
68 * ICE Candidate Types
69 * ============================================================================ */
70
80
88
97
111typedef struct {
112 /* Core candidate info */
113 char foundation[32];
117
118 /* Address info */
119 char ip_address[64];
121
122 /* Candidate type and attributes */
124
125 /* For srflx/prflx candidates: original address before NAT */
126 char raddr[64];
128
129 /* For TCP candidates */
131
132 /* Extensions */
133 char extensions[256];
135
136/* ============================================================================
137 * ICE Gathering and Exchange
138 * ============================================================================ */
139
151typedef asciichat_error_t (*ice_send_candidate_callback_t)(const ice_candidate_t *candidate, const char *mid,
152 void *user_data);
153
157typedef struct {
158 const char *ufrag;
159 const char *pwd;
161 void *user_data;
163
178
179/* ============================================================================
180 * ICE Candidate Parsing and Formatting
181 * ============================================================================ */
182
194asciichat_error_t ice_parse_candidate(const char *line, ice_candidate_t *candidate);
195
206asciichat_error_t ice_format_candidate(const ice_candidate_t *candidate, char *line, size_t line_size);
207
219uint32_t ice_calculate_priority(ice_candidate_type_t type, uint16_t local_preference, uint8_t component_id);
220
221/* ============================================================================
222 * ICE Connectivity
223 * ============================================================================ */
224
235asciichat_error_t ice_add_remote_candidate(const ice_candidate_t *candidate, const char *mid);
236
242bool ice_is_connected(void);
243
254
255/* ============================================================================
256 * Utility Functions
257 * ============================================================================ */
258
265
271const char *ice_protocol_name(ice_protocol_t protocol);
272
273#ifdef __cplusplus
274}
275#endif
⚠️‼️ Error and/or exit() when things go bad.
unsigned short uint16_t
Definition common.h:57
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:46
asciichat_error_t ice_get_selected_pair(ice_candidate_t *local_candidate, ice_candidate_t *remote_candidate)
Get selected candidate pair.
Definition ice.c:362
ice_protocol_t
ICE candidate transport protocol.
Definition ice.h:84
@ ICE_PROTOCOL_UDP
Definition ice.h:85
@ ICE_PROTOCOL_TCP
Definition ice.h:86
const char * ice_protocol_name(ice_protocol_t protocol)
Get human-readable protocol name.
Definition ice.c:36
uint32_t ice_calculate_priority(ice_candidate_type_t type, uint16_t local_preference, uint8_t component_id)
Calculate candidate priority.
Definition ice.c:51
bool ice_is_connected(void)
Check ICE connection state.
Definition ice.c:352
ice_candidate_type_t
ICE candidate type enumeration (RFC 5245)
Definition ice.h:74
@ ICE_CANDIDATE_SRFLX
Server-reflexive (NAT-discovered via STUN)
Definition ice.h:76
@ ICE_CANDIDATE_HOST
Host candidate (local IP address)
Definition ice.h:75
@ ICE_CANDIDATE_RELAY
Relay candidate (TURN server)
Definition ice.h:78
@ ICE_CANDIDATE_PRFLX
Peer-reflexive (discovered during checks)
Definition ice.h:77
asciichat_error_t(* ice_send_candidate_callback_t)(const ice_candidate_t *candidate, const char *mid, void *user_data)
Callback for sending ICE candidate to peer.
Definition ice.h:151
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:220
asciichat_error_t ice_add_remote_candidate(const ice_candidate_t *candidate, const char *mid)
Add remote candidate to peer connection.
Definition ice.c:320
asciichat_error_t ice_parse_candidate(const char *line, ice_candidate_t *candidate)
Parse ICE candidate from attribute string.
Definition ice.c:89
ice_tcp_type_t
ICE candidate TCP type (if applicable)
Definition ice.h:92
@ ICE_TCP_TYPE_SO
Simultaneous open.
Definition ice.h:95
@ ICE_TCP_TYPE_ACTIVE
Actively opens connection.
Definition ice.h:93
@ ICE_TCP_TYPE_PASSIVE
Passively waits for connection.
Definition ice.h:94
const char * ice_candidate_type_name(ice_candidate_type_t type)
Get human-readable candidate type name.
Definition ice.c:21
asciichat_error_t ice_gather_candidates(const ice_config_t *config)
Start ICE candidate gathering.
Definition ice.c:286
Single ICE candidate for connectivity.
Definition ice.h:111
uint16_t port
Port number.
Definition ice.h:120
uint32_t component_id
Component (1=RTP, 2=RTCP; usually 1)
Definition ice.h:114
ice_candidate_type_t type
host, srflx, prflx, or relay
Definition ice.h:123
uint32_t priority
Candidate priority (used for preference)
Definition ice.h:116
uint16_t rport
Related port.
Definition ice.h:127
ice_protocol_t protocol
UDP or TCP.
Definition ice.h:115
ice_tcp_type_t tcp_type
active, passive, so
Definition ice.h:130
ICE gathering configuration.
Definition ice.h:157
void * user_data
Passed to callback.
Definition ice.h:161
const char * ufrag
Username fragment for ICE (from offer)
Definition ice.h:158
ice_send_candidate_callback_t send_callback
Called for each gathered candidate.
Definition ice.h:160
const char * pwd
Password for ICE (from offer)
Definition ice.h:159