2016-12-20 14:26:45 +01:00
|
|
|
// Copyright (c) 2014-2017 The Dash Core developers
|
2016-09-27 09:50:04 +02:00
|
|
|
// 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;
|
|
|
|
|
2018-02-12 13:49:00 +01:00
|
|
|
void CNetFulfilledRequestManager::AddFulfilledRequest(const CAddress& addr, const std::string& strRequest)
|
2016-09-27 09:50:04 +02:00
|
|
|
{
|
|
|
|
LOCK(cs_mapFulfilledRequests);
|
|
|
|
mapFulfilledRequests[addr][strRequest] = GetTime() + Params().FulfilledRequestExpireTime();
|
|
|
|
}
|
|
|
|
|
2018-02-12 13:49:00 +01:00
|
|
|
bool CNetFulfilledRequestManager::HasFulfilledRequest(const CAddress& addr, const std::string& strRequest)
|
2016-09-27 09:50:04 +02:00
|
|
|
{
|
|
|
|
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();
|
|
|
|
}
|
|
|
|
|
2018-02-12 13:49:00 +01:00
|
|
|
void CNetFulfilledRequestManager::RemoveFulfilledRequest(const CAddress& addr, const std::string& strRequest)
|
2016-09-27 09:50:04 +02:00
|
|
|
{
|
|
|
|
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();
|
|
|
|
}
|