libgnunetchat

library for GNUnet Messenger
Log | Files | Refs | README | LICENSE

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:
Msrc/gnunet_chat_group.c | 5+++++
Msrc/gnunet_chat_group.h | 3+++
Msrc/gnunet_chat_group_intern.c | 7+++++++
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); }