From c1730aeea945f80b5bf152dc6e7b7d9a42a40b5c Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 22 Nov 2009 15:31:47 +0000 Subject: 2009-11-23 Tatsuhiro Tsujikawa Fixed ut_metadata data handling. Implemented UTMetadataDataExtensionMessage::doReceivedAction(). Initialize PeerStorage in HandshakeExtensionMessage::doReceivedAction() when metadata_size is received. * src/DefaultExtensionMessageFactory.cc * src/DefaultExtensionMessageFactory.h * src/HandshakeExtensionMessage.cc * src/HandshakeExtensionMessage.h * src/UTMetadataDataExtensionMessage.cc * src/UTMetadataDataExtensionMessage.h * src/UTMetadataRequestExtensionMessage.cc * src/UTMetadataRequestFactory.cc * src/UTMetadataRequestFactory.h * src/UTMetadataRequestTracker.cc * src/UTMetadataRequestTracker.h * test/DefaultExtensionMessageFactoryTest.cc * test/HandshakeExtensionMessageTest.cc * test/MockBtMessage.h * test/UTMetadataDataExtensionMessageTest.cc * test/UTMetadataRequestExtensionMessageTest.cc * test/UTMetadataRequestFactoryTest.cc * test/UTMetadataRequestTrackerTest.cc * test/extension_message_test_helper.h --- src/UTMetadataRequestFactory.cc | 79 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/UTMetadataRequestFactory.cc (limited to 'src/UTMetadataRequestFactory.cc') diff --git a/src/UTMetadataRequestFactory.cc b/src/UTMetadataRequestFactory.cc new file mode 100644 index 00000000..38b5b595 --- /dev/null +++ b/src/UTMetadataRequestFactory.cc @@ -0,0 +1,79 @@ +/* */ +#include "UTMetadataRequestFactory.h" +#include "PieceStorage.h" +#include "DownloadContext.h" +#include "Peer.h" +#include "BtMessageDispatcher.h" +#include "BtMessageFactory.h" +#include "UTMetadataRequestExtensionMessage.h" +#include "UTMetadataRequestTracker.h" +#include "BtMessage.h" +#include "LogFactory.h" + +namespace aria2 { + +UTMetadataRequestFactory::UTMetadataRequestFactory(): + _logger(LogFactory::getInstance()) {} + +void UTMetadataRequestFactory::create +(std::deque >& msgs, size_t num, + const SharedHandle& pieceStorage) +{ + for(size_t index = 0; index < _dctx->getNumPieces() && num; ++index) { + SharedHandle p = pieceStorage->getMissingPiece(index); + if(p.isNull()) { + _logger->debug("ut_metadata piece %lu is used or already acquired."); + continue; + } + --num; + _logger->debug("Creating ut_metadata request index=%lu", + static_cast(index)); + SharedHandle m + (new UTMetadataRequestExtensionMessage + (_peer->getExtensionMessageID("ut_metadata"))); + m->setIndex(index); + m->setDownloadContext(_dctx); + m->setBtMessageDispatcher(_dispatcher); + m->setBtMessageFactory(_messageFactory); + m->setPeer(_peer); + + SharedHandle msg = _messageFactory->createBtExtendedMessage(m); + msgs.push_back(msg); + _tracker->add(index); + } +} + +} // namespace aria2 -- cgit