ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
database.h
Go to the documentation of this file.
1#pragma once
2
12#include <stdint.h>
13#include <stdbool.h>
14#include <sqlite3.h>
15// NOTE: Use explicit path to avoid Windows include resolution picking up options/common.h
16#include "../common.h"
17#include "../discovery/session.h"
19#include "../network/acip/acds.h"
20
24typedef sqlite3 discovery_database_t;
25
26// ============================================================================
27// Database Lifecycle
28// ============================================================================
29
37asciichat_error_t database_init(const char *db_path, sqlite3 **db);
38
44void database_close(sqlite3 *db);
45
46// ============================================================================
47// Session Operations (SQLite as single source of truth)
48// ============================================================================
49
61
71asciichat_error_t database_session_lookup(sqlite3 *db, const char *session_string, const acds_config_t *config,
73
85
95
106
116session_entry_t *database_session_find_by_string(sqlite3 *db, const char *session_string);
117
127void database_session_cleanup_expired(sqlite3 *db);
128
144 const uint8_t host_participant_id[16], const char *host_address,
145 uint16_t host_port, uint8_t connection_type);
146
158
170
182bool database_session_is_migration_ready(sqlite3 *db, const uint8_t session_id[16], uint64_t migration_window_ms);
183
184// ============================================================================
185// Multi-Key Management (for session key rotation and multiple identities)
186// ============================================================================
187
197asciichat_error_t database_session_add_key(sqlite3 *db, const char *session_string, const uint8_t identity_pubkey[32],
198 uint32_t key_version);
199
208asciichat_error_t database_session_revoke_key(sqlite3 *db, const char *session_string,
209 const uint8_t identity_pubkey[32]);
210
219bool database_session_verify_key(sqlite3 *db, const char *session_string, const uint8_t identity_pubkey[32]);
220
231asciichat_error_t database_session_get_keys(sqlite3 *db, const char *session_string, uint8_t (*keys_out)[32],
232 size_t max_keys, size_t *count_out);
233
234// ============================================================================
235// Statistics Queries
236// ============================================================================
237
245asciichat_error_t database_stats_session_count(sqlite3 *db, int64_t *count_out);
246
254asciichat_error_t database_stats_unique_clients(sqlite3 *db, int64_t *count_out);
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_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.
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_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.
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_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:24
acip_session_join_t
Definition acds.h:403
acip_session_joined_t
Definition acds.h:474
acip_session_created_t
Definition acds.h:269
acip_session_create_t
Definition acds.h:221
acip_session_info_t
Definition acds.h:355
unsigned short uint16_t
Definition common.h:57
unsigned int uint32_t
Definition common.h:58
unsigned long long uint64_t
Definition common.h:59
unsigned char uint8_t
Definition common.h:56
asciichat_error_t
Error and exit codes - unified status values (0-255)
Definition error_codes.h:49
uint8_t session_id[16]
uint8_t participant_id[16]
ClangTool/LibTooling compatibility shim for stdbool.h.
Discovery server configuration.
Session entry data structure.