mirror of https://github.com/aria2/aria2
Don't send announce_peer message with empty token in
DHTPeerLookupTask. Replace old node ID with new node ID when response message is received in DHTAbstractNodeLookupTask.pull/1/head
parent
2dba2f86a4
commit
a9f734218f
|
@ -173,6 +173,14 @@ public:
|
|||
void onReceived(const ResponseMessage* message)
|
||||
{
|
||||
--inFlightMessage_;
|
||||
// Replace old Node ID with new Node ID.
|
||||
for(std::deque<SharedHandle<DHTNodeLookupEntry> >::iterator i =
|
||||
entries_.begin(), eoi = entries_.end(); i != eoi; ++i) {
|
||||
if((*i)->node->getIPAddress() == message->getRemoteNode()->getIPAddress()
|
||||
&& (*i)->node->getPort() == message->getRemoteNode()->getPort()) {
|
||||
(*i)->node = message->getRemoteNode();
|
||||
}
|
||||
}
|
||||
onReceivedInternal(message);
|
||||
std::vector<SharedHandle<DHTNode> > nodes;
|
||||
getNodesFromMessage(nodes, message);
|
||||
|
|
|
@ -102,17 +102,25 @@ void DHTPeerLookupTask::onFinish()
|
|||
size_t num = DHTBucket::K;
|
||||
for(std::deque<SharedHandle<DHTNodeLookupEntry> >::const_iterator i =
|
||||
getEntries().begin(), eoi = getEntries().end();
|
||||
i != eoi && num > 0; ++i, --num) {
|
||||
if((*i)->used) {
|
||||
const SharedHandle<DHTNode>& node = (*i)->node;
|
||||
SharedHandle<DHTMessage> m =
|
||||
getMessageFactory()->createAnnouncePeerMessage
|
||||
(node,
|
||||
getTargetID(), // this is infoHash
|
||||
btRuntime_->getListenPort(),
|
||||
tokenStorage_[util::toHex(node->getID(), DHT_ID_LENGTH)]);
|
||||
getMessageDispatcher()->addMessageToQueue(m);
|
||||
i != eoi && num > 0; ++i) {
|
||||
if(!(*i)->used) {
|
||||
continue;
|
||||
}
|
||||
const SharedHandle<DHTNode>& node = (*i)->node;
|
||||
std::string idHex = util::toHex(node->getID(), DHT_ID_LENGTH);
|
||||
std::string token = tokenStorage_[idHex];
|
||||
if(token.empty()) {
|
||||
A2_LOG_DEBUG(fmt("Token is empty for ID:%s", idHex.c_str()));
|
||||
continue;
|
||||
}
|
||||
SharedHandle<DHTMessage> m =
|
||||
getMessageFactory()->createAnnouncePeerMessage
|
||||
(node,
|
||||
getTargetID(), // this is infoHash
|
||||
btRuntime_->getListenPort(),
|
||||
token);
|
||||
getMessageDispatcher()->addMessageToQueue(m);
|
||||
--num;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue