finally rename policy to peer_list

This commit is contained in:
Arvid Norberg 2014-10-26 07:34:31 +00:00
parent 1c448331d5
commit 85cc72835e
15 changed files with 133 additions and 137 deletions

View File

@ -50,7 +50,7 @@ set(sources
piece_picker
platform_util
proxy_base
policy
peer_list
puff
random
request_blocks

View File

@ -545,7 +545,7 @@ SOURCES =
natpmp
packet_buffer
piece_picker
policy
peer_list
proxy_base
puff
random

View File

@ -16,11 +16,11 @@
+-------------------+ | |
| cGRE torrent_info |<---+ | m_socket
+-------------------+ | | +--------------------------+
| +------+->| socket_type (variant) |
+--------+ m_policy | | | (TCP/uTP/SSL/socks5/...) |
| policy |<---------+ | +--------------------------+
+------+-+ v
m_peer_list | +------+->| socket_type (variant) |
+-----------+ | | | (TCP/uTP/SSL/socks5/...) |
| peer_list |<---------+ | +--------------------------+
+---------+-+ v
list of all | m_peers[] +--------------+
peers we +-------------->| policy::peer ++ contains contact information
peers we +-------------->| torrent_peer ++ contains contact information
know of ++-------------+| for peers we're not necessarily
+--------------+ connected to

View File

@ -46,15 +46,12 @@ A *torrent* object represents all the state of swarm download. This includes
a piece picker, a list of peer connections, file storage (torrent file). One
important distiction is between a connected peer (*peer_connection*) and a peer
we just know about, and may have been connected to, and may connect to in the
future (*policy::peer*). The list of (not connected) peers may grow very large
future (*torrent_peer*). The list of (not connected) peers may grow very large
if not limited (through tracker responses, DHT and peer exchange). This list
is typically limited to a few thousand peers.
The *policy* in libtorrent is somewhat poorly named. It was initially intended
to be a customization point where a client could define peer selection behavior
and unchoke logic. It didn't end up being though, and a more accurate name would
be peer_list. It really just maintains a potentially large list of known peers
for a swarm (not necessarily connected).
The *peer_list* maintains a potentially large list of known peers for a swarm
(not necessarily connected).
structure
=========
@ -95,8 +92,8 @@ torrent
peer_connection
---------------
policy
------
peer_list
---------
piece_picker
------------

View File

@ -95,7 +95,7 @@ nobase_include_HEADERS = \
piece_block_progress.hpp \
piece_picker.hpp \
platform_util.hpp \
policy.hpp \
peer_list.hpp \
proxy_base.hpp \
puff.hpp \
random.hpp \

View File

@ -57,8 +57,8 @@ namespace libtorrent
struct torrent_peer_allocator_interface;
// this object is used to communicate torrent state and
// some configuration to the policy object. This make
// the policy type not depend on the torrent type directly.
// some configuration to the peer_list object. This make
// the peer_list type not depend on the torrent type directly.
struct torrent_state
{
torrent_state()
@ -75,7 +75,7 @@ namespace libtorrent
bool is_finished;
bool allow_multiple_connections_per_ip;
// this is set by policy::add_peer to either true or false
// this is set by peer_list::add_peer to either true or false
// true means the peer we just added was new, false means
// we already knew about the peer
bool first_time_seen;
@ -101,12 +101,11 @@ namespace libtorrent
std::vector<torrent_peer*> erased;
};
// TODO: 3 this class should be renamed peer_list
class TORRENT_EXTRA_EXPORT policy : single_threaded
class TORRENT_EXTRA_EXPORT peer_list : single_threaded
{
public:
policy();
peer_list();
#if TORRENT_USE_I2P
torrent_peer* add_i2p_peer(char const* destination, int src, char flags

View File

@ -59,7 +59,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/torrent_info.hpp"
#include "libtorrent/socket.hpp"
#include "libtorrent/address.hpp"
#include "libtorrent/policy.hpp"
#include "libtorrent/peer_list.hpp"
#include "libtorrent/tracker_manager.hpp"
#include "libtorrent/stat.hpp"
#include "libtorrent/alert.hpp"
@ -227,7 +227,7 @@ namespace libtorrent
// the state of this torrent (queued, checking, downloading, etc.)
boost::uint32_t m_state:3;
boost::scoped_ptr<policy> m_policy;
boost::scoped_ptr<peer_list> m_peer_list;
};
// a torrent is a class that holds information
@ -622,7 +622,7 @@ namespace libtorrent
void update_peer_port(int port, torrent_peer* p, int src);
void set_seed(torrent_peer* p, bool s);
void clear_failcount(torrent_peer* p);
std::pair<policy::iterator, policy::iterator> find_peers(address const& a);
std::pair<peer_list::iterator, peer_list::iterator> find_peers(address const& a);
// the number of peers that belong to this torrent
int num_peers() const { return (int)m_connections.size(); }
@ -934,8 +934,8 @@ namespace libtorrent
return m_picker.get() != 0;
}
int num_known_peers() const { return m_policy ? m_policy->num_peers() : 0; }
int num_connect_candidates() const { return m_policy ? m_policy->num_connect_candidates() : 0; }
int num_known_peers() const { return m_peer_list ? m_peer_list->num_peers() : 0; }
int num_connect_candidates() const { return m_peer_list ? m_peer_list->num_connect_candidates() : 0; }
piece_manager& storage();
bool has_storage() const { return m_storage.get(); }
@ -1100,9 +1100,9 @@ namespace libtorrent
void inc_stats_counter(int c, int value = 1);
// initialize the torrent_state structure passed to policy
// initialize the torrent_state structure passed to peer_list
// member functions. Don't forget to also call peers_erased()
// on the erased member after the policy call
// on the erased member after the peer_list call
torrent_state get_policy_state();
void construct_storage();
@ -1482,7 +1482,7 @@ namespace libtorrent
unsigned int m_seeding_time:24;
// this is a counter that is decreased every
// second, and when it reaches 0, the policy::pulse()
// second, and when it reaches 0, the peer_list::pulse()
// is called and the time scaler is reset to 10.
boost::int8_t m_time_scaler;

View File

@ -95,7 +95,7 @@ libtorrent_rasterbar_la_SOURCES = \
platform_util.cpp \
packet_buffer.cpp \
proxy_base.cpp \
policy.cpp \
peer_list.cpp \
puff.cpp \
random.cpp \
request_blocks.cpp \

View File

@ -51,7 +51,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/version.hpp"
#include "libtorrent/extensions.hpp"
#include "libtorrent/aux_/session_interface.hpp"
#include "libtorrent/policy.hpp"
#include "libtorrent/peer_list.hpp"
#include "libtorrent/socket_type.hpp"
#include "libtorrent/assert.hpp"
#include "libtorrent/broadcast_socket.hpp"

View File

@ -43,7 +43,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/peer_connection.hpp"
#include "libtorrent/web_peer_connection.hpp"
#include "libtorrent/policy.hpp"
#include "libtorrent/peer_list.hpp"
#include "libtorrent/socket.hpp"
#include "libtorrent/socket_type.hpp"
#include "libtorrent/invariant_check.hpp"
@ -123,7 +123,7 @@ namespace
namespace libtorrent
{
policy::policy()
peer_list::peer_list()
: m_locked_peer(NULL)
, m_num_seeds(0)
, m_finished(0)
@ -137,7 +137,7 @@ namespace libtorrent
// fills in 'erased' with torrent_peer pointers that were removed
// from the peer list. Any references to these peers must be cleared
// immediately after this call returns. For instance, in the piece picker.
void policy::apply_ip_filter(ip_filter const& filter, torrent_state* state, std::vector<address>& banned)
void peer_list::apply_ip_filter(ip_filter const& filter, torrent_state* state, std::vector<address>& banned)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -185,7 +185,7 @@ namespace libtorrent
}
}
void policy::clear_peer_prio()
void peer_list::clear_peer_prio()
{
for (peers_t::iterator i = m_peers.begin()
, end(m_peers.end()); i != end; ++i)
@ -196,7 +196,7 @@ namespace libtorrent
// fills in 'erased' with torrent_peer pointers that were removed
// from the peer list. Any references to these peers must be cleared
// immediately after this call returns. For instance, in the piece picker.
void policy::apply_port_filter(port_filter const& filter, torrent_state* state, std::vector<address>& banned)
void peer_list::apply_port_filter(port_filter const& filter, torrent_state* state, std::vector<address>& banned)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -244,7 +244,7 @@ namespace libtorrent
}
}
void policy::erase_peer(torrent_peer* p, torrent_state* state)
void peer_list::erase_peer(torrent_peer* p, torrent_state* state)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -262,7 +262,7 @@ namespace libtorrent
// erased through this function. This way we can make
// sure that any references to the peer are removed
// as well, such as in the piece picker.
void policy::erase_peer(iterator i, torrent_state* state)
void peer_list::erase_peer(iterator i, torrent_state* state)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -295,7 +295,7 @@ namespace libtorrent
m_peers.erase(i);
}
bool policy::should_erase_immediately(torrent_peer const& p) const
bool peer_list::should_erase_immediately(torrent_peer const& p) const
{
TORRENT_ASSERT(is_single_thread());
TORRENT_ASSERT(p.in_use);
@ -303,7 +303,7 @@ namespace libtorrent
return p.source == peer_info::resume_data;
}
bool policy::is_erase_candidate(torrent_peer const& pe) const
bool peer_list::is_erase_candidate(torrent_peer const& pe) const
{
TORRENT_ASSERT(is_single_thread());
TORRENT_ASSERT(pe.in_use);
@ -315,7 +315,7 @@ namespace libtorrent
|| (pe.source == peer_info::resume_data);
}
bool policy::is_force_erase_candidate(torrent_peer const& pe) const
bool peer_list::is_force_erase_candidate(torrent_peer const& pe) const
{
TORRENT_ASSERT(is_single_thread());
TORRENT_ASSERT(pe.in_use);
@ -323,7 +323,7 @@ namespace libtorrent
return pe.connection == 0;
}
void policy::erase_peers(torrent_state* state, int flags)
void peer_list::erase_peers(torrent_state* state, int flags)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -395,7 +395,7 @@ namespace libtorrent
}
// returns true if the peer was actually banned
bool policy::ban_peer(torrent_peer* p)
bool peer_list::ban_peer(torrent_peer* p)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -410,7 +410,7 @@ namespace libtorrent
return true;
}
void policy::set_connection(torrent_peer* p, peer_connection_interface* c)
void peer_list::set_connection(torrent_peer* p, peer_connection_interface* c)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -423,7 +423,7 @@ namespace libtorrent
if (was_conn_cand) update_connect_candidates(-1);
}
void policy::inc_failcount(torrent_peer* p)
void peer_list::inc_failcount(torrent_peer* p)
{
// failcount is a 5 bit value
if (p->failcount == 31) return;
@ -434,7 +434,7 @@ namespace libtorrent
update_connect_candidates(-1);
}
void policy::set_failcount(torrent_peer* p, int f)
void peer_list::set_failcount(torrent_peer* p, int f)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -448,7 +448,7 @@ namespace libtorrent
}
}
bool policy::is_connect_candidate(torrent_peer const& p) const
bool peer_list::is_connect_candidate(torrent_peer const& p) const
{
TORRENT_ASSERT(is_single_thread());
TORRENT_ASSERT(p.in_use);
@ -463,7 +463,7 @@ namespace libtorrent
return true;
}
void policy::find_connect_candidates(std::vector<torrent_peer*>& peers, int session_time, torrent_state* state)
void peer_list::find_connect_candidates(std::vector<torrent_peer*>& peers, int session_time, torrent_state* state)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -538,7 +538,7 @@ namespace libtorrent
// insert this candidate sorted into peers
std::vector<torrent_peer*>::iterator i = std::lower_bound(peers.begin(), peers.end()
, &pe, boost::bind(&policy::compare_peer, this, _1, _2, boost::cref(external), external_port));
, &pe, boost::bind(&peer_list::compare_peer, this, _1, _2, boost::cref(external), external_port));
peers.insert(i, &pe);
}
@ -549,7 +549,7 @@ namespace libtorrent
}
}
bool policy::new_connection(peer_connection_interface& c, int session_time, torrent_state* state)
bool peer_list::new_connection(peer_connection_interface& c, int session_time, torrent_state* state)
{
TORRENT_ASSERT(is_single_thread());
// TORRENT_ASSERT(!c.is_outgoing());
@ -769,7 +769,7 @@ namespace libtorrent
return true;
}
bool policy::update_peer_port(int port, torrent_peer* p, int src, torrent_state* state)
bool peer_list::update_peer_port(int port, torrent_peer* p, int src, torrent_state* state)
{
TORRENT_ASSERT(p != 0);
TORRENT_ASSERT(p->connection);
@ -841,7 +841,7 @@ namespace libtorrent
// it's important that we don't dereference
// p here, since it is allowed to be a dangling
// pointer. see smart_ban.cpp
bool policy::has_peer(torrent_peer const* p) const
bool peer_list::has_peer(torrent_peer const* p) const
{
TORRENT_ASSERT(is_single_thread());
// find p in m_peers
@ -853,7 +853,7 @@ namespace libtorrent
return false;
}
void policy::set_seed(torrent_peer* p, bool s)
void peer_list::set_seed(torrent_peer* p, bool s)
{
TORRENT_ASSERT(is_single_thread());
if (p == 0) return;
@ -878,7 +878,7 @@ namespace libtorrent
}
// this is an internal function
bool policy::insert_peer(torrent_peer* p, iterator iter, int flags, torrent_state* state)
bool peer_list::insert_peer(torrent_peer* p, iterator iter, int flags, torrent_state* state)
{
TORRENT_ASSERT(is_single_thread());
TORRENT_ASSERT(p);
@ -934,7 +934,7 @@ namespace libtorrent
return true;
}
void policy::update_peer(torrent_peer* p, int src, int flags
void peer_list::update_peer(torrent_peer* p, int src, int flags
, tcp::endpoint const& remote, char const* /* destination*/)
{
TORRENT_ASSERT(is_single_thread());
@ -977,7 +977,7 @@ namespace libtorrent
}
}
void policy::update_connect_candidates(int delta)
void peer_list::update_connect_candidates(int delta)
{
TORRENT_ASSERT(is_single_thread());
if (delta == 0) return;
@ -990,7 +990,7 @@ namespace libtorrent
}
#if TORRENT_USE_I2P
torrent_peer* policy::add_i2p_peer(char const* destination, int src, char flags, torrent_state* state)
torrent_peer* peer_list::add_i2p_peer(char const* destination, int src, char flags, torrent_state* state)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -1038,7 +1038,7 @@ namespace libtorrent
#endif // TORRENT_USE_I2P
// if this returns non-NULL, the torrent need to post status update
torrent_peer* policy::add_peer(tcp::endpoint const& remote, int src, char flags
torrent_peer* peer_list::add_peer(tcp::endpoint const& remote, int src, char flags
, torrent_state* state)
{
TORRENT_ASSERT(is_single_thread());
@ -1123,7 +1123,7 @@ namespace libtorrent
return p;
}
torrent_peer* policy::connect_one_peer(int session_time, torrent_state* state)
torrent_peer* peer_list::connect_one_peer(int session_time, torrent_state* state)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -1165,7 +1165,7 @@ namespace libtorrent
}
// this is called whenever a peer connection is closed
void policy::connection_closed(const peer_connection_interface& c
void peer_list::connection_closed(const peer_connection_interface& c
, int session_time, torrent_state* state)
{
TORRENT_ASSERT(is_single_thread());
@ -1236,7 +1236,7 @@ namespace libtorrent
}
}
void policy::recalculate_connect_candidates(torrent_state* state)
void peer_list::recalculate_connect_candidates(torrent_state* state)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -1254,7 +1254,7 @@ namespace libtorrent
}
#if TORRENT_USE_ASSERTS
bool policy::has_connection(const peer_connection_interface* c)
bool peer_list::has_connection(const peer_connection_interface* c)
{
TORRENT_ASSERT(is_single_thread());
INVARIANT_CHECK;
@ -1276,7 +1276,7 @@ namespace libtorrent
#endif
#if TORRENT_USE_INVARIANT_CHECKS
void policy::check_invariant() const
void peer_list::check_invariant() const
{
TORRENT_ASSERT(is_single_thread());
TORRENT_ASSERT(m_num_connect_candidates >= 0);
@ -1322,7 +1322,7 @@ namespace libtorrent
#endif // TORRENT_DEBUG
// this returns true if lhs is a better erase candidate than rhs
bool policy::compare_peer_erase(torrent_peer const& lhs, torrent_peer const& rhs) const
bool peer_list::compare_peer_erase(torrent_peer const& lhs, torrent_peer const& rhs) const
{
TORRENT_ASSERT(is_single_thread());
TORRENT_ASSERT(lhs.connection == 0);
@ -1346,7 +1346,7 @@ namespace libtorrent
}
// this returns true if lhs is a better connect candidate than rhs
bool policy::compare_peer(torrent_peer const* lhs, torrent_peer const* rhs
bool peer_list::compare_peer(torrent_peer const* lhs, torrent_peer const* rhs
, external_ip const& external, int external_port) const
{
TORRENT_ASSERT(is_single_thread());

View File

@ -248,7 +248,7 @@ namespace
h.update(j->buffer, j->d.io.buffer_size);
h.update((char const*)&m_salt, sizeof(m_salt));
std::pair<policy::iterator, policy::iterator> range
std::pair<peer_list::iterator, peer_list::iterator> range
= m_torrent.find_peers(a);
// there is no peer with this address anymore
@ -338,7 +338,7 @@ namespace
#endif
// find the peer
std::pair<policy::iterator, policy::iterator> range
std::pair<peer_list::iterator, peer_list::iterator> range
= m_torrent.find_peers(a);
if (range.first == range.second) return;
torrent_peer* p = NULL;

View File

@ -1027,11 +1027,11 @@ namespace libtorrent
// this is used to try leaving upload only mode periodically
m_upload_mode_time = m_ses.session_time();
}
else if (m_policy)
else if (m_peer_list)
{
// reset last_connected, to force fast reconnect after leaving upload mode
for (policy::iterator i = m_policy->begin_peer()
, end(m_policy->end_peer()); i != end; ++i)
for (peer_list::iterator i = m_peer_list->begin_peer()
, end(m_peer_list->end_peer()); i != end; ++i)
{
(*i)->last_connected = 0;
}
@ -1048,8 +1048,8 @@ namespace libtorrent
void torrent::need_policy()
{
if (m_policy) return;
m_policy.reset(new policy);
if (m_peer_list) return;
m_peer_list.reset(new peer_list);
}
void torrent::handle_disk_error(disk_io_job const* j, peer_connection* c)
@ -2216,8 +2216,8 @@ namespace libtorrent
}
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
if (m_policy && m_policy->num_peers() > 0)
debug_log("resume added peers (%d)", m_policy->num_peers());
if (m_peer_list && m_peer_list->num_peers() > 0)
debug_log("resume added peers (%d)", m_peer_list->num_peers());
#endif
// only report this error if the user actually provided resume data
@ -3229,7 +3229,7 @@ namespace libtorrent
std::string hostname = i->hostname.substr(i->hostname.size() - 4);
torrent_state st = get_policy_state();
need_policy();
if (m_policy->add_i2p_peer(hostname.c_str(), peer_info::tracker, 0, &st))
if (m_peer_list->add_i2p_peer(hostname.c_str(), peer_info::tracker, 0, &st))
state_updated();
peers_erased(st.erased);
}
@ -3364,13 +3364,13 @@ namespace libtorrent
if (conns > 0) m_need_connect_boost = false;
// if we don't know of any peers
if (!m_policy) return;
if (!m_peer_list) return;
while (want_peers() && conns > 0)
{
--conns;
torrent_state st = get_policy_state();
torrent_peer* p = m_policy->connect_one_peer(m_ses.session_time(), &st);
torrent_peer* p = m_peer_list->connect_one_peer(m_ses.session_time(), &st);
peers_erased(st.erased);
inc_stats_counter(counters::connection_attempt_loops, st.loop_counter);
if (p == NULL)
@ -3391,7 +3391,7 @@ namespace libtorrent
if (!connect_to_peer(p))
{
m_policy->inc_failcount(p);
m_peer_list->inc_failcount(p);
update_want_peers();
}
else
@ -3455,7 +3455,7 @@ namespace libtorrent
need_policy();
torrent_state st = get_policy_state();
if (m_policy->add_i2p_peer(dest, peer_info::tracker, 0, &st))
if (m_peer_list->add_i2p_peer(dest, peer_info::tracker, 0, &st))
state_updated();
peers_erased(st.erased);
}
@ -4108,7 +4108,7 @@ namespace libtorrent
// parts of this piece.
std::set<void*> peers;
// these torrent_peer pointers are owned by m_policy and they may be
// these torrent_peer pointers are owned by m_peer_list and they may be
// invalidated if a peer disconnects. We cannot keep them across any
// significant operations, but we should use them right away
// ignore NULL pointers
@ -5837,7 +5837,7 @@ namespace libtorrent
}
torrent_state st = get_policy_state();
if (m_policy) m_policy->connection_closed(*p, m_ses.session_time(), &st);
if (m_peer_list) m_peer_list->connection_closed(*p, m_ses.session_time(), &st);
peers_erased(st.erased);
p->set_peer_info(0);
@ -6915,10 +6915,10 @@ namespace libtorrent
std::vector<torrent_peer const*> deferred_peers;
if (m_policy)
if (m_peer_list)
{
for (policy::const_iterator i = m_policy->begin_peer()
, end(m_policy->end_peer()); i != end; ++i)
for (peer_list::const_iterator i = m_peer_list->begin_peer()
, end(m_peer_list->end_peer()); i != end; ++i)
{
error_code ec;
torrent_peer const* p = *i;
@ -7048,11 +7048,11 @@ namespace libtorrent
void torrent::get_full_peer_list(std::vector<peer_list_entry>& v) const
{
v.clear();
if (!m_policy) return;
if (!m_peer_list) return;
v.reserve(m_policy->num_peers());
for (policy::const_iterator i = m_policy->begin_peer();
i != m_policy->end_peer(); ++i)
v.reserve(m_peer_list->num_peers());
for (peer_list::const_iterator i = m_peer_list->begin_peer();
i != m_peer_list->end_peer(); ++i)
{
peer_list_entry e;
e.ip = (*i)->ip();
@ -7191,7 +7191,7 @@ namespace libtorrent
#ifdef TORRENT_DEBUG
if (!settings().get_bool(settings_pack::allow_multiple_connections_per_ip))
{
// this asserts that we don't have duplicates in the policy's peer list
// this asserts that we don't have duplicates in the peer_list's peer list
peer_iterator i_ = std::find_if(m_connections.begin(), m_connections.end()
, boost::bind(&peer_connection::remote, _1) == peerinfo->ip());
#if TORRENT_USE_I2P
@ -7331,7 +7331,7 @@ namespace libtorrent
sorted_insert(m_connections, boost::get_pointer(c));
m_ses.insert_peer(c);
need_policy();
m_policy->set_connection(peerinfo, c.get());
m_peer_list->set_connection(peerinfo, c.get());
if (peerinfo->seed)
{
TORRENT_ASSERT(m_num_seeds < 0xffff);
@ -7624,7 +7624,7 @@ namespace libtorrent
#endif
torrent_state st = get_policy_state();
need_policy();
if (!m_policy->new_connection(*p, m_ses.session_time(), &st))
if (!m_peer_list->new_connection(*p, m_ses.session_time(), &st))
{
peers_erased(st.erased);
#if defined TORRENT_LOGGING
@ -7670,7 +7670,7 @@ namespace libtorrent
TORRENT_ASSERT(p->peer_info_struct() != NULL);
// we need to do this after we've added the peer to the policy
// we need to do this after we've added the peer to the peer_list
// since that's when the peer is assigned its peer_info object,
// which holds the rank
if (maybe_replace_peer)
@ -7690,14 +7690,14 @@ namespace libtorrent
p->disconnect(errors::too_many_connections, peer_connection_interface::op_bittorrent);
// we have to do this here because from the peer's point of
// it wasn't really attached to the torrent, but we do need
// to let policy know we're removing it
// to let peer_list know we're removing it
remove_peer(p);
return false;
}
}
#if TORRENT_USE_INVARIANT_CHECKS
if (m_policy) m_policy->check_invariant();
if (m_peer_list) m_peer_list->check_invariant();
#endif
if (m_share_mode)
@ -7747,7 +7747,7 @@ namespace libtorrent
// if we don't know of any more potential peers to connect to, there's
// no point in trying
if (!m_policy || m_policy->num_connect_candidates() == 0)
if (!m_peer_list || m_peer_list->num_connect_candidates() == 0)
return false;
// if the user disabled outgoing connections for seeding torrents,
@ -8454,11 +8454,11 @@ namespace libtorrent
#ifdef TORRENT_EXPENSIVE_INVARIANT_CHECKS
// make sure we haven't modified the peer object
// in a way that breaks the sort order
if (m_policy && m_policy->begin_peer() != m_policy->end_peer())
if (m_peer_list && m_peer_list->begin_peer() != m_peer_list->end_peer())
{
policy::const_iterator i = m_policy->begin_peer();
policy::const_iterator prev = i++;
policy::const_iterator end(m_policy->end_peer());
peer_list::const_iterator i = m_peer_list->begin_peer();
peer_list::const_iterator prev = i++;
peer_list::const_iterator end(m_peer_list->end_peer());
peer_address_compare cmp;
for (; i != end; ++i, ++prev)
{
@ -8779,10 +8779,10 @@ namespace libtorrent
// currently representable by the session_time)
void torrent::step_session_time(int seconds)
{
if (m_policy)
if (m_peer_list)
{
for (policy::iterator j = m_policy->begin_peer()
, end(m_policy->end_peer()); j != end; ++j)
for (peer_list::iterator j = m_peer_list->begin_peer()
, end(m_peer_list->end_peer()); j != end; ++j)
{
torrent_peer* pe = *j;
@ -8862,10 +8862,10 @@ namespace libtorrent
int downloaders = 0;
if (m_complete != 0xffffff) seeds = m_complete;
else seeds = m_policy ? m_policy->num_seeds() : 0;
else seeds = m_peer_list ? m_peer_list->num_seeds() : 0;
if (m_incomplete != 0xffffff) downloaders = m_incomplete;
else downloaders = m_policy ? m_policy->num_peers() - m_policy->num_seeds() : 0;
else downloaders = m_peer_list ? m_peer_list->num_peers() - m_peer_list->num_seeds() : 0;
if (seeds == 0)
{
@ -9392,7 +9392,7 @@ namespace libtorrent
m_announcing = true;
#ifndef TORRENT_DISABLE_DHT
if ((!m_policy || m_policy->num_peers() < 50) && m_ses.dht())
if ((!m_peer_list || m_peer_list->num_peers() < 50) && m_ses.dht())
{
// we don't have any peers, prioritize
// announcing this torrent with the DHT
@ -10603,7 +10603,7 @@ namespace libtorrent
torrent_state st = get_policy_state();
need_policy();
torrent_peer* p = m_policy->connect_one_peer(m_ses.session_time(), &st);
torrent_peer* p = m_peer_list->connect_one_peer(m_ses.session_time(), &st);
peers_erased(st.erased);
inc_stats_counter(counters::connection_attempt_loops, st.loop_counter);
@ -10615,7 +10615,7 @@ namespace libtorrent
if (!connect_to_peer(p))
{
m_policy->inc_failcount(p);
m_peer_list->inc_failcount(p);
update_want_peers();
return false;
}
@ -10693,7 +10693,7 @@ namespace libtorrent
need_policy();
torrent_state st = get_policy_state();
torrent_peer* p = m_policy->add_peer(adr, source, 0, &st);
torrent_peer* p = m_peer_list->add_peer(adr, source, 0, &st);
peers_erased(st.erased);
if (p)
{
@ -10719,7 +10719,7 @@ namespace libtorrent
return false;
need_policy();
if (!m_policy->ban_peer(tp)) return false;
if (!m_peer_list->ban_peer(tp)) return false;
update_want_peers();
inc_stats_counter(counters::num_banned_peers);
@ -10743,28 +10743,28 @@ namespace libtorrent
}
need_policy();
m_policy->set_seed(p, s);
m_peer_list->set_seed(p, s);
update_auto_sequential();
}
void torrent::clear_failcount(torrent_peer* p)
{
need_policy();
m_policy->set_failcount(p, 0);
m_peer_list->set_failcount(p, 0);
update_want_peers();
}
std::pair<policy::iterator, policy::iterator> torrent::find_peers(address const& a)
std::pair<peer_list::iterator, peer_list::iterator> torrent::find_peers(address const& a)
{
need_policy();
return m_policy->find_peers(a);
return m_peer_list->find_peers(a);
}
void torrent::update_peer_port(int port, torrent_peer* p, int src)
{
need_policy();
torrent_state st = get_policy_state();
m_policy->update_peer_port(port, p, src, &st);
m_peer_list->update_peer_port(port, p, src, &st);
peers_erased(st.erased);
update_want_peers();
}
@ -10793,11 +10793,11 @@ namespace libtorrent
void torrent::ip_filter_updated()
{
if (!m_apply_ip_filter) return;
if (!m_policy) return;
if (!m_peer_list) return;
torrent_state st = get_policy_state();
std::vector<address> banned;
m_policy->apply_ip_filter(m_ses.get_ip_filter(), &st, banned);
m_peer_list->apply_ip_filter(m_ses.get_ip_filter(), &st, banned);
if (alerts().should_post<peer_blocked_alert>())
{
@ -10813,11 +10813,11 @@ namespace libtorrent
void torrent::port_filter_updated()
{
if (!m_apply_ip_filter) return;
if (!m_policy) return;
if (!m_peer_list) return;
torrent_state st = get_policy_state();
std::vector<address> banned;
m_policy->apply_port_filter(m_ses.get_port_filter(), &st, banned);
m_peer_list->apply_port_filter(m_ses.get_port_filter(), &st, banned);
if (alerts().should_post<peer_blocked_alert>())
{
@ -10830,7 +10830,7 @@ namespace libtorrent
peers_erased(st.erased);
}
// this is called when torrent_peers are removed from the policy
// this is called when torrent_peers are removed from the peer_list
// (peer-list). It removes any references we may have to those torrent_peers,
// so we don't leave then dangling
void torrent::peers_erased(std::vector<torrent_peer*> const& peers)
@ -11055,7 +11055,7 @@ namespace libtorrent
void torrent::new_external_ip()
{
if (m_policy) m_policy->clear_peer_prio();
if (m_peer_list) m_peer_list->clear_peer_prio();
}
void torrent::set_state(torrent_status::state_t s)
@ -11211,9 +11211,9 @@ namespace libtorrent
st->num_peers = int(m_connections.size()) - m_num_connecting;
st->list_peers = m_policy ? m_policy->num_peers() : 0;
st->list_seeds = m_policy ? m_policy->num_seeds() : 0;
st->connect_candidates = m_policy ? m_policy->num_connect_candidates() : 0;
st->list_peers = m_peer_list ? m_peer_list->num_peers() : 0;
st->list_seeds = m_peer_list ? m_peer_list->num_seeds() : 0;
st->connect_candidates = m_peer_list ? m_peer_list->num_connect_candidates() : 0;
st->seed_rank = seed_rank(settings());
st->all_time_upload = m_total_uploaded;

View File

@ -99,7 +99,7 @@ test-suite libtorrent :
[ run test_recheck.cpp ]
[ run test_stat_cache.cpp ]
[ run test_part_file.cpp ]
[ run test_policy.cpp ]
[ run test_peer_list.cpp ]
[ run test_torrent_info.cpp ]
[ run test_time.cpp ]
[ run test_file_storage.cpp ]

View File

@ -30,7 +30,7 @@ POSSIBILITY OF SUCH DAMAGE.
*/
#include "libtorrent/policy.hpp"
#include "libtorrent/peer_list.hpp"
#include "libtorrent/torrent_handle.hpp"
#include "libtorrent/torrent_peer_allocator.hpp"
#include "libtorrent/peer_connection_interface.hpp"
@ -124,7 +124,7 @@ struct mock_torrent
}
#endif
policy* m_p;
peer_list* m_p;
private:
@ -149,7 +149,7 @@ int test_main()
// when disallowing it
{
mock_torrent t;
policy p;
peer_list p;
t.m_p = &p;
TEST_EQUAL(p.num_connect_candidates(), 0);
torrent_peer* peer1 = p.add_peer(ep("10.0.0.2", 3000), 0, 0, &st);
@ -170,7 +170,7 @@ int test_main()
{
mock_torrent t;
st.allow_multiple_connections_per_ip = true;
policy p;
peer_list p;
t.m_p = &p;
torrent_peer* peer1 = p.add_peer(ep("10.0.0.2", 3000), 0, 0, &st);
TEST_EQUAL(p.num_connect_candidates(), 1);
@ -190,7 +190,7 @@ int test_main()
{
mock_torrent t;
st.allow_multiple_connections_per_ip = true;
policy p;
peer_list p;
t.m_p = &p;
torrent_peer* peer1 = p.add_peer(ep("10.0.0.2", 3000), 0, 0, &st);
TEST_EQUAL(p.num_connect_candidates(), 1);
@ -227,7 +227,7 @@ int test_main()
{
mock_torrent t;
st.allow_multiple_connections_per_ip = false;
policy p;
peer_list p;
t.m_p = &p;
torrent_peer* peer1 = p.add_peer(ep("10.0.0.2", 3000), 0, 0, &st);
TEST_EQUAL(p.num_connect_candidates(), 1);
@ -259,7 +259,7 @@ int test_main()
{
mock_torrent t;
st.allow_multiple_connections_per_ip = false;
policy p;
peer_list p;
t.m_p = &p;
TEST_EQUAL(p.num_connect_candidates(), 0);
boost::shared_ptr<mock_peer_connection> c(new mock_peer_connection(true, ep("10.0.0.1", 8080)));
@ -280,7 +280,7 @@ int test_main()
{
mock_torrent t;
st.allow_multiple_connections_per_ip = true;
policy p;
peer_list p;
t.m_p = &p;
torrent_peer* peer2 = p.add_peer(ep("10.0.0.1", 4000), 0, 0, &st);
@ -308,7 +308,7 @@ int test_main()
{
mock_torrent t;
st.allow_multiple_connections_per_ip = false;
policy p;
peer_list p;
t.m_p = &p;
torrent_peer* peer1 = p.add_peer(ep("10.0.0.2", 3000), 0, 0, &st);
TEST_EQUAL(p.num_connect_candidates(), 1);
@ -352,7 +352,7 @@ int test_main()
{
mock_torrent t;
st.allow_multiple_connections_per_ip = false;
policy p;
peer_list p;
t.m_p = &p;
torrent_peer* peer1 = p.add_peer(ep("10.0.0.1", 4000), 0, 0, &st);
@ -393,7 +393,7 @@ int test_main()
mock_torrent t;
st.max_peerlist_size = 100;
st.allow_multiple_connections_per_ip = true;
policy p;
peer_list p;
t.m_p = &p;
for (int i = 0; i < 100; ++i)

View File

@ -30,7 +30,7 @@ POSSIBILITY OF SUCH DAMAGE.
*/
#include "libtorrent/policy.hpp"
#include "libtorrent/peer_list.hpp"
#include "libtorrent/hasher.hpp"
#include "libtorrent/broadcast_socket.hpp" // for supports_ipv6()
#include <boost/crc.hpp>