forked from Green-Sky/tomato
Squashed 'external/toxcore/c-toxcore/' changes from 67badf694..82460b212
82460b212 feat: add ngc events 24b54722a fix: Ensure we have allocators available for the error paths. 48dbcfebc cleanup: Remove redundant `-DSODIUM_EXPORT` from definitions. 0cef46ee9 cleanup: Fix a few more clang-tidy warnings. 0c5b918e9 cleanup: Fix a few more clang-tidy warnings. 4d3c97f49 cleanup: Enforce stricter identifier naming using clang-tidy. a549807df refactor: Add `mem` module to allow tests to override allocators. 6133fb153 chore: Add devcontainer setup for codespaces. 620e07ecd chore: Set a timeout for tests started using Conan c0ec33b16 chore: Migrate Windows CI from Appveyor to Azure DevOps 8ed47f3ef fix incorrect documentation a1e245841 docs: Fix doxygen config and remove some redundant comments. b0f633185 chore: Fix the Android CI job 7469a529b fix: Add missing `#include <array>`. 2b1a6b0d2 add missing ngc constants getter declarations and definitions 2e02d5637 chore: Add missing module dependencies. REVERT: 67badf694 feat: add ngc events git-subtree-dir: external/toxcore/c-toxcore git-subtree-split: 82460b2124216af1ac9d63060de310a682a2fd15
This commit is contained in:
@ -51,6 +51,7 @@ struct Onion_Announce {
|
||||
const Logger *log;
|
||||
const Mono_Time *mono_time;
|
||||
const Random *rng;
|
||||
const Memory *mem;
|
||||
DHT *dht;
|
||||
Networking_Core *net;
|
||||
Onion_Announce_Entry entries[ONION_ANNOUNCE_MAX_ENTRIES];
|
||||
@ -316,12 +317,13 @@ static int cmp_entry(const void *a, const void *b)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static void sort_onion_announce_list(Onion_Announce_Entry *list, unsigned int length, const Mono_Time *mono_time,
|
||||
static void sort_onion_announce_list(const Memory *mem, const Mono_Time *mono_time,
|
||||
Onion_Announce_Entry *list, unsigned int length,
|
||||
const uint8_t *comp_public_key)
|
||||
{
|
||||
// Pass comp_public_key to qsort with each Client_data entry, so the
|
||||
// comparison function can use it as the base of comparison.
|
||||
Cmp_Data *cmp_list = (Cmp_Data *)calloc(length, sizeof(Cmp_Data));
|
||||
Cmp_Data *cmp_list = (Cmp_Data *)mem_valloc(mem, length, sizeof(Cmp_Data));
|
||||
|
||||
if (cmp_list == nullptr) {
|
||||
return;
|
||||
@ -339,7 +341,7 @@ static void sort_onion_announce_list(Onion_Announce_Entry *list, unsigned int le
|
||||
list[i] = cmp_list[i].entry;
|
||||
}
|
||||
|
||||
free(cmp_list);
|
||||
mem_delete(mem, cmp_list);
|
||||
}
|
||||
|
||||
/** @brief add entry to entries list
|
||||
@ -377,7 +379,8 @@ static int add_to_entries(Onion_Announce *onion_a, const IP_Port *ret_ip_port, c
|
||||
memcpy(onion_a->entries[pos].data_public_key, data_public_key, CRYPTO_PUBLIC_KEY_SIZE);
|
||||
onion_a->entries[pos].announce_time = mono_time_get(onion_a->mono_time);
|
||||
|
||||
sort_onion_announce_list(onion_a->entries, ONION_ANNOUNCE_MAX_ENTRIES, onion_a->mono_time,
|
||||
sort_onion_announce_list(onion_a->mem, onion_a->mono_time,
|
||||
onion_a->entries, ONION_ANNOUNCE_MAX_ENTRIES,
|
||||
dht_get_self_public_key(onion_a->dht));
|
||||
return in_entries(onion_a, public_key);
|
||||
}
|
||||
@ -438,7 +441,7 @@ static int handle_announce_request_common(
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t *plain = (uint8_t *)malloc(plain_size);
|
||||
uint8_t *plain = (uint8_t *)mem_balloc(onion_a->mem, plain_size);
|
||||
|
||||
if (plain == nullptr) {
|
||||
return 1;
|
||||
@ -448,7 +451,7 @@ static int handle_announce_request_common(
|
||||
packet + 1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE, plain_size + CRYPTO_MAC_SIZE, plain);
|
||||
|
||||
if ((uint32_t)decrypted_len != plain_size) {
|
||||
free(plain);
|
||||
mem_delete(onion_a->mem, plain);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -483,10 +486,10 @@ static int handle_announce_request_common(
|
||||
const uint16_t response_size = nodes_offset
|
||||
+ MAX_SENT_NODES * PACKED_NODE_SIZE_IP6
|
||||
+ max_extra_size;
|
||||
uint8_t *response = (uint8_t *)malloc(response_size);
|
||||
uint8_t *response = (uint8_t *)mem_balloc(onion_a->mem, response_size);
|
||||
|
||||
if (response == nullptr) {
|
||||
free(plain);
|
||||
mem_delete(onion_a->mem, plain);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -504,8 +507,8 @@ static int handle_announce_request_common(
|
||||
|
||||
if (nodes_length <= 0) {
|
||||
LOGGER_WARNING(onion_a->log, "Failed to pack nodes");
|
||||
free(response);
|
||||
free(plain);
|
||||
mem_delete(onion_a->mem, response);
|
||||
mem_delete(onion_a->mem, plain);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@ -523,8 +526,8 @@ static int handle_announce_request_common(
|
||||
response, response_size, offset);
|
||||
|
||||
if (extra_size == -1) {
|
||||
free(response);
|
||||
free(plain);
|
||||
mem_delete(onion_a->mem, response);
|
||||
mem_delete(onion_a->mem, plain);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -536,8 +539,8 @@ static int handle_announce_request_common(
|
||||
|
||||
if (len != offset + CRYPTO_MAC_SIZE) {
|
||||
LOGGER_ERROR(onion_a->log, "Failed to encrypt announce response");
|
||||
free(response);
|
||||
free(plain);
|
||||
mem_delete(onion_a->mem, response);
|
||||
mem_delete(onion_a->mem, plain);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -549,13 +552,13 @@ static int handle_announce_request_common(
|
||||
if (send_onion_response(onion_a->net, source, data,
|
||||
1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH + CRYPTO_NONCE_SIZE + len,
|
||||
packet + (length - ONION_RETURN_3)) == -1) {
|
||||
free(response);
|
||||
free(plain);
|
||||
mem_delete(onion_a->mem, response);
|
||||
mem_delete(onion_a->mem, plain);
|
||||
return 1;
|
||||
}
|
||||
|
||||
free(response);
|
||||
free(plain);
|
||||
mem_delete(onion_a->mem, response);
|
||||
mem_delete(onion_a->mem, plain);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -639,13 +642,13 @@ static int handle_data_request(void *object, const IP_Port *source, const uint8_
|
||||
return 0;
|
||||
}
|
||||
|
||||
Onion_Announce *new_onion_announce(const Logger *log, const Random *rng, const Mono_Time *mono_time, DHT *dht)
|
||||
Onion_Announce *new_onion_announce(const Logger *log, const Memory *mem, const Random *rng, const Mono_Time *mono_time, DHT *dht)
|
||||
{
|
||||
if (dht == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Onion_Announce *onion_a = (Onion_Announce *)calloc(1, sizeof(Onion_Announce));
|
||||
Onion_Announce *onion_a = (Onion_Announce *)mem_alloc(mem, sizeof(Onion_Announce));
|
||||
|
||||
if (onion_a == nullptr) {
|
||||
return nullptr;
|
||||
@ -653,6 +656,7 @@ Onion_Announce *new_onion_announce(const Logger *log, const Random *rng, const M
|
||||
|
||||
onion_a->log = log;
|
||||
onion_a->rng = rng;
|
||||
onion_a->mem = mem;
|
||||
onion_a->mono_time = mono_time;
|
||||
onion_a->dht = dht;
|
||||
onion_a->net = dht_get_net(dht);
|
||||
@ -661,7 +665,7 @@ Onion_Announce *new_onion_announce(const Logger *log, const Random *rng, const M
|
||||
onion_a->extra_data_object = nullptr;
|
||||
new_hmac_key(rng, onion_a->hmac_key);
|
||||
|
||||
onion_a->shared_keys_recv = shared_key_cache_new(mono_time, dht_get_self_secret_key(dht), KEYS_TIMEOUT, MAX_KEYS_PER_SLOT);
|
||||
onion_a->shared_keys_recv = shared_key_cache_new(mono_time, mem, dht_get_self_secret_key(dht), KEYS_TIMEOUT, MAX_KEYS_PER_SLOT);
|
||||
if (onion_a->shared_keys_recv == nullptr) {
|
||||
kill_onion_announce(onion_a);
|
||||
return nullptr;
|
||||
@ -687,5 +691,5 @@ void kill_onion_announce(Onion_Announce *onion_a)
|
||||
crypto_memzero(onion_a->hmac_key, CRYPTO_HMAC_KEY_SIZE);
|
||||
shared_key_cache_free(onion_a->shared_keys_recv);
|
||||
|
||||
free(onion_a);
|
||||
mem_delete(onion_a->mem, onion_a);
|
||||
}
|
||||
|
Reference in New Issue
Block a user