/* * instance_lite.h — lightweight uTun instance lifecycle for Android * * Kotlin generates INI config text, passes to instance_lite_start(). * C side parses it, creates uasync+ETCP+bgp+chat stack, runs in a pthread. * Mirrors UtunNode::runLoop() from tools/chatgui/transport/utun_node.cpp. */ #ifndef INSTANCE_LITE_H #define INSTANCE_LITE_H #include #ifdef __cplusplus extern "C" { #endif struct UASYNC; /* Start full uTun stack from INI config text. * Creates a pthread for uasync event loop. * Returns 0 on success, -1 on error. * Config format: same as utun INI (see node_config.cpp saveFull). */ int instance_lite_start(const char* config_text); /* Signal stop and wait for thread to exit. * Calls chat_sync_destroy, chat_core_destroy, utun_instance_destroy, uasync_destroy. */ 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); /* 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); /* Restart the instance internally (no thread kill). Stops chat_sync/chat_core, * re-parses config, regenerates keys if needed, reopens DB, re-inits. * Posts to uasync thread — restart happens asynchronously. */ void instance_lite_restart(const char* new_config_text); /* Health check: posts a ping to uasync, returns responsiveness after delay */ void instance_lite_ping(void); int instance_lite_is_responsive(void); #ifdef __cplusplus } #endif #endif /* INSTANCE_LITE_H */