ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
database.h
Go to the documentation of this file.
1#pragma once
2
11
12/* Storage capacities in elements; text buffers include the terminating NUL. */
13#define DISCOVERY_DATABASE_SESSION_STRING_BUFFER_SIZE 64
14
16#include <stdint.h>
17#include <stdbool.h>
18#include <sqlite3.h>
19// NOTE: Use explicit path to avoid Windows include resolution picking up options/common.h
20#include "../common.h"
24
26 const void *metadata, size_t length);
28 size_t capacity, size_t *length);
29
33typedef sqlite3 discovery_database_t;
34
35// ============================================================================
36// Database Lifecycle
37// ============================================================================
38
46asciichat_error_t database_init(const char *db_path, sqlite3 **db);
47
53void database_close(sqlite3 *db);
54
55// ============================================================================
56// Session Operations (SQLite as single source of truth)
57// ============================================================================
58
70
74asciichat_error_t database_session_create_keys(sqlite3 *db, const acip_session_create_t *req, const uint8_t (*keys)[32],
75 size_t count, const acds_config_t *config, acip_session_created_t *resp);
76
79 const uint8_t (*keys)[32], size_t count,
80 const acds_config_t *config, acip_session_created_t *resp,
81 const void *metadata, size_t metadata_length);
82
92asciichat_error_t database_session_lookup(sqlite3 *db, const char *session_string, const acds_config_t *config,
94
104asciichat_error_t database_session_join(sqlite3 *db, const acip_session_join_t *req, const acds_config_t *config,
106
117
128
138session_entry_t *database_session_find_by_string(sqlite3 *db, const char *session_string);
139
149void database_session_cleanup_expired(sqlite3 *db);
150
166 const uint8_t host_participant_id[SESSION_ID_SIZE],
167 const char *host_address, uint16_t host_port, uint8_t connection_type);
168
180
192
205 uint64_t migration_window_ms);
206
207// ============================================================================
208// Multi-Key Management (for session key rotation and multiple identities)
209// ============================================================================
210
220asciichat_error_t database_session_add_key(sqlite3 *db, const char *session_string,
221 const uint8_t identity_pubkey[ED25519_PUBLIC_KEY_SIZE],
222 uint32_t key_version);
223
232asciichat_error_t database_session_revoke_key(sqlite3 *db, const char *session_string,
233 const uint8_t identity_pubkey[ED25519_PUBLIC_KEY_SIZE]);
234
243bool database_session_verify_key(sqlite3 *db, const char *session_string,
244 const uint8_t identity_pubkey[ED25519_PUBLIC_KEY_SIZE]);
245
256asciichat_error_t database_session_get_keys(sqlite3 *db, const char *session_string, uint8_t (*keys_out)[32],
257 size_t max_keys, size_t *count_out);
258
259// ============================================================================
260// Statistics Queries
261// ============================================================================
262
270asciichat_error_t database_stats_session_count(sqlite3 *db, int64_t *count_out);
271
279asciichat_error_t database_stats_unique_clients(sqlite3 *db, int64_t *count_out);
280
291asciichat_error_t database_stats_snapshot(sqlite3 *db, database_session_stats_t *rows, size_t capacity,
292 size_t *row_count, uint64_t *sessions, uint64_t *participants);
293
295 const uint8_t host[SESSION_ID_SIZE], const char *address,
296 uint16_t port, uint8_t type, const void *metadata,
297 size_t length);
ascii-chat Discovery Service (ACDS) Protocol Message Formats
⚙️ Common definitions, error codes, macros, and types shared throughout the application
asciichat_error_t database_session_update_host(sqlite3 *db, const uint8_t session_id[16], const uint8_t host_participant_id[16], const char *host_address, uint16_t host_port, uint8_t connection_type)
Update session host (discovery mode).
asciichat_error_t database_stats_unique_clients(sqlite3 *db, int64_t *count_out)
Get total number of unique clients/participants.
asciichat_error_t database_session_create_keys_with_transport(sqlite3 *db, const acip_session_create_t *req, const uint8_t(*keys)[32], size_t count, const acds_config_t *config, acip_session_created_t *resp, const void *metadata, size_t metadata_length)
asciichat_error_t database_session_clear_host(sqlite3 *db, const uint8_t session_id[16])
Clear session host (discovery mode - host migration).
asciichat_error_t database_session_lookup(sqlite3 *db, const char *session_string, const acds_config_t *config, acip_session_info_t *resp)
Lookup session by string.
asciichat_error_t database_session_add_key(sqlite3 *db, const char *session_string, const uint8_t identity_pubkey[32], uint32_t key_version)
Add a key to a session.
asciichat_error_t database_session_join(sqlite3 *db, const acip_session_join_t *req, const acds_config_t *config, acip_session_joined_t *resp)
Join existing session.
asciichat_error_t database_session_start_migration(sqlite3 *db, const uint8_t session_id[16])
Start host migration (discovery mode).
asciichat_error_t database_session_leave(sqlite3 *db, const uint8_t session_id[16], const uint8_t participant_id[16])
Leave session.
asciichat_error_t database_stats_session_count(sqlite3 *db, int64_t *count_out)
Get total number of active sessions.
void database_close(sqlite3 *db)
Close database.
session_entry_t * database_session_find_by_id(sqlite3 *db, const uint8_t session_id[16])
Find session by session_id.
asciichat_error_t database_session_transport_get(sqlite3 *db, const uint8_t session_id[16], void *metadata, size_t capacity, size_t *length)
asciichat_error_t database_session_create_keys(sqlite3 *db, const acip_session_create_t *req, const uint8_t(*keys)[32], size_t count, const acds_config_t *config, acip_session_created_t *resp)
session_entry_t * database_session_find_by_string(sqlite3 *db, const char *session_string)
Find session by session_string.
bool database_session_is_migration_ready(sqlite3 *db, const uint8_t session_id[16], uint64_t migration_window_ms)
Check if migration window has completed.
asciichat_error_t database_session_create(sqlite3 *db, const acip_session_create_t *req, const acds_config_t *config, acip_session_created_t *resp)
Create new session.
asciichat_error_t database_stats_snapshot(sqlite3 *db, database_session_stats_t *rows, size_t capacity, size_t *row_count, uint64_t *sessions, uint64_t *participants)
asciichat_error_t database_session_get_keys(sqlite3 *db, const char *session_string, uint8_t(*keys_out)[32], size_t max_keys, size_t *count_out)
Get all active keys for a session.
asciichat_error_t database_init(const char *db_path, sqlite3 **db)
Initialize database and create schema.
asciichat_error_t database_session_transport_set(sqlite3 *db, const uint8_t session_id[16], const void *metadata, size_t length)
#define DISCOVERY_DATABASE_SESSION_STRING_BUFFER_SIZE
Definition database.h:13
bool database_session_verify_key(sqlite3 *db, const char *session_string, const uint8_t identity_pubkey[32])
Check if a key is valid for a session (exists and not revoked).
asciichat_error_t database_session_update_host_with_transport(sqlite3 *db, const uint8_t session[16], const uint8_t host[16], const char *address, uint16_t port, uint8_t type, const void *metadata, size_t length)
asciichat_error_t database_session_revoke_key(sqlite3 *db, const char *session_string, const uint8_t identity_pubkey[32])
Revoke a key from a session.
void database_session_cleanup_expired(sqlite3 *db)
Clean up inactive sessions.
sqlite3 discovery_database_t
Discovery database handle (sqlite3 wrapper).
Definition database.h:33
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
acip_session_join_t
Definition acds.h:408
acip_session_joined_t
Definition acds.h:479
acip_session_created_t
Definition acds.h:274
acip_session_create_t
Definition acds.h:226
acip_session_info_t
Definition acds.h:360
struct session_entry session_entry_t
Persisted discovery-session record used to admit and route participants.
#define ED25519_PUBLIC_KEY_SIZE
Ed25519 public key size in bytes.
Definition sizes.h:33
uint8_t session_id[SESSION_ID_SIZE]
uint8_t participant_id[SESSION_ID_SIZE]
Discovery server configuration.
The useful part of database session stats is in participants, host_ready, migrating: together they de...
Definition database.h:285