-/* Copyright (c) 2010-2019. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2010-2020. 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. */
namespace kademlia {
static void destroy(void* message)
{
- Message* msg = static_cast<Message*>(message);
+ const Message* msg = static_cast<Message*>(message);
delete msg->answer_;
delete msg;
}
*/
bool Node::join(unsigned int known_id)
{
- Answer* node_list;
+ const Answer* node_list;
unsigned int i;
bool got_answer = false;
/* First step: Send a "FIND_NODE" request to the node we know */
sendFindNode(known_id, id_);
- simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::by_name(std::to_string(id_));
+ simgrid::s4u::Mailbox* mailbox = simgrid::s4u::Mailbox::by_name(std::to_string(id_));
do {
if (receive_comm == nullptr)
receive_comm = mailbox->get_async(&received_msg);
XBT_DEBUG("Received an answer from the node I know.");
got_answer = true;
// retrieve the node list and ping them.
- Message* msg = static_cast<Message*>(received_msg);
+ const Message* msg = static_cast<Message*>(received_msg);
node_list = msg->answer_;
if (node_list) {
for (auto contact : node_list->nodes)
void Node::sendFindNode(unsigned int id, unsigned int destination)
{
/* Gets the mailbox to send to */
- simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::by_name(std::to_string(id));
+ simgrid::s4u::Mailbox* mailbox = simgrid::s4u::Mailbox::by_name(std::to_string(id));
/* Build the task */
Message* msg = new Message(id_, destination, simgrid::s4u::Mailbox::by_name(std::to_string(id_)),
simgrid::s4u::Host::current()->get_cname());
* Sends to the best "KADEMLIA_ALPHA" nodes in the "node_list" array a "FIND_NODE" request, to ask them for their best
* nodes
*/
-unsigned int Node::sendFindNodeToBest(Answer* node_list)
+unsigned int Node::sendFindNodeToBest(const Answer* node_list)
{
unsigned int i = 0;
unsigned int j = 0;
steps++;
double time_beginreceive = simgrid::s4u::Engine::get_clock();
- simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::by_name(std::to_string(id_));
+ simgrid::s4u::Mailbox* mailbox = simgrid::s4u::Mailbox::by_name(std::to_string(id_));
do {
if (receive_comm == nullptr)
receive_comm = mailbox->get_async(&received_msg);
if (receive_comm->test()) {
- Message* msg = static_cast<Message*>(received_msg);
+ const Message* msg = static_cast<Message*>(received_msg);
// Check if what we have received is what we are looking for.
if (msg->answer_ && msg->answer_->getDestinationId() == id_to_find) {
routingTableUpdate(msg->sender_id_);
void Node::randomLookup()
{
unsigned int id_to_look = RANDOM_LOOKUP_NODE; // Totally random.
- /* TODO: Use some pseudo-random generator like RngStream. */
+ /* TODO: Use some pseudo-random generator. */
XBT_DEBUG("I'm doing a random lookup");
findNode(id_to_look, true);
}
/** @brief Handles the answer to an incoming "find_node" task */
-void Node::handleFindNode(Message* msg)
+void Node::handleFindNode(const Message* msg)
{
routingTableUpdate(msg->sender_id_);
XBT_VERB("Received a FIND_NODE from %s (%s), he's trying to find %08x", msg->answer_to_->get_cname(),