77 lines
5.7 KiB
C
77 lines
5.7 KiB
C
/*
|
||
* Android-владелец одного ядра: INI из Kotlin → pthread с uasync → core_start + chat_service_start.
|
||
* UTUN выключен по умолчанию; [gui] utun_enabled=yes включает его явно. Поток владеет instance/ua; UI передаёт работу через uasync.
|
||
* С UTUN_WITH_VOICE worker регистрирует call_audio до SERVICE_STARTED и снимает привязку перед уничтожением ядра.
|
||
* Полученные handles заимствованы и могут смениться при restart; сохранять их между рестартами нельзя.
|
||
* Управляющие start/stop/restart и прочие вызовы по сырым handles сериализует frontend:
|
||
* атомарный getter не удерживает ресурс от уничтожения. JOIN использует отдельный защищённый port.
|
||
*/
|
||
#ifndef INSTANCE_LITE_H
|
||
#define INSTANCE_LITE_H
|
||
|
||
#include <stdint.h>
|
||
#include <stddef.h>
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
struct UASYNC;
|
||
struct UTUN_INSTANCE;
|
||
|
||
/* Копирует INI и запускает поток. 0 = поток создан либо уже запущен, -1 = ошибка запуска.
|
||
* Готовность самого ядра появляется позже: проверять is_running и события инициализации. */
|
||
int instance_lite_start(const char* config_text);
|
||
|
||
/* При существующем instance сигнализировать stop и ждать поток до 2с; обычно затем pthread_join.
|
||
* При timeout поток отсоединяется, завершение cleanup не гарантировано к возврату; без instance вызов сразу возвращается.
|
||
* Worker снимает media-привязки, уничтожает instance, затем uasync.
|
||
* Управляющий frontend предварительно останавливает аудио I/O и освобождает DSP звонка.
|
||
* Вызывать с управляющего потока при существующем instance, не из callback ядра. */
|
||
void instance_lite_stop(void);
|
||
|
||
/* 1 — instance опубликован и завершил запуск сервисов, 0 — ещё не готов либо остановлен; это не проверка сети. */
|
||
int instance_lite_is_running(void);
|
||
|
||
/* Текущий заимствованный uasync, NULL до create/после destroy; ненулевой handle ещё не означает готовность ядра. */
|
||
struct UASYNC* instance_lite_get_uasync(void);
|
||
|
||
/* Текущий заимствованный instance, NULL до create/после снятия; может быть ненулевым во время инициализации. */
|
||
struct UTUN_INSTANCE* instance_lite_get_instance(void);
|
||
/* Потокобезопасный JOIN через удержанный port: копирует len байтов ссылки, request ненулевой.
|
||
* 0 — принят, результат CHAT_EVT_CONNECT_RESULT с тем же request; <0 — отказ без события.
|
||
* Не требует от caller удерживать inst/ua; при stop/restart port закрывается. */
|
||
int instance_lite_join_link(uint64_t request, const char* link, size_t len);
|
||
|
||
/* События CHAT_EVT_* из native-потока; data заимствован только на вызов, формат зависит от type (не всегда JSON).
|
||
* Установить до start; callback и его окружение должны жить до завершения worker. NULL отключает доставку. */
|
||
typedef void (*instance_lite_event_fn)(int type, const uint8_t* data, int len);
|
||
void instance_lite_set_event_handler(instance_lite_event_fn handler);
|
||
|
||
/* Поставить генерацию X25519-ключей в uasync; обновляет config, my_keys, node_id и пытается сохранить db_path/keys.conf.
|
||
* CHAT_EVT_KEYS_GENERATED несёт 64 HEX-байта публичного ключа. Само ядро/соединения здесь не пересоздаются. */
|
||
void instance_lite_regenerate_keys(void);
|
||
|
||
/* Копирует INI, будит poll-loop и пересоздаёт instance и uasync внутри worker.
|
||
* Если ядро не работает, выполняет stop/start. Обновление асинхронное; старые handles утрачивают силу. */
|
||
void instance_lite_restart(const char* new_config_text);
|
||
|
||
/* Лёгкое обновление сокетов (auto_sockets=android): перечитывает [server] секции
|
||
* из нового конфига и сверяет сокеты без полного рестарта. Posts to uasync thread.
|
||
* Если ядро не запущено — только логирует ошибку и дропает вызов. */
|
||
void instance_lite_update_sockets(const char* config_text);
|
||
|
||
/* Поставить локальный ping в uasync (не сетевой). is_responsive=1 после исполнения последнего ping;
|
||
* до первого ping/при остановке возвращает 0. Встроенного ожидания и проверки таймаута нет. */
|
||
void instance_lite_ping(void);
|
||
int instance_lite_is_responsive(void);
|
||
|
||
/* Асинхронные снимки: CHAT_EVT_CONN_LIST и CHAT_EVT_CONN_METRICS; peer_node_id — ID интересующего пира. */
|
||
void instance_lite_collect_conn_list(void);
|
||
void instance_lite_collect_conn_metrics(uint64_t peer_node_id);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif /* INSTANCE_LITE_H */
|