|
ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
|
NAT quality detection for discovery mode host selection. More...
Go to the source code of this file.
Macros | |
| #define | BANDWIDTH_OVERRIDE_RATIO 10 |
Functions | |
| void | nat_quality_init (nat_quality_t *quality) |
| Initialize NAT quality structure with defaults. | |
| int | nat_compute_tier (const nat_quality_t *quality) |
| Compute NAT tier for host selection (0=best, 4=worst) | |
| 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. | |
| 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. | |
| asciichat_error_t | nat_measure_bandwidth (nat_quality_t *quality, socket_t acds_socket) |
| Measure upload bandwidth to ACDS server. | |
| 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. | |
| void | nat_quality_from_acip (const acip_nat_quality_t *acip, nat_quality_t *out) |
| Convert acip_nat_quality_t to nat_quality_t. | |
| const char * | nat_type_to_string (acip_nat_type_t type) |
| Get human-readable description of NAT type. | |
NAT quality detection for discovery mode host selection.
Definition in file nat.c.
| 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.
Algorithm is deterministic - both sides get the same result. Uses NAT tier priority with bandwidth as tiebreaker.
| ours | Our NAT quality |
| theirs | Peer's NAT quality |
| we_are_initiator | True if we started the session |
Definition at line 52 of file nat.c.
References BANDWIDTH_OVERRIDE_RATIO, nat_compute_tier(), nat_quality_t::rtt_to_acds_ns, and nat_quality_t::upload_kbps.
Referenced by negotiate_determine_result(), and negotiate_elect_future_host().
| int nat_compute_tier | ( | const nat_quality_t * | quality | ) |
Compute NAT tier for host selection (0=best, 4=worst)
| quality | NAT quality |
Definition at line 37 of file nat.c.
References nat_quality_t::has_public_ip, nat_quality_t::lan_reachable, nat_quality_t::nat_type, and nat_quality_t::upnp_available.
Referenced by discovery_session_process(), nat_compare_quality(), nat_detect_quality(), and negotiate_receive_peer_quality().
| 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.
Runs STUN probe, UPnP check, and gathers ICE candidates in parallel. Results are stored in the provided nat_quality_t structure.
| quality | Output structure for results |
| stun_server | STUN server URL (e.g., "stun:stun.l.google.com:19302") |
| local_port | Local port to use for detection |
Definition at line 283 of file nat.c.
References nat_quality_t::detection_complete, nat_quality_t::has_host_candidates, nat_quality_t::has_public_ip, nat_quality_t::has_relay_candidates, nat_quality_t::has_srflx_candidates, nat_compute_tier(), nat_quality_init(), nat_quality_t::nat_type, nat_type_to_string(), nat_upnp_get_address(), nat_upnp_is_active(), nat_upnp_open(), options_get(), nat_quality_t::public_address, nat_quality_t::upnp_available, and nat_quality_t::upnp_mapped_port.
Referenced by negotiate_start_detection().
| asciichat_error_t nat_measure_bandwidth | ( | nat_quality_t * | quality, |
| socket_t | acds_socket | ||
| ) |
Measure upload bandwidth to ACDS server.
Uploads a test payload and measures throughput.
| quality | Structure to update with bandwidth results |
| acds_socket | Connected socket to ACDS |
Definition at line 365 of file nat.c.
References nat_quality_t::download_kbps, nat_quality_t::jitter_ns, nat_quality_t::packet_loss_pct, packet_receive(), packet_send(), nat_quality_t::rtt_to_acds_ns, socket_set_timeout(), time_get_ns(), and nat_quality_t::upload_kbps.
| void nat_quality_from_acip | ( | const acip_nat_quality_t * | acip, |
| nat_quality_t * | out | ||
| ) |
Convert acip_nat_quality_t to nat_quality_t.
| acip | ACIP message structure |
| out | Output local NAT quality structure |
Definition at line 487 of file nat.c.
References nat_quality_t::detection_complete, nat_quality_t::download_kbps, nat_quality_t::has_host_candidates, nat_quality_t::has_public_ip, nat_quality_t::has_relay_candidates, nat_quality_t::has_srflx_candidates, nat_quality_t::jitter_ns, nat_quality_t::lan_reachable, nat_quality_init(), nat_quality_t::nat_type, nat_quality_t::packet_loss_pct, nat_quality_t::public_address, nat_quality_t::public_port, nat_quality_t::rtt_to_acds_ns, nat_quality_t::stun_latency_ns, nat_quality_t::upload_kbps, nat_quality_t::upnp_available, and nat_quality_t::upnp_mapped_port.
Referenced by negotiate_elect_future_host(), and negotiate_receive_peer_quality().
| void nat_quality_init | ( | nat_quality_t * | quality | ) |
Initialize NAT quality structure with defaults.
| quality | Structure to initialize |
Definition at line 30 of file nat.c.
References nat_quality_t::nat_type.
Referenced by nat_detect_quality(), nat_quality_from_acip(), and negotiate_init().
| 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.
| quality | Local NAT quality |
| session_id | Session UUID |
| participant_id | Participant UUID |
| out | Output ACIP message structure |
Definition at line 449 of file nat.c.
References nat_quality_t::download_kbps, nat_quality_t::has_host_candidates, nat_quality_t::has_public_ip, nat_quality_t::has_relay_candidates, nat_quality_t::has_srflx_candidates, nat_quality_t::jitter_ns, nat_quality_t::lan_reachable, nat_quality_t::nat_type, nat_quality_t::packet_loss_pct, participant_id, nat_quality_t::public_address, nat_quality_t::public_port, nat_quality_t::rtt_to_acds_ns, session_id, nat_quality_t::stun_latency_ns, nat_quality_t::upload_kbps, nat_quality_t::upnp_available, and nat_quality_t::upnp_mapped_port.
| const char * nat_type_to_string | ( | acip_nat_type_t | type | ) |
Get human-readable description of NAT type.
| type | NAT type |
Definition at line 516 of file nat.c.
Referenced by nat_detect_quality().