diff options
author | TheJackiMonster <thejackimonster@gmail.com> | 2021-11-13 22:34:31 +0100 |
---|---|---|
committer | TheJackiMonster <thejackimonster@gmail.com> | 2021-11-13 22:34:31 +0100 |
commit | d36a5f5f49a4d8bfd0094f69075539c6e468b10c (patch) | |
tree | 2136042e004125c5c0e395f05ec35fcce38fbdb1 | |
parent | f407a9417dfff9e6bf3363573e42e85bf2191790 (diff) | |
download | libgnunetchat-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.c | 5 | ||||
-rw-r--r-- | src/gnunet_chat_group.h | 3 | ||||
-rw-r--r-- | src/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 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 | } |