Merge pull request #716

789e275 rpc: do not return bans if they're effectively spent (moneromooo-monero)
474e4c0 p2p: lock access to the blocked ips map (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2016-03-12 16:21:20 +02:00
commit b66d455536
No known key found for this signature in database
GPG key ID: 55432DF31CCD4FCD
3 changed files with 10 additions and 7 deletions

View file

@ -120,7 +120,7 @@ namespace nodetool
void delete_connections(size_t count);
virtual bool block_ip(uint32_t adress, time_t seconds = P2P_IP_BLOCKTIME);
virtual bool unblock_ip(uint32_t address);
virtual std::map<uint32_t, time_t> get_blocked_ips() const { return m_blocked_ips; }
virtual std::map<uint32_t, time_t> get_blocked_ips() { CRITICAL_REGION_LOCAL(m_blocked_ips_lock); return m_blocked_ips; }
private:
const std::vector<std::string> m_seed_nodes_list =
{ "seeds.moneroseeds.se"

View file

@ -52,7 +52,7 @@ namespace nodetool
virtual void for_each_connection(std::function<bool(t_connection_context&, peerid_type)> f)=0;
virtual bool block_ip(uint32_t adress, time_t seconds = 0)=0;
virtual bool unblock_ip(uint32_t adress)=0;
virtual std::map<uint32_t, time_t> get_blocked_ips()const=0;
virtual std::map<uint32_t, time_t> get_blocked_ips()=0;
virtual bool add_ip_fail(uint32_t adress)=0;
};
@ -96,7 +96,7 @@ namespace nodetool
{
return true;
}
virtual std::map<uint32_t, time_t> get_blocked_ips() const
virtual std::map<uint32_t, time_t> get_blocked_ips()
{
return std::map<uint32_t, time_t>();
}

View file

@ -950,13 +950,16 @@ namespace cryptonote
return false;
}
auto now = time(nullptr);
std::map<uint32_t, time_t> blocked_ips = m_p2p.get_blocked_ips();
for (std::map<uint32_t, time_t>::const_iterator i = blocked_ips.begin(); i != blocked_ips.end(); ++i)
{
COMMAND_RPC_GETBANS::ban b;
b.ip = i->first;
b.seconds = i->second;
res.bans.push_back(b);
if (i->second > now) {
COMMAND_RPC_GETBANS::ban b;
b.ip = i->first;
b.seconds = i->second - now;
res.bans.push_back(b);
}
}
res.status = CORE_RPC_STATUS_OK;