Cancel personal file probes when their group admission is revoked

This commit is contained in:
evgeny committed 2026-11-03 22:56:48 +01:00
1 parent c67eb03f6e
commit d44dd362d3
3 files changed
+17

No files matched your search

+12
View File
@@ -859,6 +859,18 @@ static struct dm_file_probe* dm_probe_find(struct dm_media_state* media, const u
return NULL;
}
void dm_media_revalidate_members(struct UTUN_INSTANCE* inst, uint64_t group) {
struct dm_media_state* media = inst ? inst->dm_media : NULL;
if (!media || media->closing) return;
for (struct dm_file_probe* p = media->probes; p; p = p->next) for (unsigned i = 0; i < p->count; i++) {
struct dm_probe_source* s = p->sources + i;
if (s->used || s->group != group || topo_group_chat_allowed(inst, group, s->node)) continue;
s->used = 1; s->rtt = 0;
DEBUG_INFO(DEBUG_CATEGORY_DM, "DM sources: probe revoked conv=%s group=%llu peer=%llu token=%llu", p->conv,
(unsigned long long)group, (unsigned long long)s->node, (unsigned long long)p->token);
}
}
static void dm_probe_add(struct dm_media_state* media, struct dm_file_probe* p, uint64_t node, uint64_t preferred) {
for (unsigned i = 0; i < p->count; i++) if (p->sources[i].node == node) return;
uint64_t group = preferred;
+3
View File
@@ -64,6 +64,9 @@ void dm_media_quiesce(struct UTUN_INSTANCE* inst);
/* После drain/destroy media_async, до групп/core/mailbox: освободить owner, сохранить durable данные.
* При живых jobs/cleanup_active логирует ошибку и оставляет owner для повторного destroy. NULL допустим. */
void dm_media_destroy(struct UTUN_INSTANCE* inst);
/* После изменения допуска группы отменить её ожидающие HAVE-пробы; поздний ответ их не оживляет.
* Файлы/назначения остаются; следующий поиск выберет свежий маршрут. FILE_TRANSFER отменяется своим owner. */
void dm_media_revalidate_members(struct UTUN_INSTANCE* inst, uint64_t group);
/* Передать подготовку копии и enqueue file-сообщения в media_async.
* Строки conv/path и info копируются при вызове; сам файл должен быть доступен worker до завершения.
+2
View File
@@ -39,6 +39,7 @@
#include "../chat/chat_attachment.h"
#include "../member_files/member_files.h"
#include "../media_delivery/file_transfer.h"
#include "../dm/dm_media.h"
#define TOPO_GROUP_UTUN 0x8000000000000000ULL
@@ -448,6 +449,7 @@ void topo_group_revalidate_members(struct TOPO_GROUP* group) {
multicast_revalidate_members(group->instance, group->group_id);
etcp_router_revalidate_group(group->instance, group->group_id);
file_transfer_revalidate_members(group->instance->file_transfer, group->group_id);
dm_media_revalidate_members(group->instance, group->group_id);
conn_mgr_revalidate_members(group->conn_mgr);
radio_revalidate_members(group);
radio_call_revalidate_members(group->instance, group->group_id);