/* * Android-владелец одного ядра: INI из Kotlin → pthread с uasync → core_start + chat_service_start. * UTUN-сервис не запускается. Поток владеет instance/ua; UI передаёт работу через uasync. * Полученные handles заимствованы и могут смениться при restart; сохранять их между рестартами нельзя. */ #ifndef INSTANCE_LITE_H #define INSTANCE_LITE_H #include #ifdef __cplusplus extern "C" { #endif struct UASYNC; struct UTUN_INSTANCE; /* Копирует INI и запускает поток. 0 = поток создан либо уже запущен, -1 = ошибка запуска. * Готовность самого ядра появляется позже: проверять is_running и события инициализации. */ int instance_lite_start(const char* config_text); /* Сигнализировать stop и дождаться потока; поток уничтожает instance, затем uasync. * Вызывать с управляющего потока при существующем instance, не из callback ядра. */ void instance_lite_stop(void); /* Returns non-zero if instance is running. */ int instance_lite_is_running(void); /* Get current uasync handle (NULL if not running). */ struct UASYNC* instance_lite_get_uasync(void); /* Get current UTUN_INSTANCE handle (NULL if not running). */ struct UTUN_INSTANCE* instance_lite_get_instance(void); /* Set Kotlin callback for chat events (CONNECT_RESULT, MSG_RECEIVED, ...) */ 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); /* Regenerate X25519 keys in the worker thread. Saves to keys.conf file. * Call from any thread. Keys are regenerated asynchronously. */ 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); /* Health check: posts a ping to uasync, returns responsiveness after delay */ void instance_lite_ping(void); int instance_lite_is_responsive(void); /* Connection monitor: post collect_conn_list/conn_metrics to uasync thread */ 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 */