@ -2407,14 +2407,8 @@ void PeerManager::ProcessMessage(CNode& pfrom, const std::string& msg_type, CDat
// empty and no one will know who we are, so these mechanisms are
// empty and no one will know who we are, so these mechanisms are
// important to help us connect to the network.
// important to help us connect to the network.
//
//
// We also update the addrman to record connection success for
// We skip this for BLOCK_RELAY peers to avoid potentially leaking
// these peers (which include OUTBOUND_FULL_RELAY and FEELER
// information about our BLOCK_RELAY connections via address relay.
// connections) so that addrman will have an up-to-date notion of
// which peers are online and available.
//
// We skip these operations for BLOCK_RELAY peers to avoid
// potentially leaking information about our BLOCK_RELAY
// connections via the addrman or address relay.
if ( fListen & & ! : : ChainstateActive ( ) . IsInitialBlockDownload ( ) )
if ( fListen & & ! : : ChainstateActive ( ) . IsInitialBlockDownload ( ) )
{
{
CAddress addr = GetLocalAddress ( & pfrom . addr , pfrom . GetLocalServices ( ) ) ;
CAddress addr = GetLocalAddress ( & pfrom . addr , pfrom . GetLocalServices ( ) ) ;
@ -2433,9 +2427,23 @@ void PeerManager::ProcessMessage(CNode& pfrom, const std::string& msg_type, CDat
// Get recent addresses
// Get recent addresses
m_connman . PushMessage ( & pfrom , CNetMsgMaker ( greatest_common_version ) . Make ( NetMsgType : : GETADDR ) ) ;
m_connman . PushMessage ( & pfrom , CNetMsgMaker ( greatest_common_version ) . Make ( NetMsgType : : GETADDR ) ) ;
pfrom . fGetAddr = true ;
pfrom . fGetAddr = true ;
}
// Moves address from New to Tried table in Addrman, resolves
if ( ! pfrom . IsInboundConn ( ) ) {
// tried-table collisions, etc.
// For non-inbound connections, we update the addrman to record
// connection success so that addrman will have an up-to-date
// notion of which peers are online and available.
//
// While we strive to not leak information about block-relay-only
// connections via the addrman, not moving an address to the tried
// table is also potentially detrimental because new-table entries
// are subject to eviction in the event of addrman collisions. We
// mitigate the information-leak by never calling
// CAddrMan::Connected() on block-relay-only peers; see
// FinalizeNode().
//
// This moves an address from New to Tried table in Addrman,
// resolves tried-table collisions, etc.
m_connman . MarkAddressGood ( pfrom . addr ) ;
m_connman . MarkAddressGood ( pfrom . addr ) ;
}
}