Files
utun2/tools/chatgui-android/libutun_lite/instance_lite.h
T
evgeny b2e4aadbf0 e2e: AES-128-CCM encryption via BGP router (ROUTER_FLAG_ENCRYPTED), ECDH key per peer-pair from NODEINFO pubkeys, cache 8 entries
- etcp_router.h/c: new flag ROUTER_FLAG_ENCRYPTED (0x04), etcp_route_send_encrypted(), inflight/retrans/send_q support
- utun_instance.h: e2e_ctx_cache[8] — per-peer sc_context_t cache with derived session key
- topo_node.c: topo_node_sign_self() — single point for Ed25519 self-signing of NODEINFO
- topo_node.c: fix stale x25519_self_sig after address update (topo_node_sign_self call)
- nat_detection.c: fix stale x25519_self_sig after in-place socket meta modification
- test_etcp_router_unit: 5 E2E tests (basic round-trip, no NODEINFO drop, tampered, cache reuse, ENCRYPTED+SIGNED combined)
- builds clean, 70/70 tests pass
2026-08-09 08:19:20 +03:00

60 lines
2.1 KiB
C

/*
* 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 <stdint.h>
#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);
/* 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 */