// Copyright (c) 2014-2016 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "chainparams.h" #include "netfulfilledman.h" #include "util.h" CNetFulfilledRequestManager netfulfilledman; void CNetFulfilledRequestManager::AddFulfilledRequest(CAddress addr, std::string strRequest) { LOCK(cs_mapFulfilledRequests); mapFulfilledRequests[addr][strRequest] = GetTime() + Params().FulfilledRequestExpireTime(); } bool CNetFulfilledRequestManager::HasFulfilledRequest(CAddress addr, std::string strRequest) { LOCK(cs_mapFulfilledRequests); fulfilledreqmap_t::iterator it = mapFulfilledRequests.find(addr); return it != mapFulfilledRequests.end() && it->second.find(strRequest) != it->second.end() && it->second[strRequest] > GetTime(); } void CNetFulfilledRequestManager::RemoveFulfilledRequest(CAddress addr, std::string strRequest) { LOCK(cs_mapFulfilledRequests); fulfilledreqmap_t::iterator it = mapFulfilledRequests.find(addr); if (it != mapFulfilledRequests.end()) { it->second.erase(strRequest); } } void CNetFulfilledRequestManager::CheckAndRemove() { LOCK(cs_mapFulfilledRequests); int64_t now = GetTime(); fulfilledreqmap_t::iterator it = mapFulfilledRequests.begin(); while(it != mapFulfilledRequests.end()) { fulfilledreqmapentry_t::iterator it_entry = it->second.begin(); while(it_entry != it->second.end()) { if(now > it_entry->second) { it->second.erase(it_entry++); } else { ++it_entry; } } if(it->second.size() == 0) { mapFulfilledRequests.erase(it++); } else { ++it; } } } void CNetFulfilledRequestManager::Clear() { LOCK(cs_mapFulfilledRequests); mapFulfilledRequests.clear(); } std::string CNetFulfilledRequestManager::ToString() const { std::ostringstream info; info << "Nodes with fulfilled requests: " << (int)mapFulfilledRequests.size(); return info.str(); }