/* */ #ifndef _D_ADAPTIVE_URI_SELECTOR_H_ #define _D_ADAPTIVE_URI_SELECTOR_H_ #include "URISelector.h" #include "SharedHandle.h" namespace aria2 { class ServerStatMan; class RequestGroup; class ServerStat; class Logger; class AdaptiveURISelector:public URISelector { private: SharedHandle serverStatMan_; // No need to delete requestGroup_ RequestGroup* requestGroup_; unsigned int nbServerToEvaluate_; unsigned int nbConnections_; static const time_t MAX_TIMEOUT = 60; Logger* logger_; void mayRetryWithIncreasedTimeout(FileEntry* fileEntry); std::string selectOne(const std::deque& uris); void adjustLowestSpeedLimit(const std::deque& uris, DownloadCommand* command) const; unsigned int getMaxDownloadSpeed(const std::deque& uris) const; std::string getMaxDownloadSpeedUri(const std::deque& uris) const; std::deque getUrisBySpeed(const std::deque& uris, unsigned 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; SharedHandle getServerStats(const std::string& uri) const; unsigned int getNbTestedServers(const std::deque& uris) const; std::string getBestMirror(const std::deque& uris) const; public: AdaptiveURISelector(const SharedHandle& serverStatMan, RequestGroup* requestGroup); virtual ~AdaptiveURISelector(); virtual std::string select (FileEntry* fileEntry, const std::vector& usedHosts); virtual void tuneDownloadCommand(const std::deque& uris, DownloadCommand* command); virtual void resetCounters(); }; } // namespace aria2 #endif // _D_ADAPTIVE_URI_SELECTOR_H_