mirror of https://github.com/aria2/aria2
Consider IP address and port when finding DHT node.
parent
d429943d05
commit
920583502e
|
@ -232,7 +232,8 @@ SharedHandle<DHTNode> DHTBucket::getNode(const unsigned char* nodeID, const std:
|
||||||
node->setPort(port);
|
node->setPort(port);
|
||||||
std::deque<SharedHandle<DHTNode> >::const_iterator itr =
|
std::deque<SharedHandle<DHTNode> >::const_iterator itr =
|
||||||
std::find_if(nodes_.begin(), nodes_.end(), derefEqual(node));
|
std::find_if(nodes_.begin(), nodes_.end(), derefEqual(node));
|
||||||
if(itr == nodes_.end()) {
|
if(itr == nodes_.end() ||
|
||||||
|
(*itr)->getIPAddress() != ipaddr || (*itr)->getPort() != port) {
|
||||||
return SharedHandle<DHTNode>();
|
return SharedHandle<DHTNode>();
|
||||||
} else {
|
} else {
|
||||||
return *itr;
|
return *itr;
|
||||||
|
|
|
@ -24,6 +24,7 @@ class DHTBucketTest:public CppUnit::TestFixture {
|
||||||
CPPUNIT_TEST(testGetGoodNodes);
|
CPPUNIT_TEST(testGetGoodNodes);
|
||||||
CPPUNIT_TEST(testCacheNode);
|
CPPUNIT_TEST(testCacheNode);
|
||||||
CPPUNIT_TEST(testDropNode);
|
CPPUNIT_TEST(testDropNode);
|
||||||
|
CPPUNIT_TEST(testGetNode);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
public:
|
public:
|
||||||
void setUp() {}
|
void setUp() {}
|
||||||
|
@ -40,6 +41,7 @@ public:
|
||||||
void testGetGoodNodes();
|
void testGetGoodNodes();
|
||||||
void testCacheNode();
|
void testCacheNode();
|
||||||
void testDropNode();
|
void testDropNode();
|
||||||
|
void testGetNode();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -451,4 +453,23 @@ void DHTBucketTest::testDropNode()
|
||||||
CPPUNIT_ASSERT(*cachedNode1 == *bucket.getCachedNodes()[0]);
|
CPPUNIT_ASSERT(*cachedNode1 == *bucket.getCachedNodes()[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DHTBucketTest::testGetNode()
|
||||||
|
{
|
||||||
|
unsigned char localNodeID[DHT_ID_LENGTH];
|
||||||
|
memset(localNodeID, 0, DHT_ID_LENGTH);
|
||||||
|
SharedHandle<DHTNode> localNode(new DHTNode(localNodeID));
|
||||||
|
DHTBucket bucket(localNode);
|
||||||
|
|
||||||
|
unsigned char id[DHT_ID_LENGTH];
|
||||||
|
createID(id, 0xf0, 0);
|
||||||
|
SharedHandle<DHTNode> node(new DHTNode(id));
|
||||||
|
node->setIPAddress("192.168.0.1");
|
||||||
|
node->setPort(6881);
|
||||||
|
CPPUNIT_ASSERT(bucket.addNode(node));
|
||||||
|
CPPUNIT_ASSERT(bucket.getNode(id, "192.168.0.1", 6881));
|
||||||
|
CPPUNIT_ASSERT(!bucket.getNode(id, "192.168.0.2", 6881));
|
||||||
|
CPPUNIT_ASSERT(!bucket.getNode(id, "192.168.0.1", 6882));
|
||||||
|
CPPUNIT_ASSERT(!bucket.getNode(localNodeID, "192.168.0.1", 6881));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
Loading…
Reference in New Issue