android: standby keepalive sync + rx logging during sleep

This commit is contained in:
evgeny committed 2026-09-21 21:17:35 +03:00
1 parent 845af9200d
commit 2f3001458f
12 files changed
+116 -34

No files matched your search

@@ -267,6 +267,7 @@ static void* instance_thread(void* arg) {
struct utun_config* config = parse_config_from_buf(config_text, strlen(config_text), "android");
u_free(config_text);
if (!config) { IL_LOGE("parse_config_from_buf failed"); __atomic_store_n(&g_thread_running, 0, __ATOMIC_RELEASE); pthread_detach(pthread_self()); return NULL; }
config->global.client_type = CLIENT_TYPE_MOBILE; /* Android — всегда мобильный узел (keepalive standby/normal) */
install_crash_handlers();
@@ -378,6 +379,7 @@ static void* instance_thread(void* arg) {
struct utun_config* config = parse_config_from_buf(cfg, strlen(cfg), "android");
u_free(cfg);
if (!config) { IL_LOGE("poll exit: parse_config failed"); break; }
config->global.client_type = CLIENT_TYPE_MOBILE; /* Android — всегда мобильный узел */
g_inst = utun_instance_create_from_config(g_ua, config);
my_inst = g_inst;
@@ -378,6 +378,15 @@ void standby_notify_network_activity(void) {
standby_wake_all_waiters();
}
void standby_log_rx(const char* kind, const char* who) {
if (!g_enabled || g_phase != PHASE_SLEEP) return;
uint64_t slept = get_time_tb() - g_phase_start_tb;
DEBUG_INFO(DEBUG_CATEGORY_DEBUG,
"standby: rx in SLEEP: %s from %s, slept %d.%ds",
kind ? kind : "?", who ? who : "?",
(int)(slept / STANDBY_TB_PER_SEC), (int)((slept % STANDBY_TB_PER_SEC) / 1000));
}
void standby_set_intervals_ms(int active_ms, int sleep_ms, int min_sleep_ms) {
if (active_ms <= 0 || sleep_ms <= 0) {
g_override = 0;
@@ -50,6 +50,10 @@ void standby_wait_cancel(void* handle);
* Вызывается на uasync-потоке. */
void standby_notify_network_activity(void);
/* Диагностика: входящий пакет во время SLEEP-фазы (фазу НЕ меняет).
* kind — транспорт/тип пакета (строка), who — идентификатор отправителя. */
void standby_log_rx(const char* kind, const char* who);
/* Переопределить интервалы (мс), минуя chat_setting. Для тестов.
* active_ms/sleep_ms <= 0 → вернуться к chat_setting.
* min_sleep_ms может быть 0 (реагировать на сетевую активность сразу). */