/* */ #include "DHTFindNodeMessage.h" #include #include "DHTNode.h" #include "DHTRoutingTable.h" #include "DHTMessageFactory.h" #include "DHTMessageDispatcher.h" #include "DHTMessageCallback.h" #include "util.h" #include "bencode.h" namespace aria2 { const std::string DHTFindNodeMessage::FIND_NODE("find_node"); const std::string DHTFindNodeMessage::TARGET_NODE("target"); DHTFindNodeMessage::DHTFindNodeMessage(const SharedHandle& localNode, const SharedHandle& remoteNode, const unsigned char* targetNodeID, const std::string& transactionID): DHTQueryMessage(localNode, remoteNode, transactionID) { memcpy(_targetNodeID, targetNodeID, DHT_ID_LENGTH); } DHTFindNodeMessage::~DHTFindNodeMessage() {} void DHTFindNodeMessage::doReceivedAction() { std::vector > nodes; _routingTable->getClosestKNodes(nodes, _targetNodeID); SharedHandle reply = _factory->createFindNodeReplyMessage(_remoteNode, nodes, _transactionID); _dispatcher->addMessageToQueue(reply); } BDE DHTFindNodeMessage::getArgument() { BDE aDict = BDE::dict(); aDict[DHTMessage::ID] = BDE(_localNode->getID(), DHT_ID_LENGTH); aDict[TARGET_NODE] = BDE(_targetNodeID, DHT_ID_LENGTH); return aDict; } std::string DHTFindNodeMessage::getMessageType() const { return FIND_NODE; } void DHTFindNodeMessage::validate() const {} std::string DHTFindNodeMessage::toStringOptional() const { return "targetNodeID="+util::toHex(_targetNodeID, DHT_ID_LENGTH); } } // namespace aria2