mirror of https://github.com/aria2/aria2
2007-12-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Removed incomingPeer. Set 0 to peer's port if it is not a listening port. * src/DefaultPeerStorage.{h, cc} * test/DefaultPeerStorageTest.cc * src/HandshakeExtensionMessage.cc * test/HandshakeExtensionMessageTest.cc * src/Peer.{h, cc}: Added ipaddr and port to identity comparison. * src/PeerStorage.h * test/MockPeerStorage.h * src/PeerListenCommand.ccpull/1/head
parent
7ff1f5a620
commit
f5b68379d5
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2007-12-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
Removed incomingPeer. Set 0 to peer's port if it is not a listening
|
||||||
|
port.
|
||||||
|
* src/DefaultPeerStorage.{h, cc}
|
||||||
|
* test/DefaultPeerStorageTest.cc
|
||||||
|
* src/HandshakeExtensionMessage.cc
|
||||||
|
* test/HandshakeExtensionMessageTest.cc
|
||||||
|
* src/Peer.{h, cc}: Added ipaddr and port to identity comparison.
|
||||||
|
* src/PeerStorage.h
|
||||||
|
* test/MockPeerStorage.h
|
||||||
|
* src/PeerListenCommand.cc
|
||||||
|
|
||||||
2007-12-22 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2007-12-22 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
Added --metalink-enable-unique-protocol option.
|
Added --metalink-enable-unique-protocol option.
|
||||||
|
|
|
@ -54,18 +54,13 @@ DefaultPeerStorage::~DefaultPeerStorage() {}
|
||||||
|
|
||||||
bool DefaultPeerStorage::isPeerAlreadyAdded(const PeerHandle& peer)
|
bool DefaultPeerStorage::isPeerAlreadyAdded(const PeerHandle& peer)
|
||||||
{
|
{
|
||||||
return find(peers.begin(), peers.end(), peer) != peers.end() ||
|
return find(peers.begin(), peers.end(), peer) != peers.end();
|
||||||
find(incomingPeers.begin(), incomingPeers.end(), peer) != incomingPeers.end();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DefaultPeerStorage::addPeer(const PeerHandle& peer) {
|
bool DefaultPeerStorage::addPeer(const PeerHandle& peer) {
|
||||||
{
|
if(isPeerAlreadyAdded(peer)) {
|
||||||
Peers::iterator i = find(incomingPeers.begin(), incomingPeers.end(), peer);
|
logger->debug("Adding %s:%u is rejected because it has been already added.", peer->ipaddr.c_str(), peer->port);
|
||||||
if(i != incomingPeers.end() && (*i).get() != peer.get() ||
|
return false;
|
||||||
find(peers.begin(), peers.end(), peer) != peers.end()) {
|
|
||||||
logger->debug("Adding %s:%u is rejected because it is already in PeerStorage.", peer->ipaddr.c_str(), peer->port);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(peers.size() >= (size_t)maxPeerListSize) {
|
if(peers.size() >= (size_t)maxPeerListSize) {
|
||||||
deleteUnusedPeer(peers.size()-maxPeerListSize+1);
|
deleteUnusedPeer(peers.size()-maxPeerListSize+1);
|
||||||
|
@ -74,17 +69,6 @@ bool DefaultPeerStorage::addPeer(const PeerHandle& peer) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DefaultPeerStorage::addIncomingPeer(const PeerHandle& peer)
|
|
||||||
{
|
|
||||||
if(isPeerAlreadyAdded(peer)) {
|
|
||||||
logger->debug("Adding %s:%u is rejected because it is already in PeerStorage.", peer->ipaddr.c_str(), peer->port);
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
incomingPeers.push_back(peer);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DefaultPeerStorage::addPeer(const Peers& peers) {
|
void DefaultPeerStorage::addPeer(const Peers& peers) {
|
||||||
for(Peers::const_iterator itr = peers.begin();
|
for(Peers::const_iterator itr = peers.begin();
|
||||||
itr != peers.end(); itr++) {
|
itr != peers.end(); itr++) {
|
||||||
|
@ -163,10 +147,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
Peers DefaultPeerStorage::getActivePeers() {
|
Peers DefaultPeerStorage::getActivePeers() {
|
||||||
CollectActivePeer funcObj;
|
return for_each(peers.begin(), peers.end(), CollectActivePeer()).getActivePeers();
|
||||||
funcObj = for_each(peers.begin(), peers.end(), funcObj);
|
|
||||||
funcObj = for_each(incomingPeers.begin(), incomingPeers.end(), funcObj);
|
|
||||||
return funcObj.getActivePeers();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CalculateStat {
|
class CalculateStat {
|
||||||
|
@ -193,11 +174,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
TransferStat DefaultPeerStorage::calculateStat() {
|
TransferStat DefaultPeerStorage::calculateStat() {
|
||||||
CalculateStat calStat;
|
TransferStat stat = for_each(peers.begin(), peers.end(), CalculateStat()).getTransferStat();
|
||||||
calStat = for_each(peers.begin(), peers.end(), calStat);
|
|
||||||
calStat = for_each(incomingPeers.begin(), incomingPeers.end(), calStat);
|
|
||||||
|
|
||||||
TransferStat stat = calStat.getTransferStat();
|
|
||||||
stat.sessionDownloadLength += removedPeerSessionDownloadLength;
|
stat.sessionDownloadLength += removedPeerSessionDownloadLength;
|
||||||
stat.sessionUploadLength += removedPeerSessionUploadLength;
|
stat.sessionUploadLength += removedPeerSessionUploadLength;
|
||||||
stat.setAllTimeUploadLength(btRuntime->getUploadLengthAtStartup()+
|
stat.setAllTimeUploadLength(btRuntime->getUploadLengthAtStartup()+
|
||||||
|
@ -231,19 +208,16 @@ void DefaultPeerStorage::returnPeer(const PeerHandle& peer)
|
||||||
{
|
{
|
||||||
Peers::iterator itr = find(peers.begin(), peers.end(), peer);
|
Peers::iterator itr = find(peers.begin(), peers.end(), peer);
|
||||||
if(itr == peers.end()) {
|
if(itr == peers.end()) {
|
||||||
itr = find(incomingPeers.begin(), incomingPeers.end(), peer);
|
logger->debug("Cannot find peer %s:%u in PeerStorage.", peer->ipaddr.c_str(), peer->port);
|
||||||
if(itr == peers.end()) {
|
|
||||||
// do nothing
|
|
||||||
} else {
|
|
||||||
// erase incoming peer because we cannot connect to it with port number
|
|
||||||
// (*itr)->port. It is not the listening port.
|
|
||||||
onErasingPeer(*itr);
|
|
||||||
incomingPeers.erase(itr);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
peer->startBadCondition();
|
if((*itr)->port == 0) {
|
||||||
peer->resetStatus();
|
onErasingPeer(*itr);
|
||||||
peers.erase(itr);
|
peers.erase(itr);
|
||||||
peers.push_back(peer);
|
} else {
|
||||||
|
peer->startBadCondition();
|
||||||
|
peer->resetStatus();
|
||||||
|
peers.erase(itr);
|
||||||
|
peers.push_back(peer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,6 @@ private:
|
||||||
BtContextHandle btContext;
|
BtContextHandle btContext;
|
||||||
const Option* option;
|
const Option* option;
|
||||||
Peers peers;
|
Peers peers;
|
||||||
Peers incomingPeers;
|
|
||||||
int32_t maxPeerListSize;
|
int32_t maxPeerListSize;
|
||||||
Logger* logger;
|
Logger* logger;
|
||||||
BtRuntimeHandle btRuntime;
|
BtRuntimeHandle btRuntime;
|
||||||
|
@ -68,8 +67,6 @@ public:
|
||||||
|
|
||||||
virtual bool addPeer(const PeerHandle& peer);
|
virtual bool addPeer(const PeerHandle& peer);
|
||||||
|
|
||||||
virtual bool addIncomingPeer(const PeerHandle& peer);
|
|
||||||
|
|
||||||
int32_t countPeer() const;
|
int32_t countPeer() const;
|
||||||
|
|
||||||
virtual PeerHandle getUnusedPeer();
|
virtual PeerHandle getUnusedPeer();
|
||||||
|
@ -95,8 +92,6 @@ public:
|
||||||
void deleteUnusedPeer(int32_t delSize);
|
void deleteUnusedPeer(int32_t delSize);
|
||||||
|
|
||||||
void onErasingPeer(const PeerHandle& peer);
|
void onErasingPeer(const PeerHandle& peer);
|
||||||
|
|
||||||
const Peers& getIncomingPeers() const { return incomingPeers; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _D_DEFAULT_PEER_STORAGE_H_
|
#endif // _D_DEFAULT_PEER_STORAGE_H_
|
||||||
|
|
|
@ -39,7 +39,6 @@
|
||||||
#include "Data.h"
|
#include "Data.h"
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
#include "BencodeVisitor.h"
|
#include "BencodeVisitor.h"
|
||||||
#include "BtRegistry.h"
|
|
||||||
#include "MetaFileUtil.h"
|
#include "MetaFileUtil.h"
|
||||||
#include "DlAbortEx.h"
|
#include "DlAbortEx.h"
|
||||||
#include "LogFactory.h"
|
#include "LogFactory.h"
|
||||||
|
@ -107,14 +106,6 @@ void HandshakeExtensionMessage::doReceivedAction()
|
||||||
const map<string, uint8_t>::value_type& vt = *itr;
|
const map<string, uint8_t>::value_type& vt = *itr;
|
||||||
_peer->setExtension(vt.first, vt.second);
|
_peer->setExtension(vt.first, vt.second);
|
||||||
}
|
}
|
||||||
if(_peer->port > 0) {
|
|
||||||
// This is needed when _peer is a connection initiator, listen port of
|
|
||||||
// _peer is now available, which is initially unknown.
|
|
||||||
// If _peer is a receiver or already its port is known, _peer has to be
|
|
||||||
// already added to PeerStorage using addPeer() and call
|
|
||||||
// PeerStorage::addPeer() here does nothing and just returns false.
|
|
||||||
PEER_STORAGE(_btContext)->addPeer(_peer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandshakeExtensionMessage::setPeer(const PeerHandle& peer)
|
void HandshakeExtensionMessage::setPeer(const PeerHandle& peer)
|
||||||
|
|
13
src/Peer.cc
13
src/Peer.cc
|
@ -44,7 +44,6 @@ Peer::Peer(string ipaddr, uint16_t port, int32_t pieceLength, int64_t totalLengt
|
||||||
port(port),
|
port(port),
|
||||||
sessionUploadLength(0),
|
sessionUploadLength(0),
|
||||||
sessionDownloadLength(0),
|
sessionDownloadLength(0),
|
||||||
pieceLength(pieceLength),
|
|
||||||
active(false),
|
active(false),
|
||||||
_badConditionStartTime(0),
|
_badConditionStartTime(0),
|
||||||
_badConditionInterval(10)
|
_badConditionInterval(10)
|
||||||
|
@ -63,20 +62,10 @@ Peer::Peer(string ipaddr, uint16_t port, int32_t pieceLength, int64_t totalLengt
|
||||||
void Peer::reconfigure(int32_t pieceLength, int64_t totalLength)
|
void Peer::reconfigure(int32_t pieceLength, int64_t totalLength)
|
||||||
{
|
{
|
||||||
delete bitfield;
|
delete bitfield;
|
||||||
this->pieceLength = pieceLength;
|
|
||||||
this->bitfield = BitfieldManFactory::getFactoryInstance()->
|
this->bitfield = BitfieldManFactory::getFactoryInstance()->
|
||||||
createBitfieldMan(this->pieceLength, totalLength);
|
createBitfieldMan(pieceLength, totalLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
Peer::Peer():entryId(0), ipaddr(""), port(0), bitfield(0),
|
|
||||||
sessionUploadLength(0), sessionDownloadLength(0),
|
|
||||||
pieceLength(0)
|
|
||||||
{
|
|
||||||
resetStatus();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void Peer::updateBitfield(int32_t index, int32_t operation) {
|
void Peer::updateBitfield(int32_t index, int32_t operation) {
|
||||||
if(operation == 1) {
|
if(operation == 1) {
|
||||||
bitfield->setBit(index);
|
bitfield->setBit(index);
|
||||||
|
|
|
@ -46,10 +46,11 @@
|
||||||
#define DEFAULT_LATENCY 1500
|
#define DEFAULT_LATENCY 1500
|
||||||
|
|
||||||
class Peer {
|
class Peer {
|
||||||
friend bool operator==(const Peer& p1, const Peer& p2);
|
|
||||||
friend bool operator!=(const Peer& p1, const Peer& p2);
|
|
||||||
public:
|
public:
|
||||||
string ipaddr;
|
string ipaddr;
|
||||||
|
// TCP port which this peer is listening for incoming connections.
|
||||||
|
// If it is unknown, for example, localhost accepted the incoming connection
|
||||||
|
// from this peer, set port to 0.
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
bool amChoking;
|
bool amChoking;
|
||||||
bool amInterested;
|
bool amInterested;
|
||||||
|
@ -73,7 +74,6 @@ private:
|
||||||
PeerStat peerStat;
|
PeerStat peerStat;
|
||||||
int64_t sessionUploadLength;
|
int64_t sessionUploadLength;
|
||||||
int64_t sessionDownloadLength;
|
int64_t sessionDownloadLength;
|
||||||
int32_t pieceLength;
|
|
||||||
int32_t latency;
|
int32_t latency;
|
||||||
bool active;
|
bool active;
|
||||||
string id;
|
string id;
|
||||||
|
@ -88,8 +88,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const Peer& p) {
|
bool operator==(const Peer& p) {
|
||||||
//return ipaddr == p.ipaddr && port == p.port;
|
return id == p.id || ipaddr == p.ipaddr && port == p.port;
|
||||||
return id == p.id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const Peer& p) {
|
bool operator!=(const Peer& p) {
|
||||||
|
|
|
@ -93,12 +93,12 @@ bool PeerListenCommand::execute() {
|
||||||
if(peerInfo.first == localInfo.first) {
|
if(peerInfo.first == localInfo.first) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
PeerHandle peer = new Peer(peerInfo.first, peerInfo.second, 0, 0);
|
PeerHandle peer = new Peer(peerInfo.first, 0, 0, 0);
|
||||||
PeerReceiveHandshakeCommand* command =
|
PeerReceiveHandshakeCommand* command =
|
||||||
new PeerReceiveHandshakeCommand(CUIDCounterSingletonHolder::instance()->newID(),
|
new PeerReceiveHandshakeCommand(CUIDCounterSingletonHolder::instance()->newID(),
|
||||||
peer, e, peerSocket);
|
peer, e, peerSocket);
|
||||||
e->commands.push_back(command);
|
e->commands.push_back(command);
|
||||||
logger->debug("Accepted the connection from %s:%d.",
|
logger->debug("Accepted the connection from %s:%u.",
|
||||||
peer->ipaddr.c_str(),
|
peer->ipaddr.c_str(),
|
||||||
peer->port);
|
peer->port);
|
||||||
logger->debug("Added CUID#%d to receive Bt handshake.",
|
logger->debug("Added CUID#%d to receive Bt handshake.",
|
||||||
|
|
|
@ -49,12 +49,6 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual bool addPeer(const PeerHandle& peer) = 0;
|
virtual bool addPeer(const PeerHandle& peer) = 0;
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds new incoming peer to the internal peer list.
|
|
||||||
* If the peer is added successfully, returns true. Otherwise returns false.
|
|
||||||
*/
|
|
||||||
virtual bool addIncomingPeer(const PeerHandle& peer) = 0;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds all peers in peers to internal peer list.
|
* Adds all peers in peers to internal peer list.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -12,12 +12,10 @@ class DefaultPeerStorageTest:public CppUnit::TestFixture {
|
||||||
CPPUNIT_TEST(testCountPeer);
|
CPPUNIT_TEST(testCountPeer);
|
||||||
CPPUNIT_TEST(testDeleteUnusedPeer);
|
CPPUNIT_TEST(testDeleteUnusedPeer);
|
||||||
CPPUNIT_TEST(testAddPeer);
|
CPPUNIT_TEST(testAddPeer);
|
||||||
CPPUNIT_TEST(testAddPeer_incomingPeer);
|
|
||||||
CPPUNIT_TEST(testGetPeer);
|
CPPUNIT_TEST(testGetPeer);
|
||||||
CPPUNIT_TEST(testIsPeerAvailable);
|
CPPUNIT_TEST(testIsPeerAvailable);
|
||||||
CPPUNIT_TEST(testActivatePeer);
|
CPPUNIT_TEST(testActivatePeer);
|
||||||
CPPUNIT_TEST(testCalculateStat);
|
CPPUNIT_TEST(testCalculateStat);
|
||||||
CPPUNIT_TEST(testAddIncomingPeer);
|
|
||||||
CPPUNIT_TEST(testReturnPeer);
|
CPPUNIT_TEST(testReturnPeer);
|
||||||
CPPUNIT_TEST(testOnErasingPeer);
|
CPPUNIT_TEST(testOnErasingPeer);
|
||||||
CPPUNIT_TEST(testReturnPeer);
|
CPPUNIT_TEST(testReturnPeer);
|
||||||
|
@ -39,12 +37,10 @@ public:
|
||||||
void testCountPeer();
|
void testCountPeer();
|
||||||
void testDeleteUnusedPeer();
|
void testDeleteUnusedPeer();
|
||||||
void testAddPeer();
|
void testAddPeer();
|
||||||
void testAddPeer_incomingPeer();
|
|
||||||
void testGetPeer();
|
void testGetPeer();
|
||||||
void testIsPeerAvailable();
|
void testIsPeerAvailable();
|
||||||
void testActivatePeer();
|
void testActivatePeer();
|
||||||
void testCalculateStat();
|
void testCalculateStat();
|
||||||
void testAddIncomingPeer();
|
|
||||||
void testReturnPeer();
|
void testReturnPeer();
|
||||||
void testOnErasingPeer();
|
void testOnErasingPeer();
|
||||||
};
|
};
|
||||||
|
@ -99,22 +95,6 @@ void DefaultPeerStorageTest::testDeleteUnusedPeer() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultPeerStorageTest::testAddPeer_incomingPeer()
|
|
||||||
{
|
|
||||||
DefaultPeerStorage ps(btContext, option);
|
|
||||||
|
|
||||||
PeerHandle peer1 = new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
|
|
||||||
btContext->getTotalLength());
|
|
||||||
PeerHandle peer2 = new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
|
|
||||||
btContext->getTotalLength());
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT(ps.addIncomingPeer(peer1));
|
|
||||||
CPPUNIT_ASSERT(ps.addPeer(peer1));// because same instance is stored in incomingPeers and peers.
|
|
||||||
CPPUNIT_ASSERT(!ps.addPeer(peer2));
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void DefaultPeerStorageTest::testAddPeer() {
|
void DefaultPeerStorageTest::testAddPeer() {
|
||||||
DefaultPeerStorage ps(btContext, option);
|
DefaultPeerStorage ps(btContext, option);
|
||||||
|
|
||||||
|
@ -145,22 +125,12 @@ void DefaultPeerStorageTest::testAddPeer() {
|
||||||
// peer1 was deleted.
|
// peer1 was deleted.
|
||||||
CPPUNIT_ASSERT_EQUAL((int32_t)3, ps.countPeer());
|
CPPUNIT_ASSERT_EQUAL((int32_t)3, ps.countPeer());
|
||||||
|
|
||||||
peer4->startBadCondition();
|
PeerHandle peer5(new Peer("192.168.0.4", 0, btContext->getPieceLength(),
|
||||||
|
|
||||||
PeerHandle peer5(new Peer("192.168.0.4", 6889, btContext->getPieceLength(),
|
|
||||||
btContext->getTotalLength()));
|
btContext->getTotalLength()));
|
||||||
|
peer5->port = 6889;
|
||||||
|
|
||||||
// this returns false, because peer4 in the container has error.
|
// this returns false because the peer which has same ip and port has already added
|
||||||
CPPUNIT_ASSERT_EQUAL(false, ps.addPeer(peer5));
|
CPPUNIT_ASSERT_EQUAL(false, ps.addPeer(peer5));
|
||||||
|
|
||||||
peer3->cuid = 1;
|
|
||||||
|
|
||||||
PeerHandle peer6(new Peer("192.168.0.3", 6889, btContext->getPieceLength(),
|
|
||||||
btContext->getTotalLength()));
|
|
||||||
|
|
||||||
// this is false, because peer3's cuid is not zero
|
|
||||||
CPPUNIT_ASSERT_EQUAL(false, ps.addPeer(peer6));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultPeerStorageTest::testGetPeer() {
|
void DefaultPeerStorageTest::testGetPeer() {
|
||||||
|
@ -231,18 +201,6 @@ void DefaultPeerStorageTest::testActivatePeer() {
|
||||||
void DefaultPeerStorageTest::testCalculateStat() {
|
void DefaultPeerStorageTest::testCalculateStat() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DefaultPeerStorageTest::testAddIncomingPeer()
|
|
||||||
{
|
|
||||||
DefaultPeerStorage ps(btContext, option);
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT(ps.addIncomingPeer(new Peer("192.168.0.1", 6889,
|
|
||||||
btContext->getPieceLength(),
|
|
||||||
btContext->getTotalLength())));
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)1, ps.getIncomingPeers().size());
|
|
||||||
}
|
|
||||||
|
|
||||||
void DefaultPeerStorageTest::testReturnPeer()
|
void DefaultPeerStorageTest::testReturnPeer()
|
||||||
{
|
{
|
||||||
DefaultPeerStorage ps(btContext, option);
|
DefaultPeerStorage ps(btContext, option);
|
||||||
|
@ -254,20 +212,18 @@ void DefaultPeerStorageTest::testReturnPeer()
|
||||||
ps.addPeer(peer1);
|
ps.addPeer(peer1);
|
||||||
ps.addPeer(peer2);
|
ps.addPeer(peer2);
|
||||||
|
|
||||||
PeerHandle peer3(new Peer("192.168.0.3", 6889, btContext->getPieceLength(),
|
PeerHandle peer3(new Peer("192.168.0.3", 0, btContext->getPieceLength(),
|
||||||
btContext->getTotalLength()));
|
btContext->getTotalLength()));
|
||||||
|
ps.addPeer(peer3);
|
||||||
|
|
||||||
ps.addIncomingPeer(peer3);
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"),
|
|
||||||
ps.getPeers().front()->ipaddr);
|
|
||||||
ps.returnPeer(peer2);
|
ps.returnPeer(peer2);
|
||||||
CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"),
|
// peer2 is moved to the end of container
|
||||||
ps.getPeers().front()->ipaddr);
|
CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"),
|
||||||
|
ps.getPeers().back()->ipaddr);
|
||||||
ps.returnPeer(peer3);
|
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)0, ps.getIncomingPeers().size());
|
|
||||||
|
|
||||||
|
ps.returnPeer(peer3); // peer3 is removed from the container
|
||||||
|
CPPUNIT_ASSERT_EQUAL((size_t)2, ps.getPeers().size());
|
||||||
|
CPPUNIT_ASSERT(find(ps.getPeers().begin(), ps.getPeers().end(), peer3) == ps.getPeers().end());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultPeerStorageTest::testOnErasingPeer()
|
void DefaultPeerStorageTest::testOnErasingPeer()
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
#include "HandshakeExtensionMessage.h"
|
#include "HandshakeExtensionMessage.h"
|
||||||
#include "Peer.h"
|
#include "Peer.h"
|
||||||
#include "MockBtContext.h"
|
#include "MockBtContext.h"
|
||||||
#include "MockPeerStorage.h"
|
#include "Exception.h"
|
||||||
#include "BtRegistry.h"
|
|
||||||
#include <cppunit/extensions/HelperMacros.h>
|
#include <cppunit/extensions/HelperMacros.h>
|
||||||
|
|
||||||
class HandshakeExtensionMessageTest:public CppUnit::TestFixture {
|
class HandshakeExtensionMessageTest:public CppUnit::TestFixture {
|
||||||
|
@ -21,23 +20,9 @@ private:
|
||||||
public:
|
public:
|
||||||
HandshakeExtensionMessageTest():_btContext(0) {}
|
HandshakeExtensionMessageTest():_btContext(0) {}
|
||||||
|
|
||||||
void setUp()
|
void setUp() {}
|
||||||
{
|
|
||||||
BtRegistry::unregisterAll();
|
|
||||||
MockBtContextHandle btContext = new MockBtContext();
|
|
||||||
unsigned char infohash[20];
|
|
||||||
memset(infohash, 0, sizeof(infohash));
|
|
||||||
btContext->setInfoHash(infohash);
|
|
||||||
_btContext = btContext;
|
|
||||||
MockPeerStorageHandle peerStorage = new MockPeerStorage();
|
|
||||||
BtRegistry::registerPeerStorage(_btContext->getInfoHashAsString(),
|
|
||||||
peerStorage);
|
|
||||||
}
|
|
||||||
|
|
||||||
void tearDown()
|
void tearDown() {}
|
||||||
{
|
|
||||||
BtRegistry::unregisterAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
void testGetExtensionMessageID();
|
void testGetExtensionMessageID();
|
||||||
void testGetExtensionName();
|
void testGetExtensionName();
|
||||||
|
@ -99,11 +84,6 @@ void HandshakeExtensionMessageTest::testDoReceivedAction()
|
||||||
CPPUNIT_ASSERT_EQUAL((uint16_t)6889, peer->port);
|
CPPUNIT_ASSERT_EQUAL((uint16_t)6889, peer->port);
|
||||||
CPPUNIT_ASSERT_EQUAL((uint8_t)1, peer->getExtensionMessageID("ut_pex"));
|
CPPUNIT_ASSERT_EQUAL((uint8_t)1, peer->getExtensionMessageID("ut_pex"));
|
||||||
CPPUNIT_ASSERT_EQUAL((uint8_t)2, peer->getExtensionMessageID("a2_dht"));
|
CPPUNIT_ASSERT_EQUAL((uint8_t)2, peer->getExtensionMessageID("a2_dht"));
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)1, PEER_STORAGE(_btContext)->getPeers().size());
|
|
||||||
PeerHandle p1 = PEER_STORAGE(_btContext)->getPeers().front();
|
|
||||||
CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"), p1->ipaddr);
|
|
||||||
CPPUNIT_ASSERT_EQUAL((uint16_t)6889, p1->port);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandshakeExtensionMessageTest::testCreate()
|
void HandshakeExtensionMessageTest::testCreate()
|
||||||
|
|
|
@ -21,11 +21,6 @@ public:
|
||||||
copy(peers.begin(), peers.end(), back_inserter(this->peers));
|
copy(peers.begin(), peers.end(), back_inserter(this->peers));
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool addIncomingPeer(const PeerHandle& peer)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual const Peers& getPeers() {
|
virtual const Peers& getPeers() {
|
||||||
return peers;
|
return peers;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue