ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
nat.h
Go to the documentation of this file.
1
10#pragma once
11
12#include <ascii-chat/asciichat_errno.h>
13#include <ascii-chat/network/acip/acds.h>
14#include <ascii-chat/platform/socket.h>
15#include <stdbool.h>
16#include <stdint.h>
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
27typedef struct {
28 // NAT detection results
32 acip_nat_type_t nat_type;
34 uint64_t stun_latency_ns;
35 char public_address[64];
36 uint16_t public_port;
37
38 // Bandwidth measurements
39 uint32_t upload_kbps;
40 uint32_t download_kbps;
41 uint64_t rtt_to_acds_ns;
42 uint64_t jitter_ns;
44
45 // ICE candidate summary
49
50 // Detection status
52 asciichat_error_t error;
54
59void nat_quality_init(nat_quality_t *quality);
60
72asciichat_error_t nat_detect_quality(nat_quality_t *quality, const char *stun_server, uint16_t local_port);
73
83asciichat_error_t nat_measure_bandwidth(nat_quality_t *quality, socket_t acds_socket);
84
96int nat_compare_quality(const nat_quality_t *ours, const nat_quality_t *theirs, bool we_are_initiator);
97
105void nat_quality_to_acip(const nat_quality_t *quality, const uint8_t session_id[16], const uint8_t participant_id[16],
106 acip_nat_quality_t *out);
107
113void nat_quality_from_acip(const acip_nat_quality_t *acip, nat_quality_t *out);
114
120const char *nat_type_to_string(acip_nat_type_t type);
121
127int nat_compute_tier(const nat_quality_t *quality);
128
129#ifdef __cplusplus
130}
131#endif
int socket_t
void nat_quality_to_acip(const nat_quality_t *quality, const uint8_t session_id[16], const uint8_t participant_id[16], acip_nat_quality_t *out)
Convert nat_quality_t to acip_nat_quality_t for network transmission.
Definition nat.c:449
asciichat_error_t nat_measure_bandwidth(nat_quality_t *quality, socket_t acds_socket)
Measure upload bandwidth to ACDS server.
Definition nat.c:365
int nat_compare_quality(const nat_quality_t *ours, const nat_quality_t *theirs, bool we_are_initiator)
Compare two NAT qualities and determine who should host.
Definition nat.c:52
void nat_quality_init(nat_quality_t *quality)
Initialize NAT quality structure with defaults.
Definition nat.c:30
asciichat_error_t nat_detect_quality(nat_quality_t *quality, const char *stun_server, uint16_t local_port)
Detect NAT quality using all available methods.
Definition nat.c:283
int nat_compute_tier(const nat_quality_t *quality)
Compute NAT tier for host selection (0=best, 4=worst)
Definition nat.c:37
void nat_quality_from_acip(const acip_nat_quality_t *acip, nat_quality_t *out)
Convert acip_nat_quality_t to nat_quality_t.
Definition nat.c:487
const char * nat_type_to_string(acip_nat_type_t type)
Get human-readable description of NAT type.
Definition nat.c:516
uint8_t session_id[16]
uint8_t participant_id[16]
NAT quality assessment result.
Definition nat.h:27
bool detection_complete
All probes finished.
Definition nat.h:51
bool has_host_candidates
Local IP reachable.
Definition nat.h:46
uint32_t upload_kbps
Upload bandwidth in Kbps.
Definition nat.h:39
asciichat_error_t error
Error if detection failed.
Definition nat.h:52
uint32_t download_kbps
Download bandwidth in Kbps.
Definition nat.h:40
bool lan_reachable
Same subnet as peer.
Definition nat.h:33
uint64_t stun_latency_ns
RTT to STUN server in nanoseconds.
Definition nat.h:34
bool has_srflx_candidates
STUN worked.
Definition nat.h:47
bool has_relay_candidates
TURN available.
Definition nat.h:48
uint8_t packet_loss_pct
Packet loss percentage.
Definition nat.h:43
acip_nat_type_t nat_type
NAT classification.
Definition nat.h:32
bool has_public_ip
STUN reflexive == local IP.
Definition nat.h:29
bool upnp_available
UPnP/NAT-PMP mapping succeeded.
Definition nat.h:30
uint16_t upnp_mapped_port
Mapped external port (if upnp_available)
Definition nat.h:31
uint64_t rtt_to_acds_ns
Latency to ACDS in nanoseconds.
Definition nat.h:41
uint16_t public_port
Public port.
Definition nat.h:36
uint64_t jitter_ns
Packet timing variance in nanoseconds.
Definition nat.h:42