diff options
Diffstat (limited to 'toxcore/onion_client.c')
-rw-r--r-- | toxcore/onion_client.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/toxcore/onion_client.c b/toxcore/onion_client.c index 1c3b34da..9528a041 100644 --- a/toxcore/onion_client.c +++ b/toxcore/onion_client.c | |||
@@ -232,27 +232,35 @@ static int onion_add_path_node(Onion_Client *onion_c, IP_Port ip_port, const uin | |||
232 | */ | 232 | */ |
233 | uint16_t onion_backup_nodes(const Onion_Client *onion_c, Node_format *nodes, uint16_t max_num) | 233 | uint16_t onion_backup_nodes(const Onion_Client *onion_c, Node_format *nodes, uint16_t max_num) |
234 | { | 234 | { |
235 | unsigned int i; | ||
236 | |||
237 | if (!max_num) { | 235 | if (!max_num) { |
238 | return 0; | 236 | return 0; |
239 | } | 237 | } |
240 | 238 | ||
241 | unsigned int num_nodes = (onion_c->path_nodes_index < MAX_PATH_NODES) ? onion_c->path_nodes_index : MAX_PATH_NODES; | 239 | const uint16_t num_nodes = (onion_c->path_nodes_index < MAX_PATH_NODES) ? onion_c->path_nodes_index : MAX_PATH_NODES; |
240 | uint16_t i = 0; | ||
242 | 241 | ||
243 | if (num_nodes == 0) { | 242 | while (i < max_num && i < num_nodes) { |
244 | return 0; | 243 | nodes[i] = onion_c->path_nodes[(onion_c->path_nodes_index - (1 + i)) % num_nodes]; |
244 | ++i; | ||
245 | } | 245 | } |
246 | 246 | ||
247 | if (num_nodes < max_num) { | 247 | for (uint16_t j = 0; i < max_num && j < MAX_PATH_NODES && j < onion_c->path_nodes_index_bs; ++j) { |
248 | max_num = num_nodes; | 248 | bool already_saved = false; |
249 | } | ||
250 | 249 | ||
251 | for (i = 0; i < max_num; ++i) { | 250 | for (uint16_t k = 0; k < num_nodes; ++k) { |
252 | nodes[i] = onion_c->path_nodes[(onion_c->path_nodes_index - (1 + i)) % num_nodes]; | 251 | if (public_key_cmp(nodes[k].public_key, onion_c->path_nodes_bs[j].public_key) == 0) { |
252 | already_saved = true; | ||
253 | break; | ||
254 | } | ||
255 | } | ||
256 | |||
257 | if (!already_saved) { | ||
258 | nodes[i] = onion_c->path_nodes_bs[j]; | ||
259 | ++i; | ||
260 | } | ||
253 | } | 261 | } |
254 | 262 | ||
255 | return max_num; | 263 | return i; |
256 | } | 264 | } |
257 | 265 | ||
258 | /* Put up to max_num random nodes in nodes. | 266 | /* Put up to max_num random nodes in nodes. |