ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
discovery-service/server.h
Go to the documentation of this file.
1#pragma once
2
26#include <stdint.h>
27#include <stdbool.h>
28#include <sqlite3.h>
29#include <ascii-chat/network/tcp/server.h>
30#include <ascii-chat/network/acip/acds.h>
31#include <ascii-chat/options/options.h> // For MAX_IDENTITY_KEYS
32#include <ascii-chat/thread_pool.h>
33#include <ascii-chat/crypto/handshake/common.h>
35#include <ascii-chat/discovery/session.h> // For host_lost_candidate_t and MAX_PARTICIPANTS
36
57typedef struct {
58 uint8_t session_id[16];
59 uint8_t participant_id[16];
61
62 // Crypto handshake state
63 crypto_handshake_context_t handshake_ctx;
65
66 // Multi-key session creation state
68 acip_session_create_t pending_session;
69 uint8_t pending_session_keys[MAX_IDENTITY_KEYS][32];
72
82typedef struct {
83 uint8_t session_id[16];
86
94typedef struct {
95 tcp_server_t tcp_server;
96
97 // Identity
98 uint8_t identity_public[32];
99 uint8_t identity_secret[64];
100
101 // Persistence (SQLite as single source of truth for sessions)
102 sqlite3 *db;
103
104 // Rate limiting
106
107 // Host migration tracking (in-memory during active migrations)
108 migration_context_t active_migrations[32];
110
111 // Background worker threads (cleanup, etc.)
112 thread_pool_t *worker_pool;
113 atomic_bool shutdown;
114
115 // Configuration
118
129asciichat_error_t acds_server_init(acds_server_t *server, const acds_config_t *config);
130
140asciichat_error_t acds_server_run(acds_server_t *server);
141
151
161void *acds_client_handler(void *arg);
void * acds_client_handler(void *arg)
Per-client connection handler (thread entry point)
void acds_server_shutdown(acds_server_t *server)
Shutdown discovery server.
asciichat_error_t acds_server_init(acds_server_t *server, const acds_config_t *config)
Initialize discovery server.
asciichat_error_t acds_server_run(acds_server_t *server)
Run discovery server main loop.
uint8_t session_id[16]
uint8_t participant_id[16]
Per-client connection data.
acip_session_create_t pending_session
Pending session data (from first SESSION_CREATE)
bool handshake_complete
Whether crypto handshake has completed.
crypto_handshake_context_t handshake_ctx
Handshake context for encrypted communication.
bool joined_session
Whether client has successfully joined a session.
size_t num_pending_keys
Number of keys received so far.
bool in_multikey_session_create
True during multi-key SESSION_CREATE sequence.
Discovery server configuration.
Discovery server state.
acds_config_t config
Runtime configuration.
size_t num_active_migrations
Number of active migrations.
atomic_bool shutdown
Shutdown flag for worker threads.
tcp_server_t tcp_server
TCP server abstraction.
sqlite3 * db
SQLite database handle.
struct rate_limiter_s * rate_limiter
SQLite-backed rate limiter.
thread_pool_t * worker_pool
Thread pool for background workers.
In-memory host migration context.
uint64_t migration_start_ns
When migration started (nanoseconds since sokol_time setup)
Rate limiter structure.
Definition rate_limit.c:64