/* */ #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