/* */ #include "DHTAbstractMessage.h" #include #include "DHTNode.h" #include "DHTConnection.h" #include "DHTMessageDispatcher.h" #include "DHTMessageFactory.h" #include "DHTRoutingTable.h" #include "DHTMessageCallback.h" #include "bencode.h" namespace aria2 { DHTAbstractMessage::DHTAbstractMessage(const SharedHandle& localNode, const SharedHandle& remoteNode, const std::string& transactionID): DHTMessage(localNode, remoteNode, transactionID) {} DHTAbstractMessage::~DHTAbstractMessage() {} std::string DHTAbstractMessage::getBencodedMessage() { BDE msgDict = BDE::dict(); msgDict[T] = _transactionID; msgDict[Y] = getType(); fillMessage(msgDict); return bencode::encode(msgDict); } bool DHTAbstractMessage::send() { std::string message = getBencodedMessage(); ssize_t r = _connection->sendMessage (reinterpret_cast(message.c_str()), message.size(), _remoteNode->getIPAddress(), _remoteNode->getPort()); assert(r >= 0); return r == static_cast(message.size()); } void DHTAbstractMessage::setConnection(const WeakHandle& connection) { _connection = connection; } void DHTAbstractMessage::setMessageDispatcher(const WeakHandle& dispatcher) { _dispatcher = dispatcher; } void DHTAbstractMessage::setMessageFactory(const WeakHandle& factory) { _factory = factory; } void DHTAbstractMessage::setRoutingTable(const WeakHandle& routingTable) { _routingTable = routingTable; } } // namespace aria2