commit d36a5f5f49a4d8bfd0094f69075539c6e468b10c
parent f407a9417dfff9e6bf3363573e42e85bf2191790
Author: TheJackiMonster <thejackimonster@gmail.com>
Date: Sat, 13 Nov 2021 22:34:31 +0100
Stopped redundant rejoining using known peers
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
Diffstat:
3 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/src/gnunet_chat_group.c b/src/gnunet_chat_group.c
@@ -43,6 +43,8 @@ group_create_from_context (struct GNUNET_CHAT_Handle *handle,
group->announcement = NULL;
group->search = NULL;
+ group->registry = GNUNET_CONTAINER_multipeermap_create(8, GNUNET_NO);
+
group->user_pointer = NULL;
return group;
@@ -53,6 +55,9 @@ group_destroy (struct GNUNET_CHAT_Group* group)
{
GNUNET_assert(group);
+ if (group->registry)
+ GNUNET_CONTAINER_multipeermap_destroy(group->registry);
+
if (group->search)
GNUNET_REGEX_search_cancel(group->search);
diff --git a/src/gnunet_chat_group.h b/src/gnunet_chat_group.h
@@ -27,6 +27,7 @@
#include <gnunet/platform.h>
#include <gnunet/gnunet_common.h>
+#include <gnunet/gnunet_container_lib.h>
#include <gnunet/gnunet_regex_service.h>
#include <gnunet/gnunet_util_lib.h>
@@ -43,6 +44,8 @@ struct GNUNET_CHAT_Group
struct GNUNET_REGEX_Announcement *announcement;
struct GNUNET_REGEX_Search *search;
+ struct GNUNET_CONTAINER_MultiPeerMap *registry;
+
void *user_pointer;
};
diff --git a/src/gnunet_chat_group_intern.c b/src/gnunet_chat_group_intern.c
@@ -54,5 +54,12 @@ search_group_by_topic(void *cls,
group->context->room
);
+ if ((GNUNET_YES == GNUNET_CONTAINER_multipeermap_contains(
+ group->registry, door)) ||
+ (GNUNET_OK != GNUNET_CONTAINER_multipeermap_put(
+ group->registry, door, NULL,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)))
+ return;
+
GNUNET_MESSENGER_enter_room(group->handle->messenger, door, key);
}