diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-11-03 06:49:02 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-11-03 06:49:02 +0000 |
| commit | 7cf589e78483e6ca7daff2ddd1a30af8091a4448 (patch) | |
| tree | d595de6899aa7ddad9ad6242c9f50dd6c2a85e22 /src/PeerInteractionCommand.cc | |
| parent | 93edc7bd202df92174cc4ce3b8c0c0c7684170fd (diff) | |
2008-11-03 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Made BtRegistry non-static object. Now DownloadEngine has a
reference to its object.
* src/AbstractBtMessage.cc
* src/ActivePeerConnectionCommand.cc
* src/ActivePeerConnectionCommand.h
* src/BtContextAwareCommand.cc
* src/BtContextAwareCommand.h
* src/BtExtendedMessage.cc
* src/BtExtendedMessage.h
* src/BtInterestedMessage.cc
* src/BtInterestedMessage.h
* src/BtNotInterestedMessage.cc
* src/BtNotInterestedMessage.h
* src/BtRegistry.cc
* src/BtRegistry.h
* src/BtSeederStateChoke.cc
* src/BtSetup.cc
* src/DHTGetPeersCommand.cc
* src/DHTGetPeersCommand.h
* src/DHTPeerAnnounceEntry.cc
* src/DHTPeerAnnounceEntry.h
* src/DHTPeerAnnounceStorage.cc
* src/DHTPeerAnnounceStorage.h
* src/DHTPeerLookupTask.cc
* src/DHTPeerLookupTask.h
* src/DHTSetup.cc
* src/DHTSetup.h
* src/DHTTaskFactory.h
* src/DHTTaskFactoryImpl.cc
* src/DHTTaskFactoryImpl.h
* src/DefaultBtAnnounce.cc
* src/DefaultBtInteractive.cc
* src/DefaultBtInteractive.h
* src/DefaultBtMessageDispatcher.cc
* src/DefaultBtMessageDispatcher.h
* src/DefaultBtMessageFactory.cc
* src/DefaultBtMessageFactory.h
* src/DefaultBtMessageReceiver.cc
* src/DefaultBtProgressInfoFile.cc
* src/DefaultBtProgressInfoFile.h
* src/DefaultBtRequestFactory.cc
* src/DefaultBtRequestFactory.h
* src/DefaultExtensionMessageFactory.cc
* src/DefaultExtensionMessageFactory.h
* src/DefaultPeerStorage.cc
* src/DefaultPeerStorage.h
* src/DownloadEngine.cc
* src/DownloadEngine.h
* src/InitiatorMSEHandshakeCommand.cc
* src/InitiatorMSEHandshakeCommand.h
* src/MSEHandshake.cc
* src/MSEHandshake.h
* src/Makefile.am
* src/Makefile.in
* src/PeerChokeCommand.cc
* src/PeerChokeCommand.h
* src/PeerInitiateConnectionCommand.cc
* src/PeerInitiateConnectionCommand.h
* src/PeerInteractionCommand.cc
* src/PeerInteractionCommand.h
* src/PeerObject.h
* src/PeerReceiveHandshakeCommand.cc
* src/PeerReceiveHandshakeCommand.h
* src/ReceiverMSEHandshakeCommand.cc
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/RequestGroupMan.h
* src/SeedCheckCommand.cc
* src/SeedCheckCommand.h
* src/ShareRatioSeedCriteria.h
* src/SimpleBtMessage.cc
* src/TrackerWatcherCommand.cc
* src/TrackerWatcherCommand.h
* src/UTPexExtensionMessage.cc
* src/UTPexExtensionMessage.h
* test/BtCancelMessageTest.cc
* test/BtChokeMessageTest.cc
* test/BtExtendedMessageTest.cc
* test/BtInterestedMessageTest.cc
* test/BtNotInterestedMessageTest.cc
* test/BtPieceMessageTest.cc
* test/BtPortMessageTest.cc
* test/BtRegistryTest.cc
* test/BtRejectMessageTest.cc
* test/BtRequestMessageTest.cc
* test/DHTPeerAnnounceEntryTest.cc
* test/DHTPeerAnnounceStorageTest.cc
* test/DefaultBtMessageDispatcherTest.cc
* test/DefaultBtMessageFactoryTest.cc
* test/DefaultBtProgressInfoFileTest.cc
* test/DefaultBtRequestFactoryTest.cc
* test/DefaultExtensionMessageFactoryTest.cc
* test/MSEHandshakeTest.cc
* test/MockDHTTaskFactory.h
* test/ShareRatioSeedCriteriaTest.cc
* test/UTPexExtensionMessageTest.cc
Diffstat (limited to 'src/PeerInteractionCommand.cc')
| -rw-r--r-- | src/PeerInteractionCommand.cc | 123 |
1 files changed, 79 insertions, 44 deletions
diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc index a0324371..50d9c7e8 100644 --- a/src/PeerInteractionCommand.cc +++ b/src/PeerInteractionCommand.cc @@ -33,6 +33,9 @@ */ /* copyright --> */ #include "PeerInteractionCommand.h" + +#include <algorithm> + #include "DownloadEngine.h" #include "PeerInitiateConnectionCommand.h" #include "DefaultBtInteractive.h" @@ -43,7 +46,6 @@ #include "Option.h" #include "BtContext.h" #include "BtRegistry.h" -#include "PeerObject.h" #include "Peer.h" #include "BtMessage.h" #include "BtRuntime.h" @@ -64,21 +66,28 @@ #include "DHTRegistry.h" #include "PieceStorage.h" #include "RequestGroup.h" -#include <algorithm> +#include "BtAnnounce.h" +#include "BtProgressInfoFile.h" +#include "DefaultExtensionMessageFactory.h" namespace aria2 { -PeerInteractionCommand::PeerInteractionCommand(int32_t cuid, - RequestGroup* requestGroup, - const PeerHandle& p, - DownloadEngine* e, - const BtContextHandle& btContext, - const SocketHandle& s, - Seq sequence, - const PeerConnectionHandle& passedPeerConnection) +PeerInteractionCommand::PeerInteractionCommand +(int32_t cuid, + RequestGroup* requestGroup, + const PeerHandle& p, + DownloadEngine* e, + const SharedHandle<BtContext>& btContext, + const SharedHandle<BtRuntime>& btRuntime, + const SharedHandle<PieceStorage>& pieceStorage, + const SocketHandle& s, + Seq sequence, + const PeerConnectionHandle& passedPeerConnection) :PeerAbstractCommand(cuid, p, e, s), - BtContextAwareCommand(btContext), RequestGroupAware(requestGroup), + _btContext(btContext), + _btRuntime(btRuntime), + _pieceStorage(pieceStorage), sequence(sequence), maxDownloadSpeedLimit(0) { @@ -88,9 +97,21 @@ PeerInteractionCommand::PeerInteractionCommand(int32_t cuid, setWriteCheckSocket(socket); setTimeout(e->option->getAsInt(PREF_PEER_CONNECTION_TIMEOUT)); } - DefaultBtMessageFactoryHandle factory(new DefaultBtMessageFactory()); + + SharedHandle<BtRegistry> btRegistry = e->getBtRegistry(); + SharedHandle<PeerStorage> peerStorage = + btRegistry->getPeerStorage(_btContext->getInfoHashAsString()); + + SharedHandle<DefaultExtensionMessageFactory> extensionMessageFactory + (new DefaultExtensionMessageFactory(_btContext, peer)); + extensionMessageFactory->setPeerStorage(peerStorage); + + SharedHandle<DefaultBtMessageFactory> factory(new DefaultBtMessageFactory()); factory->setCuid(cuid); - factory->setBtContext(btContext); + factory->setBtContext(_btContext); + factory->setPieceStorage(pieceStorage); + factory->setPeerStorage(peerStorage); + factory->setExtensionMessageFactory(extensionMessageFactory); factory->setPeer(peer); factory->setLocalNode(DHTRegistry::_localNode); factory->setRoutingTable(DHTRegistry::_routingTable); @@ -104,39 +125,52 @@ PeerInteractionCommand::PeerInteractionCommand(int32_t cuid, peerConnection = passedPeerConnection; } - DefaultBtMessageDispatcherHandle dispatcher(new DefaultBtMessageDispatcher()); + SharedHandle<DefaultBtMessageDispatcher> dispatcher + (new DefaultBtMessageDispatcher()); dispatcher->setCuid(cuid); dispatcher->setPeer(peer); - dispatcher->setBtContext(btContext); - dispatcher->setMaxUploadSpeedLimit(e->option->getAsInt(PREF_MAX_UPLOAD_LIMIT)); + dispatcher->setBtContext(_btContext); + dispatcher->setPieceStorage(pieceStorage); + dispatcher->setPeerStorage(peerStorage); + dispatcher->setMaxUploadSpeedLimit + (e->option->getAsInt(PREF_MAX_UPLOAD_LIMIT)); dispatcher->setRequestTimeout(e->option->getAsInt(PREF_BT_REQUEST_TIMEOUT)); dispatcher->setBtMessageFactory(factory); DefaultBtMessageReceiverHandle receiver(new DefaultBtMessageReceiver()); receiver->setCuid(cuid); receiver->setPeer(peer); - receiver->setBtContext(btContext); + receiver->setBtContext(_btContext); receiver->setPeerConnection(peerConnection); receiver->setDispatcher(dispatcher); receiver->setBtMessageFactory(factory); - DefaultBtRequestFactoryHandle reqFactory(new DefaultBtRequestFactory()); + SharedHandle<DefaultBtRequestFactory> reqFactory + (new DefaultBtRequestFactory()); reqFactory->setCuid(cuid); reqFactory->setPeer(peer); - reqFactory->setBtContext(btContext); + reqFactory->setBtContext(_btContext); + reqFactory->setPieceStorage(pieceStorage); reqFactory->setBtMessageDispatcher(dispatcher); reqFactory->setBtMessageFactory(factory); - DefaultBtInteractiveHandle btInteractive(new DefaultBtInteractive(btContext, peer)); + DefaultBtInteractiveHandle btInteractive + (new DefaultBtInteractive(_btContext, peer)); + btInteractive->setBtRuntime(_btRuntime); + btInteractive->setPieceStorage(_pieceStorage); + btInteractive->setPeerStorage(peerStorage); // Note: Not a member variable. btInteractive->setCuid(cuid); btInteractive->setBtMessageReceiver(receiver); btInteractive->setDispatcher(dispatcher); btInteractive->setBtRequestFactory(reqFactory); btInteractive->setPeerConnection(peerConnection); - btInteractive->setKeepAliveInterval(e->option->getAsInt(PREF_BT_KEEP_ALIVE_INTERVAL)); - btInteractive->setMaxDownloadSpeedLimit(e->option->getAsInt(PREF_MAX_DOWNLOAD_LIMIT)); + btInteractive->setExtensionMessageFactory(extensionMessageFactory); + btInteractive->setKeepAliveInterval + (e->option->getAsInt(PREF_BT_KEEP_ALIVE_INTERVAL)); + btInteractive->setMaxDownloadSpeedLimit + (e->option->getAsInt(PREF_MAX_DOWNLOAD_LIMIT)); btInteractive->setBtMessageFactory(factory); - if(!btContext->isPrivate()) { + if(!_btContext->isPrivate()) { if(e->option->getAsBool(PREF_ENABLE_PEER_EXCHANGE)) { btInteractive->setUTPexEnabled(true); } @@ -153,32 +187,23 @@ PeerInteractionCommand::PeerInteractionCommand(int32_t cuid, factory->setBtRequestFactory(reqFactory); factory->setPeerConnection(peerConnection); - PeerObjectHandle peerObject(new PeerObject()); - peerObject->btMessageDispatcher = dispatcher; - peerObject->btMessageReceiver = receiver; - peerObject->btMessageFactory = factory; - peerObject->btRequestFactory = reqFactory; - peerObject->peerConnection = peerConnection; - - PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getID(), peerObject); - setUploadLimit(e->option->getAsInt(PREF_MAX_UPLOAD_LIMIT)); - peer->allocateSessionResource(btContext->getPieceLength(), btContext->getTotalLength()); + peer->allocateSessionResource(_btContext->getPieceLength(), + _btContext->getTotalLength()); maxDownloadSpeedLimit = e->option->getAsInt(PREF_MAX_DOWNLOAD_LIMIT); - btRuntime->increaseConnections(); + _btRuntime->increaseConnections(); } PeerInteractionCommand::~PeerInteractionCommand() { if(peer->getCompletedLength() > 0) { - pieceStorage->subtractPieceStats(peer->getBitfield(), - peer->getBitfieldLength()); + _pieceStorage->subtractPieceStats(peer->getBitfield(), + peer->getBitfieldLength()); } peer->releaseSessionResource(); - PEER_OBJECT_CLUSTER(btContext)->unregisterHandle(peer->getID()); - btRuntime->decreaseConnections(); + _btRuntime->decreaseConnections(); //logger->debug("CUID#%d - unregistered message factory using ID:%s", //cuid, peer->getId().c_str()); } @@ -229,7 +254,8 @@ bool PeerInteractionCommand::executeInternal() { if(btInteractive->countReceivedMessageInIteration() > 0) { updateKeepAlive(); } - if((peer->amInterested() && !peer->peerChoking() && (peer->getLatency() < 1500)) || + if((peer->amInterested() && !peer->peerChoking() && + (peer->getLatency() < 1500)) || (peer->peerInterested() && !peer->amChoking())) { // Writable check causes CPU usage high because socket becomes writable @@ -263,15 +289,18 @@ bool PeerInteractionCommand::executeInternal() { // TODO this method removed when PeerBalancerCommand is implemented bool PeerInteractionCommand::prepareForNextPeer(time_t wait) { - if(peerStorage->isPeerAvailable() && btRuntime->lessThanEqMinPeers()) { - PeerHandle peer = peerStorage->getUnusedPeer(); + if(_peerStorage->isPeerAvailable() && _btRuntime->lessThanEqMinPeers()) { + PeerHandle peer = _peerStorage->getUnusedPeer(); peer->usedBy(CUIDCounterSingletonHolder::instance()->newID()); PeerInitiateConnectionCommand* command = new PeerInitiateConnectionCommand(peer->usedBy(), _requestGroup, peer, e, - btContext); + _btContext, + _btRuntime); + command->setPeerStorage(_peerStorage); + command->setPieceStorage(_pieceStorage); e->commands.push_back(command); } return true; @@ -279,7 +308,7 @@ bool PeerInteractionCommand::prepareForNextPeer(time_t wait) { void PeerInteractionCommand::onAbort() { btInteractive->cancelAllPiece(); - peerStorage->returnPeer(peer); + _peerStorage->returnPeer(peer); } void PeerInteractionCommand::onFailure() @@ -289,7 +318,13 @@ void PeerInteractionCommand::onFailure() bool PeerInteractionCommand::exitBeforeExecute() { - return btRuntime->isHalt(); + return _btRuntime->isHalt(); +} + +void PeerInteractionCommand::setPeerStorage +(const SharedHandle<PeerStorage>& peerStorage) +{ + _peerStorage = peerStorage; } } // namespace aria2 |
