aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheJackiMonster <thejackimonster@gmail.com>2021-11-13 22:34:31 +0100
committerTheJackiMonster <thejackimonster@gmail.com>2021-11-13 22:34:31 +0100
commitd36a5f5f49a4d8bfd0094f69075539c6e468b10c (patch)
tree2136042e004125c5c0e395f05ec35fcce38fbdb1
parentf407a9417dfff9e6bf3363573e42e85bf2191790 (diff)
downloadlibgnunetchat-d36a5f5f49a4d8bfd0094f69075539c6e468b10c.tar.gz
libgnunetchat-d36a5f5f49a4d8bfd0094f69075539c6e468b10c.zip
Stopped redundant rejoining using known peers
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-rw-r--r--src/gnunet_chat_group.c5
-rw-r--r--src/gnunet_chat_group.h3
-rw-r--r--src/gnunet_chat_group_intern.c7
3 files changed, 15 insertions, 0 deletions
diff --git a/src/gnunet_chat_group.c b/src/gnunet_chat_group.c
index 58782fa..6091203 100644
--- 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,
43 group->announcement = NULL; 43 group->announcement = NULL;
44 group->search = NULL; 44 group->search = NULL;
45 45
46 group->registry = GNUNET_CONTAINER_multipeermap_create(8, GNUNET_NO);
47
46 group->user_pointer = NULL; 48 group->user_pointer = NULL;
47 49
48 return group; 50 return group;
@@ -53,6 +55,9 @@ group_destroy (struct GNUNET_CHAT_Group* group)
53{ 55{
54 GNUNET_assert(group); 56 GNUNET_assert(group);
55 57
58 if (group->registry)
59 GNUNET_CONTAINER_multipeermap_destroy(group->registry);
60
56 if (group->search) 61 if (group->search)
57 GNUNET_REGEX_search_cancel(group->search); 62 GNUNET_REGEX_search_cancel(group->search);
58 63
diff --git a/src/gnunet_chat_group.h b/src/gnunet_chat_group.h
index 13770d4..a02c8aa 100644
--- a/src/gnunet_chat_group.h
+++ b/src/gnunet_chat_group.h
@@ -27,6 +27,7 @@
27 27
28#include <gnunet/platform.h> 28#include <gnunet/platform.h>
29#include <gnunet/gnunet_common.h> 29#include <gnunet/gnunet_common.h>
30#include <gnunet/gnunet_container_lib.h>
30#include <gnunet/gnunet_regex_service.h> 31#include <gnunet/gnunet_regex_service.h>
31#include <gnunet/gnunet_util_lib.h> 32#include <gnunet/gnunet_util_lib.h>
32 33
@@ -43,6 +44,8 @@ struct GNUNET_CHAT_Group
43 struct GNUNET_REGEX_Announcement *announcement; 44 struct GNUNET_REGEX_Announcement *announcement;
44 struct GNUNET_REGEX_Search *search; 45 struct GNUNET_REGEX_Search *search;
45 46
47 struct GNUNET_CONTAINER_MultiPeerMap *registry;
48
46 void *user_pointer; 49 void *user_pointer;
47}; 50};
48 51
diff --git a/src/gnunet_chat_group_intern.c b/src/gnunet_chat_group_intern.c
index 76a35ca..d598c85 100644
--- a/src/gnunet_chat_group_intern.c
+++ b/src/gnunet_chat_group_intern.c
@@ -54,5 +54,12 @@ search_group_by_topic(void *cls,
54 group->context->room 54 group->context->room
55 ); 55 );
56 56
57 if ((GNUNET_YES == GNUNET_CONTAINER_multipeermap_contains(
58 group->registry, door)) ||
59 (GNUNET_OK != GNUNET_CONTAINER_multipeermap_put(
60 group->registry, door, NULL,
61 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)))
62 return;
63
57 GNUNET_MESSENGER_enter_room(group->handle->messenger, door, key); 64 GNUNET_MESSENGER_enter_room(group->handle->messenger, door, key);
58} 65}