Refactoring routing_table (#1468)
routing_table refactor. ip_set::count -> ip_set::exists. Fix copy-paste routing_table::remove_node
This commit is contained in:
parent
e10edb5e0b
commit
516e86d0ea
|
@ -91,7 +91,7 @@ struct ipv6_hash
|
|||
struct ip_set
|
||||
{
|
||||
void insert(address const& addr);
|
||||
size_t count(address const& addr);
|
||||
bool exists(address const& addr) const;
|
||||
void erase(address const& addr);
|
||||
|
||||
void clear()
|
||||
|
@ -281,6 +281,7 @@ private:
|
|||
#endif
|
||||
|
||||
table_t::iterator find_bucket(node_id const& id);
|
||||
void remove_node_internal(node_entry* n, bucket_t& b);
|
||||
|
||||
void split_bucket();
|
||||
|
||||
|
|
|
@ -84,14 +84,14 @@ void ip_set::insert(address const& addr)
|
|||
m_ip4s.insert(addr.to_v4().to_bytes());
|
||||
}
|
||||
|
||||
size_t ip_set::count(address const& addr)
|
||||
bool ip_set::exists(address const& addr) const
|
||||
{
|
||||
#if TORRENT_USE_IPV6
|
||||
if (addr.is_v6())
|
||||
return m_ip6s.count(addr.to_v6().to_bytes());
|
||||
return m_ip6s.find(addr.to_v6().to_bytes()) != m_ip6s.end();
|
||||
else
|
||||
#endif
|
||||
return m_ip4s.count(addr.to_v4().to_bytes());
|
||||
return m_ip4s.find(addr.to_v4().to_bytes()) != m_ip4s.end();
|
||||
}
|
||||
|
||||
void ip_set::erase(address const& addr)
|
||||
|
@ -387,30 +387,26 @@ void routing_table::fill_from_replacements(table_t::iterator bucket)
|
|||
}
|
||||
}
|
||||
|
||||
void routing_table::remove_node_internal(node_entry* n, bucket_t& b)
|
||||
{
|
||||
if (!b.empty()
|
||||
&& n >= &b[0]
|
||||
&& n < &b[0] + b.size())
|
||||
{
|
||||
std::ptrdiff_t const idx = n - &b[0];
|
||||
TORRENT_ASSERT(m_ips.exists(n->addr()));
|
||||
m_ips.erase(n->addr());
|
||||
b.erase(b.begin() + idx);
|
||||
}
|
||||
}
|
||||
|
||||
void routing_table::remove_node(node_entry* n
|
||||
, routing_table::table_t::iterator bucket)
|
||||
{
|
||||
{
|
||||
INVARIANT_CHECK;
|
||||
|
||||
if (!bucket->replacements.empty()
|
||||
&& n >= &bucket->replacements[0]
|
||||
&& n < &bucket->replacements[0] + bucket->replacements.size())
|
||||
{
|
||||
std::ptrdiff_t idx = n - &bucket->replacements[0];
|
||||
TORRENT_ASSERT(m_ips.count(n->addr()) > 0);
|
||||
m_ips.erase(n->addr());
|
||||
bucket->replacements.erase(bucket->replacements.begin() + idx);
|
||||
}
|
||||
|
||||
if (!bucket->live_nodes.empty()
|
||||
&& n >= &bucket->live_nodes[0]
|
||||
&& n < &bucket->live_nodes[0] + bucket->live_nodes.size())
|
||||
{
|
||||
std::ptrdiff_t idx = n - &bucket->live_nodes[0];
|
||||
TORRENT_ASSERT(m_ips.count(n->addr()) > 0);
|
||||
m_ips.erase(n->addr());
|
||||
bucket->live_nodes.erase(bucket->live_nodes.begin() + idx);
|
||||
}
|
||||
remove_node_internal(n, bucket->replacements);
|
||||
remove_node_internal(n, bucket->live_nodes);
|
||||
}
|
||||
|
||||
bool routing_table::add_node(node_entry const& e)
|
||||
|
@ -465,7 +461,7 @@ routing_table::add_node_status_t routing_table::add_node_impl(node_entry e)
|
|||
return failed_to_add;
|
||||
|
||||
// do we already have this IP in the table?
|
||||
if (m_ips.count(e.addr()) > 0)
|
||||
if (m_ips.exists(e.addr()))
|
||||
{
|
||||
// This exact IP already exists in the table. A node with the same IP and
|
||||
// port but a different ID may be a sign of a malicious node. To be
|
||||
|
|
Loading…
Reference in New Issue