p2p: fix set_peer_just_seen ignoring last_seen

This commit is contained in:
moneromooo 2020-12-31 03:04:08 +00:00 committed by moneromooo-monero
parent a1eca8ca7e
commit aa3e89a2ba
No known key found for this signature in database
GPG key ID: 686F07454D6CEFC3

View file

@ -110,7 +110,7 @@ namespace nodetool
bool get_gray_peer_by_index(peerlist_entry& p, size_t i); bool get_gray_peer_by_index(peerlist_entry& p, size_t i);
template<typename F> bool foreach(bool white, const F &f); template<typename F> bool foreach(bool white, const F &f);
void evict_host_from_white_peerlist(const peerlist_entry& pr); void evict_host_from_white_peerlist(const peerlist_entry& pr);
bool append_with_peer_white(const peerlist_entry& pr); bool append_with_peer_white(const peerlist_entry& pr, bool trust_last_seen = false);
bool append_with_peer_gray(const peerlist_entry& pr); bool append_with_peer_gray(const peerlist_entry& pr);
bool append_with_peer_anchor(const anchor_peerlist_entry& ple); bool append_with_peer_anchor(const anchor_peerlist_entry& ple);
bool set_peer_just_seen(peerid_type peer, const epee::net_utils::network_address& addr, uint32_t pruning_seed, uint16_t rpc_port, uint32_t rpc_credits_per_hash); bool set_peer_just_seen(peerid_type peer, const epee::net_utils::network_address& addr, uint32_t pruning_seed, uint16_t rpc_port, uint32_t rpc_credits_per_hash);
@ -329,12 +329,12 @@ namespace nodetool
ple.pruning_seed = pruning_seed; ple.pruning_seed = pruning_seed;
ple.rpc_port = rpc_port; ple.rpc_port = rpc_port;
ple.rpc_credits_per_hash = rpc_credits_per_hash; ple.rpc_credits_per_hash = rpc_credits_per_hash;
return append_with_peer_white(ple); return append_with_peer_white(ple, true);
CATCH_ENTRY_L0("peerlist_manager::set_peer_just_seen()", false); CATCH_ENTRY_L0("peerlist_manager::set_peer_just_seen()", false);
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
inline inline
bool peerlist_manager::append_with_peer_white(const peerlist_entry& ple) bool peerlist_manager::append_with_peer_white(const peerlist_entry& ple, bool trust_last_seen)
{ {
TRY_ENTRY(); TRY_ENTRY();
if(!is_host_allowed(ple.adr)) if(!is_host_allowed(ple.adr))
@ -357,7 +357,8 @@ namespace nodetool
new_ple.pruning_seed = by_addr_it_wt->pruning_seed; new_ple.pruning_seed = by_addr_it_wt->pruning_seed;
if (by_addr_it_wt->rpc_port && ple.rpc_port == 0) // guard against older nodes not passing RPC port around if (by_addr_it_wt->rpc_port && ple.rpc_port == 0) // guard against older nodes not passing RPC port around
new_ple.rpc_port = by_addr_it_wt->rpc_port; new_ple.rpc_port = by_addr_it_wt->rpc_port;
new_ple.last_seen = by_addr_it_wt->last_seen; // do not overwrite the last seen timestamp, incoming peer list are untrusted if (!trust_last_seen)
new_ple.last_seen = by_addr_it_wt->last_seen; // do not overwrite the last seen timestamp, incoming peer lists are untrusted
m_peers_white.replace(by_addr_it_wt, new_ple); m_peers_white.replace(by_addr_it_wt, new_ple);
} }
//remove from gray list, if need //remove from gray list, if need