/* */ #include "MultiUrlRequestInfo.h" #include #include #include #include "RequestGroupMan.h" #include "DownloadEngine.h" #include "LogFactory.h" #include "Logger.h" #include "RequestGroup.h" #include "prefs.h" #include "DownloadEngineFactory.h" #include "RecoverableException.h" #include "message.h" #include "util.h" #include "Option.h" #include "StatCalc.h" #include "CookieStorage.h" #include "File.h" #include "Netrc.h" #include "AuthConfigFactory.h" #include "SessionSerializer.h" #include "TimeA2.h" #include "fmt.h" #ifdef ENABLE_SSL # include "SocketCore.h" # include "TLSContext.h" #endif // ENABLE_SSL namespace aria2 { namespace global { extern volatile sig_atomic_t globalHaltRequested; } // namespace global namespace { void handler(int signal) { if( #ifdef SIGHUP signal == SIGHUP || #endif // SIGHUP signal == SIGTERM) { if(global::globalHaltRequested == 0 || global::globalHaltRequested == 2) { global::globalHaltRequested = 3; } } else { if(global::globalHaltRequested == 0) { global::globalHaltRequested = 1; } else if(global::globalHaltRequested == 2) { global::globalHaltRequested = 3; } } } } // namespace namespace { ares_addr_node* parseAsyncDNSServers(const std::string& serversOpt) { std::vector servers; util::split(serversOpt, std::back_inserter(servers), A2STR::COMMA_C, true /* doStrip */); ares_addr_node root; root.next = 0; ares_addr_node* tail = &root; for(std::vector::const_iterator i = servers.begin(), eoi = servers.end(); i != eoi; ++i) { struct addrinfo* res; int s = callGetaddrinfo(&res, (*i).c_str(), 0, AF_UNSPEC, 0, AI_NUMERICHOST, 0); if(s != 0) { continue; } WSAAPI_AUTO_DELETE resDeleter(res, freeaddrinfo); if(res) { ares_addr_node* node = new ares_addr_node(); node->next = 0; node->family = res->ai_family; if(node->family == AF_INET) { struct sockaddr_in* in = reinterpret_cast(res->ai_addr); memcpy(&node->addr.addr4, &(in->sin_addr), 4); } else { struct sockaddr_in6* in = reinterpret_cast(res->ai_addr); memcpy(&node->addr.addr6, &(in->sin6_addr), 16); } tail->next = node; tail = node; } } return root.next; } } // namespace MultiUrlRequestInfo::MultiUrlRequestInfo (const std::vector >& requestGroups, const SharedHandle