/* */ #include "download_helper.h" #include #include #include "RequestGroup.h" #include "Option.h" #include "prefs.h" #include "Metalink2RequestGroup.h" #include "ProtocolDetector.h" #include "paramed_string.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" #include "download_handlers.h" #ifdef ENABLE_BITTORRENT # include "bittorrent_helper.h" # include "BtConstants.h" # include "ValueBaseBencodeParser.h" #endif // ENABLE_BITTORRENT namespace aria2 { namespace { void unfoldURI (std::vector& result, const std::vector& args) { for(const auto& i : args) { paramed_string::expand(std::begin(i), std::end(i), std::back_inserter(result)); } } } // 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(std::end(result), begin, end); } else if(numURIs > 0) { size_t num = std::min(numSplit/numURIs, maxIter); for(size_t i = 0; i < num; ++i) { result.insert(std::end(result), begin, end); } if(num < maxIter) { result.insert(std::end(result), begin, begin+(numSplit%numURIs)); } } } } // namespace namespace { std::shared_ptr getGID(const std::shared_ptr