/* */ #include "download_helper.h" #include #include #include #include "RequestGroup.h" #include "Option.h" #include "prefs.h" #include "Metalink2RequestGroup.h" #include "ProtocolDetector.h" #include "ParameterizedStringParser.h" #include "PStringBuildVisitor.h" #include "UriListParser.h" #include "DownloadContext.h" #include "RecoverableException.h" #include "DlAbortEx.h" #include "message.h" #include "fmt.h" #include "FileEntry.h" #include "LogFactory.h" #include "File.h" #include "util.h" #include "array_fun.h" #include "OptionHandler.h" #include "ByteArrayDiskWriter.h" #include "a2functional.h" #include "ByteArrayDiskWriterFactory.h" #include "MetadataInfo.h" #include "OptionParser.h" #include "SegList.h" #ifdef ENABLE_BITTORRENT # include "bittorrent_helper.h" # include "BtConstants.h" # include "UTMetadataPostDownloadHandler.h" #endif // ENABLE_BITTORRENT namespace aria2 { namespace { void unfoldURI (std::vector& result, const std::vector& args) { ParameterizedStringParser p; PStringBuildVisitor v; for(std::vector::const_iterator itr = args.begin(), eoi = args.end(); itr != eoi; ++itr) { v.reset(); p.parse(*itr)->accept(v); result.insert(result.end(), v.getURIs().begin(), v.getURIs().end()); } } } // namespace namespace { template void splitURI(std::vector& result, InputIterator begin, InputIterator end, size_t numSplit, size_t maxIter) { size_t numURIs = std::distance(begin, end); if(numURIs >= numSplit) { result.insert(result.end(), begin, end); } else if(numURIs > 0) { size_t num = std::min(numSplit/numURIs, maxIter); for(size_t i = 0; i < num; ++i) { result.insert(result.end(), begin, end); } if(num < maxIter) { result.insert(result.end(), begin, begin+(numSplit%numURIs)); } } } } // namespace namespace { SharedHandle createRequestGroup (const SharedHandle