From 505185430c14cdafc9e76981c9dffead9c0442b4 Mon Sep 17 00:00:00 2001 From: evgeny Date: Mon, 19 Oct 2026 14:46:16 +0200 Subject: [PATCH] Define live phone presence and call continuation API --- src/call/call.h | 7 +++++++ src/routing_layer/topo_node.h | 3 +++ src/utun_instance.h | 1 + 3 files changed, 11 insertions(+) diff --git a/src/call/call.h b/src/call/call.h index 32437200..b46ffee8 100644 --- a/src/call/call.h +++ b/src/call/call.h @@ -37,6 +37,12 @@ void call_decline(struct UTUN_INSTANCE* inst, uint64_t call_id); void call_hangup (struct UTUN_INSTANCE* inst, uint64_t call_id); /* Проверка занятости обычным звонком; только uasync, включая входящий/исходящий. */ int call_busy(struct UTUN_INSTANCE* inst); +/* Продолжить исходящий вызов после предупреждения о телефонной занятости. Только uasync. */ +void call_continue(struct UTUN_INSTANCE* inst, uint64_t call_id); +/* Живой статус ОС: 0=неизвестно, 1=свободен, 2=занят. Только uasync; публикует BGP при изменении. */ +void call_set_phone_state(struct UTUN_INSTANCE* inst, int state); +/* Флаги BGP PHONE_KNOWN/BUSY с учётом собственного обычного звонка. Только uasync. */ +uint8_t call_phone_status(struct UTUN_INSTANCE* inst); /* Read-only онлайн-проверка (GUI может звать из любого потока). */ int call_is_online(struct UTUN_INSTANCE* inst, const char* ch_id, uint64_t peer_node_id); @@ -98,6 +104,7 @@ void call_start_trampoline (void* arg); void call_accept_trampoline (void* arg); void call_decline_trampoline(void* arg); void call_hangup_trampoline (void* arg); +void call_continue_trampoline(void* arg); #ifdef __cplusplus } diff --git a/src/routing_layer/topo_node.h b/src/routing_layer/topo_node.h index bae701af..3c0bd2e7 100644 --- a/src/routing_layer/topo_node.h +++ b/src/routing_layer/topo_node.h @@ -77,6 +77,8 @@ struct reality_client_config; #define TOPO_FLAG_SEND_SUBNETS 0x01 #define TOPO_FLAG_RADIO 0x02 +#define TOPO_FLAG_PHONE_KNOWN 0x04 /* состояние телефона опубликовано */ +#define TOPO_FLAG_PHONE_BUSY 0x08 /* занят телефонным либо обычным uTun-вызовом */ #define TOPO_GROUP_UTUN 0x8000000000000000ULL #define TOPO_GROUP_TYPE_UTUN 1 #define TOPO_GROUP_TYPE_CHAT 2 @@ -219,6 +221,7 @@ struct TOPO_GROUP_NODE { uint8_t conn_presence; // маска NCONN_*: известные виды подключения uint8_t conn_up; // маска NCONN_*: работающие виды подключения uint8_t radio; // 1 = узел слушает рацию канала (TOPO_FLAG_RADIO) + uint8_t phone_status; // TOPO_FLAG_PHONE_KNOWN/BUSY; подсказка интерфейсу, не основание для отказа struct NODE_CONN_DIRECT* handle; // не владеет транспортом; NCD принадлежит сессии группы }; diff --git a/src/utun_instance.h b/src/utun_instance.h index 958fd6a7..ca7f6a0d 100644 --- a/src/utun_instance.h +++ b/src/utun_instance.h @@ -261,6 +261,7 @@ struct UTUN_INSTANCE { uint16_t keepalive_interval; // желаемый keepalive (ms), из конфига. для handshake uint8_t client_activity; // CLIENT_ACTIVITY_STANDBY/ACTIVE uint8_t client_activity_requested; // режим frontend; stream owners могут временно удерживать эффективный ACTIVE + uint8_t phone_state; // 0=неизвестно, 1=свободен, 2=занят; живое состояние ОС, не сохраняется struct utun_activity_cbk_entry* activity_cbks; // подписки на смену client_activity struct peer_sleep_cbk_entry* peer_sleep_cbks; // подписки на смену спячки пира (keepalive)