Cancel personal file probes when their group admission is revoked
This commit is contained in:
1 parent
c67eb03f6e
commit
d44dd362d3
3 files changed
+17
No files matched your search
@@ -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;
|
||||
|
||||
@@ -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 до завершения.
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user