From a72668a491584dd229acccb1f06023a3fd31625d Mon Sep 17 00:00:00 2001 From: evgeny Date: Mon, 19 Oct 2026 14:56:58 +0200 Subject: [PATCH] Represent independent incoming call preferences as one policy mask --- src/call/call.h | 7 ++++++- src/chat/chat_setting.c | 1 + src/utun_instance.h | 4 +--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/call/call.h b/src/call/call.h index ab5797f9..9bc3bae1 100644 --- a/src/call/call.h +++ b/src/call/call.h @@ -40,7 +40,12 @@ 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, int publish, int notify, int reject); +enum call_policy { + CALL_POLICY_PUBLISH_PHONE = 1, CALL_POLICY_WARN_PHONE = 2, CALL_POLICY_REJECT_PHONE = 4, + CALL_POLICY_BLOCK_CALLS = 8, CALL_POLICY_BLOCK_RADIO = 16 +}; +/* policy — маска call_policy. Запреты применяются до проверки телефонной занятости. */ +void call_set_phone_state(struct UTUN_INSTANCE* inst, int state, unsigned policy); /* Флаги BGP PHONE_KNOWN/BUSY с учётом собственного обычного звонка. Только uasync. */ uint8_t call_phone_status(struct UTUN_INSTANCE* inst); diff --git a/src/chat/chat_setting.c b/src/chat/chat_setting.c index 9043160b..64b5dbd7 100644 --- a/src/chat/chat_setting.c +++ b/src/chat/chat_setting.c @@ -67,6 +67,7 @@ static const struct chat_setting_def g_setting_defs[] = { {"group_autoconnect", CHAT_SETTING_BOOL, 1, 0, 1}, {"aec_enabled", CHAT_SETTING_BOOL, 1, 0, 1}, /* AEC (SpeexDSP) в звонке, desktop GUI */ {"call_jitter_max_reserve_ms", CHAT_SETTING_INT, 1000, 500, 2000}, + {"incoming_call_policy", CHAT_SETTING_INT, 1, 0, 31}, /* CALL_POLICY_*; применяется при старте и обновлении статуса ОС */ {"call_video_bitrate_range_kbps", CHAT_SETTING_STRING, 0, 0, 0}, {"call_compressor_enabled", CHAT_SETTING_BOOL, 1, 0, 1}, {"call_compressor_max_gain_db",CHAT_SETTING_INT, 15, 1, 60}, diff --git a/src/utun_instance.h b/src/utun_instance.h index 93ccc235..d79ada61 100644 --- a/src/utun_instance.h +++ b/src/utun_instance.h @@ -262,9 +262,7 @@ struct UTUN_INSTANCE { uint8_t client_activity; // CLIENT_ACTIVITY_STANDBY/ACTIVE uint8_t client_activity_requested; // режим frontend; stream owners могут временно удерживать эффективный ACTIVE uint8_t phone_state; // 0=неизвестно, 1=свободен, 2=занят; живое состояние ОС, не сохраняется - uint8_t phone_status_hidden; // не публиковать телефонную занятость в BGP - uint8_t phone_notify_enabled; // предупреждать вызывающего о телефонной занятости - uint8_t phone_reject_enabled; // отклонять входящие при телефонной занятости; приоритетнее предупреждения + uint8_t incoming_call_policy; // CALL_POLICY_*: независимые настройки публикации и допуска входящих struct utun_activity_cbk_entry* activity_cbks; // подписки на смену client_activity struct peer_sleep_cbk_entry* peer_sleep_cbks; // подписки на смену спячки пира (keepalive)