diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c367973f..7244165db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,7 +50,7 @@ set(sources piece_picker platform_util proxy_base - policy + peer_list puff random request_blocks diff --git a/Jamfile b/Jamfile index e33713522..37ab954c8 100755 --- a/Jamfile +++ b/Jamfile @@ -545,7 +545,7 @@ SOURCES = natpmp packet_buffer piece_picker - policy + peer_list proxy_base puff random diff --git a/docs/hacking.diagram b/docs/hacking.diagram index f6c7cb075..db00a06d6 100644 --- a/docs/hacking.diagram +++ b/docs/hacking.diagram @@ -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 diff --git a/docs/hacking.rst b/docs/hacking.rst index 3a1878369..bdb626c4e 100644 --- a/docs/hacking.rst +++ b/docs/hacking.rst @@ -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 ------------ diff --git a/include/libtorrent/Makefile.am b/include/libtorrent/Makefile.am index 76eb60868..9ba58e94c 100644 --- a/include/libtorrent/Makefile.am +++ b/include/libtorrent/Makefile.am @@ -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 \ diff --git a/include/libtorrent/policy.hpp b/include/libtorrent/peer_list.hpp similarity index 96% rename from include/libtorrent/policy.hpp rename to include/libtorrent/peer_list.hpp index 5a89a1e83..fe536b7ce 100644 --- a/include/libtorrent/policy.hpp +++ b/include/libtorrent/peer_list.hpp @@ -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 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 diff --git a/include/libtorrent/torrent.hpp b/include/libtorrent/torrent.hpp index befcc2e91..1c4573b8b 100644 --- a/include/libtorrent/torrent.hpp +++ b/include/libtorrent/torrent.hpp @@ -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 m_policy; + boost::scoped_ptr 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 find_peers(address const& a); + std::pair 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; diff --git a/src/Makefile.am b/src/Makefile.am index b91c4fc6b..46686cc6b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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 \ diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp index 49da2d025..94c9062e8 100644 --- a/src/peer_connection.cpp +++ b/src/peer_connection.cpp @@ -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" diff --git a/src/policy.cpp b/src/peer_list.cpp similarity index 93% rename from src/policy.cpp rename to src/peer_list.cpp index 798d3bb82..376acbaf0 100644 --- a/src/policy.cpp +++ b/src/peer_list.cpp @@ -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
& banned) + void peer_list::apply_ip_filter(ip_filter const& filter, torrent_state* state, std::vector
& 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
& banned) + void peer_list::apply_port_filter(port_filter const& filter, torrent_state* state, std::vector
& 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& peers, int session_time, torrent_state* state) + void peer_list::find_connect_candidates(std::vector& 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::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()); diff --git a/src/smart_ban.cpp b/src/smart_ban.cpp index a02e58fc2..567d7943b 100644 --- a/src/smart_ban.cpp +++ b/src/smart_ban.cpp @@ -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 range + std::pair 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 range + std::pair range = m_torrent.find_peers(a); if (range.first == range.second) return; torrent_peer* p = NULL; diff --git a/src/torrent.cpp b/src/torrent.cpp index 2081a9886..54cd20ba1 100644 --- a/src/torrent.cpp +++ b/src/torrent.cpp @@ -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 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 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& 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 torrent::find_peers(address const& a) + std::pair 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
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()) { @@ -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
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()) { @@ -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 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; diff --git a/test/Jamfile b/test/Jamfile index 6edf5eb81..3ca2b18c7 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -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 ] diff --git a/test/test_policy.cpp b/test/test_peer_list.cpp similarity index 98% rename from test/test_policy.cpp rename to test/test_peer_list.cpp index af8992a19..1a57ce673 100644 --- a/test/test_policy.cpp +++ b/test/test_peer_list.cpp @@ -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 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) diff --git a/test/test_peer_priority.cpp b/test/test_peer_priority.cpp index 0c35702fd..b8232c76b 100644 --- a/test/test_peer_priority.cpp +++ b/test/test_peer_priority.cpp @@ -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