mirror of https://github.com/aria2/aria2
2008-02-10 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Extract the Peer class's member variables, which are only needed after PeerInteractionCommand, into PeerSessionResource class. This class is instantiated in PeerInteractionCommand class's ctor and released in its dtor. This will make Peer class lightweight and uses less memory for peers which are not connected and wait in the queue. * src/PeerChokeCommand.cc * src/PeerSessionResource.{h, cc} * src/PeerInteractionCommand.cc * src/PeerAbstractCommand.cc: Note: 0 is given to onAbort() function. * src/DefaultBtInteractive.cc * src/BtPieceMessage.cc * src/BtInterestedMessage.cc * src/BtUnchokeMessage.cc * src/DefaultPeerStorage.{h, cc} * src/PeerInitiateConnectionCommand.cc * src/ActivePeerConnectionCommand.cc * src/BtNotInterestedMessage.cc * src/DefaultBtMessageDispatcher.cc * src/BtChokeMessage.cc * src/BtRequestMessage.cc * src/Peer.{h, cc} * src/BtRegistry.h * src/TrackerWatcherCommand.cc * src/PeerReceiveHandshakeCommand.cc * test/BtExtendedMessageTest.cc * test/BtAllowedFastMessageTest.cc * test/BtCancelMessageTest.cc * test/DefaultPieceStorageTest.cc * test/BtBitfieldMessageTest.cc * test/BtHaveMessageTest.cc * test/BtNotInterestedMessageTest.cc * test/BtRequestMessageTest.cc * test/PeerSessionResourceTest.cc * test/DefaultBtMessageDispatcherTest.cc * test/PeerTest.cc * test/BtInterestedMessageTest.cc * test/BtRejectMessageTest.cc * test/BtChokeMessageTest.cc * test/DefaultPeerStorageTest.cc * test/BtHaveNoneMessageTest.cc * test/BtHaveAllMessageTest.cc * test/DefaultExtensionMessageFactoryTest.cc * test/BtUnchokeMessageTest.cc * test/DefaultBtMessageFactoryTest.cc * test/HandshakeExtensionMessageTest.cc * test/UTPexExtensionMessageTest.cc * test/DefaultBtRequestFactoryTest.cc * test/BtPieceMessageTest.cc Removed typedef PeerStats. * src/PeerStat.h * src/SegmentMan.ccpull/1/head
parent
04a7052013
commit
c064a2cd9e
56
ChangeLog
56
ChangeLog
|
@ -1,3 +1,59 @@
|
|||
2008-02-10 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||
|
||||
Extract the Peer class's member variables, which are only needed after
|
||||
PeerInteractionCommand, into PeerSessionResource class.
|
||||
This class is instantiated in PeerInteractionCommand class's ctor and
|
||||
released in its dtor.
|
||||
This will make Peer class lightweight and uses less memory for peers
|
||||
which are not connected and wait in the queue.
|
||||
* src/PeerChokeCommand.cc
|
||||
* src/PeerSessionResource.{h, cc}
|
||||
* src/PeerInteractionCommand.cc
|
||||
* src/PeerAbstractCommand.cc: Note: 0 is given to onAbort() function.
|
||||
* src/DefaultBtInteractive.cc
|
||||
* src/BtPieceMessage.cc
|
||||
* src/BtInterestedMessage.cc
|
||||
* src/BtUnchokeMessage.cc
|
||||
* src/DefaultPeerStorage.{h, cc}
|
||||
* src/PeerInitiateConnectionCommand.cc
|
||||
* src/ActivePeerConnectionCommand.cc
|
||||
* src/BtNotInterestedMessage.cc
|
||||
* src/DefaultBtMessageDispatcher.cc
|
||||
* src/BtChokeMessage.cc
|
||||
* src/BtRequestMessage.cc
|
||||
* src/Peer.{h, cc}
|
||||
* src/BtRegistry.h
|
||||
* src/TrackerWatcherCommand.cc
|
||||
* src/PeerReceiveHandshakeCommand.cc
|
||||
* test/BtExtendedMessageTest.cc
|
||||
* test/BtAllowedFastMessageTest.cc
|
||||
* test/BtCancelMessageTest.cc
|
||||
* test/DefaultPieceStorageTest.cc
|
||||
* test/BtBitfieldMessageTest.cc
|
||||
* test/BtHaveMessageTest.cc
|
||||
* test/BtNotInterestedMessageTest.cc
|
||||
* test/BtRequestMessageTest.cc
|
||||
* test/PeerSessionResourceTest.cc
|
||||
* test/DefaultBtMessageDispatcherTest.cc
|
||||
* test/PeerTest.cc
|
||||
* test/BtInterestedMessageTest.cc
|
||||
* test/BtRejectMessageTest.cc
|
||||
* test/BtChokeMessageTest.cc
|
||||
* test/DefaultPeerStorageTest.cc
|
||||
* test/BtHaveNoneMessageTest.cc
|
||||
* test/BtHaveAllMessageTest.cc
|
||||
* test/DefaultExtensionMessageFactoryTest.cc
|
||||
* test/BtUnchokeMessageTest.cc
|
||||
* test/DefaultBtMessageFactoryTest.cc
|
||||
* test/HandshakeExtensionMessageTest.cc
|
||||
* test/UTPexExtensionMessageTest.cc
|
||||
* test/DefaultBtRequestFactoryTest.cc
|
||||
* test/BtPieceMessageTest.cc
|
||||
|
||||
Removed typedef PeerStats.
|
||||
* src/PeerStat.h
|
||||
* src/SegmentMan.cc
|
||||
|
||||
2008-02-09 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||
|
||||
Added std namespace to copy, remove_copy, back_inserter,
|
||||
|
|
|
@ -87,9 +87,9 @@ void ActivePeerConnectionCommand::connectToPeer(const PeerHandle& peer)
|
|||
if(peer.isNull()) {
|
||||
return;
|
||||
}
|
||||
peer->cuid = CUIDCounterSingletonHolder::instance()->newID();
|
||||
peer->usedBy(CUIDCounterSingletonHolder::instance()->newID());
|
||||
PeerInitiateConnectionCommand* command =
|
||||
new PeerInitiateConnectionCommand(peer->cuid, _requestGroup, peer, e, btContext);
|
||||
new PeerInitiateConnectionCommand(peer->usedBy(), _requestGroup, peer, e, btContext);
|
||||
e->commands.push_back(command);
|
||||
logger->info(MSG_CONNECTING_TO_PEER,
|
||||
cuid, peer->ipaddr.c_str());
|
||||
|
|
|
@ -55,13 +55,13 @@ BtChokeMessageHandle BtChokeMessage::create(const unsigned char* data, int32_t d
|
|||
}
|
||||
|
||||
void BtChokeMessage::doReceivedAction() {
|
||||
peer->peerChoking = true;
|
||||
peer->peerChoking(true);
|
||||
dispatcher->doChokedAction();
|
||||
requestFactory->doChokedAction();
|
||||
}
|
||||
|
||||
bool BtChokeMessage::sendPredicate() const {
|
||||
return !peer->amChoking;
|
||||
return !peer->amChoking();
|
||||
}
|
||||
|
||||
int32_t BtChokeMessage::MESSAGE_LENGTH = 5;
|
||||
|
@ -84,7 +84,7 @@ int32_t BtChokeMessage::getMessageLength() {
|
|||
}
|
||||
|
||||
void BtChokeMessage::onSendComplete() {
|
||||
peer->amChoking = true;
|
||||
peer->amChoking(true);
|
||||
dispatcher->doChokingAction();
|
||||
}
|
||||
|
||||
|
|
|
@ -53,11 +53,11 @@ BtInterestedMessageHandle BtInterestedMessage::create(const unsigned char* data,
|
|||
}
|
||||
|
||||
void BtInterestedMessage::doReceivedAction() {
|
||||
peer->peerInterested = true;
|
||||
peer->peerInterested(true);
|
||||
}
|
||||
|
||||
bool BtInterestedMessage::sendPredicate() const {
|
||||
return !peer->amInterested;
|
||||
return !peer->amInterested();
|
||||
}
|
||||
|
||||
int32_t BtInterestedMessage::MESSAGE_LENGTH = 5;
|
||||
|
@ -80,7 +80,7 @@ int32_t BtInterestedMessage::getMessageLength() {
|
|||
}
|
||||
|
||||
void BtInterestedMessage::onSendComplete() {
|
||||
peer->amInterested = true;
|
||||
peer->amInterested(true);
|
||||
}
|
||||
|
||||
std::string BtInterestedMessage::toString() const {
|
||||
|
|
|
@ -53,11 +53,11 @@ BtNotInterestedMessageHandle BtNotInterestedMessage::create(const unsigned char*
|
|||
}
|
||||
|
||||
void BtNotInterestedMessage::doReceivedAction() {
|
||||
peer->peerInterested = false;
|
||||
peer->peerInterested(false);
|
||||
}
|
||||
|
||||
bool BtNotInterestedMessage::sendPredicate() const {
|
||||
return peer->amInterested;
|
||||
return peer->amInterested();
|
||||
}
|
||||
|
||||
int32_t BtNotInterestedMessage::MESSAGE_LENGTH = 5;
|
||||
|
@ -80,7 +80,7 @@ int32_t BtNotInterestedMessage::getMessageLength() {
|
|||
}
|
||||
|
||||
void BtNotInterestedMessage::onSendComplete() {
|
||||
peer->amInterested = false;
|
||||
peer->amInterested(false);
|
||||
}
|
||||
|
||||
std::string BtNotInterestedMessage::toString() const {
|
||||
|
|
|
@ -82,7 +82,7 @@ void BtPieceMessage::doReceivedAction() {
|
|||
blockLength);
|
||||
peer->updateDownloadLength(blockLength);
|
||||
if(!RequestSlot::isNull(slot)) {
|
||||
peer->snubbing = false;
|
||||
peer->snubbing(false);
|
||||
peer->updateLatency(slot.getLatencyInMillis());
|
||||
PieceHandle piece = pieceStorage->getPiece(index);
|
||||
int64_t offset =
|
||||
|
|
|
@ -134,7 +134,7 @@ BtRegistry::getBtProgressInfoFile(btContext->getInfoHashAsString())
|
|||
BtRegistry::getPeerObjectCluster(btContext->getInfoHashAsString())
|
||||
|
||||
#define PEER_OBJECT(btContext, peer) \
|
||||
PEER_OBJECT_CLUSTER(btContext)->getHandle(peer->getId())
|
||||
PEER_OBJECT_CLUSTER(btContext)->getHandle(peer->getID())
|
||||
|
||||
#define BT_MESSAGE_DISPATCHER(btContext, peer) \
|
||||
PEER_OBJECT(btContext, peer)->btMessageDispatcher
|
||||
|
|
|
@ -64,8 +64,8 @@ BtRequestMessageHandle BtRequestMessage::create(const unsigned char* data, int32
|
|||
|
||||
void BtRequestMessage::doReceivedAction() {
|
||||
if(pieceStorage->hasPiece(index) &&
|
||||
(!peer->amChoking ||
|
||||
peer->amChoking && peer->isInAmAllowedIndexSet(index))) {
|
||||
(!peer->amChoking() ||
|
||||
peer->amChoking() && peer->isInAmAllowedIndexSet(index))) {
|
||||
BtMessageHandle msg = messageFactory->createPieceMessage(index,
|
||||
begin,
|
||||
length);
|
||||
|
|
|
@ -53,11 +53,11 @@ BtUnchokeMessageHandle BtUnchokeMessage::create(const unsigned char* data, int32
|
|||
}
|
||||
|
||||
void BtUnchokeMessage::doReceivedAction() {
|
||||
peer->peerChoking = false;
|
||||
peer->peerChoking(false);
|
||||
}
|
||||
|
||||
bool BtUnchokeMessage::sendPredicate() const {
|
||||
return peer->amChoking;
|
||||
return peer->amChoking();
|
||||
}
|
||||
|
||||
int32_t BtUnchokeMessage::MESSAGE_LENGTH = 5;
|
||||
|
@ -80,7 +80,7 @@ int32_t BtUnchokeMessage::getMessageLength() {
|
|||
}
|
||||
|
||||
void BtUnchokeMessage::onSendComplete() {
|
||||
peer->amChoking = false;
|
||||
peer->amChoking(false);
|
||||
}
|
||||
|
||||
std::string BtUnchokeMessage::toString() const {
|
||||
|
|
|
@ -188,11 +188,11 @@ void DefaultBtInteractive::addAllowedFastMessageToQueue() {
|
|||
|
||||
void DefaultBtInteractive::decideChoking() {
|
||||
if(peer->shouldBeChoking()) {
|
||||
if(!peer->amChoking) {
|
||||
if(!peer->amChoking()) {
|
||||
dispatcher->addMessageToQueue(messageFactory->createChokeMessage());
|
||||
}
|
||||
} else {
|
||||
if(peer->amChoking) {
|
||||
if(peer->amChoking()) {
|
||||
dispatcher->addMessageToQueue(messageFactory->createUnchokeMessage());
|
||||
}
|
||||
}
|
||||
|
@ -247,12 +247,12 @@ size_t DefaultBtInteractive::receiveMessages() {
|
|||
floodingStat.incKeepAliveCount();
|
||||
break;
|
||||
case BtChokeMessage::ID:
|
||||
if(!peer->peerChoking) {
|
||||
if(!peer->peerChoking()) {
|
||||
floodingStat.incChokeUnchokeCount();
|
||||
}
|
||||
break;
|
||||
case BtUnchokeMessage::ID:
|
||||
if(peer->peerChoking) {
|
||||
if(peer->peerChoking()) {
|
||||
floodingStat.incChokeUnchokeCount();
|
||||
}
|
||||
break;
|
||||
|
@ -267,13 +267,13 @@ size_t DefaultBtInteractive::receiveMessages() {
|
|||
|
||||
void DefaultBtInteractive::decideInterest() {
|
||||
if(pieceStorage->hasMissingPiece(peer)) {
|
||||
if(!peer->amInterested) {
|
||||
if(!peer->amInterested()) {
|
||||
logger->debug(MSG_PEER_INTERESTED, cuid);
|
||||
dispatcher->
|
||||
addMessageToQueue(messageFactory->createInterestedMessage());
|
||||
}
|
||||
} else {
|
||||
if(peer->amInterested) {
|
||||
if(peer->amInterested()) {
|
||||
logger->debug(MSG_PEER_NOT_INTERESTED, cuid);
|
||||
dispatcher->
|
||||
addMessageToQueue(messageFactory->createNotInterestedMessage());
|
||||
|
@ -283,7 +283,7 @@ void DefaultBtInteractive::decideInterest() {
|
|||
|
||||
void DefaultBtInteractive::fillPiece(int maxPieceNum) {
|
||||
if(pieceStorage->hasMissingPiece(peer)) {
|
||||
if(peer->peerChoking) {
|
||||
if(peer->peerChoking()) {
|
||||
if(peer->isFastExtensionEnabled()) {
|
||||
while(btRequestFactory->countTargetPiece() < maxPieceNum) {
|
||||
PieceHandle piece = pieceStorage->getMissingFastPiece(peer);
|
||||
|
|
|
@ -197,7 +197,7 @@ void DefaultBtMessageDispatcher::checkRequestSlotAndDoNecessaryThing()
|
|||
cuid,
|
||||
slot.getBlockIndex());
|
||||
piece->cancelBlock(slot.getBlockIndex());
|
||||
peer->snubbing = true;
|
||||
peer->snubbing(true);
|
||||
itr = requestSlots.erase(itr);
|
||||
} else if(piece->hasBlock(slot.getBlockIndex())) {
|
||||
logger->debug(MSG_DELETING_REQUEST_SLOT_ACQUIRED,
|
||||
|
|
|
@ -106,7 +106,7 @@ const Peers& DefaultPeerStorage::getPeers() {
|
|||
class FindFinePeer {
|
||||
public:
|
||||
bool operator()(const PeerHandle& peer) const {
|
||||
return peer->cuid == 0 && peer->isGood();
|
||||
return peer->unused() && peer->isGood();
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -184,9 +184,9 @@ public:
|
|||
if(peer->isActive()) {
|
||||
_stat.downloadSpeed += peer->calculateDownloadSpeed(_now);
|
||||
_stat.uploadSpeed += peer->calculateUploadSpeed(_now);
|
||||
_stat.sessionDownloadLength += peer->getSessionDownloadLength();
|
||||
_stat.sessionUploadLength += peer->getSessionUploadLength();
|
||||
}
|
||||
_stat.sessionDownloadLength += peer->getSessionDownloadLength();
|
||||
_stat.sessionUploadLength += peer->getSessionUploadLength();
|
||||
}
|
||||
|
||||
const TransferStat& getTransferStat() { return _stat; }
|
||||
|
@ -206,7 +206,7 @@ void DefaultPeerStorage::deleteUnusedPeer(int32_t delSize) {
|
|||
for(Peers::reverse_iterator itr = peers.rbegin();
|
||||
itr != peers.rend(); ++itr) {
|
||||
const PeerHandle& p = *itr;
|
||||
if(p->cuid == 0 && delSize > 0) {
|
||||
if(p->unused() && delSize > 0) {
|
||||
// Update removedPeerSession******Length
|
||||
onErasingPeer(p);
|
||||
delSize--;
|
||||
|
@ -217,10 +217,14 @@ void DefaultPeerStorage::deleteUnusedPeer(int32_t delSize) {
|
|||
peers = temp;
|
||||
}
|
||||
|
||||
void DefaultPeerStorage::onErasingPeer(const PeerHandle& peer)
|
||||
void DefaultPeerStorage::onErasingPeer(const SharedHandle<Peer>& peer) {}
|
||||
|
||||
void DefaultPeerStorage::onReturningPeer(const SharedHandle<Peer>& peer)
|
||||
{
|
||||
removedPeerSessionDownloadLength += peer->getSessionDownloadLength();
|
||||
removedPeerSessionUploadLength += peer->getSessionUploadLength();
|
||||
if(peer->isActive()) {
|
||||
removedPeerSessionDownloadLength += peer->getSessionDownloadLength();
|
||||
removedPeerSessionUploadLength += peer->getSessionUploadLength();
|
||||
}
|
||||
}
|
||||
|
||||
void DefaultPeerStorage::returnPeer(const PeerHandle& peer)
|
||||
|
@ -229,6 +233,7 @@ void DefaultPeerStorage::returnPeer(const PeerHandle& peer)
|
|||
if(itr == peers.end()) {
|
||||
logger->debug("Cannot find peer %s:%u in PeerStorage.", peer->ipaddr.c_str(), peer->port);
|
||||
} else {
|
||||
onReturningPeer(peer);
|
||||
if((*itr)->port == 0) {
|
||||
onErasingPeer(*itr);
|
||||
peers.erase(itr);
|
||||
|
|
|
@ -98,6 +98,9 @@ public:
|
|||
void deleteUnusedPeer(int32_t delSize);
|
||||
|
||||
void onErasingPeer(const SharedHandle<Peer>& peer);
|
||||
|
||||
void onReturningPeer(const SharedHandle<Peer>& peer);
|
||||
|
||||
};
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -143,7 +143,8 @@ SRCS = Socket.h\
|
|||
CopyDiskAdaptor.cc CopyDiskAdaptor.h\
|
||||
DirectDiskAdaptor.cc DirectDiskAdaptor.h\
|
||||
MultiDiskAdaptor.cc MultiDiskAdaptor.h\
|
||||
Peer.cc Peer.h\
|
||||
Peer.cc\
|
||||
PeerSessionResource.cc\
|
||||
BtRegistry.cc BtRegistry.h\
|
||||
MultiFileAllocationIterator.cc MultiFileAllocationIterator.h\
|
||||
PeerConnection.cc PeerConnection.h\
|
||||
|
|
|
@ -349,13 +349,13 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
|
|||
DiskAdaptor.cc DiskAdaptor.h AbstractSingleDiskAdaptor.cc \
|
||||
AbstractSingleDiskAdaptor.h CopyDiskAdaptor.cc \
|
||||
CopyDiskAdaptor.h DirectDiskAdaptor.cc DirectDiskAdaptor.h \
|
||||
MultiDiskAdaptor.cc MultiDiskAdaptor.h Peer.cc Peer.h \
|
||||
BtRegistry.cc BtRegistry.h MultiFileAllocationIterator.cc \
|
||||
MultiFileAllocationIterator.h PeerConnection.cc \
|
||||
PeerConnection.h ByteArrayDiskWriter.cc ByteArrayDiskWriter.h \
|
||||
ByteArrayDiskWriterFactory.cc ServerHost.cc HelpItem.cc \
|
||||
TaggedItem.cc TagContainer.cc HelpItemFactory.cc \
|
||||
SingleFileDownloadContext.cc \
|
||||
MultiDiskAdaptor.cc MultiDiskAdaptor.h Peer.cc \
|
||||
PeerSessionResource.cc BtRegistry.cc BtRegistry.h \
|
||||
MultiFileAllocationIterator.cc MultiFileAllocationIterator.h \
|
||||
PeerConnection.cc PeerConnection.h ByteArrayDiskWriter.cc \
|
||||
ByteArrayDiskWriter.h ByteArrayDiskWriterFactory.cc \
|
||||
ServerHost.cc HelpItem.cc TaggedItem.cc TagContainer.cc \
|
||||
HelpItemFactory.cc SingleFileDownloadContext.cc \
|
||||
IteratableChunkChecksumValidator.cc \
|
||||
IteratableChunkChecksumValidator.h \
|
||||
IteratableChecksumValidator.cc IteratableChecksumValidator.h \
|
||||
|
@ -368,7 +368,7 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
|
|||
PeerMessageUtil.h PeerAbstractCommand.cc PeerAbstractCommand.h \
|
||||
PeerInitiateConnectionCommand.cc \
|
||||
PeerInitiateConnectionCommand.h PeerInteractionCommand.cc \
|
||||
PeerInteractionCommand.h PeerListenCommand.cc \
|
||||
PeerInteractionCommand.h Peer.h PeerListenCommand.cc \
|
||||
PeerListenCommand.h RequestSlot.cc RequestSlot.h \
|
||||
TrackerWatcherCommand.cc TrackerWatcherCommand.h \
|
||||
PeerChokeCommand.cc PeerChokeCommand.h SeedCriteria.h \
|
||||
|
@ -670,9 +670,9 @@ am__objects_14 = SocketCore.$(OBJEXT) Command.$(OBJEXT) \
|
|||
StreamCheckIntegrityEntry.$(OBJEXT) DiskAdaptor.$(OBJEXT) \
|
||||
AbstractSingleDiskAdaptor.$(OBJEXT) CopyDiskAdaptor.$(OBJEXT) \
|
||||
DirectDiskAdaptor.$(OBJEXT) MultiDiskAdaptor.$(OBJEXT) \
|
||||
Peer.$(OBJEXT) BtRegistry.$(OBJEXT) \
|
||||
MultiFileAllocationIterator.$(OBJEXT) PeerConnection.$(OBJEXT) \
|
||||
ByteArrayDiskWriter.$(OBJEXT) \
|
||||
Peer.$(OBJEXT) PeerSessionResource.$(OBJEXT) \
|
||||
BtRegistry.$(OBJEXT) MultiFileAllocationIterator.$(OBJEXT) \
|
||||
PeerConnection.$(OBJEXT) ByteArrayDiskWriter.$(OBJEXT) \
|
||||
ByteArrayDiskWriterFactory.$(OBJEXT) ServerHost.$(OBJEXT) \
|
||||
HelpItem.$(OBJEXT) TaggedItem.$(OBJEXT) TagContainer.$(OBJEXT) \
|
||||
HelpItemFactory.$(OBJEXT) SingleFileDownloadContext.$(OBJEXT) \
|
||||
|
@ -996,17 +996,18 @@ SRCS = Socket.h SocketCore.cc SocketCore.h Command.cc Command.h \
|
|||
DiskAdaptor.cc DiskAdaptor.h AbstractSingleDiskAdaptor.cc \
|
||||
AbstractSingleDiskAdaptor.h CopyDiskAdaptor.cc \
|
||||
CopyDiskAdaptor.h DirectDiskAdaptor.cc DirectDiskAdaptor.h \
|
||||
MultiDiskAdaptor.cc MultiDiskAdaptor.h Peer.cc Peer.h \
|
||||
BtRegistry.cc BtRegistry.h MultiFileAllocationIterator.cc \
|
||||
MultiFileAllocationIterator.h PeerConnection.cc \
|
||||
PeerConnection.h ByteArrayDiskWriter.cc ByteArrayDiskWriter.h \
|
||||
ByteArrayDiskWriterFactory.cc ServerHost.cc HelpItem.cc \
|
||||
TaggedItem.cc TagContainer.cc HelpItemFactory.cc \
|
||||
SingleFileDownloadContext.cc $(am__append_1) $(am__append_2) \
|
||||
$(am__append_3) $(am__append_4) $(am__append_5) \
|
||||
$(am__append_6) $(am__append_7) $(am__append_8) \
|
||||
$(am__append_9) $(am__append_10) $(am__append_11) \
|
||||
$(am__append_12) $(am__append_13)
|
||||
MultiDiskAdaptor.cc MultiDiskAdaptor.h Peer.cc \
|
||||
PeerSessionResource.cc BtRegistry.cc BtRegistry.h \
|
||||
MultiFileAllocationIterator.cc MultiFileAllocationIterator.h \
|
||||
PeerConnection.cc PeerConnection.h ByteArrayDiskWriter.cc \
|
||||
ByteArrayDiskWriter.h ByteArrayDiskWriterFactory.cc \
|
||||
ServerHost.cc HelpItem.cc TaggedItem.cc TagContainer.cc \
|
||||
HelpItemFactory.cc SingleFileDownloadContext.cc \
|
||||
$(am__append_1) $(am__append_2) $(am__append_3) \
|
||||
$(am__append_4) $(am__append_5) $(am__append_6) \
|
||||
$(am__append_7) $(am__append_8) $(am__append_9) \
|
||||
$(am__append_10) $(am__append_11) $(am__append_12) \
|
||||
$(am__append_13)
|
||||
noinst_LIBRARIES = libaria2c.a
|
||||
libaria2c_a_SOURCES = $(SRCS)
|
||||
aria2c_LDADD = libaria2c.a @LIBINTL@ @ALLOCA@ @LIBGNUTLS_LIBS@\
|
||||
|
@ -1306,6 +1307,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerListenCommand.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerMessageUtil.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerReceiveHandshakeCommand.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerSessionResource.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Piece.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PieceHashCheckIntegrityEntry.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PieceHashMetalinkParserState.Po@am__quote@
|
||||
|
|
388
src/Peer.cc
388
src/Peer.cc
|
@ -33,15 +33,13 @@
|
|||
*/
|
||||
/* copyright --> */
|
||||
#include "Peer.h"
|
||||
#include "BitfieldManFactory.h"
|
||||
#include "BitfieldMan.h"
|
||||
#include "Util.h"
|
||||
#include "PeerSessionResource.h"
|
||||
#ifdef ENABLE_MESSAGE_DIGEST
|
||||
# include "MessageDigestHelper.h"
|
||||
#endif // ENABLE_MESSAGE_DIGEST
|
||||
#include <cstring>
|
||||
#include <cassert>
|
||||
#include <algorithm>
|
||||
|
||||
namespace aria2 {
|
||||
|
||||
|
@ -50,12 +48,9 @@ namespace aria2 {
|
|||
Peer::Peer(std::string ipaddr, uint16_t port):
|
||||
ipaddr(ipaddr),
|
||||
port(port),
|
||||
_bitfield(0),
|
||||
sessionUploadLength(0),
|
||||
sessionDownloadLength(0),
|
||||
active(false),
|
||||
_badConditionStartTime(0),
|
||||
_seeder(false)
|
||||
_seeder(false),
|
||||
_res(0)
|
||||
{
|
||||
resetStatus();
|
||||
std::string idSeed = ipaddr+":"+Util::itos(port);
|
||||
|
@ -68,7 +63,7 @@ Peer::Peer(std::string ipaddr, uint16_t port):
|
|||
|
||||
Peer::~Peer()
|
||||
{
|
||||
delete _bitfield;
|
||||
releaseSessionResource();
|
||||
}
|
||||
|
||||
bool Peer::operator==(const Peer& p)
|
||||
|
@ -81,208 +76,303 @@ bool Peer::operator!=(const Peer& p)
|
|||
return !(*this == p);
|
||||
}
|
||||
|
||||
void Peer::allocateBitfield(int32_t pieceLength, int64_t totalLength)
|
||||
const std::string& Peer::getID() const
|
||||
{
|
||||
delete _bitfield;
|
||||
_bitfield = BitfieldManFactory::getFactoryInstance()->createBitfieldMan(pieceLength, totalLength);
|
||||
return id;
|
||||
}
|
||||
|
||||
void Peer::deallocateBitfield()
|
||||
void Peer::usedBy(int32_t cuid)
|
||||
{
|
||||
delete _bitfield;
|
||||
_bitfield = 0;
|
||||
_cuid = cuid;
|
||||
}
|
||||
|
||||
int32_t Peer::usedBy() const
|
||||
{
|
||||
return _cuid;
|
||||
}
|
||||
|
||||
bool Peer::unused() const
|
||||
{
|
||||
return _cuid == 0;
|
||||
}
|
||||
|
||||
void Peer::allocateSessionResource(int32_t pieceLength, int64_t totalLength)
|
||||
{
|
||||
delete _res;
|
||||
_res = new PeerSessionResource(pieceLength, totalLength);
|
||||
_res->getPeerStat().downloadStart();
|
||||
}
|
||||
|
||||
void Peer::releaseSessionResource()
|
||||
{
|
||||
delete _res;
|
||||
_res = 0;
|
||||
}
|
||||
|
||||
bool Peer::isActive() const
|
||||
{
|
||||
return _res != 0;
|
||||
}
|
||||
|
||||
void Peer::setPeerId(const unsigned char* peerId)
|
||||
{
|
||||
memcpy(_peerId, peerId, PEER_ID_LENGTH);
|
||||
}
|
||||
|
||||
const unsigned char* Peer::getPeerId() const
|
||||
{
|
||||
return _peerId;
|
||||
}
|
||||
|
||||
void Peer::resetStatus() {
|
||||
_cuid = 0;
|
||||
}
|
||||
|
||||
bool Peer::amChoking() const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->amChoking();
|
||||
}
|
||||
|
||||
void Peer::amChoking(bool b) const
|
||||
{
|
||||
assert(_res);
|
||||
_res->amChoking(b);
|
||||
}
|
||||
|
||||
// localhost is interested in this peer
|
||||
bool Peer::amInterested() const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->amInterested();
|
||||
}
|
||||
|
||||
void Peer::amInterested(bool b) const
|
||||
{
|
||||
assert(_res);
|
||||
_res->amInterested(b);
|
||||
}
|
||||
|
||||
// this peer is choking localhost
|
||||
bool Peer::peerChoking() const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->peerChoking();
|
||||
}
|
||||
|
||||
void Peer::peerChoking(bool b) const
|
||||
{
|
||||
assert(_res);
|
||||
_res->peerChoking(b);
|
||||
}
|
||||
|
||||
// this peer is interested in localhost
|
||||
bool Peer::peerInterested() const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->peerInterested();
|
||||
}
|
||||
|
||||
void Peer::peerInterested(bool b)
|
||||
{
|
||||
assert(_res);
|
||||
_res->peerInterested(b);
|
||||
}
|
||||
|
||||
// this peer should be choked
|
||||
bool Peer::chokingRequired() const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->chokingRequired();
|
||||
}
|
||||
|
||||
void Peer::chokingRequired(bool b)
|
||||
{
|
||||
assert(_res);
|
||||
_res->chokingRequired(b);
|
||||
}
|
||||
|
||||
// this peer is eligible for unchoking optionally.
|
||||
bool Peer::optUnchoking() const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->optUnchoking();
|
||||
}
|
||||
|
||||
void Peer::optUnchoking(bool b)
|
||||
{
|
||||
assert(_res);
|
||||
_res->optUnchoking(b);
|
||||
}
|
||||
|
||||
// this peer is snubbing.
|
||||
bool Peer::snubbing() const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->snubbing();
|
||||
}
|
||||
|
||||
void Peer::snubbing(bool b)
|
||||
{
|
||||
assert(_res);
|
||||
_res->snubbing(b);
|
||||
}
|
||||
|
||||
void Peer::updateUploadLength(int32_t bytes)
|
||||
{
|
||||
peerStat.updateUploadLength(bytes);
|
||||
sessionUploadLength += bytes;
|
||||
assert(_res);
|
||||
_res->updateUploadLength(bytes);
|
||||
}
|
||||
|
||||
void Peer::updateDownloadLength(int32_t bytes)
|
||||
{
|
||||
peerStat.updateDownloadLength(bytes);
|
||||
sessionDownloadLength += bytes;
|
||||
assert(_res);
|
||||
_res->updateDownloadLength(bytes);
|
||||
}
|
||||
|
||||
void Peer::updateSeeder()
|
||||
{
|
||||
assert(_bitfield);
|
||||
if(_bitfield->isAllBitSet()) {
|
||||
assert(_res);
|
||||
if(_res->hasAllPieces()) {
|
||||
_seeder = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Peer::updateBitfield(int32_t index, int32_t operation) {
|
||||
assert(_bitfield);
|
||||
if(operation == 1) {
|
||||
_bitfield->setBit(index);
|
||||
} else if(operation == 0) {
|
||||
_bitfield->unsetBit(index);
|
||||
}
|
||||
assert(_res);
|
||||
_res->updateBitfield(index, operation);
|
||||
updateSeeder();
|
||||
}
|
||||
|
||||
int32_t Peer::calculateUploadSpeed()
|
||||
{
|
||||
return peerStat.calculateUploadSpeed();
|
||||
assert(_res);
|
||||
return _res->getPeerStat().calculateUploadSpeed();
|
||||
}
|
||||
|
||||
int32_t Peer::calculateUploadSpeed(const struct timeval& now)
|
||||
{
|
||||
return peerStat.calculateUploadSpeed(now);
|
||||
assert(_res);
|
||||
return _res->getPeerStat().calculateUploadSpeed(now);
|
||||
}
|
||||
|
||||
int32_t Peer::calculateDownloadSpeed()
|
||||
{
|
||||
return peerStat.calculateDownloadSpeed();
|
||||
assert(_res);
|
||||
return _res->getPeerStat().calculateDownloadSpeed();
|
||||
}
|
||||
|
||||
int32_t Peer::calculateDownloadSpeed(const struct timeval& now)
|
||||
{
|
||||
return peerStat.calculateDownloadSpeed(now);
|
||||
assert(_res);
|
||||
return _res->getPeerStat().calculateDownloadSpeed(now);
|
||||
}
|
||||
|
||||
int64_t Peer::getSessionUploadLength() const
|
||||
{
|
||||
return sessionUploadLength;
|
||||
assert(_res);
|
||||
return _res->uploadLength();
|
||||
}
|
||||
|
||||
int64_t Peer::getSessionDownloadLength() const
|
||||
{
|
||||
return sessionDownloadLength;
|
||||
assert(_res);
|
||||
return _res->downloadLength();
|
||||
}
|
||||
|
||||
void Peer::activate()
|
||||
{
|
||||
peerStat.downloadStart();
|
||||
active = true;
|
||||
}
|
||||
|
||||
void Peer::deactivate()
|
||||
{
|
||||
peerStat.downloadStop();
|
||||
active = false;
|
||||
}
|
||||
|
||||
bool Peer::isActive() const
|
||||
{
|
||||
return active;
|
||||
}
|
||||
|
||||
void Peer::setPeerId(const unsigned char* peerId)
|
||||
{
|
||||
memcpy(this->peerId, peerId, PEER_ID_LENGTH);
|
||||
}
|
||||
|
||||
const unsigned char* Peer::getPeerId() const
|
||||
{
|
||||
return this->peerId;
|
||||
}
|
||||
|
||||
void Peer::setBitfield(const unsigned char* bitfield, int32_t bitfieldLength)
|
||||
{
|
||||
assert(_bitfield);
|
||||
_bitfield->setBitfield(bitfield, bitfieldLength);
|
||||
assert(_res);
|
||||
_res->setBitfield(bitfield, bitfieldLength);
|
||||
updateSeeder();
|
||||
}
|
||||
|
||||
const unsigned char* Peer::getBitfield() const
|
||||
{
|
||||
assert(_bitfield);
|
||||
return _bitfield->getBitfield();
|
||||
assert(_res);
|
||||
return _res->getBitfield();
|
||||
}
|
||||
|
||||
int32_t Peer::getBitfieldLength() const
|
||||
{
|
||||
assert(_bitfield);
|
||||
return _bitfield->getBitfieldLength();
|
||||
assert(_res);
|
||||
return _res->getBitfieldLength();
|
||||
}
|
||||
|
||||
#define THRESHOLD 1024*1024*2
|
||||
|
||||
bool Peer::shouldBeChoking() const {
|
||||
if(optUnchoking) {
|
||||
return false;
|
||||
}
|
||||
return chokingRequired;
|
||||
assert(_res);
|
||||
return _res->shouldBeChoking();
|
||||
}
|
||||
|
||||
bool Peer::hasPiece(int32_t index) const {
|
||||
assert(_bitfield);
|
||||
return _bitfield->isBitSet(index);
|
||||
}
|
||||
|
||||
void Peer::resetStatus() {
|
||||
tryCount = 0;
|
||||
cuid = 0;
|
||||
amChoking = true;
|
||||
amInterested = false;
|
||||
peerChoking = true;
|
||||
peerInterested = false;
|
||||
chokingRequired = true;
|
||||
optUnchoking = false;
|
||||
snubbing = false;
|
||||
fastExtensionEnabled = false;
|
||||
_extendedMessagingEnabled = false;
|
||||
_extensions.clear();
|
||||
_dhtEnabled = false;
|
||||
latency = DEFAULT_LATENCY;
|
||||
peerAllowedIndexSet.clear();
|
||||
amAllowedIndexSet.clear();
|
||||
peerStat.reset();
|
||||
assert(_res);
|
||||
return _res->hasPiece(index);
|
||||
}
|
||||
|
||||
void Peer::setFastExtensionEnabled(bool enabled)
|
||||
{
|
||||
fastExtensionEnabled = enabled;
|
||||
assert(_res);
|
||||
return _res->fastExtensionEnabled(enabled);
|
||||
}
|
||||
|
||||
bool Peer::isFastExtensionEnabled() const
|
||||
{
|
||||
return fastExtensionEnabled;
|
||||
assert(_res);
|
||||
return _res->fastExtensionEnabled();
|
||||
}
|
||||
|
||||
int32_t Peer::countPeerAllowedIndexSet() const
|
||||
size_t Peer::countPeerAllowedIndexSet() const
|
||||
{
|
||||
return peerAllowedIndexSet.size();
|
||||
assert(_res);
|
||||
return _res->peerAllowedIndexSet().size();
|
||||
}
|
||||
|
||||
const std::deque<int32_t>& Peer::getPeerAllowedIndexSet() const
|
||||
{
|
||||
return peerAllowedIndexSet;
|
||||
assert(_res);
|
||||
return _res->peerAllowedIndexSet();
|
||||
}
|
||||
|
||||
bool Peer::isInPeerAllowedIndexSet(int32_t index) const {
|
||||
return std::find(peerAllowedIndexSet.begin(), peerAllowedIndexSet.end(),
|
||||
index) != peerAllowedIndexSet.end();
|
||||
bool Peer::isInPeerAllowedIndexSet(int32_t index) const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->peerAllowedIndexSetContains(index);
|
||||
}
|
||||
|
||||
void Peer::addPeerAllowedIndex(int32_t index) {
|
||||
if(!isInPeerAllowedIndexSet(index)) {
|
||||
peerAllowedIndexSet.push_back(index);
|
||||
}
|
||||
void Peer::addPeerAllowedIndex(int32_t index)
|
||||
{
|
||||
assert(_res);
|
||||
_res->addPeerAllowedIndex(index);
|
||||
}
|
||||
|
||||
bool Peer::isInAmAllowedIndexSet(int32_t index) const {
|
||||
return std::find(amAllowedIndexSet.begin(), amAllowedIndexSet.end(),
|
||||
index) != amAllowedIndexSet.end();
|
||||
bool Peer::isInAmAllowedIndexSet(int32_t index) const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->amAllowedIndexSetContains(index);
|
||||
}
|
||||
|
||||
void Peer::addAmAllowedIndex(int32_t index) {
|
||||
if(!isInAmAllowedIndexSet(index)) {
|
||||
amAllowedIndexSet.push_back(index);
|
||||
}
|
||||
void Peer::addAmAllowedIndex(int32_t index)
|
||||
{
|
||||
assert(_res);
|
||||
_res->addAmAllowedIndex(index);
|
||||
}
|
||||
|
||||
void Peer::setAllBitfield() {
|
||||
assert(_bitfield);
|
||||
_bitfield->setAllBit();
|
||||
assert(_res);
|
||||
_res->markSeeder();
|
||||
_seeder = true;
|
||||
}
|
||||
|
||||
void Peer::updateLatency(int32_t latency) {
|
||||
this->latency = (this->latency*20+latency*80)/200;
|
||||
void Peer::updateLatency(int32_t latency)
|
||||
{
|
||||
assert(_res);
|
||||
_res->updateLatency(latency);
|
||||
}
|
||||
|
||||
int32_t Peer::getLatency() const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->latency();
|
||||
}
|
||||
|
||||
void Peer::startBadCondition()
|
||||
|
@ -295,31 +385,61 @@ bool Peer::isGood() const
|
|||
return _badConditionStartTime.elapsed(BAD_CONDITION_INTERVAL);
|
||||
}
|
||||
|
||||
uint8_t Peer::getExtensionMessageID(const std::string& name)
|
||||
uint8_t Peer::getExtensionMessageID(const std::string& name) const
|
||||
{
|
||||
Extensions::const_iterator itr = _extensions.find(name);
|
||||
if(itr == _extensions.end()) {
|
||||
return 0;
|
||||
} else {
|
||||
return (*itr).second;
|
||||
}
|
||||
assert(_res);
|
||||
return _res->getExtensionMessageID(name);
|
||||
}
|
||||
|
||||
std::string Peer::getExtensionName(uint8_t id)
|
||||
std::string Peer::getExtensionName(uint8_t id) const
|
||||
{
|
||||
for(Extensions::const_iterator itr = _extensions.begin();
|
||||
itr != _extensions.end(); ++itr) {
|
||||
const Extensions::value_type& p = *itr;
|
||||
if(p.second == id) {
|
||||
return p.first;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
assert(_res);
|
||||
return _res->getExtensionName(id);
|
||||
}
|
||||
|
||||
void Peer::setExtension(const std::string& name, uint8_t id)
|
||||
{
|
||||
_extensions[name] = id;
|
||||
assert(_res);
|
||||
_res->addExtension(name, id);
|
||||
}
|
||||
|
||||
void Peer::setExtendedMessagingEnabled(bool enabled)
|
||||
{
|
||||
assert(_res);
|
||||
_res->extendedMessagingEnabled(enabled);
|
||||
}
|
||||
|
||||
bool Peer::isExtendedMessagingEnabled() const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->extendedMessagingEnabled();
|
||||
}
|
||||
|
||||
void Peer::setDHTEnabled(bool enabled)
|
||||
{
|
||||
assert(_res);
|
||||
_res->dhtEnabled(enabled);
|
||||
}
|
||||
|
||||
bool Peer::isDHTEnabled() const
|
||||
{
|
||||
assert(_res);
|
||||
return _res->dhtEnabled();
|
||||
}
|
||||
|
||||
bool Peer::isSeeder() const
|
||||
{
|
||||
return _seeder;
|
||||
}
|
||||
|
||||
const Time& Peer::getFirstContactTime() const
|
||||
{
|
||||
return _firstContactTime;
|
||||
}
|
||||
|
||||
const Time& Peer::getBadConditionStartTime() const
|
||||
{
|
||||
return _badConditionStartTime;
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
173
src/Peer.h
173
src/Peer.h
|
@ -45,7 +45,7 @@
|
|||
|
||||
namespace aria2 {
|
||||
|
||||
class BitfieldMan;
|
||||
class PeerSessionResource;
|
||||
|
||||
class Peer {
|
||||
public:
|
||||
|
@ -54,36 +54,24 @@ public:
|
|||
// If it is unknown, for example, localhost accepted the incoming connection
|
||||
// from this peer, set port to 0.
|
||||
uint16_t port;
|
||||
bool amChoking;
|
||||
bool amInterested;
|
||||
bool peerChoking;
|
||||
bool peerInterested;
|
||||
int32_t tryCount;
|
||||
int32_t cuid;
|
||||
bool chokingRequired;
|
||||
bool optUnchoking;
|
||||
bool snubbing;
|
||||
private:
|
||||
unsigned char peerId[PEER_ID_LENGTH];
|
||||
BitfieldMan* _bitfield;
|
||||
bool fastExtensionEnabled;
|
||||
// fast index set which a peer has sent to localhost.
|
||||
std::deque<int32_t> peerAllowedIndexSet;
|
||||
// fast index set which localhost has sent to a peer.
|
||||
std::deque<int32_t> amAllowedIndexSet;
|
||||
bool _extendedMessagingEnabled;
|
||||
Extensions _extensions;
|
||||
bool _dhtEnabled;
|
||||
PeerStat peerStat;
|
||||
int64_t sessionUploadLength;
|
||||
int64_t sessionDownloadLength;
|
||||
int32_t latency;
|
||||
bool active;
|
||||
std::string id;
|
||||
|
||||
int32_t _cuid;
|
||||
|
||||
unsigned char _peerId[PEER_ID_LENGTH];
|
||||
|
||||
Time _firstContactTime;
|
||||
|
||||
Time _badConditionStartTime;
|
||||
|
||||
bool _seeder;
|
||||
|
||||
PeerSessionResource* _res;
|
||||
|
||||
// Before calling updateSeeder(), make sure that
|
||||
// allocateSessionResource() is called and _res is created.
|
||||
// Otherwise assertion fails.
|
||||
void updateSeeder();
|
||||
public:
|
||||
Peer(std::string ipaddr, uint16_t port);
|
||||
|
@ -96,6 +84,74 @@ public:
|
|||
|
||||
void resetStatus();
|
||||
|
||||
void usedBy(int32_t cuid);
|
||||
|
||||
int32_t usedBy() const;
|
||||
|
||||
bool unused() const;
|
||||
|
||||
// Returns true iff _res != 0.
|
||||
bool isActive() const;
|
||||
|
||||
void setPeerId(const unsigned char* peerId);
|
||||
|
||||
const unsigned char* getPeerId() const;
|
||||
|
||||
bool isSeeder() const;
|
||||
|
||||
const std::string& getID() const;
|
||||
|
||||
void startBadCondition();
|
||||
|
||||
bool isGood() const;
|
||||
|
||||
void allocateSessionResource(int32_t pieceLength, int64_t totalLength);
|
||||
|
||||
void releaseSessionResource();
|
||||
|
||||
const Time& getFirstContactTime() const;
|
||||
|
||||
const Time& getBadConditionStartTime() const;
|
||||
|
||||
// Before calling following member functions, make sure that
|
||||
// allocateSessionResource() is called and _res is created.
|
||||
// Otherwise assertion fails.
|
||||
|
||||
// localhost is choking this peer
|
||||
bool amChoking() const;
|
||||
|
||||
void amChoking(bool b) const;
|
||||
|
||||
// localhost is interested in this peer
|
||||
bool amInterested() const;
|
||||
|
||||
void amInterested(bool b) const;
|
||||
|
||||
// this peer is choking localhost
|
||||
bool peerChoking() const;
|
||||
|
||||
void peerChoking(bool b) const;
|
||||
|
||||
// this peer is interested in localhost
|
||||
bool peerInterested() const;
|
||||
|
||||
void peerInterested(bool b);
|
||||
|
||||
// this peer should be choked
|
||||
bool chokingRequired() const;
|
||||
|
||||
void chokingRequired(bool b);
|
||||
|
||||
// this peer is eligible for unchoking optionally.
|
||||
bool optUnchoking() const;
|
||||
|
||||
void optUnchoking(bool b);
|
||||
|
||||
// this peer is snubbing.
|
||||
bool snubbing() const;
|
||||
|
||||
void snubbing(bool b);
|
||||
|
||||
void updateUploadLength(int32_t bytes);
|
||||
|
||||
void updateDownloadLength(int32_t bytes);
|
||||
|
@ -123,16 +179,6 @@ public:
|
|||
* Returns the number of bytes downloaded from the remote host.
|
||||
*/
|
||||
int64_t getSessionDownloadLength() const;
|
||||
|
||||
void activate();
|
||||
|
||||
void deactivate();
|
||||
|
||||
bool isActive() const;
|
||||
|
||||
void setPeerId(const unsigned char* peerId);
|
||||
|
||||
const unsigned char* getPeerId() const;
|
||||
|
||||
void setBitfield(const unsigned char* bitfield, int32_t bitfieldLength);
|
||||
|
||||
|
@ -153,73 +199,36 @@ public:
|
|||
bool isFastExtensionEnabled() const;
|
||||
|
||||
void addPeerAllowedIndex(int32_t index);
|
||||
|
||||
bool isInPeerAllowedIndexSet(int32_t index) const;
|
||||
|
||||
int32_t countPeerAllowedIndexSet() const;
|
||||
size_t countPeerAllowedIndexSet() const;
|
||||
|
||||
const std::deque<int32_t>& getPeerAllowedIndexSet() const;
|
||||
|
||||
void addAmAllowedIndex(int32_t index);
|
||||
|
||||
bool isInAmAllowedIndexSet(int32_t index) const;
|
||||
|
||||
void setExtendedMessagingEnabled(bool enabled)
|
||||
{
|
||||
_extendedMessagingEnabled = enabled;
|
||||
}
|
||||
void setExtendedMessagingEnabled(bool enabled);
|
||||
|
||||
bool isExtendedMessagingEnabled() const
|
||||
{
|
||||
return _extendedMessagingEnabled;
|
||||
}
|
||||
bool isExtendedMessagingEnabled() const;
|
||||
|
||||
void setDHTEnabled(bool enabled)
|
||||
{
|
||||
_dhtEnabled = enabled;
|
||||
}
|
||||
void setDHTEnabled(bool enabled);
|
||||
|
||||
bool isDHTEnabled() const
|
||||
{
|
||||
return _dhtEnabled;
|
||||
}
|
||||
bool isDHTEnabled() const;
|
||||
|
||||
bool shouldBeChoking() const;
|
||||
|
||||
bool hasPiece(int32_t index) const;
|
||||
|
||||
bool isSeeder() const
|
||||
{
|
||||
return _seeder;
|
||||
}
|
||||
|
||||
void updateLatency(int32_t latency);
|
||||
|
||||
int32_t getLatency() const { return latency; }
|
||||
int32_t getLatency() const;
|
||||
|
||||
const std::string& getId() const {
|
||||
return id;
|
||||
}
|
||||
uint8_t getExtensionMessageID(const std::string& name) const;
|
||||
|
||||
void startBadCondition();
|
||||
|
||||
bool isGood() const;
|
||||
|
||||
void allocateBitfield(int32_t pieceLength, int64_t totalLength);
|
||||
|
||||
void deallocateBitfield();
|
||||
|
||||
Time getFirstContactTime() const
|
||||
{
|
||||
return _firstContactTime;
|
||||
}
|
||||
|
||||
Time getBadConditionStartTime() const
|
||||
{
|
||||
return _badConditionStartTime;
|
||||
}
|
||||
|
||||
uint8_t getExtensionMessageID(const std::string& name);
|
||||
|
||||
std::string getExtensionName(uint8_t id);
|
||||
std::string getExtensionName(uint8_t id) const;
|
||||
|
||||
void setExtension(const std::string& name, uint8_t id);
|
||||
};
|
||||
|
|
|
@ -74,7 +74,7 @@ PeerAbstractCommand::~PeerAbstractCommand() {
|
|||
|
||||
bool PeerAbstractCommand::execute() {
|
||||
if(exitBeforeExecute()) {
|
||||
peer->resetStatus();
|
||||
onAbort(0);
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
|
|
|
@ -64,7 +64,7 @@ class ChokePeer {
|
|||
public:
|
||||
ChokePeer() {}
|
||||
void operator()(PeerHandle& peer) {
|
||||
peer->chokingRequired = true;
|
||||
peer->chokingRequired(true);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -76,13 +76,13 @@ void PeerChokeCommand::optUnchokingPeer(Peers& peers) const {
|
|||
int32_t optUnchokCount = 1;
|
||||
for(Peers::iterator itr = peers.begin(); itr != peers.end(); itr++) {
|
||||
Peers::value_type peer = *itr;
|
||||
if(optUnchokCount > 0 && !peer->snubbing) {
|
||||
if(optUnchokCount > 0 && !peer->snubbing()) {
|
||||
optUnchokCount--;
|
||||
peer->optUnchoking = true;
|
||||
peer->optUnchoking(true);
|
||||
logger->debug("opt, unchoking %s, download speed=%d",
|
||||
peer->ipaddr.c_str(), peer->calculateDownloadSpeed());
|
||||
} else {
|
||||
peer->optUnchoking = false;
|
||||
peer->optUnchoking(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -125,10 +125,10 @@ bool PeerChokeCommand::execute() {
|
|||
int32_t unchokingCount = 4;//peers.size() >= 4 ? 4 : peers.size();
|
||||
for(Peers::iterator itr = peers.begin(); itr != peers.end() && unchokingCount > 0; ) {
|
||||
PeerHandle peer = *itr;
|
||||
if(peer->peerInterested && !peer->snubbing) {
|
||||
if(peer->peerInterested() && !peer->snubbing()) {
|
||||
unchokingCount--;
|
||||
peer->chokingRequired = false;
|
||||
peer->optUnchoking = false;
|
||||
peer->chokingRequired(false);
|
||||
peer->optUnchoking(false);
|
||||
itr = peers.erase(itr);
|
||||
if(pieceStorage->downloadFinished()) {
|
||||
logger->debug("cat01, unchoking %s, upload speed=%d",
|
||||
|
@ -145,9 +145,9 @@ bool PeerChokeCommand::execute() {
|
|||
}
|
||||
for(Peers::iterator itr = peers.begin(); itr != peers.end(); ) {
|
||||
PeerHandle peer = *itr;
|
||||
if(!peer->peerInterested && !peer->snubbing) {
|
||||
peer->chokingRequired = false;
|
||||
peer->optUnchoking = false;
|
||||
if(!peer->peerInterested() && !peer->snubbing()) {
|
||||
peer->chokingRequired(false);
|
||||
peer->optUnchoking(false);
|
||||
itr = peers.erase(itr);
|
||||
if(pieceStorage->downloadFinished()) {
|
||||
logger->debug("cat02, unchoking %s, upload speed=%d",
|
||||
|
|
|
@ -91,9 +91,9 @@ bool PeerInitiateConnectionCommand::executeInternal() {
|
|||
bool PeerInitiateConnectionCommand::prepareForNextPeer(int wait) {
|
||||
if(peerStorage->isPeerAvailable() && btRuntime->lessThanEqMinPeer()) {
|
||||
PeerHandle peer = peerStorage->getUnusedPeer();
|
||||
peer->cuid = CUIDCounterSingletonHolder::instance()->newID();
|
||||
peer->usedBy(CUIDCounterSingletonHolder::instance()->newID());
|
||||
PeerInitiateConnectionCommand* command =
|
||||
new PeerInitiateConnectionCommand(peer->cuid,
|
||||
new PeerInitiateConnectionCommand(peer->usedBy(),
|
||||
_requestGroup,
|
||||
peer,
|
||||
e,
|
||||
|
|
|
@ -152,11 +152,10 @@ PeerInteractionCommand::PeerInteractionCommand(int32_t cuid,
|
|||
peerObject->btRequestFactory = reqFactory;
|
||||
peerObject->peerConnection = peerConnection;
|
||||
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), peerObject);
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getID(), peerObject);
|
||||
|
||||
setUploadLimit(e->option->getAsInt(PREF_MAX_UPLOAD_LIMIT));
|
||||
peer->activate();
|
||||
peer->allocateBitfield(btContext->getPieceLength(), btContext->getTotalLength());
|
||||
peer->allocateSessionResource(btContext->getPieceLength(), btContext->getTotalLength());
|
||||
|
||||
maxDownloadSpeedLimit = e->option->getAsInt(PREF_MAX_DOWNLOAD_LIMIT);
|
||||
|
||||
|
@ -164,9 +163,8 @@ PeerInteractionCommand::PeerInteractionCommand(int32_t cuid,
|
|||
}
|
||||
|
||||
PeerInteractionCommand::~PeerInteractionCommand() {
|
||||
peer->deallocateBitfield();
|
||||
peer->deactivate();
|
||||
PEER_OBJECT_CLUSTER(btContext)->unregisterHandle(peer->getId());
|
||||
peer->releaseSessionResource();
|
||||
PEER_OBJECT_CLUSTER(btContext)->unregisterHandle(peer->getID());
|
||||
|
||||
btRuntime->decreaseConnections();
|
||||
//logger->debug("CUID#%d - unregistered message factory using ID:%s",
|
||||
|
@ -217,8 +215,8 @@ bool PeerInteractionCommand::executeInternal() {
|
|||
if(btInteractive->countReceivedMessageInIteration() > 0) {
|
||||
updateKeepAlive();
|
||||
}
|
||||
if(peer->amInterested && !peer->peerChoking ||
|
||||
peer->peerInterested && !peer->amChoking) {
|
||||
if(peer->amInterested() && !peer->peerChoking() ||
|
||||
peer->peerInterested() && !peer->amChoking()) {
|
||||
if(maxDownloadSpeedLimit > 0) {
|
||||
TransferStat stat = peerStorage->calculateStat();
|
||||
if(maxDownloadSpeedLimit < stat.downloadSpeed) {
|
||||
|
@ -246,9 +244,9 @@ bool PeerInteractionCommand::executeInternal() {
|
|||
bool PeerInteractionCommand::prepareForNextPeer(int32_t wait) {
|
||||
if(peerStorage->isPeerAvailable() && btRuntime->lessThanEqMinPeer()) {
|
||||
PeerHandle peer = peerStorage->getUnusedPeer();
|
||||
peer->cuid = CUIDCounterSingletonHolder::instance()->newID();
|
||||
peer->usedBy(CUIDCounterSingletonHolder::instance()->newID());
|
||||
PeerInitiateConnectionCommand* command =
|
||||
new PeerInitiateConnectionCommand(peer->cuid,
|
||||
new PeerInitiateConnectionCommand(peer->usedBy(),
|
||||
_requestGroup,
|
||||
peer,
|
||||
e,
|
||||
|
|
|
@ -88,7 +88,7 @@ bool PeerReceiveHandshakeCommand::executeInternal()
|
|||
BT_RUNTIME(btContext)->getConnections() < MAX_PEERS) {
|
||||
if(PEER_STORAGE(btContext)->addPeer(peer)) {
|
||||
|
||||
peer->cuid = cuid;
|
||||
peer->usedBy(cuid);
|
||||
|
||||
PeerInteractionCommand* command =
|
||||
new PeerInteractionCommand(cuid,
|
||||
|
@ -100,7 +100,7 @@ bool PeerReceiveHandshakeCommand::executeInternal()
|
|||
PeerInteractionCommand::RECEIVER_WAIT_HANDSHAKE,
|
||||
_peerConnection);
|
||||
e->commands.push_back(command);
|
||||
logger->debug(MSG_INCOMING_PEER_CONNECTION, cuid, peer->cuid);
|
||||
logger->debug(MSG_INCOMING_PEER_CONNECTION, cuid, peer->usedBy());
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -0,0 +1,316 @@
|
|||
/* <!-- copyright */
|
||||
/*
|
||||
* aria2 - The high speed download utility
|
||||
*
|
||||
* Copyright (C) 2006 Tatsuhiro Tsujikawa
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* In addition, as a special exception, the copyright holders give
|
||||
* permission to link the code of portions of this program with the
|
||||
* OpenSSL library under certain conditions as described in each
|
||||
* individual source file, and distribute linked combinations
|
||||
* including the two.
|
||||
* You must obey the GNU General Public License in all respects
|
||||
* for all of the code used other than OpenSSL. If you modify
|
||||
* file(s) with this exception, you may extend this exception to your
|
||||
* version of the file(s), but you are not obligated to do so. If you
|
||||
* do not wish to do so, delete this exception statement from your
|
||||
* version. If you delete this exception statement from all source
|
||||
* files in the program, then also delete it here.
|
||||
*/
|
||||
/* copyright --> */
|
||||
#include "PeerSessionResource.h"
|
||||
#include "BitfieldManFactory.h"
|
||||
#include "BitfieldMan.h"
|
||||
#include <algorithm>
|
||||
|
||||
namespace aria2 {
|
||||
|
||||
PeerSessionResource::PeerSessionResource(int32_t pieceLength, int64_t totalLength):
|
||||
_amChoking(true),
|
||||
_amInterested(false),
|
||||
_peerChoking(true),
|
||||
_peerInterested(false),
|
||||
_chokingRequired(true),
|
||||
_optUnchoking(false),
|
||||
_snubbing(false),
|
||||
_bitfieldMan(BitfieldManFactory::getFactoryInstance()->createBitfieldMan(pieceLength, totalLength)),
|
||||
_fastExtensionEnabled(false),
|
||||
_extendedMessagingEnabled(false),
|
||||
_dhtEnabled(false),
|
||||
_latency(DEFAULT_LATENCY),
|
||||
_uploadLength(0),
|
||||
_downloadLength(0)
|
||||
{}
|
||||
|
||||
PeerSessionResource::~PeerSessionResource()
|
||||
{
|
||||
delete _bitfieldMan;
|
||||
}
|
||||
|
||||
bool PeerSessionResource::amChoking() const
|
||||
{
|
||||
return _amChoking;
|
||||
}
|
||||
|
||||
void PeerSessionResource::amChoking(bool b)
|
||||
{
|
||||
_amChoking = b;
|
||||
}
|
||||
|
||||
bool PeerSessionResource::amInterested() const
|
||||
{
|
||||
return _amInterested;
|
||||
}
|
||||
|
||||
void PeerSessionResource::amInterested(bool b)
|
||||
{
|
||||
_amInterested = b;
|
||||
}
|
||||
|
||||
bool PeerSessionResource::peerChoking() const
|
||||
{
|
||||
return _peerChoking;
|
||||
}
|
||||
|
||||
void PeerSessionResource::peerChoking(bool b)
|
||||
{
|
||||
_peerChoking = b;
|
||||
}
|
||||
|
||||
bool PeerSessionResource::peerInterested() const
|
||||
{
|
||||
return _peerInterested;
|
||||
}
|
||||
|
||||
void PeerSessionResource::peerInterested(bool b)
|
||||
{
|
||||
_peerInterested = b;
|
||||
}
|
||||
|
||||
bool PeerSessionResource::chokingRequired() const
|
||||
{
|
||||
return _chokingRequired;
|
||||
}
|
||||
|
||||
void PeerSessionResource::chokingRequired(bool b)
|
||||
{
|
||||
_chokingRequired = b;
|
||||
}
|
||||
|
||||
bool PeerSessionResource::optUnchoking() const
|
||||
{
|
||||
return _optUnchoking;
|
||||
}
|
||||
|
||||
void PeerSessionResource::optUnchoking(bool b)
|
||||
{
|
||||
_optUnchoking = b;
|
||||
}
|
||||
|
||||
bool PeerSessionResource::shouldBeChoking() const
|
||||
{
|
||||
if(_optUnchoking) {
|
||||
return false;
|
||||
}
|
||||
return _chokingRequired;
|
||||
}
|
||||
|
||||
bool PeerSessionResource::snubbing() const
|
||||
{
|
||||
return _snubbing;
|
||||
}
|
||||
|
||||
void PeerSessionResource::snubbing(bool b)
|
||||
{
|
||||
_snubbing = b;
|
||||
}
|
||||
|
||||
bool PeerSessionResource::hasAllPieces() const
|
||||
{
|
||||
return _bitfieldMan->isAllBitSet();
|
||||
}
|
||||
|
||||
void PeerSessionResource::updateBitfield(int32_t index, int32_t operation)
|
||||
{
|
||||
if(operation == 1) {
|
||||
_bitfieldMan->setBit(index);
|
||||
} else if(operation == 0) {
|
||||
_bitfieldMan->unsetBit(index);
|
||||
}
|
||||
}
|
||||
|
||||
void PeerSessionResource::setBitfield(const unsigned char* bitfield, size_t bitfieldLength)
|
||||
{
|
||||
_bitfieldMan->setBitfield(bitfield, bitfieldLength);
|
||||
}
|
||||
|
||||
const unsigned char* PeerSessionResource::getBitfield() const
|
||||
{
|
||||
return _bitfieldMan->getBitfield();
|
||||
}
|
||||
|
||||
size_t PeerSessionResource::getBitfieldLength() const
|
||||
{
|
||||
return _bitfieldMan->getBitfieldLength();
|
||||
}
|
||||
|
||||
bool PeerSessionResource::hasPiece(int32_t index) const
|
||||
{
|
||||
return _bitfieldMan->isBitSet(index);
|
||||
}
|
||||
|
||||
void PeerSessionResource::markSeeder()
|
||||
{
|
||||
_bitfieldMan->setAllBit();
|
||||
}
|
||||
|
||||
bool PeerSessionResource::fastExtensionEnabled() const
|
||||
{
|
||||
return _fastExtensionEnabled;
|
||||
}
|
||||
|
||||
void PeerSessionResource::fastExtensionEnabled(bool b)
|
||||
{
|
||||
_fastExtensionEnabled = b;
|
||||
}
|
||||
|
||||
const std::deque<int32_t>& PeerSessionResource::peerAllowedIndexSet() const
|
||||
{
|
||||
return _peerAllowedIndexSet;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
bool PeerSessionResource::indexIncluded(const std::deque<T>& c, T index) const
|
||||
{
|
||||
return std::find(c.begin(), c.end(), index) != c.end();
|
||||
}
|
||||
|
||||
void PeerSessionResource::addPeerAllowedIndex(int32_t index)
|
||||
{
|
||||
if(!indexIncluded(_peerAllowedIndexSet, index)) {
|
||||
_peerAllowedIndexSet.push_back(index);
|
||||
}
|
||||
}
|
||||
|
||||
bool PeerSessionResource::peerAllowedIndexSetContains(int32_t index) const
|
||||
{
|
||||
return indexIncluded(_peerAllowedIndexSet, index);
|
||||
}
|
||||
|
||||
const std::deque<int32_t>& PeerSessionResource::amAllowedIndexSet() const
|
||||
{
|
||||
return _amAllowedIndexSet;
|
||||
}
|
||||
|
||||
void PeerSessionResource::addAmAllowedIndex(int32_t index)
|
||||
{
|
||||
if(!indexIncluded(_amAllowedIndexSet, index)) {
|
||||
_amAllowedIndexSet.push_back(index);
|
||||
}
|
||||
}
|
||||
|
||||
bool PeerSessionResource::amAllowedIndexSetContains(int32_t index) const
|
||||
{
|
||||
return indexIncluded(_amAllowedIndexSet, index);
|
||||
}
|
||||
|
||||
bool PeerSessionResource::extendedMessagingEnabled() const
|
||||
{
|
||||
return _extendedMessagingEnabled;
|
||||
}
|
||||
|
||||
void PeerSessionResource::extendedMessagingEnabled(bool b)
|
||||
{
|
||||
_extendedMessagingEnabled = b;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
PeerSessionResource::getExtensionMessageID(const std::string& name) const
|
||||
{
|
||||
Extensions::const_iterator itr = _extensions.find(name);
|
||||
if(itr == _extensions.end()) {
|
||||
return 0;
|
||||
} else {
|
||||
return (*itr).second;
|
||||
}
|
||||
}
|
||||
|
||||
std::string PeerSessionResource::getExtensionName(uint8_t id) const
|
||||
{
|
||||
for(Extensions::const_iterator itr = _extensions.begin();
|
||||
itr != _extensions.end(); ++itr) {
|
||||
const Extensions::value_type& p = *itr;
|
||||
if(p.second == id) {
|
||||
return p.first;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
void PeerSessionResource::addExtension(const std::string& name, uint8_t id)
|
||||
{
|
||||
_extensions[name] = id;
|
||||
}
|
||||
|
||||
bool PeerSessionResource::dhtEnabled() const
|
||||
{
|
||||
return _dhtEnabled;
|
||||
}
|
||||
|
||||
void PeerSessionResource::dhtEnabled(bool b)
|
||||
{
|
||||
_dhtEnabled = b;
|
||||
}
|
||||
|
||||
PeerStat& PeerSessionResource::getPeerStat()
|
||||
{
|
||||
return _peerStat;
|
||||
}
|
||||
|
||||
int32_t PeerSessionResource::latency() const
|
||||
{
|
||||
return _latency;
|
||||
}
|
||||
|
||||
void PeerSessionResource::updateLatency(int32_t latency)
|
||||
{
|
||||
_latency = _latency*0.2+latency*0.8;
|
||||
}
|
||||
|
||||
int64_t PeerSessionResource::uploadLength() const
|
||||
{
|
||||
return _uploadLength;
|
||||
}
|
||||
|
||||
void PeerSessionResource::updateUploadLength(int32_t bytes)
|
||||
{
|
||||
_peerStat.updateUploadLength(bytes);
|
||||
_uploadLength += bytes;
|
||||
}
|
||||
|
||||
int64_t PeerSessionResource::downloadLength() const
|
||||
{
|
||||
return _downloadLength;
|
||||
}
|
||||
|
||||
void PeerSessionResource::updateDownloadLength(int32_t bytes)
|
||||
{
|
||||
_peerStat.updateDownloadLength(bytes);
|
||||
_downloadLength += bytes;
|
||||
}
|
||||
|
||||
} // namespace aria2
|
|
@ -0,0 +1,186 @@
|
|||
/* <!-- copyright */
|
||||
/*
|
||||
* aria2 - The high speed download utility
|
||||
*
|
||||
* Copyright (C) 2006 Tatsuhiro Tsujikawa
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* In addition, as a special exception, the copyright holders give
|
||||
* permission to link the code of portions of this program with the
|
||||
* OpenSSL library under certain conditions as described in each
|
||||
* individual source file, and distribute linked combinations
|
||||
* including the two.
|
||||
* You must obey the GNU General Public License in all respects
|
||||
* for all of the code used other than OpenSSL. If you modify
|
||||
* file(s) with this exception, you may extend this exception to your
|
||||
* version of the file(s), but you are not obligated to do so. If you
|
||||
* do not wish to do so, delete this exception statement from your
|
||||
* version. If you delete this exception statement from all source
|
||||
* files in the program, then also delete it here.
|
||||
*/
|
||||
/* copyright --> */
|
||||
#ifndef _D_PEER_SESSION_RESOURCE_H_
|
||||
#define _D_PEER_SESSION_RESOURCE_H_
|
||||
|
||||
#include "common.h"
|
||||
#include "BtConstants.h"
|
||||
#include "PeerStat.h"
|
||||
#include <string>
|
||||
#include <deque>
|
||||
|
||||
namespace aria2 {
|
||||
|
||||
class BitfieldMan;
|
||||
|
||||
class PeerSessionResource {
|
||||
private:
|
||||
// localhost is choking this peer
|
||||
bool _amChoking;
|
||||
// localhost is interested in this peer
|
||||
bool _amInterested;
|
||||
// this peer is choking localhost
|
||||
bool _peerChoking;
|
||||
// this peer is interested in localhost
|
||||
bool _peerInterested;
|
||||
// choking this peer is requested
|
||||
bool _chokingRequired;
|
||||
// this peer is eligible for *optional* unchoking.
|
||||
bool _optUnchoking;
|
||||
// this peer is snubbing.
|
||||
bool _snubbing;
|
||||
|
||||
BitfieldMan* _bitfieldMan;
|
||||
bool _fastExtensionEnabled;
|
||||
// fast index set which a peer has sent to localhost.
|
||||
std::deque<int32_t> _peerAllowedIndexSet;
|
||||
// fast index set which localhost has sent to a peer.
|
||||
std::deque<int32_t> _amAllowedIndexSet;
|
||||
bool _extendedMessagingEnabled;
|
||||
Extensions _extensions;
|
||||
bool _dhtEnabled;
|
||||
PeerStat _peerStat;
|
||||
int32_t _latency;
|
||||
int64_t _uploadLength;
|
||||
int64_t _downloadLength;
|
||||
|
||||
template<typename T>
|
||||
bool indexIncluded(const std::deque<T>& c, T index) const;
|
||||
public:
|
||||
PeerSessionResource(int32_t pieceLength, int64_t totalLength);
|
||||
|
||||
~PeerSessionResource();
|
||||
|
||||
// localhost is choking this peer
|
||||
bool amChoking() const;
|
||||
|
||||
void amChoking(bool b);
|
||||
|
||||
// localhost is interested in this peer
|
||||
bool amInterested() const;
|
||||
|
||||
void amInterested(bool b);
|
||||
|
||||
// this peer is choking localhost
|
||||
bool peerChoking() const;
|
||||
|
||||
void peerChoking(bool b);
|
||||
|
||||
// this peer is interested in localhost
|
||||
bool peerInterested() const;
|
||||
|
||||
void peerInterested(bool b);
|
||||
|
||||
// this peer should be choked
|
||||
bool chokingRequired() const;
|
||||
|
||||
void chokingRequired(bool b);
|
||||
|
||||
// this peer is eligible for unchoking optionally.
|
||||
bool optUnchoking() const;
|
||||
|
||||
void optUnchoking(bool b);
|
||||
|
||||
bool shouldBeChoking() const;
|
||||
|
||||
// this peer is snubbing.
|
||||
bool snubbing() const;
|
||||
|
||||
void snubbing(bool b);
|
||||
|
||||
bool hasAllPieces() const;
|
||||
|
||||
void updateBitfield(int32_t index, int32_t operation);
|
||||
|
||||
void setBitfield(const unsigned char* bitfield, size_t bitfieldLength);
|
||||
|
||||
const unsigned char* getBitfield() const;
|
||||
|
||||
size_t getBitfieldLength() const;
|
||||
|
||||
bool hasPiece(int32_t index) const;
|
||||
|
||||
void markSeeder();
|
||||
|
||||
bool fastExtensionEnabled() const;
|
||||
|
||||
void fastExtensionEnabled(bool b);
|
||||
|
||||
// fast index set which a peer has sent to localhost.
|
||||
const std::deque<int32_t>& peerAllowedIndexSet() const;
|
||||
|
||||
void addPeerAllowedIndex(int32_t index);
|
||||
|
||||
bool peerAllowedIndexSetContains(int32_t index) const;
|
||||
|
||||
// fast index set which localhost has sent to a peer.
|
||||
const std::deque<int32_t>& amAllowedIndexSet() const;
|
||||
|
||||
void addAmAllowedIndex(int32_t index);
|
||||
|
||||
bool amAllowedIndexSetContains(int32_t index) const;
|
||||
|
||||
bool extendedMessagingEnabled() const;
|
||||
|
||||
void extendedMessagingEnabled(bool b);
|
||||
|
||||
uint8_t getExtensionMessageID(const std::string& name) const;
|
||||
|
||||
std::string getExtensionName(uint8_t id) const;
|
||||
|
||||
void addExtension(const std::string& name, uint8_t id);
|
||||
|
||||
bool dhtEnabled() const;
|
||||
|
||||
void dhtEnabled(bool b);
|
||||
|
||||
PeerStat& getPeerStat();
|
||||
|
||||
int32_t latency() const;
|
||||
|
||||
void updateLatency(int32_t l);
|
||||
|
||||
int64_t uploadLength() const;
|
||||
|
||||
void updateUploadLength(int32_t bytes);
|
||||
|
||||
int64_t downloadLength() const;
|
||||
|
||||
void updateDownloadLength(int32_t bytes);
|
||||
};
|
||||
|
||||
} // namespace aria2
|
||||
|
||||
#endif // _D_PEER_SESSION_RESOURCE_H_
|
|
@ -137,7 +137,6 @@ public:
|
|||
};
|
||||
|
||||
typedef SharedHandle<PeerStat> PeerStatHandle;
|
||||
typedef std::deque<PeerStatHandle> PeerStats;
|
||||
|
||||
} // namespace aria2
|
||||
|
||||
|
|
|
@ -250,7 +250,7 @@ void SegmentMan::registerPeerStat(const PeerStatHandle& peerStat) {
|
|||
|
||||
PeerStatHandle SegmentMan::getPeerStat(int32_t cuid) const
|
||||
{
|
||||
for(PeerStats::const_iterator itr = peerStats.begin(); itr != peerStats.end(); ++itr) {
|
||||
for(std::deque<SharedHandle<PeerStat> >::const_iterator itr = peerStats.begin(); itr != peerStats.end(); ++itr) {
|
||||
const PeerStatHandle& peerStat = *itr;
|
||||
if(peerStat->getCuid() == cuid) {
|
||||
return peerStat;
|
||||
|
@ -261,8 +261,7 @@ PeerStatHandle SegmentMan::getPeerStat(int32_t cuid) const
|
|||
|
||||
int32_t SegmentMan::calculateDownloadSpeed() const {
|
||||
int32_t speed = 0;
|
||||
for(PeerStats::const_iterator itr = peerStats.begin();
|
||||
itr != peerStats.end(); itr++) {
|
||||
for(std::deque<SharedHandle<PeerStat> >::const_iterator itr = peerStats.begin(); itr != peerStats.end(); itr++) {
|
||||
const PeerStatHandle& peerStat = *itr;
|
||||
if(peerStat->getStatus() == PeerStat::ACTIVE) {
|
||||
speed += peerStat->calculateDownloadSpeed();
|
||||
|
|
|
@ -147,15 +147,15 @@ void TrackerWatcherCommand::processTrackerResponse(const std::string& trackerRes
|
|||
if(peer.isNull()) {
|
||||
break;
|
||||
}
|
||||
peer->cuid = CUIDCounterSingletonHolder::instance()->newID();
|
||||
peer->usedBy(CUIDCounterSingletonHolder::instance()->newID());
|
||||
PeerInitiateConnectionCommand* command =
|
||||
new PeerInitiateConnectionCommand(peer->cuid,
|
||||
new PeerInitiateConnectionCommand(peer->usedBy(),
|
||||
_requestGroup,
|
||||
peer,
|
||||
e,
|
||||
btContext);
|
||||
e->commands.push_back(command);
|
||||
logger->debug("CUID#%d - Adding new command CUID#%d", cuid, peer->cuid);
|
||||
logger->debug("CUID#%d - Adding new command CUID#%d", cuid, peer->usedBy());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@ void BtAllowedFastMessageTest::testDoReceivedAction() {
|
|||
BtAllowedFastMessage msg;
|
||||
msg.setIndex(1);
|
||||
SharedHandle<Peer> peer = new Peer("localhost", 6969);
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
peer->setFastExtensionEnabled(true);
|
||||
msg.setPeer(peer);
|
||||
CPPUNIT_ASSERT(!peer->isInPeerAllowedIndexSet(1));
|
||||
|
@ -88,6 +89,7 @@ void BtAllowedFastMessageTest::testOnSendComplete() {
|
|||
BtAllowedFastMessage msg;
|
||||
msg.setIndex(1);
|
||||
SharedHandle<Peer> peer = new Peer("localhost", 6969);
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
peer->setFastExtensionEnabled(true);
|
||||
msg.setPeer(peer);
|
||||
CPPUNIT_ASSERT(!peer->isInAmAllowedIndexSet(1));
|
||||
|
|
|
@ -71,7 +71,7 @@ void BtBitfieldMessageTest::testGetMessage() {
|
|||
|
||||
void BtBitfieldMessageTest::testDoReceivedAction() {
|
||||
SharedHandle<Peer> peer = new Peer("host1", 6969);
|
||||
peer->allocateBitfield(16*1024, 16*16*1024);
|
||||
peer->allocateSessionResource(16*1024, 16*16*1024);
|
||||
BtBitfieldMessage msg;
|
||||
msg.setPeer(peer);
|
||||
unsigned char bitfield[] = { 0xff, 0xff };
|
||||
|
|
|
@ -39,7 +39,7 @@ public:
|
|||
btContext->setInfoHash((const unsigned char*)"12345678901234567890");
|
||||
BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
|
||||
new PeerObjectCluster());
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), new PeerObject());
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getID(), new PeerObject());
|
||||
}
|
||||
|
||||
void testCreate();
|
||||
|
|
|
@ -36,11 +36,12 @@ public:
|
|||
void setUp() {
|
||||
BtRegistry::unregisterAll();
|
||||
peer = new Peer("host", 6969);
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
btContext = new MockBtContext();
|
||||
btContext->setInfoHash((const unsigned char*)"12345678901234567890");
|
||||
BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
|
||||
new PeerObjectCluster());
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), new PeerObject());
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getID(), new PeerObject());
|
||||
}
|
||||
|
||||
void testCreate();
|
||||
|
@ -124,7 +125,7 @@ void BtChokeMessageTest::testDoReceivedAction() {
|
|||
msg.doReceivedAction();
|
||||
|
||||
CPPUNIT_ASSERT(dispatcher->doChokedActionCalled);
|
||||
CPPUNIT_ASSERT(peer->peerChoking);
|
||||
CPPUNIT_ASSERT(peer->peerChoking());
|
||||
}
|
||||
|
||||
void BtChokeMessageTest::testOnSendComplete() {
|
||||
|
@ -138,7 +139,7 @@ void BtChokeMessageTest::testOnSendComplete() {
|
|||
msg.onSendComplete();
|
||||
|
||||
CPPUNIT_ASSERT(dispatcher->doChokingActionCalled);
|
||||
CPPUNIT_ASSERT(peer->amChoking);
|
||||
CPPUNIT_ASSERT(peer->amChoking());
|
||||
}
|
||||
|
||||
void BtChokeMessageTest::testToString() {
|
||||
|
|
|
@ -49,7 +49,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION(BtExtendedMessageTest);
|
|||
|
||||
void BtExtendedMessageTest::testCreate() {
|
||||
SharedHandle<Peer> peer = new Peer("192.168.0.1", 6969);
|
||||
peer->setExtension("charlie", 1);
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
SharedHandle<MockBtContext> ctx = new MockBtContext();
|
||||
unsigned char infohash[20];
|
||||
memset(infohash, 0, sizeof(infohash));
|
||||
|
@ -61,7 +61,7 @@ void BtExtendedMessageTest::testCreate() {
|
|||
SharedHandle<PeerObject> peerObject = new PeerObject();
|
||||
peerObject->extensionMessageFactory = exmsgFactory;
|
||||
|
||||
PEER_OBJECT_CLUSTER(ctx)->registerHandle(peer->getId(), peerObject);
|
||||
PEER_OBJECT_CLUSTER(ctx)->registerHandle(peer->getID(), peerObject);
|
||||
|
||||
// payload:{4:name3:foo}->11bytes
|
||||
std::string payload = "4:name3:foo";
|
||||
|
|
|
@ -61,7 +61,7 @@ void BtHaveAllMessageTest::testGetMessage() {
|
|||
void BtHaveAllMessageTest::testDoReceivedAction() {
|
||||
BtHaveAllMessage msg;
|
||||
SharedHandle<Peer> peer = new Peer("host", 6969);
|
||||
peer->allocateBitfield(16*1024, 256*1024);
|
||||
peer->allocateSessionResource(16*1024, 256*1024);
|
||||
peer->setFastExtensionEnabled(true);
|
||||
msg.setPeer(peer);
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ void BtHaveMessageTest::testGetMessage() {
|
|||
|
||||
void BtHaveMessageTest::testDoReceivedAction() {
|
||||
SharedHandle<Peer> peer = new Peer("host", 6969);
|
||||
peer->allocateBitfield(16*1024, 256*1024);
|
||||
peer->allocateSessionResource(16*1024, 256*1024);
|
||||
BtHaveMessage msg;
|
||||
msg.setIndex(1);
|
||||
msg.setPeer(peer);
|
||||
|
|
|
@ -63,6 +63,7 @@ void BtHaveNoneMessageTest::testGetMessage() {
|
|||
void BtHaveNoneMessageTest::testDoReceivedAction() {
|
||||
BtHaveNoneMessage msg;
|
||||
SharedHandle<Peer> peer = new Peer("host", 6969);
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
peer->setFastExtensionEnabled(true);
|
||||
msg.setPeer(peer);
|
||||
msg.doReceivedAction();
|
||||
|
|
|
@ -65,19 +65,21 @@ void BtInterestedMessageTest::testGetMessage() {
|
|||
void BtInterestedMessageTest::testDoReceivedAction() {
|
||||
BtInterestedMessage msg;
|
||||
SharedHandle<Peer> peer = new Peer("host", 6969);
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
msg.setPeer(peer);
|
||||
CPPUNIT_ASSERT(!peer->peerInterested);
|
||||
CPPUNIT_ASSERT(!peer->peerInterested());
|
||||
msg.doReceivedAction();
|
||||
CPPUNIT_ASSERT(peer->peerInterested);
|
||||
CPPUNIT_ASSERT(peer->peerInterested());
|
||||
}
|
||||
|
||||
void BtInterestedMessageTest::testOnSendComplete() {
|
||||
BtInterestedMessage msg;
|
||||
SharedHandle<Peer> peer = new Peer("host", 6969);
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
msg.setPeer(peer);
|
||||
CPPUNIT_ASSERT(!peer->amInterested);
|
||||
CPPUNIT_ASSERT(!peer->amInterested());
|
||||
msg.onSendComplete();
|
||||
CPPUNIT_ASSERT(peer->amInterested);
|
||||
CPPUNIT_ASSERT(peer->amInterested());
|
||||
}
|
||||
|
||||
void BtInterestedMessageTest::testToString() {
|
||||
|
|
|
@ -64,22 +64,24 @@ void BtNotInterestedMessageTest::testGetMessage() {
|
|||
|
||||
void BtNotInterestedMessageTest::testDoReceivedAction() {
|
||||
SharedHandle<Peer> peer = new Peer("host", 6969);
|
||||
peer->peerInterested = true;
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
peer->peerInterested(true);
|
||||
BtNotInterestedMessage msg;
|
||||
msg.setPeer(peer);
|
||||
CPPUNIT_ASSERT(peer->peerInterested);
|
||||
CPPUNIT_ASSERT(peer->peerInterested());
|
||||
msg.doReceivedAction();
|
||||
CPPUNIT_ASSERT(!peer->peerInterested);
|
||||
CPPUNIT_ASSERT(!peer->peerInterested());
|
||||
}
|
||||
|
||||
void BtNotInterestedMessageTest::testOnSendComplete() {
|
||||
SharedHandle<Peer> peer = new Peer("host", 6969);
|
||||
peer->amInterested = true;
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
peer->amInterested(true);
|
||||
BtNotInterestedMessage msg;
|
||||
msg.setPeer(peer);
|
||||
CPPUNIT_ASSERT(peer->amInterested);
|
||||
CPPUNIT_ASSERT(peer->amInterested());
|
||||
msg.onSendComplete();
|
||||
CPPUNIT_ASSERT(!peer->amInterested);
|
||||
CPPUNIT_ASSERT(!peer->amInterested());
|
||||
}
|
||||
|
||||
void BtNotInterestedMessageTest::testToString() {
|
||||
|
|
|
@ -88,9 +88,11 @@ public:
|
|||
btContext->setTotalLength(256*1024);
|
||||
|
||||
peer = new Peer("host", 6969);
|
||||
peer->allocateSessionResource(btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
|
||||
new PeerObjectCluster());
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), new PeerObject());
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getID(), new PeerObject());
|
||||
btMessageDispatcher = new MockBtMessageDispatcher();
|
||||
PEER_OBJECT(btContext, peer)->btMessageDispatcher = btMessageDispatcher;
|
||||
PEER_OBJECT(btContext, peer)->btMessageFactory = new MockBtMessageFactory2();
|
||||
|
|
|
@ -76,12 +76,13 @@ public:
|
|||
void setUp() {
|
||||
BtRegistry::unregisterAll();
|
||||
peer = new Peer("host", 6969);
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
|
||||
SharedHandle<MockBtContext> btContext = new MockBtContext();
|
||||
btContext->setInfoHash((const unsigned char*)"12345678901234567890");
|
||||
BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
|
||||
new PeerObjectCluster());
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), new PeerObject());
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getID(), new PeerObject());
|
||||
dispatcher = new MockBtMessageDispatcher2();
|
||||
PEER_OBJECT(btContext, peer)->btMessageDispatcher = dispatcher;
|
||||
|
||||
|
|
|
@ -108,10 +108,11 @@ public:
|
|||
pieceStorage);
|
||||
|
||||
peer = new Peer("host", 6969);
|
||||
|
||||
peer->allocateSessionResource(btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
|
||||
new PeerObjectCluster());
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), new PeerObject());
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getID(), new PeerObject());
|
||||
|
||||
dispatcher = new MockBtMessageDispatcher();
|
||||
|
||||
|
@ -177,7 +178,7 @@ void BtRequestMessageTest::testGetMessage() {
|
|||
}
|
||||
|
||||
void BtRequestMessageTest::testDoReceivedAction_hasPieceAndAmNotChoking() {
|
||||
peer->amChoking = false;
|
||||
peer->amChoking(false);
|
||||
msg->doReceivedAction();
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)1, dispatcher->messageQueue.size());
|
||||
|
@ -189,7 +190,7 @@ void BtRequestMessageTest::testDoReceivedAction_hasPieceAndAmNotChoking() {
|
|||
}
|
||||
|
||||
void BtRequestMessageTest::testDoReceivedAction_hasPieceAndAmChokingAndFastExtensionEnabled() {
|
||||
peer->amChoking = true;
|
||||
peer->amChoking(true);
|
||||
peer->setFastExtensionEnabled(true);
|
||||
msg->doReceivedAction();
|
||||
|
||||
|
@ -202,7 +203,7 @@ void BtRequestMessageTest::testDoReceivedAction_hasPieceAndAmChokingAndFastExten
|
|||
}
|
||||
|
||||
void BtRequestMessageTest::testDoReceivedAction_hasPieceAndAmChokingAndFastExtensionDisabled() {
|
||||
peer->amChoking = true;
|
||||
peer->amChoking(true);
|
||||
msg->doReceivedAction();
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)0, dispatcher->messageQueue.size());
|
||||
|
@ -210,7 +211,7 @@ void BtRequestMessageTest::testDoReceivedAction_hasPieceAndAmChokingAndFastExten
|
|||
|
||||
void BtRequestMessageTest::testDoReceivedAction_doesntHavePieceAndFastExtensionEnabled() {
|
||||
msg->setIndex(2);
|
||||
peer->amChoking = false;
|
||||
peer->amChoking(false);
|
||||
peer->setFastExtensionEnabled(true);
|
||||
msg->doReceivedAction();
|
||||
|
||||
|
@ -224,7 +225,7 @@ void BtRequestMessageTest::testDoReceivedAction_doesntHavePieceAndFastExtensionE
|
|||
|
||||
void BtRequestMessageTest::testDoReceivedAction_doesntHavePieceAndFastExtensionDisabled() {
|
||||
msg->setIndex(2);
|
||||
peer->amChoking = false;
|
||||
peer->amChoking(false);
|
||||
msg->doReceivedAction();
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)0, dispatcher->messageQueue.size());
|
||||
|
|
|
@ -63,24 +63,26 @@ void BtUnchokeMessageTest::testGetMessage() {
|
|||
|
||||
void BtUnchokeMessageTest::testDoReceivedAction() {
|
||||
SharedHandle<Peer> peer = new Peer("host", 6969);
|
||||
peer->peerChoking = true;
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
peer->peerChoking(true);
|
||||
BtUnchokeMessage msg;
|
||||
msg.setPeer(peer);
|
||||
|
||||
CPPUNIT_ASSERT(peer->peerChoking);
|
||||
CPPUNIT_ASSERT(peer->peerChoking());
|
||||
msg.doReceivedAction();
|
||||
CPPUNIT_ASSERT(!peer->peerChoking);
|
||||
CPPUNIT_ASSERT(!peer->peerChoking());
|
||||
}
|
||||
|
||||
void BtUnchokeMessageTest::testOnSendComplete() {
|
||||
SharedHandle<Peer> peer = new Peer("host", 6969);
|
||||
peer->amChoking = true;
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
peer->amChoking(true);
|
||||
BtUnchokeMessage msg;
|
||||
msg.setPeer(peer);
|
||||
|
||||
CPPUNIT_ASSERT(peer->amChoking);
|
||||
CPPUNIT_ASSERT(peer->amChoking());
|
||||
msg.onSendComplete();
|
||||
CPPUNIT_ASSERT(!peer->amChoking);
|
||||
CPPUNIT_ASSERT(!peer->amChoking());
|
||||
}
|
||||
|
||||
void BtUnchokeMessageTest::testToString() {
|
||||
|
|
|
@ -134,6 +134,8 @@ public:
|
|||
btContext = new DefaultBtContext();
|
||||
btContext->load("test.torrent");
|
||||
peer = new Peer("192.168.0.1", 6969);
|
||||
peer->allocateSessionResource(btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
peerStorage = new MockPeerStorage();
|
||||
pieceStorage = new MockPieceStorage();
|
||||
BtRegistry::unregisterAll();
|
||||
|
@ -147,7 +149,7 @@ public:
|
|||
SharedHandle<PeerObject> peerObject = new PeerObject();
|
||||
peerObject->btMessageFactory = new MockBtMessageFactory2();
|
||||
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), peerObject);
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getID(), peerObject);
|
||||
|
||||
btMessageDispatcher = new DefaultBtMessageDispatcher();
|
||||
btMessageDispatcher->setCuid(1);
|
||||
|
@ -328,7 +330,7 @@ void DefaultBtMessageDispatcherTest::testCheckRequestSlotAndDoNecessaryThing_tim
|
|||
CPPUNIT_ASSERT_EQUAL((size_t)0, btMessageDispatcher->getMessageQueue().size());
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)0, btMessageDispatcher->getRequestSlots().size());
|
||||
CPPUNIT_ASSERT_EQUAL(false, piece->isBlockUsed(0));
|
||||
CPPUNIT_ASSERT_EQUAL(true, peer->snubbing);
|
||||
CPPUNIT_ASSERT_EQUAL(true, peer->snubbing());
|
||||
}
|
||||
|
||||
void DefaultBtMessageDispatcherTest::testCheckRequestSlotAndDoNecessaryThing_completeBlock() {
|
||||
|
|
|
@ -40,6 +40,7 @@ public:
|
|||
_btContext = btContext;
|
||||
|
||||
_peer = new Peer("192.168.0.1", 6969);
|
||||
_peer->allocateSessionResource(1024, 1024*1024);
|
||||
_peer->setExtendedMessagingEnabled(true);
|
||||
|
||||
SharedHandle<MockExtensionMessageFactory> exmsgFactory =
|
||||
|
@ -49,7 +50,7 @@ public:
|
|||
SharedHandle<PeerObject> peerObject = new PeerObject();
|
||||
peerObject->extensionMessageFactory = exmsgFactory;
|
||||
|
||||
PEER_OBJECT_CLUSTER(_btContext)->registerHandle(_peer->getId(), peerObject);
|
||||
PEER_OBJECT_CLUSTER(_btContext)->registerHandle(_peer->getID(), peerObject);
|
||||
}
|
||||
|
||||
void tearDown()
|
||||
|
|
|
@ -97,7 +97,7 @@ public:
|
|||
new PeerObjectCluster());
|
||||
SharedHandle<PeerObject> peerObject = new PeerObject();
|
||||
peerObject->btMessageFactory = new MockBtMessageFactory2();
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), peerObject);
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getID(), peerObject);
|
||||
|
||||
btRequestFactory = new DefaultBtRequestFactory();
|
||||
btRequestFactory->setBtContext(btContext);
|
||||
|
|
|
@ -39,6 +39,7 @@ public:
|
|||
btRuntime);
|
||||
|
||||
_peer = new Peer("192.168.0.1", 6969);
|
||||
_peer->allocateSessionResource(1024, 1024*1024);
|
||||
_peer->setExtension("ut_pex", 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ void DefaultPeerStorageTest::testDeleteUnusedPeer() {
|
|||
ps.addPeer(peer1);
|
||||
ps.addPeer(peer2);
|
||||
|
||||
peer2->cuid = 1;
|
||||
peer2->usedBy(1);
|
||||
|
||||
ps.deleteUnusedPeer(3);
|
||||
|
||||
|
@ -117,7 +117,7 @@ void DefaultPeerStorageTest::testAddPeer() {
|
|||
|
||||
SharedHandle<Peer> peer4(new Peer("192.168.0.4", 6889));
|
||||
|
||||
peer1->cuid = 1;
|
||||
peer1->usedBy(1);
|
||||
CPPUNIT_ASSERT(ps.addPeer(peer4));
|
||||
// peer2 was deleted. While peer1 is oldest, its cuid is not 0.
|
||||
CPPUNIT_ASSERT_EQUAL((int32_t)3, ps.countPeer());
|
||||
|
@ -142,7 +142,7 @@ void DefaultPeerStorageTest::testGetUnusedPeer() {
|
|||
CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"),
|
||||
ps.getUnusedPeer()->ipaddr);
|
||||
|
||||
peer1->cuid = 1;
|
||||
peer1->usedBy(1);
|
||||
|
||||
CPPUNIT_ASSERT(ps.getUnusedPeer().isNull());
|
||||
|
||||
|
@ -164,7 +164,7 @@ void DefaultPeerStorageTest::testIsPeerAvailable() {
|
|||
|
||||
CPPUNIT_ASSERT_EQUAL(true, ps.isPeerAvailable());
|
||||
|
||||
peer1->cuid = 1;
|
||||
peer1->usedBy(1);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(false, ps.isPeerAvailable());
|
||||
|
||||
|
@ -188,7 +188,8 @@ void DefaultPeerStorageTest::testActivatePeer() {
|
|||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)0, ps.getActivePeers().size());
|
||||
|
||||
peer1->activate();
|
||||
peer1->allocateSessionResource(btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)1, ps.getActivePeers().size());
|
||||
}
|
||||
|
@ -201,7 +202,11 @@ void DefaultPeerStorageTest::testReturnPeer()
|
|||
DefaultPeerStorage ps(btContext, option);
|
||||
|
||||
SharedHandle<Peer> peer1(new Peer("192.168.0.1", 0));
|
||||
peer1->allocateSessionResource(btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
SharedHandle<Peer> peer2(new Peer("192.168.0.2", 6889));
|
||||
peer2->allocateSessionResource(btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
SharedHandle<Peer> peer3(new Peer("192.168.0.1", 6889));
|
||||
ps.addPeer(peer1);
|
||||
ps.addPeer(peer2);
|
||||
|
|
|
@ -43,8 +43,8 @@ public:
|
|||
btContext = new DefaultBtContext();
|
||||
btContext->load("test.torrent");
|
||||
peer = new Peer("192.168.0.1", 6889);
|
||||
peer->allocateBitfield(btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
peer->allocateSessionResource(btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
option = new Option();
|
||||
}
|
||||
|
||||
|
|
|
@ -74,6 +74,7 @@ void HandshakeExtensionMessageTest::testToString()
|
|||
void HandshakeExtensionMessageTest::testDoReceivedAction()
|
||||
{
|
||||
SharedHandle<Peer> peer = new Peer("192.168.0.1", 0);
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
HandshakeExtensionMessage msg;
|
||||
msg.setClientVersion("aria2");
|
||||
msg.setTCPPort(6889);
|
||||
|
|
|
@ -91,6 +91,7 @@ aria2c_SOURCES += BtAllowedFastMessageTest.cc\
|
|||
MetaFileUtilTest.cc\
|
||||
ByteArrayDiskWriterTest.cc\
|
||||
PeerTest.cc\
|
||||
PeerSessionResourceTest.cc\
|
||||
PeerMessageUtilTest.cc\
|
||||
ShareRatioSeedCriteriaTest.cc\
|
||||
BtRegistryTest.cc\
|
||||
|
|
|
@ -76,6 +76,7 @@ check_PROGRAMS = $(am__EXEEXT_1)
|
|||
@ENABLE_BITTORRENT_TRUE@ MetaFileUtilTest.cc\
|
||||
@ENABLE_BITTORRENT_TRUE@ ByteArrayDiskWriterTest.cc\
|
||||
@ENABLE_BITTORRENT_TRUE@ PeerTest.cc\
|
||||
@ENABLE_BITTORRENT_TRUE@ PeerSessionResourceTest.cc\
|
||||
@ENABLE_BITTORRENT_TRUE@ PeerMessageUtilTest.cc\
|
||||
@ENABLE_BITTORRENT_TRUE@ ShareRatioSeedCriteriaTest.cc\
|
||||
@ENABLE_BITTORRENT_TRUE@ BtRegistryTest.cc\
|
||||
|
@ -186,7 +187,8 @@ am__aria2c_SOURCES_DIST = AllTest.cc SocketCoreTest.cc \
|
|||
DefaultPeerListProcessorTest.cc AnnounceListTest.cc \
|
||||
DefaultPeerStorageTest.cc MockPeerStorage.h DataTest.cc \
|
||||
DictionaryTest.cc ListTest.cc MetaFileUtilTest.cc \
|
||||
ByteArrayDiskWriterTest.cc PeerTest.cc PeerMessageUtilTest.cc \
|
||||
ByteArrayDiskWriterTest.cc PeerTest.cc \
|
||||
PeerSessionResourceTest.cc PeerMessageUtilTest.cc \
|
||||
ShareRatioSeedCriteriaTest.cc BtRegistryTest.cc \
|
||||
BtDependencyTest.cc BtPostDownloadHandlerTest.cc \
|
||||
DownloadHandlerFactoryTest.cc TimeSeedCriteriaTest.cc \
|
||||
|
@ -245,6 +247,7 @@ am__aria2c_SOURCES_DIST = AllTest.cc SocketCoreTest.cc \
|
|||
@ENABLE_BITTORRENT_TRUE@ MetaFileUtilTest.$(OBJEXT) \
|
||||
@ENABLE_BITTORRENT_TRUE@ ByteArrayDiskWriterTest.$(OBJEXT) \
|
||||
@ENABLE_BITTORRENT_TRUE@ PeerTest.$(OBJEXT) \
|
||||
@ENABLE_BITTORRENT_TRUE@ PeerSessionResourceTest.$(OBJEXT) \
|
||||
@ENABLE_BITTORRENT_TRUE@ PeerMessageUtilTest.$(OBJEXT) \
|
||||
@ENABLE_BITTORRENT_TRUE@ ShareRatioSeedCriteriaTest.$(OBJEXT) \
|
||||
@ENABLE_BITTORRENT_TRUE@ BtRegistryTest.$(OBJEXT) \
|
||||
|
@ -718,6 +721,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PStringBuildVisitorTest.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParameterizedStringParserTest.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerMessageUtilTest.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerSessionResourceTest.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerTest.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PieceTest.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RequestGroupManTest.Po@am__quote@
|
||||
|
|
|
@ -0,0 +1,254 @@
|
|||
#include "PeerSessionResource.h"
|
||||
#include "Exception.h"
|
||||
#include "Util.h"
|
||||
#include <cppunit/extensions/HelperMacros.h>
|
||||
|
||||
namespace aria2 {
|
||||
|
||||
class PeerSessionResourceTest:public CppUnit::TestFixture {
|
||||
|
||||
CPPUNIT_TEST_SUITE(PeerSessionResourceTest);
|
||||
CPPUNIT_TEST(testPeerAllowedIndexSetContains);
|
||||
CPPUNIT_TEST(testAmAllowedIndexSetContains);
|
||||
CPPUNIT_TEST(testHasAllPieces);
|
||||
CPPUNIT_TEST(testHasPiece);
|
||||
CPPUNIT_TEST(testUpdateUploadLength);
|
||||
CPPUNIT_TEST(testUpdateDownloadLength);
|
||||
CPPUNIT_TEST(testUpdateLatency);
|
||||
CPPUNIT_TEST(testExtendedMessageEnabled);
|
||||
CPPUNIT_TEST(testGetExtensionMessageID);
|
||||
CPPUNIT_TEST(testFastExtensionEnabled);
|
||||
CPPUNIT_TEST(testSnubbing);
|
||||
CPPUNIT_TEST(testAmChoking);
|
||||
CPPUNIT_TEST(testAmInterested);
|
||||
CPPUNIT_TEST(testPeerChoking);
|
||||
CPPUNIT_TEST(testPeerInterested);
|
||||
CPPUNIT_TEST(testChokingRequired);
|
||||
CPPUNIT_TEST(testOptUnchoking);
|
||||
CPPUNIT_TEST(testShouldBeChoking);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
public:
|
||||
void setUp() {}
|
||||
|
||||
void tearDown() {}
|
||||
|
||||
void testPeerAllowedIndexSetContains();
|
||||
void testAmAllowedIndexSetContains();
|
||||
void testHasAllPieces();
|
||||
void testHasPiece();
|
||||
void testUpdateUploadLength();
|
||||
void testUpdateDownloadLength();
|
||||
void testUpdateLatency();
|
||||
void testExtendedMessageEnabled();
|
||||
void testGetExtensionMessageID();
|
||||
void testFastExtensionEnabled();
|
||||
void testSnubbing();
|
||||
void testAmChoking();
|
||||
void testAmInterested();
|
||||
void testPeerChoking();
|
||||
void testPeerInterested();
|
||||
void testChokingRequired();
|
||||
void testOptUnchoking();
|
||||
void testShouldBeChoking();
|
||||
};
|
||||
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(PeerSessionResourceTest);
|
||||
|
||||
void PeerSessionResourceTest::testPeerAllowedIndexSetContains()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
res.addPeerAllowedIndex(567);
|
||||
res.addPeerAllowedIndex(789);
|
||||
|
||||
CPPUNIT_ASSERT(res.peerAllowedIndexSetContains(567));
|
||||
CPPUNIT_ASSERT(res.peerAllowedIndexSetContains(789));
|
||||
CPPUNIT_ASSERT(!res.peerAllowedIndexSetContains(123));
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testAmAllowedIndexSetContains()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
res.addAmAllowedIndex(567);
|
||||
res.addAmAllowedIndex(789);
|
||||
|
||||
CPPUNIT_ASSERT(res.amAllowedIndexSetContains(567));
|
||||
CPPUNIT_ASSERT(res.amAllowedIndexSetContains(789));
|
||||
CPPUNIT_ASSERT(!res.amAllowedIndexSetContains(123));
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testHasAllPieces()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(!res.hasAllPieces());
|
||||
res.markSeeder();
|
||||
CPPUNIT_ASSERT(res.hasAllPieces());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testHasPiece()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(!res.hasPiece(300));
|
||||
res.updateBitfield(300, 1);
|
||||
CPPUNIT_ASSERT(res.hasPiece(300));
|
||||
res.updateBitfield(300, 0);
|
||||
CPPUNIT_ASSERT(!res.hasPiece(300));
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testUpdateUploadLength()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((int64_t)0, res.uploadLength());
|
||||
res.updateUploadLength(100);
|
||||
res.updateUploadLength(200);
|
||||
CPPUNIT_ASSERT_EQUAL((int64_t)300, res.uploadLength());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testUpdateDownloadLength()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((int64_t)0, res.downloadLength());
|
||||
res.updateDownloadLength(100);
|
||||
res.updateDownloadLength(200);
|
||||
CPPUNIT_ASSERT_EQUAL((int64_t)300, res.downloadLength());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testUpdateLatency()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(1500, res.latency());
|
||||
res.updateLatency(1000);
|
||||
CPPUNIT_ASSERT_EQUAL(1100, res.latency());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testExtendedMessageEnabled()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(!res.extendedMessagingEnabled());
|
||||
res.extendedMessagingEnabled(true);
|
||||
CPPUNIT_ASSERT(res.extendedMessagingEnabled());
|
||||
res.extendedMessagingEnabled(false);
|
||||
CPPUNIT_ASSERT(!res.extendedMessagingEnabled());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testGetExtensionMessageID()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
res.addExtension("a2", 9);
|
||||
CPPUNIT_ASSERT_EQUAL((uint8_t)9, res.getExtensionMessageID("a2"));
|
||||
CPPUNIT_ASSERT_EQUAL((uint8_t)0, res.getExtensionMessageID("non"));
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("a2"), res.getExtensionName(9));
|
||||
CPPUNIT_ASSERT_EQUAL(std::string(""), res.getExtensionName(10));
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testFastExtensionEnabled()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(!res.fastExtensionEnabled());
|
||||
res.fastExtensionEnabled(true);
|
||||
CPPUNIT_ASSERT(res.fastExtensionEnabled());
|
||||
res.fastExtensionEnabled(false);
|
||||
CPPUNIT_ASSERT(!res.fastExtensionEnabled());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testSnubbing()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(!res.snubbing());
|
||||
res.snubbing(true);
|
||||
CPPUNIT_ASSERT(res.snubbing());
|
||||
res.snubbing(false);
|
||||
CPPUNIT_ASSERT(!res.snubbing());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testAmChoking()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(res.amChoking());
|
||||
res.amChoking(false);
|
||||
CPPUNIT_ASSERT(!res.amChoking());
|
||||
res.amChoking(true);
|
||||
CPPUNIT_ASSERT(res.amChoking());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testAmInterested()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(!res.amInterested());
|
||||
res.amInterested(true);
|
||||
CPPUNIT_ASSERT(res.amInterested());
|
||||
res.amInterested(false);
|
||||
CPPUNIT_ASSERT(!res.amInterested());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testPeerChoking()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(res.peerChoking());
|
||||
res.peerChoking(false);
|
||||
CPPUNIT_ASSERT(!res.peerChoking());
|
||||
res.peerChoking(true);
|
||||
CPPUNIT_ASSERT(res.peerChoking());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testPeerInterested()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(!res.peerInterested());
|
||||
res.peerInterested(true);
|
||||
CPPUNIT_ASSERT(res.peerInterested());
|
||||
res.peerInterested(false);
|
||||
CPPUNIT_ASSERT(!res.peerInterested());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testChokingRequired()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(res.chokingRequired());
|
||||
res.chokingRequired(false);
|
||||
CPPUNIT_ASSERT(!res.chokingRequired());
|
||||
res.chokingRequired(true);
|
||||
CPPUNIT_ASSERT(res.chokingRequired());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testOptUnchoking()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(!res.optUnchoking());
|
||||
res.optUnchoking(true);
|
||||
CPPUNIT_ASSERT(res.optUnchoking());
|
||||
res.optUnchoking(false);
|
||||
CPPUNIT_ASSERT(!res.optUnchoking());
|
||||
}
|
||||
|
||||
void PeerSessionResourceTest::testShouldBeChoking()
|
||||
{
|
||||
PeerSessionResource res(1024, 1024*1024);
|
||||
|
||||
CPPUNIT_ASSERT(res.shouldBeChoking());
|
||||
res.chokingRequired(false);
|
||||
CPPUNIT_ASSERT(!res.shouldBeChoking());
|
||||
res.chokingRequired(true);
|
||||
res.optUnchoking(true);
|
||||
CPPUNIT_ASSERT(!res.shouldBeChoking());
|
||||
}
|
||||
|
||||
} // namespace aria2
|
|
@ -18,6 +18,7 @@ public:
|
|||
|
||||
void setUp() {
|
||||
peer = new Peer("localhost", 6969);
|
||||
peer->allocateSessionResource(1024, 1024*1024);
|
||||
}
|
||||
|
||||
void testPeerAllowedIndexSet();
|
||||
|
@ -43,7 +44,7 @@ void PeerTest::testAmAllowedIndexSet() {
|
|||
|
||||
void PeerTest::testGetId() {
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("f05897fc14a41cb3400e283e189158656d7184da"),
|
||||
peer->getId());
|
||||
peer->getID());
|
||||
}
|
||||
|
||||
void PeerTest::testOperatorEqual()
|
||||
|
|
|
@ -72,7 +72,7 @@ void UTPexExtensionMessageTest::testGetBencodedData()
|
|||
{
|
||||
UTPexExtensionMessage msg(1);
|
||||
SharedHandle<Peer> p1 = new Peer("192.168.0.1", 6881);
|
||||
p1->allocateBitfield(256*1024, 1024*1024);
|
||||
p1->allocateSessionResource(256*1024, 1024*1024);
|
||||
p1->setAllBitfield();
|
||||
msg.addFreshPeer(p1);// added seeder, check add.f flag
|
||||
SharedHandle<Peer> p2 = new Peer("10.1.1.2", 9999);
|
||||
|
@ -105,7 +105,7 @@ void UTPexExtensionMessageTest::testToString()
|
|||
{
|
||||
UTPexExtensionMessage msg(1);
|
||||
SharedHandle<Peer> p1 = new Peer("192.168.0.1", 6881);
|
||||
p1->allocateBitfield(256*1024, 1024*1024);
|
||||
p1->allocateSessionResource(256*1024, 1024*1024);
|
||||
p1->setAllBitfield();
|
||||
msg.addFreshPeer(p1);// added seeder, check add.f flag
|
||||
SharedHandle<Peer> p2 = new Peer("10.1.1.2", 9999);
|
||||
|
@ -121,7 +121,7 @@ void UTPexExtensionMessageTest::testDoReceivedAction()
|
|||
{
|
||||
UTPexExtensionMessage msg(1);
|
||||
SharedHandle<Peer> p1 = new Peer("192.168.0.1", 6881);
|
||||
p1->allocateBitfield(256*1024, 1024*1024);
|
||||
p1->allocateSessionResource(256*1024, 1024*1024);
|
||||
p1->setAllBitfield();
|
||||
msg.addFreshPeer(p1);// added seeder, check add.f flag
|
||||
SharedHandle<Peer> p2 = new Peer("10.1.1.2", 9999);
|
||||
|
|
Loading…
Reference in New Issue