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/PeerReceiveHandshakeCommand.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/PeerReceiveHandshakeCommand.cc')
| -rw-r--r-- | src/PeerReceiveHandshakeCommand.cc | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/src/PeerReceiveHandshakeCommand.cc b/src/PeerReceiveHandshakeCommand.cc index 0c8b7baa..ad89c13f 100644 --- a/src/PeerReceiveHandshakeCommand.cc +++ b/src/PeerReceiveHandshakeCommand.cc @@ -45,6 +45,8 @@ #include "PeerStorage.h" #include "PieceStorage.h" #include "BtRuntime.h" +#include "BtAnnounce.h" +#include "BtProgressInfoFile.h" #include "BtConstants.h" #include "message.h" #include "Socket.h" @@ -57,11 +59,13 @@ namespace aria2 { -PeerReceiveHandshakeCommand::PeerReceiveHandshakeCommand(int32_t cuid, - const PeerHandle& peer, - DownloadEngine* e, - const SocketHandle& s, - const SharedHandle<PeerConnection>& peerConnection): +PeerReceiveHandshakeCommand::PeerReceiveHandshakeCommand +(int32_t cuid, + const PeerHandle& peer, + DownloadEngine* e, + const SocketHandle& s, + const SharedHandle<PeerConnection>& peerConnection) + : PeerAbstractCommand(cuid, peer, e, s), _peerConnection(peerConnection), _thresholdSpeed(e->option->getAsInt(PREF_BT_REQUEST_PEER_SPEED_LIMIT)) @@ -93,28 +97,40 @@ bool PeerReceiveHandshakeCommand::executeInternal() if(dataLength >= 48) { // check info_hash std::string infoHash = Util::toHex(&data[28], INFO_HASH_LENGTH); - BtContextHandle btContext = BtRegistry::getBtContext(infoHash); - if(btContext.isNull() || !BT_RUNTIME(btContext)->ready()) { + + SharedHandle<BtRegistry> btRegistry = e->getBtRegistry(); + SharedHandle<BtContext> btContext = btRegistry->getBtContext(infoHash); + SharedHandle<BtRuntime> btRuntime = btRegistry->getBtRuntime(infoHash); + SharedHandle<PieceStorage> pieceStorage = + btRegistry->getPieceStorage(infoHash); + SharedHandle<PeerStorage> peerStorage = + btRegistry->getPeerStorage(infoHash); + + if(btContext.isNull() || !btRuntime->ready()) { throw DlAbortEx (StringFormat("Unknown info hash %s", infoHash.c_str()).str()); } TransferStat tstat = btContext->getOwnerRequestGroup()->calculateStat(); - if((!PIECE_STORAGE(btContext)->downloadFinished() && + if((!pieceStorage->downloadFinished() && tstat.getDownloadSpeed() < _thresholdSpeed) || - BT_RUNTIME(btContext)->lessThanMaxPeers()) { - if(PEER_STORAGE(btContext)->addPeer(peer)) { + btRuntime->lessThanMaxPeers()) { + if(peerStorage->addPeer(peer)) { peer->usedBy(cuid); PeerInteractionCommand* command = - new PeerInteractionCommand(cuid, - btContext->getOwnerRequestGroup(), - peer, - e, - btContext, - socket, - PeerInteractionCommand::RECEIVER_WAIT_HANDSHAKE, - _peerConnection); + new PeerInteractionCommand + (cuid, + btContext->getOwnerRequestGroup(), + peer, + e, + btContext, + btRuntime, + pieceStorage, + socket, + PeerInteractionCommand::RECEIVER_WAIT_HANDSHAKE, + _peerConnection); + command->setPeerStorage(peerStorage); e->commands.push_back(command); logger->debug(MSG_INCOMING_PEER_CONNECTION, cuid, peer->usedBy()); } |
