summaryrefslogtreecommitdiff
path: root/protocols/Tox/libtox/src/toxcore/group_announce.c
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Tox/libtox/src/toxcore/group_announce.c')
-rw-r--r--protocols/Tox/libtox/src/toxcore/group_announce.c52
1 files changed, 34 insertions, 18 deletions
diff --git a/protocols/Tox/libtox/src/toxcore/group_announce.c b/protocols/Tox/libtox/src/toxcore/group_announce.c
index 896b043dbd..ee083198c1 100644
--- a/protocols/Tox/libtox/src/toxcore/group_announce.c
+++ b/protocols/Tox/libtox/src/toxcore/group_announce.c
@@ -8,10 +8,13 @@
#include <stdlib.h>
#include <string.h>
-#include "LAN_discovery.h"
+#include "DHT.h"
+#include "attributes.h"
#include "ccompat.h"
+#include "crypto_core.h"
+#include "logger.h"
#include "mono_time.h"
-#include "util.h"
+#include "network.h"
/**
* Removes `announces` from `gc_announces_list`.
@@ -75,7 +78,7 @@ int gca_get_announces(const GC_Announces_List *gc_announces_list, GC_Announce *g
for (size_t i = 0; i < announces->index && i < GCA_MAX_SAVED_ANNOUNCES_PER_GC && added_count < max_nodes; ++i) {
const size_t index = i % GCA_MAX_SAVED_ANNOUNCES_PER_GC;
- if (memcmp(except_public_key, &announces->peer_announces[index].base_announce.peer_public_key,
+ if (memcmp(except_public_key, announces->peer_announces[index].base_announce.peer_public_key,
ENC_PUBLIC_KEY_SIZE) == 0) {
continue;
}
@@ -83,7 +86,7 @@ int gca_get_announces(const GC_Announces_List *gc_announces_list, GC_Announce *g
bool already_added = false;
for (size_t j = 0; j < added_count; ++j) {
- if (memcmp(&gc_announces[j].peer_public_key, &announces->peer_announces[index].base_announce.peer_public_key,
+ if (memcmp(gc_announces[j].peer_public_key, announces->peer_announces[index].base_announce.peer_public_key,
ENC_PUBLIC_KEY_SIZE) == 0) {
already_added = true;
break;
@@ -338,6 +341,31 @@ int gca_unpack_announces_list(const Logger *log, const uint8_t *data, uint16_t l
return announces_count;
}
+non_null()
+static GC_Announces *gca_new_announces(
+ GC_Announces_List *gc_announces_list,
+ const GC_Public_Announce *public_announce)
+{
+ GC_Announces *announces = (GC_Announces *)calloc(1, sizeof(GC_Announces));
+
+ if (announces == nullptr) {
+ return nullptr;
+ }
+
+ announces->index = 0;
+ announces->prev_announce = nullptr;
+
+ if (gc_announces_list->root_announces != nullptr) {
+ gc_announces_list->root_announces->prev_announce = announces;
+ }
+
+ announces->next_announce = gc_announces_list->root_announces;
+ gc_announces_list->root_announces = announces;
+ memcpy(announces->chat_id, public_announce->chat_public_key, CHAT_ID_SIZE);
+
+ return announces;
+}
+
GC_Peer_Announce *gca_add_announce(const Mono_Time *mono_time, GC_Announces_List *gc_announces_list,
const GC_Public_Announce *public_announce)
{
@@ -349,22 +377,11 @@ GC_Peer_Announce *gca_add_announce(const Mono_Time *mono_time, GC_Announces_List
// No entry for this chat_id exists so we create one
if (announces == nullptr) {
- announces = (GC_Announces *)calloc(1, sizeof(GC_Announces));
+ announces = gca_new_announces(gc_announces_list, public_announce);
if (announces == nullptr) {
return nullptr;
}
-
- announces->index = 0;
- announces->prev_announce = nullptr;
-
- if (gc_announces_list->root_announces != nullptr) {
- gc_announces_list->root_announces->prev_announce = announces;
- }
-
- announces->next_announce = gc_announces_list->root_announces;
- gc_announces_list->root_announces = announces;
- memcpy(announces->chat_id, public_announce->chat_public_key, CHAT_ID_SIZE);
}
const uint64_t cur_time = mono_time_get(mono_time);
@@ -395,8 +412,7 @@ bool gca_is_valid_announce(const GC_Announce *announce)
GC_Announces_List *new_gca_list(void)
{
- GC_Announces_List *announces_list = (GC_Announces_List *)calloc(1, sizeof(GC_Announces_List));
- return announces_list;
+ return (GC_Announces_List *)calloc(1, sizeof(GC_Announces_List));
}
void kill_gca(GC_Announces_List *announces_list)