ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
negotiate.h
Go to the documentation of this file.
1
10#pragma once
11
12#include <ascii-chat/asciichat_errno.h>
13#include <ascii-chat/discovery/session.h>
14#include "nat.h"
15#include <ascii-chat/platform/socket.h>
16#include <stdbool.h>
17#include <stdint.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
36
40typedef struct {
41 // Session info
42 uint8_t session_id[16];
43 uint8_t participant_id[16];
45
46 // NAT qualities
50
51 // State
53 asciichat_error_t error;
54
55 // Result
57 char host_address[64];
58 uint16_t host_port;
61
69void negotiate_init(negotiate_ctx_t *ctx, const uint8_t session_id[16], const uint8_t participant_id[16],
70 bool is_initiator);
71
79asciichat_error_t negotiate_start_detection(negotiate_ctx_t *ctx, const char *stun_server, uint16_t local_port);
80
87asciichat_error_t negotiate_receive_peer_quality(negotiate_ctx_t *ctx, const acip_nat_quality_t *peer_quality);
88
98asciichat_error_t negotiate_determine_result(negotiate_ctx_t *ctx);
99
106
113
119asciichat_error_t negotiate_get_error(const negotiate_ctx_t *ctx);
120
139asciichat_error_t negotiate_elect_future_host(const acip_nat_quality_t collected_quality[],
140 const uint8_t participant_ids[][16], size_t num_participants,
141 uint8_t out_future_host_id[16]);
142
143#ifdef __cplusplus
144}
145#endif
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.
Definition negotiate.c:40
asciichat_error_t negotiate_receive_peer_quality(negotiate_ctx_t *ctx, const acip_nat_quality_t *peer_quality)
Process received peer NAT quality.
Definition negotiate.c:67
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.
Definition negotiate.c:17
asciichat_error_t negotiate_determine_result(negotiate_ctx_t *ctx)
Determine negotiation result.
Definition negotiate.c:111
negotiate_state_t
Negotiation state.
Definition negotiate.h:26
@ NEGOTIATE_STATE_INIT
Initial state.
Definition negotiate.h:27
@ NEGOTIATE_STATE_WE_HOST
We won, becoming host.
Definition negotiate.h:31
@ NEGOTIATE_STATE_THEY_HOST
They won, connecting as client.
Definition negotiate.h:32
@ NEGOTIATE_STATE_WAITING_PEER
Waiting for peer's NAT quality.
Definition negotiate.h:29
@ NEGOTIATE_STATE_FAILED
Negotiation failed.
Definition negotiate.h:33
@ NEGOTIATE_STATE_COMPARING
Comparing qualities.
Definition negotiate.h:30
@ NEGOTIATE_STATE_COMPLETE
Negotiation complete.
Definition negotiate.h:34
@ NEGOTIATE_STATE_DETECTING_NAT
Running NAT detection.
Definition negotiate.h:28
bool negotiate_is_complete(const negotiate_ctx_t *ctx)
Check if negotiation is complete.
Definition negotiate.c:170
asciichat_error_t negotiate_get_error(const negotiate_ctx_t *ctx)
Get negotiation error (if failed)
Definition negotiate.c:176
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)
Definition negotiate.c:182
negotiate_state_t negotiate_get_state(const negotiate_ctx_t *ctx)
Get current negotiation state.
Definition negotiate.c:164
uint8_t session_id[16]
uint8_t participant_id[16]
NAT quality assessment result.
Definition nat.h:27
Host negotiation context.
Definition negotiate.h:40
bool we_are_host
True if we should become host.
Definition negotiate.h:56
uint8_t connection_type
acip_connection_type_t
Definition negotiate.h:59
asciichat_error_t error
Definition negotiate.h:53
nat_quality_t our_quality
Our NAT quality.
Definition negotiate.h:47
bool peer_quality_received
Have we received peer's quality?
Definition negotiate.h:49
nat_quality_t peer_quality
Peer's NAT quality (when received)
Definition negotiate.h:48
bool is_initiator
Did we create this session?
Definition negotiate.h:44
negotiate_state_t state
Definition negotiate.h:52
uint16_t host_port
Host's port.
Definition negotiate.h:58