12#include <ascii-chat/asciichat_errno.h>
13#include <ascii-chat/discovery/session.h>
15#include <ascii-chat/platform/socket.h>
57 char host_address[64];
140 const uint8_t participant_ids[][16],
size_t num_participants,
141 uint8_t out_future_host_id[16]);
NAT quality detection for discovery mode host selection.
asciichat_error_t negotiate_start_detection(negotiate_ctx_t *ctx, const char *stun_server, uint16_t local_port)
Start NAT detection phase.
asciichat_error_t negotiate_receive_peer_quality(negotiate_ctx_t *ctx, const acip_nat_quality_t *peer_quality)
Process received peer NAT quality.
void negotiate_init(negotiate_ctx_t *ctx, const uint8_t session_id[16], const uint8_t participant_id[16], bool is_initiator)
Initialize negotiation context.
asciichat_error_t negotiate_determine_result(negotiate_ctx_t *ctx)
Determine negotiation result.
negotiate_state_t
Negotiation state.
@ NEGOTIATE_STATE_INIT
Initial state.
@ NEGOTIATE_STATE_WE_HOST
We won, becoming host.
@ NEGOTIATE_STATE_THEY_HOST
They won, connecting as client.
@ NEGOTIATE_STATE_WAITING_PEER
Waiting for peer's NAT quality.
@ NEGOTIATE_STATE_FAILED
Negotiation failed.
@ NEGOTIATE_STATE_COMPARING
Comparing qualities.
@ NEGOTIATE_STATE_COMPLETE
Negotiation complete.
@ NEGOTIATE_STATE_DETECTING_NAT
Running NAT detection.
bool negotiate_is_complete(const negotiate_ctx_t *ctx)
Check if negotiation is complete.
asciichat_error_t negotiate_get_error(const negotiate_ctx_t *ctx)
Get negotiation error (if failed)
asciichat_error_t negotiate_elect_future_host(const acip_nat_quality_t collected_quality[], const uint8_t participant_ids[][16], size_t num_participants, uint8_t out_future_host_id[16])
Elect future host from multiple participants (NEW P2P design)
negotiate_state_t negotiate_get_state(const negotiate_ctx_t *ctx)
Get current negotiation state.
uint8_t participant_id[16]
NAT quality assessment result.
Host negotiation context.
bool we_are_host
True if we should become host.
uint8_t connection_type
acip_connection_type_t
nat_quality_t our_quality
Our NAT quality.
bool peer_quality_received
Have we received peer's quality?
nat_quality_t peer_quality
Peer's NAT quality (when received)
bool is_initiator
Did we create this session?
uint16_t host_port
Host's port.