/* */ #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::vector >& msgs, size_t num, const SharedHandle& pieceStorage) { for(size_t index = 0, numPieces = _dctx->getNumPieces(); index < numPieces && num; ++index) { SharedHandle p = pieceStorage->getMissingPiece(index); if(p.isNull()) { if(_logger->debug()) { _logger->debug("ut_metadata piece %lu is used or already acquired."); } continue; } --num; if(_logger->debug()) { _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