36 #include <boost/archive/binary_iarchive.hpp> 37 #include <boost/archive/portable_binary_oarchive.hpp> 38 #include <boost/archive/portable_binary_iarchive.hpp> 39 #include <boost/serialization/version.hpp> 41 #include <boost/multi_index_container.hpp> 42 #include <boost/multi_index/ordered_index.hpp> 43 #include <boost/multi_index/identity.hpp> 44 #include <boost/multi_index/member.hpp> 45 #include <boost/range/adaptor/reversed.hpp> 49 #include "net/local_ip.h" 55 #define CURRENT_PEERLIST_STORAGE_ARCHIVE_VER 6 67 bool init(
bool allow_local_ip);
73 bool get_peerlist_full(std::list<peerlist_entry>& pl_gray, std::list<peerlist_entry>& pl_white);
126 typedef boost::multi_index_container<
128 boost::multi_index::indexed_by<
130 boost::multi_index::ordered_unique<boost::multi_index::tag<by_addr>, boost::multi_index::member<peerlist_entry,epee::net_utils::network_address,&peerlist_entry::adr> >,
132 boost::multi_index::ordered_non_unique<boost::multi_index::tag<by_time>, boost::multi_index::member<peerlist_entry,int64_t,&peerlist_entry::last_seen> >
136 typedef boost::multi_index_container<
138 boost::multi_index::indexed_by<
140 boost::multi_index::ordered_unique<boost::multi_index::tag<by_id>, boost::multi_index::member<peerlist_entry,uint64_t,&peerlist_entry::id> >,
142 boost::multi_index::ordered_unique<boost::multi_index::tag<by_addr>, boost::multi_index::member<peerlist_entry,epee::net_utils::network_address,&peerlist_entry::adr> >,
144 boost::multi_index::ordered_non_unique<boost::multi_index::tag<by_time>, boost::multi_index::member<peerlist_entry,int64_t,&peerlist_entry::last_seen> >
148 typedef boost::multi_index_container<
150 boost::multi_index::indexed_by<
152 boost::multi_index::ordered_unique<boost::multi_index::tag<by_addr>, boost::multi_index::member<anchor_peerlist_entry,epee::net_utils::network_address,&anchor_peerlist_entry::adr> >,
154 boost::multi_index::ordered_non_unique<boost::multi_index::tag<by_time>, boost::multi_index::member<anchor_peerlist_entry,int64_t,&anchor_peerlist_entry::first_seen> >
159 template <
class Archive,
class List,
class Element,
class t_version_type>
162 if (
typename Archive::is_saving())
164 uint64_t size = list.size();
184 template <
class Archive,
class t_version_type>
239 auto by_addr_it = pi.get<
by_addr>().find(x.adr);
240 if(by_addr_it == pi.get<
by_addr>().end())
254 sorted_index.erase(sorted_index.begin());
263 sorted_index.erase(sorted_index.begin());
288 p = *epee::misc_utils::move_it_backward(--by_time_index.end(), i);
300 p = *epee::misc_utils::move_it_backward(--by_time_index.end(), i);
308 if(address.is_loopback())
324 for(
const peers_indexed::value_type& vl: boost::adaptors::reverse(by_time_index))
332 bs_head.push_back(vl);
342 for(
const peers_indexed::value_type& vl: boost::adaptors::reverse(by_time_index_gr))
344 pl_gray.push_back(vl);
348 for(
const peers_indexed::value_type& vl: boost::adaptors::reverse(by_time_index_wt))
350 pl_white.push_back(vl);
367 CATCH_ENTRY_L0(
"peerlist_manager::set_peer_just_seen()",
false);
397 CATCH_ENTRY_L0(
"peerlist_manager::append_with_peer_white()",
false);
426 CATCH_ENTRY_L0(
"peerlist_manager::append_with_peer_gray()",
false);
444 CATCH_ENTRY_L0(
"peerlist_manager::append_with_peer_anchor()",
false);
458 size_t random_index = crypto::rand<size_t>() %
m_peers_gray.size();
461 pe = *epee::misc_utils::move_it_backward(--by_time_index.end(), random_index);
465 CATCH_ENTRY_L0(
"peerlist_manager::get_random_gray_peer()",
false);
483 CATCH_ENTRY_L0(
"peerlist_manager::remove_from_peer_gray()",
false);
504 CATCH_ENTRY_L0(
"peerlist_manager::get_and_empty_anchor_peerlist()",
false);
514 anchor_peers_indexed::index_iterator<by_addr>::type iterator =
m_peers_anchor.get<
by_addr>().find(addr);
522 CATCH_ENTRY_L0(
"peerlist_manager::remove_from_peer_anchor()",
false);
int64_t last_seen
Definition: p2p_protocol_defs.h:74
AddressType adr
Definition: p2p_protocol_defs.h:72
AddressType adr
Definition: p2p_protocol_defs.h:87
BOOST_CLASS_VERSION(nodetool::node_server< cryptonote::t_cryptonote_protocol_handler< cryptonote::core > >, 1)
static __thread int depth
Definition: threadpool.cpp:38
#define P2P_DEFAULT_PEERS_IN_HANDSHAKE
Definition: cryptonote_config.h:108
peerid_type id
Definition: p2p_protocol_defs.h:73
time_t time
Definition: blockchain.cpp:90
Definition: p2p_protocol_defs.h:85
#define P2P_LOCAL_GRAY_PEERLIST_LIMIT
Definition: cryptonote_config.h:103
string a
Definition: MakeCryptoOps.py:15
#define P2P_LOCAL_WHITE_PEERLIST_LIMIT
Definition: cryptonote_config.h:102
Definition: p2p_protocol_defs.h:70
#define CURRENT_PEERLIST_STORAGE_ARCHIVE_VER
Definition: net_peerlist.h:55