mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-05 14:06:27 -05:00
[net processing] Make RelayAddress() a member function of PeerManagerImpl
This commit is contained in:
parent
86acc96469
commit
caba7ae8a5
1 changed files with 21 additions and 20 deletions
|
@ -326,6 +326,15 @@ private:
|
|||
/** Send `addr` messages on a regular schedule. */
|
||||
void MaybeSendAddr(CNode& node, std::chrono::microseconds current_time);
|
||||
|
||||
/** Relay (gossip) an address to a few randomly chosen nodes.
|
||||
*
|
||||
* @param[in] originator The id of the peer that sent us the address. We don't want to relay it back.
|
||||
* @param[in] addr Address to relay.
|
||||
* @param[in] fReachable Whether the address' network is reachable. We relay unreachable
|
||||
* addresses less.
|
||||
*/
|
||||
void RelayAddress(NodeId originator, const CAddress& addr, bool fReachable);
|
||||
|
||||
const CChainParams& m_chainparams;
|
||||
CConnman& m_connman;
|
||||
CAddrMan& m_addrman;
|
||||
|
@ -1483,31 +1492,23 @@ void PeerManagerImpl::RelayTransaction(const uint256& txid, const uint256& wtxid
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Relay (gossip) an address to a few randomly chosen nodes.
|
||||
* We choose the same nodes within a given 24h window (if the list of connected
|
||||
* nodes does not change) and we don't relay to nodes that already know an
|
||||
* address. So within 24h we will likely relay a given address once. This is to
|
||||
* prevent a peer from unjustly giving their address better propagation by sending
|
||||
* it to us repeatedly.
|
||||
* @param[in] originator The id of the peer that sent us the address. We don't want to relay it back.
|
||||
* @param[in] addr Address to relay.
|
||||
* @param[in] fReachable Whether the address' network is reachable. We relay unreachable
|
||||
* addresses less.
|
||||
* @param[in] connman Connection manager to choose nodes to relay to.
|
||||
*/
|
||||
static void RelayAddress(NodeId originator,
|
||||
const CAddress& addr,
|
||||
bool fReachable,
|
||||
const CConnman& connman)
|
||||
void PeerManagerImpl::RelayAddress(NodeId originator,
|
||||
const CAddress& addr,
|
||||
bool fReachable)
|
||||
{
|
||||
// We choose the same nodes within a given 24h window (if the list of connected
|
||||
// nodes does not change) and we don't relay to nodes that already know an
|
||||
// address. So within 24h we will likely relay a given address once. This is to
|
||||
// prevent a peer from unjustly giving their address better propagation by sending
|
||||
// it to us repeatedly.
|
||||
|
||||
if (!fReachable && !addr.IsRelayable()) return;
|
||||
|
||||
// Relay to a limited number of other nodes
|
||||
// Use deterministic randomness to send to the same nodes for 24 hours
|
||||
// at a time so the m_addr_knowns of the chosen nodes prevent repeats
|
||||
uint64_t hashAddr = addr.GetHash();
|
||||
const CSipHasher hasher = connman.GetDeterministicRandomizer(RANDOMIZER_ID_ADDRESS_RELAY).Write(hashAddr << 32).Write((GetTime() + hashAddr) / (24 * 60 * 60));
|
||||
const CSipHasher hasher = m_connman.GetDeterministicRandomizer(RANDOMIZER_ID_ADDRESS_RELAY).Write(hashAddr << 32).Write((GetTime() + hashAddr) / (24 * 60 * 60));
|
||||
FastRandomContext insecure_rand;
|
||||
|
||||
// Relay reachable addresses to 2 peers. Unreachable addresses are relayed randomly to 1 or 2 peers.
|
||||
|
@ -1535,7 +1536,7 @@ static void RelayAddress(NodeId originator,
|
|||
}
|
||||
};
|
||||
|
||||
connman.ForEachNodeThen(std::move(sortfunc), std::move(pushfunc));
|
||||
m_connman.ForEachNodeThen(std::move(sortfunc), std::move(pushfunc));
|
||||
}
|
||||
|
||||
void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CInv& inv)
|
||||
|
@ -2683,7 +2684,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||
if (addr.nTime > nSince && !pfrom.fGetAddr && vAddr.size() <= 10 && addr.IsRoutable())
|
||||
{
|
||||
// Relay to a limited number of other nodes
|
||||
RelayAddress(pfrom.GetId(), addr, fReachable, m_connman);
|
||||
RelayAddress(pfrom.GetId(), addr, fReachable);
|
||||
}
|
||||
// Do not store addresses outside our network
|
||||
if (fReachable)
|
||||
|
|
Loading…
Add table
Reference in a new issue