/* */ #include "UTMetadataRequestTracker.h" #include #include "LogFactory.h" namespace aria2 { UTMetadataRequestTracker::UTMetadataRequestTracker(): _logger(LogFactory::getInstance()) {} void UTMetadataRequestTracker::add(size_t index) { _trackedRequests.push_back(RequestEntry(index)); } bool UTMetadataRequestTracker::tracks(size_t index) { return std::find(_trackedRequests.begin(), _trackedRequests.end(), RequestEntry(index)) != _trackedRequests.end(); } void UTMetadataRequestTracker::remove(size_t index) { std::vector::iterator i = std::find(_trackedRequests.begin(), _trackedRequests.end(), RequestEntry(index)); if(i != _trackedRequests.end()) { _trackedRequests.erase(i); } } std::vector UTMetadataRequestTracker::removeTimeoutEntry() { std::vector indexes; const time_t TIMEOUT = 20; for(std::vector::iterator i = _trackedRequests.begin(), eoi = _trackedRequests.end(); i != eoi;) { if((*i).elapsed(TIMEOUT)) { if(_logger->debug()) { _logger->debug("ut_metadata request timeout. index=%lu", static_cast((*i)._index)); } indexes.push_back((*i)._index); i = _trackedRequests.erase(i); eoi = _trackedRequests.end(); } else { ++i; } } return indexes; } size_t UTMetadataRequestTracker::avail() const { const size_t MAX_OUTSTANDING_REQUEST = 1; if(MAX_OUTSTANDING_REQUEST > count()) { return MAX_OUTSTANDING_REQUEST-count(); } else { return 0; } } std::vector UTMetadataRequestTracker::getAllTrackedIndex() const { std::vector indexes; for(std::vector::const_iterator i = _trackedRequests.begin(), eoi = _trackedRequests.end(); i != eoi; ++i) { indexes.push_back((*i)._index); } return indexes; } } // namespace aria2