forked from premiere/premiere-libtorrent
Don't construct a temporary peer just for searching. Clean up some duplicate code.
This commit is contained in:
parent
0f6a89f0c0
commit
757b0437e9
|
@ -276,10 +276,19 @@ namespace libtorrent
|
|||
|
||||
int num_peers() const { return m_peers.size(); }
|
||||
|
||||
struct peer_ptr_compare
|
||||
struct peer_address_compare
|
||||
{
|
||||
bool operator()(peer const* lhs, peer const* rhs) const
|
||||
{ return lhs->address() < rhs->address(); }
|
||||
bool operator()(
|
||||
peer const* lhs, libtorrent::address const& rhs) const
|
||||
{
|
||||
return lhs->address() < rhs;
|
||||
}
|
||||
|
||||
bool operator()(
|
||||
libtorrent::address const& lhs, peer const* rhs) const
|
||||
{
|
||||
return lhs < rhs->address();
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::deque<peer*> peers_t;
|
||||
|
@ -293,36 +302,14 @@ namespace libtorrent
|
|||
|
||||
std::pair<iterator, iterator> find_peers(address const& a)
|
||||
{
|
||||
peer_ptr_compare cmp;
|
||||
#if TORRENT_USE_IPV6
|
||||
if (a.is_v6())
|
||||
{
|
||||
ipv6_peer tmp(a);
|
||||
return std::equal_range(m_peers.begin(), m_peers.end(), &tmp, cmp);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
ipv4_peer tmp(a);
|
||||
return std::equal_range(m_peers.begin(), m_peers.end(), &tmp, cmp);
|
||||
}
|
||||
return std::equal_range(
|
||||
m_peers.begin(), m_peers.end(), a, peer_address_compare());
|
||||
}
|
||||
|
||||
std::pair<const_iterator, const_iterator> find_peers(address const& a) const
|
||||
{
|
||||
peer_ptr_compare cmp;
|
||||
#if TORRENT_USE_IPV6
|
||||
if (a.is_v6())
|
||||
{
|
||||
ipv6_peer tmp(a);
|
||||
return std::equal_range(m_peers.begin(), m_peers.end(), &tmp, cmp);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
ipv4_peer tmp(a);
|
||||
return std::equal_range(m_peers.begin(), m_peers.end(), &tmp, cmp);
|
||||
}
|
||||
return std::equal_range(
|
||||
m_peers.begin(), m_peers.end(), a, peer_address_compare());
|
||||
}
|
||||
|
||||
bool connect_one_peer(int session_time);
|
||||
|
|
|
@ -706,21 +706,11 @@ namespace libtorrent
|
|||
}
|
||||
else
|
||||
{
|
||||
peer_ptr_compare cmp;
|
||||
#if TORRENT_USE_IPV6
|
||||
if (c.remote().address().is_v6())
|
||||
{
|
||||
ipv6_peer tmp(c.remote().address());
|
||||
iter = std::lower_bound(m_peers.begin(), m_peers.end()
|
||||
, &tmp, cmp);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
ipv4_peer tmp(c.remote().address());
|
||||
iter = std::lower_bound(m_peers.begin(), m_peers.end()
|
||||
, &tmp, cmp);
|
||||
}
|
||||
iter = std::lower_bound(
|
||||
m_peers.begin(), m_peers.end()
|
||||
, c.remote().address(), peer_address_compare()
|
||||
);
|
||||
|
||||
if (iter != m_peers.end() && (*iter)->address() == c.remote().address()) found = true;
|
||||
}
|
||||
|
||||
|
@ -950,21 +940,10 @@ namespace libtorrent
|
|||
}
|
||||
else
|
||||
{
|
||||
peer_ptr_compare cmp;
|
||||
#if TORRENT_USE_IPV6
|
||||
if (remote.address().is_v6())
|
||||
{
|
||||
ipv6_peer tmp(remote.address());
|
||||
iter = std::lower_bound(m_peers.begin(), m_peers.end()
|
||||
, &tmp, cmp);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
ipv4_peer tmp(remote.address());
|
||||
iter = std::lower_bound(m_peers.begin(), m_peers.end()
|
||||
, &tmp, cmp);
|
||||
}
|
||||
iter = std::lower_bound(
|
||||
m_peers.begin(), m_peers.end()
|
||||
, remote.address(), peer_address_compare()
|
||||
);
|
||||
|
||||
if (iter != m_peers.end() && (*iter)->address() == remote.address()) found = true;
|
||||
}
|
||||
|
@ -982,21 +961,10 @@ namespace libtorrent
|
|||
|
||||
// since some peers were removed, we need to
|
||||
// update the iterator to make it valid again
|
||||
peer_ptr_compare cmp;
|
||||
#if TORRENT_USE_IPV6
|
||||
if (remote.address().is_v6())
|
||||
{
|
||||
ipv6_peer tmp(remote.address());
|
||||
iter = std::lower_bound(m_peers.begin(), m_peers.end()
|
||||
, &tmp, cmp);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
ipv4_peer tmp(remote.address());
|
||||
iter = std::lower_bound(m_peers.begin(), m_peers.end()
|
||||
, &tmp, cmp);
|
||||
}
|
||||
iter = std::lower_bound(
|
||||
m_peers.begin(), m_peers.end()
|
||||
, remote.address(), peer_address_compare()
|
||||
);
|
||||
}
|
||||
|
||||
if (m_round_robin > iter - m_peers.begin()) ++m_round_robin;
|
||||
|
|
Loading…
Reference in New Issue