diff options
author | zugz <mbays+tox@sdf.org> | 2017-02-11 15:21:06 +0100 |
---|---|---|
committer | zugz <mbays+tox@sdf.org> | 2017-02-11 15:27:48 +0100 |
commit | bbb979d6ef2299834cb38932a2d395eeaf119ff0 (patch) | |
tree | 7bb53229ae11b90fb01497c9e515b689573e9d31 /toxcore/onion_announce.c | |
parent | 6ae33c16cf9e37fda85d70c78b3c2779eb8ca21a (diff) |
remove statics used in onion comparison functions
Diffstat (limited to 'toxcore/onion_announce.c')
-rw-r--r-- | toxcore/onion_announce.c | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/toxcore/onion_announce.c b/toxcore/onion_announce.c index 04450c57..28d3b281 100644 --- a/toxcore/onion_announce.c +++ b/toxcore/onion_announce.c | |||
@@ -233,12 +233,20 @@ static int in_entries(const Onion_Announce *onion_a, const uint8_t *public_key) | |||
233 | return -1; | 233 | return -1; |
234 | } | 234 | } |
235 | 235 | ||
236 | static uint8_t cmp_public_key[CRYPTO_PUBLIC_KEY_SIZE]; | 236 | typedef struct { |
237 | const uint8_t *base_public_key; | ||
238 | Onion_Announce_Entry entry; | ||
239 | } Cmp_data; | ||
240 | |||
237 | static int cmp_entry(const void *a, const void *b) | 241 | static int cmp_entry(const void *a, const void *b) |
238 | { | 242 | { |
239 | Onion_Announce_Entry entry1, entry2; | 243 | Cmp_data cmp1, cmp2; |
240 | memcpy(&entry1, a, sizeof(Onion_Announce_Entry)); | 244 | memcpy(&cmp1, a, sizeof(Cmp_data)); |
241 | memcpy(&entry2, b, sizeof(Onion_Announce_Entry)); | 245 | memcpy(&cmp2, b, sizeof(Cmp_data)); |
246 | Onion_Announce_Entry entry1 = cmp1.entry; | ||
247 | Onion_Announce_Entry entry2 = cmp2.entry; | ||
248 | const uint8_t *cmp_public_key = cmp1.base_public_key; | ||
249 | |||
242 | int t1 = is_timeout(entry1.time, ONION_ANNOUNCE_TIMEOUT); | 250 | int t1 = is_timeout(entry1.time, ONION_ANNOUNCE_TIMEOUT); |
243 | int t2 = is_timeout(entry2.time, ONION_ANNOUNCE_TIMEOUT); | 251 | int t2 = is_timeout(entry2.time, ONION_ANNOUNCE_TIMEOUT); |
244 | 252 | ||
@@ -267,6 +275,24 @@ static int cmp_entry(const void *a, const void *b) | |||
267 | return 0; | 275 | return 0; |
268 | } | 276 | } |
269 | 277 | ||
278 | static void sort_onion_announce_list(Onion_Announce_Entry *list, unsigned int length, const uint8_t *comp_public_key) | ||
279 | { | ||
280 | // Pass comp_public_key to qsort with each Client_data entry, so the | ||
281 | // comparison function can use it as the base of comparison. | ||
282 | Cmp_data cmp_list[length]; | ||
283 | |||
284 | for (uint32_t i = 0; i < length; i++) { | ||
285 | cmp_list[i].base_public_key = comp_public_key; | ||
286 | cmp_list[i].entry = list[i]; | ||
287 | } | ||
288 | |||
289 | qsort(cmp_list, length, sizeof(Cmp_data), cmp_entry); | ||
290 | |||
291 | for (uint32_t i = 0; i < length; i++) { | ||
292 | list[i] = cmp_list[i].entry; | ||
293 | } | ||
294 | } | ||
295 | |||
270 | /* add entry to entries list | 296 | /* add entry to entries list |
271 | * | 297 | * |
272 | * return -1 if failure | 298 | * return -1 if failure |
@@ -304,8 +330,7 @@ static int add_to_entries(Onion_Announce *onion_a, IP_Port ret_ip_port, const ui | |||
304 | memcpy(onion_a->entries[pos].data_public_key, data_public_key, CRYPTO_PUBLIC_KEY_SIZE); | 330 | memcpy(onion_a->entries[pos].data_public_key, data_public_key, CRYPTO_PUBLIC_KEY_SIZE); |
305 | onion_a->entries[pos].time = unix_time(); | 331 | onion_a->entries[pos].time = unix_time(); |
306 | 332 | ||
307 | memcpy(cmp_public_key, onion_a->dht->self_public_key, CRYPTO_PUBLIC_KEY_SIZE); | 333 | sort_onion_announce_list(onion_a->entries, ONION_ANNOUNCE_MAX_ENTRIES, onion_a->dht->self_public_key); |
308 | qsort(onion_a->entries, ONION_ANNOUNCE_MAX_ENTRIES, sizeof(Onion_Announce_Entry), cmp_entry); | ||
309 | return in_entries(onion_a, public_key); | 334 | return in_entries(onion_a, public_key); |
310 | } | 335 | } |
311 | 336 | ||