/* */ #ifndef D_ADAPTIVE_URI_SELECTOR_H #define D_ADAPTIVE_URI_SELECTOR_H #include "URISelector.h" #include namespace aria2 { class ServerStatMan; class RequestGroup; class ServerStat; class AdaptiveURISelector:public URISelector { private: std::shared_ptr serverStatMan_; // No need to delete requestGroup_ RequestGroup* requestGroup_; int nbServerToEvaluate_; int nbConnections_; static const time_t MAX_TIMEOUT = 60; void mayRetryWithIncreasedTimeout(FileEntry* fileEntry); std::string selectOne(const std::deque& uris); void adjustLowestSpeedLimit(const std::deque& uris, DownloadCommand* command) const; int getMaxDownloadSpeed(const std::deque& uris) const; std::string getMaxDownloadSpeedUri(const std::deque& uris) const; std::deque getUrisBySpeed(const std::deque& uris, int min) const; std::string selectRandomUri(const std::deque& uris) const; std::string getFirstNotTestedUri(const std::deque& uris) const; std::string getFirstToTestUri(const std::deque& uris) const; std::shared_ptr getServerStats(const std::string& uri) const; int getNbTestedServers(const std::deque& uris) const; std::string getBestMirror(const std::deque& uris) const; public: AdaptiveURISelector(std::shared_ptr serverStatMan, RequestGroup* requestGroup); virtual ~AdaptiveURISelector(); virtual std::string select (FileEntry* fileEntry, const std::vector >& usedHosts) CXX11_OVERRIDE; virtual void tuneDownloadCommand(const std::deque& uris, DownloadCommand* command) CXX11_OVERRIDE; virtual void resetCounters() CXX11_OVERRIDE; }; } // namespace aria2 #endif // D_ADAPTIVE_URI_SELECTOR_H