ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
acds_client.h
Go to the documentation of this file.
1
2
3/* Storage capacities in elements; text buffers include the terminating NUL. */
4
9#include <ascii-chat/common.h>
10#pragma once
11
120
121#include <stdint.h>
122#include <stdbool.h>
124#include "../../os/socket.h"
127#include "../../crypto/policy.h"
129
130// ============================================================================
131// ACDS Client Configuration
132// ============================================================================
133
134// Forward declaration of callback type from parallel_connect.h
135typedef bool (*parallel_connect_should_exit_fn)(void *user_data);
136
147typedef struct {
152 const char *identity_key;
153
154 // Optional: callback to check if connection should be abandoned (e.g., shutdown signal)
158
169
170// ============================================================================
171// Connection Management
172// ============================================================================
173
184
193
194// ============================================================================
195// Session Management
196// ============================================================================
197
217
226
239
259
270asciichat_error_t acds_session_lookup(acds_client_t *client, const char *session_string,
272
283
300
313
314// ============================================================================
315// Cryptographic Signature Helpers
316// ============================================================================
317
331 uint8_t capabilities, uint8_t max_participants,
332 uint8_t signature_out[ED25519_SIGNATURE_SIZE]);
333
347 uint8_t capabilities, uint8_t max_participants,
348 const uint8_t signature[ED25519_SIGNATURE_SIZE]);
349
362 const char *session_string, uint8_t signature_out[ED25519_SIGNATURE_SIZE]);
363
376 const char *session_string, const uint8_t signature[ED25519_SIGNATURE_SIZE]);
377
387bool acds_validate_timestamp(uint64_t timestamp_ms, uint32_t window_seconds);
388
389// ============================================================================
390// Helper Functions
391// ============================================================================
392
404
405#define ACDS_TRANSPORT_METADATA_MAX 521
406/* ACQT v1 is optional. An absent extension decodes to no advertised endpoints. */
407asciichat_error_t acds_transport_metadata_encode(uint16_t quic_port, const char *url, void *output, size_t capacity,
408 size_t *length);
409asciichat_error_t acds_transport_metadata_decode(const void *bytes, size_t length, uint16_t *quic_port, char *url,
410 size_t capacity);
ascii-chat Discovery Service (ACDS) Protocol Message Formats
asciichat_error_t acds_verify_session_create(const uint8_t identity_pubkey[32], uint64_t timestamp, uint8_t capabilities, uint8_t max_participants, const uint8_t signature[64])
Verify SESSION_CREATE signature.
Definition acds_client.c:74
asciichat_error_t acds_session_lookup(acds_client_t *client, const char *session_string, acds_session_lookup_result_t *result)
Look up session by string.
asciichat_error_t acds_verify_session_join(const uint8_t identity_pubkey[32], uint64_t timestamp, const char *session_string, const uint8_t signature[64])
Verify SESSION_JOIN signature.
asciichat_error_t acds_transport_metadata_encode(uint16_t quic_port, const char *url, void *output, size_t capacity, size_t *length)
void acds_client_config_init_defaults(acds_client_config_t *config)
Initialize ACDS client configuration with defaults.
asciichat_error_t acds_session_create(acds_client_t *client, const acds_session_create_params_t *params, acds_session_create_result_t *result)
Create a new session on the discovery server.
asciichat_error_t acds_sign_session_join(const uint8_t identity_seckey[64], uint64_t timestamp, const char *session_string, uint8_t signature_out[64])
Sign a SESSION_JOIN message.
bool(* parallel_connect_should_exit_fn)(void *user_data)
asciichat_error_t acds_session_join(acds_client_t *client, const acds_session_join_params_t *params, acds_session_join_result_t *result)
Join an existing session.
bool acds_validate_timestamp(uint64_t timestamp_ms, uint32_t window_seconds)
Check if timestamp is within acceptable window.
asciichat_error_t acds_client_connect(acds_client_t *client, const acds_client_config_t *config)
Connect to ACDS server.
asciichat_error_t acds_sign_session_create(const uint8_t identity_seckey[64], uint64_t timestamp, uint8_t capabilities, uint8_t max_participants, uint8_t signature_out[64])
Sign a SESSION_CREATE message.
Definition acds_client.c:45
void acds_client_disconnect(acds_client_t *client)
Disconnect from ACDS server.
asciichat_error_t acds_transport_metadata_decode(const void *bytes, size_t length, uint16_t *quic_port, char *url, size_t capacity)
#define ACIP_PASSWORD_SIZE
Definition acds_sizes.h:8
#define ACIP_ADDRESS_SIZE
Definition acds_sizes.h:7
#define ACIP_MAX_SESSION_STRING_LEN
Definition acds_sizes.h:6
#define ACIP_ERROR_MESSAGE_SIZE
Definition acds_sizes.h:10
Synchronized per-thread pending error stacks and value snapshots. SET_ERRNO pushes,...
Application limits and constraints.
⚙️ Common definitions, error codes, macros, and types shared throughout the application
Common declarations and data structures for cryptographic handshake.
unsigned short uint16_t
Definition common.h:61
unsigned int uint32_t
Definition common.h:62
unsigned long long uint64_t
Definition common.h:63
unsigned char uint8_t
Definition common.h:60
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
#define SESSION_ID_SIZE
#define HOSTNAME_BUFFER_SIZE
struct acip_transport acip_transport_t
Forward declaration of ACIP transport.
Definition host.h:506
Transport abstraction layer for ACIP protocol.
struct network_connection network_connection_t
#define ED25519_SIGNATURE_SIZE
Ed25519 signature size in bytes.
Definition sizes.h:37
#define ED25519_PUBLIC_KEY_SIZE
Ed25519 public key size in bytes.
Definition sizes.h:33
#define ED25519_PRIVATE_KEY_SIZE
Ed25519 private key size (seed + public) in bytes.
Definition sizes.h:35
acds client config is intentionally a small, concrete record. Fields such as server_port,...
char server_address[256]
ACDS server address (e.g., "discovery.ascii.chat" or "127.0.0.1").
uint32_t timeout_ms
Connection timeout in milliseconds.
uint16_t server_port
ACDS server port (default: 27225).
crypto_policy_t security_policy
Signaling policy, independent of peer media policy.
parallel_connect_should_exit_fn should_exit_callback
const char * identity_key
Optional private identity key path, borrowed during connect.
ACDS client connection handle.
crypto_handshake_context_t * handshake_ctx
Borrowed from connection owner.
acds_client_config_t config
bool connected
Connection status.
network_connection_t * connection
acip_transport_t * transport
Transport used for the initial crypto handshake.
Session creation request parameters.
const char * reserved_string
Optional reserved string (NULL = auto-generate).
uint16_t server_port
Server port where clients should connect.
bool acds_expose_ip
Explicitly allow public IP disclosure (–acds-expose-ip opt-in).
uint8_t identity_seckey[64]
Ed25519 secret key (for signing).
uint8_t max_participants
Maximum participants (1-128).
uint8_t identity_pubkey[32]
Ed25519 public key (host identity).
char server_address[64]
connect
bool has_password
Password protection enabled.
uint8_t capabilities
Bit 0: video, Bit 1: audio.
char password[128]
Optional password (if has_password).
uint8_t session_type
acds_session_type_t: 0=DIRECT_TCP (default), 1=WEBRTC
Session creation result.
uint8_t session_id[16]
Session UUID.
char session_string[48+1]
Generated session string (null-terminated).
uint64_t expires_at
Expiration timestamp (Unix ms).
Session join parameters.
uint8_t identity_pubkey[32]
Participant's Ed25519 public key.
bool has_password
Password provided.
char password[128]
Password (if has_password).
const char * session_string
Session to join.
uint8_t identity_seckey[64]
Ed25519 secret key (for signing).
Session join result.
uint8_t error_code
Error code (if !success).
uint8_t session_type
acds_session_type_t: 0=DIRECT_TCP, 1=WEBRTC (if success)
uint8_t participant_id[16]
Participant UUID (if success).
bool success
Join succeeded.
uint16_t server_port
Server port (if success).
char error_message[128+1]
Error message (if !success, null-terminated).
uint8_t session_id[16]
Session UUID (if success).
char server_address[64+1]
Server IP/hostname (if success, null-terminated).
Session lookup result.
uint8_t capabilities
Session capabilities.
bool found
Session exists.
bool require_client_verify
ACDS policy: client must verify server identity.
bool has_password
Password required to join.
uint64_t expires_at
Expiration timestamp (Unix ms).
uint8_t max_participants
Maximum participants.
bool require_server_verify
ACDS policy: server must verify client identity.
uint64_t created_at
Creation timestamp (Unix ms).
uint8_t host_pubkey[32]
Host's Ed25519 public key.
uint8_t current_participants
Current participant count.
uint8_t session_id[16]
Session UUID (if found).
Cryptographic handshake context structure.
The useful part of crypto policy is in transport_secure, encrypt, no_encrypt, no_auth: together they ...
Definition policy.h:12