-/* Copyright (c) 2010, 2012-2016. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2010-2019. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "routing_table.h"
#include "simgrid/msg.h"
+#include <stdio.h> /* snprintf */
+
XBT_LOG_NEW_DEFAULT_CATEGORY(msg_kademlia_node, "Messages specific for this msg example");
/** @brief Initialization of a node
node->id = node_id;
node->table = routing_table_init(node_id);
- sprintf(node->mailbox, "%0*x", MAILBOX_NAME_SIZE, node_id);
+ snprintf(node->mailbox, MAILBOX_NAME_SIZE - 1, "%u", node_id);
node->find_node_failed = 0;
node->find_node_success = 0;
{
if (prefix == 0) {
return 0;
+ } else {
+ return (1U << ((unsigned int)(prefix - 1))) ^ id;
}
- unsigned int n = 1 << (prefix - 1);
- return n ^ id;
}
/** @brief Returns the prefix of an identifier.
* The prefix is the id of the bucket in which the remote identifier xor our identifier should be stored.
- * @param id : bigunsigned int id to test
+ * @param id : big unsigned int id to test
* @param nb_bits : key size
*/
unsigned int get_node_prefix(unsigned int id, unsigned int nb_bits)
{
- unsigned int j, size = sizeof(unsigned int) * 8;
- for (j = 0; j < size; j++) {
+ unsigned int size = sizeof(unsigned int) * 8;
+ for (unsigned int j = 0; j < size; j++) {
if (((id >> (size - 1 - j)) & 0x1) != 0) {
return nb_bits - (j);
}
return 0;
}
-/** @brief Gets the mailbox name of a host given its identifier
- */
+/** @brief Gets the mailbox name of a host given its identifier */
void get_node_mailbox(unsigned int id, char *mailbox)
{
- sprintf(mailbox, "%0*x", MAILBOX_NAME_SIZE, id);
+ snprintf(mailbox, MAILBOX_NAME_SIZE - 1, "%u", id);
}
/** Constructor, build a new contact information. */