/* * chat_conn_mgr.h — менеджер ETCP-подключений (1 на инстанс) * * Управляет подключениями к узлам: перебор адресов, случайный выбор, * ротация при падении соединения. До CM_MAX_PARALLEL одновременных * подключений на узел. Фоновый пинг для измерения RTT. */ #ifndef CHAT_CONN_MGR_H #define CHAT_CONN_MGR_H #include #include struct sqlite3; struct UTUN_INSTANCE; /* ── Коды возврата ── */ #define CC_OK 0 #define CC_ERR_NOT_FOUND -1 #define CC_ERR_NO_ADDRESSES -2 #define CC_ERR_TIMEOUT -3 #define CC_ERR_UNREACHABLE -4 #define CC_ERR_INTERNAL -7 /* ── Жизненный цикл ── */ struct chat_conn_mgr* chat_conn_mgr_init(struct UTUN_INSTANCE* inst, struct sqlite3* db); void chat_conn_mgr_destroy(struct chat_conn_mgr* mgr); struct sqlite3* chat_conn_mgr_get_db(struct chat_conn_mgr* mgr); /* ── Управление узлами ── */ void chat_conn_mgr_add_node(struct chat_conn_mgr* mgr, uint64_t node_id); /* ── Подключение ── */ void chat_conn_mgr_connect(struct chat_conn_mgr* mgr, uint64_t node_id, void (*cb)(int result, uint64_t node_id, void* arg), void* arg); void chat_conn_mgr_cancel(struct chat_conn_mgr* mgr, uint64_t node_id); /* ── invite ── */ struct chat_invite { uint64_t channel_id; uint64_t node_id; uint8_t pubkey[32]; uint8_t* addrs_data; int addr_count; }; void chat_conn_mgr_connect_from_invite(struct chat_conn_mgr* mgr, struct chat_invite* inv); #endif /* CHAT_CONN_MGR_H */