diff --git a/ChangeLog b/ChangeLog index ec9190fe..bf038e7c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2009-12-04 Tatsuhiro Tsujikawa + + Halt metadata download immediately when metadata download is done. + Don't wait unresponsive tracker. + * src/ByteArrayDiskWriter.h + * src/DefaultBtInteractive.cc + * src/DefaultExtensionMessageFactory.cc + * src/DefaultExtensionMessageFactory.h + * src/PeerInteractionCommand.cc + * src/UTMetadataDataExtensionMessage.cc + * src/UTMetadataDataExtensionMessage.h + * src/UTMetadataRequestExtensionMessage.cc + * test/UTMetadataDataExtensionMessageTest.cc + * test/UTMetadataRequestExtensionMessageTest.cc + 2009-12-04 Tatsuhiro Tsujikawa Documented --interface option in man page. diff --git a/src/ByteArrayDiskWriter.h b/src/ByteArrayDiskWriter.h index b1b2388d..a3ed00a5 100644 --- a/src/ByteArrayDiskWriter.h +++ b/src/ByteArrayDiskWriter.h @@ -70,6 +70,11 @@ public: { buf.str(s); } + + std::string getString() const + { + return buf.str(); + } }; typedef SharedHandle ByteArrayDiskWriterHandle; diff --git a/src/DefaultBtInteractive.cc b/src/DefaultBtInteractive.cc index df70e063..3655b2b2 100644 --- a/src/DefaultBtInteractive.cc +++ b/src/DefaultBtInteractive.cc @@ -483,6 +483,10 @@ void DefaultBtInteractive::doInteractionProcessing() { _pieceStorage->cancelPiece(_pieceStorage->getPiece(*i)); } } + if(_pieceStorage->downloadFinished()) { + _downloadContext->getOwnerRequestGroup()->setForceHaltRequested + (true, RequestGroup::NONE); + } } } else { checkActiveInteraction(); diff --git a/src/DefaultExtensionMessageFactory.cc b/src/DefaultExtensionMessageFactory.cc index 87261d5d..6dae3cd4 100644 --- a/src/DefaultExtensionMessageFactory.cc +++ b/src/DefaultExtensionMessageFactory.cc @@ -52,7 +52,6 @@ #include "bencode.h" #include "PieceStorage.h" #include "UTMetadataRequestTracker.h" -#include "BtRuntime.h" #include "RequestGroup.h" namespace aria2 { @@ -137,7 +136,6 @@ DefaultExtensionMessageFactory::createMessage(const unsigned char* data, size_t m->setUTMetadataRequestTracker(_tracker); m->setPieceStorage(_dctx->getOwnerRequestGroup()->getPieceStorage()); m->setDownloadContext(_dctx); - m->setBtRuntime(_btRuntime); return m; } case 2: { diff --git a/src/DefaultExtensionMessageFactory.h b/src/DefaultExtensionMessageFactory.h index 778a41ef..9e339bfc 100644 --- a/src/DefaultExtensionMessageFactory.h +++ b/src/DefaultExtensionMessageFactory.h @@ -47,7 +47,6 @@ class DownloadContext; class BtMessageFactory; class BtMessageDispatcher; class UTMetadataRequestTracker; -class BtRuntime; class DefaultExtensionMessageFactory:public ExtensionMessageFactory { private: @@ -59,8 +58,6 @@ private: SharedHandle _dctx; - SharedHandle _btRuntime; - WeakHandle _messageFactory; WeakHandle _dispatcher; @@ -111,11 +108,6 @@ public: { _tracker = tracker; } - - void setBtRuntime(const SharedHandle& btRuntime) - { - _btRuntime = btRuntime; - } }; typedef SharedHandle DefaultExtensionMessageFactoryHandle; diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc index 5255fe0e..2d8d4e2b 100644 --- a/src/PeerInteractionCommand.cc +++ b/src/PeerInteractionCommand.cc @@ -122,7 +122,6 @@ PeerInteractionCommand::PeerInteractionCommand (_requestGroup->getDownloadContext()); extensionMessageFactory->setUTMetadataRequestTracker (utMetadataRequestTracker); - extensionMessageFactory->setBtRuntime(_btRuntime); // PieceStorage will be set later. SharedHandle factory(new DefaultBtMessageFactory()); diff --git a/src/UTMetadataDataExtensionMessage.cc b/src/UTMetadataDataExtensionMessage.cc index ad194830..e425e917 100644 --- a/src/UTMetadataDataExtensionMessage.cc +++ b/src/UTMetadataDataExtensionMessage.cc @@ -45,7 +45,6 @@ #include "bittorrent_helper.h" #include "DiskAdaptor.h" #include "Piece.h" -#include "BtRuntime.h" #include "LogFactory.h" namespace aria2 { @@ -88,7 +87,6 @@ void UTMetadataDataExtensionMessage::doReceivedAction() if(std::string(&infoHash[0], &infoHash[INFO_HASH_LENGTH]) == attrs[bittorrent::INFO_HASH].s()){ _logger->info("Got ut_metadata"); - _btRuntime->setHalt(true); } else { _logger->info("Got wrong ut_metadata"); for(size_t i = 0; i < _dctx->getNumPieces(); ++i) { diff --git a/src/UTMetadataDataExtensionMessage.h b/src/UTMetadataDataExtensionMessage.h index 6551b90c..36927555 100644 --- a/src/UTMetadataDataExtensionMessage.h +++ b/src/UTMetadataDataExtensionMessage.h @@ -42,7 +42,6 @@ namespace aria2 { class DownloadContext; class PieceStorage; class UTMetadataRequestTracker; -class BtRuntime; class Logger; class UTMetadataDataExtensionMessage:public UTMetadataExtensionMessage { @@ -55,8 +54,6 @@ private: SharedHandle _pieceStorage; - SharedHandle _btRuntime; - WeakHandle _tracker; Logger* _logger; @@ -104,11 +101,6 @@ public: { _dctx = dctx; } - - void setBtRuntime(const SharedHandle& btRuntime) - { - _btRuntime = btRuntime; - } }; } // namespace aria2 diff --git a/src/UTMetadataRequestExtensionMessage.cc b/src/UTMetadataRequestExtensionMessage.cc index 8e268f0a..992aee11 100644 --- a/src/UTMetadataRequestExtensionMessage.cc +++ b/src/UTMetadataRequestExtensionMessage.cc @@ -49,7 +49,6 @@ #include "DownloadContext.h" #include "BtMessage.h" #include "PieceStorage.h" -#include "BtRuntime.h" namespace aria2 { diff --git a/test/UTMetadataDataExtensionMessageTest.cc b/test/UTMetadataDataExtensionMessageTest.cc index b7131f8a..7f1c45d0 100644 --- a/test/UTMetadataDataExtensionMessageTest.cc +++ b/test/UTMetadataDataExtensionMessageTest.cc @@ -7,7 +7,6 @@ #include "BtConstants.h" #include "PieceStorage.h" #include "DownloadContext.h" -#include "BtRuntime.h" #include "DirectDiskAdaptor.h" #include "ByteArrayDiskWriter.h" #include "BDE.h" @@ -71,7 +70,6 @@ void UTMetadataDataExtensionMessageTest::testDoReceivedAction() diskAdaptor->setDiskWriter(diskWriter); SharedHandle pieceStorage(new MockPieceStorage()); pieceStorage->setDiskAdaptor(diskAdaptor); - SharedHandle btRuntime(new BtRuntime()); SharedHandle tracker (new UTMetadataRequestTracker()); SharedHandle dctx(new DownloadContext()); @@ -91,7 +89,6 @@ void UTMetadataDataExtensionMessageTest::testDoReceivedAction() UTMetadataDataExtensionMessage m(1); m.setPieceStorage(pieceStorage); - m.setBtRuntime(btRuntime); m.setUTMetadataRequestTracker(tracker); m.setDownloadContext(dctx); @@ -107,11 +104,11 @@ void UTMetadataDataExtensionMessageTest::testDoReceivedAction() m.setIndex(0); m.setData(piece0); m.doReceivedAction(); - CPPUNIT_ASSERT(!btRuntime->isHalt()); tracker->add(0); m.doReceivedAction(); - CPPUNIT_ASSERT(btRuntime->isHalt()); + + CPPUNIT_ASSERT_EQUAL(metadata, diskWriter->getString()); } } // namespace aria2 diff --git a/test/UTMetadataRequestExtensionMessageTest.cc b/test/UTMetadataRequestExtensionMessageTest.cc index 4d4d4478..6e2f3c36 100644 --- a/test/UTMetadataRequestExtensionMessageTest.cc +++ b/test/UTMetadataRequestExtensionMessageTest.cc @@ -14,7 +14,6 @@ #include "UTMetadataRejectExtensionMessage.h" #include "UTMetadataDataExtensionMessage.h" #include "PieceStorage.h" -#include "BtRuntime.h" #include "extension_message_test_helper.h" namespace aria2 {