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)
|
void onReceived(const ResponseMessage* message)
|
||||||
{
|
{
|
||||||
--inFlightMessage_;
|
--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);
|
onReceivedInternal(message);
|
||||||
std::vector<SharedHandle<DHTNode> > nodes;
|
std::vector<SharedHandle<DHTNode> > nodes;
|
||||||
getNodesFromMessage(nodes, message);
|
getNodesFromMessage(nodes, message);
|
||||||
|
|
|
@ -102,17 +102,25 @@ void DHTPeerLookupTask::onFinish()
|
||||||
size_t num = DHTBucket::K;
|
size_t num = DHTBucket::K;
|
||||||
for(std::deque<SharedHandle<DHTNodeLookupEntry> >::const_iterator i =
|
for(std::deque<SharedHandle<DHTNodeLookupEntry> >::const_iterator i =
|
||||||
getEntries().begin(), eoi = getEntries().end();
|
getEntries().begin(), eoi = getEntries().end();
|
||||||
i != eoi && num > 0; ++i, --num) {
|
i != eoi && num > 0; ++i) {
|
||||||
if((*i)->used) {
|
if(!(*i)->used) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const SharedHandle<DHTNode>& node = (*i)->node;
|
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 =
|
SharedHandle<DHTMessage> m =
|
||||||
getMessageFactory()->createAnnouncePeerMessage
|
getMessageFactory()->createAnnouncePeerMessage
|
||||||
(node,
|
(node,
|
||||||
getTargetID(), // this is infoHash
|
getTargetID(), // this is infoHash
|
||||||
btRuntime_->getListenPort(),
|
btRuntime_->getListenPort(),
|
||||||
tokenStorage_[util::toHex(node->getID(), DHT_ID_LENGTH)]);
|
token);
|
||||||
getMessageDispatcher()->addMessageToQueue(m);
|
getMessageDispatcher()->addMessageToQueue(m);
|
||||||
}
|
--num;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue