mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
[net] Change AdvertiseLocal to GetLocalAddrForPeer
Gossiping addresses to peers is the responsibility of net processing. Change AdvertiseLocal() in net to just return an (optional) address for net processing to advertise. Update function name to reflect new responsibility.
This commit is contained in:
parent
9bbf08bf98
commit
d21d2b264c
4 changed files with 12 additions and 7 deletions
|
@ -201,8 +201,7 @@ bool IsPeerAddrLocalGood(CNode *pnode)
|
|||
IsReachable(addrLocal.GetNetwork());
|
||||
}
|
||||
|
||||
// pushes our own address to a peer
|
||||
void AdvertiseLocal(CNode *pnode)
|
||||
Optional<CAddress> GetLocalAddrForPeer(CNode *pnode)
|
||||
{
|
||||
if (fListen && pnode->fSuccessfullyConnected)
|
||||
{
|
||||
|
@ -222,10 +221,12 @@ void AdvertiseLocal(CNode *pnode)
|
|||
}
|
||||
if (addrLocal.IsRoutable() || gArgs.GetBoolArg("-addrmantest", false))
|
||||
{
|
||||
LogPrint(BCLog::NET, "AdvertiseLocal: advertising address %s\n", addrLocal.ToString());
|
||||
pnode->PushAddress(addrLocal, rng);
|
||||
LogPrint(BCLog::NET, "Advertising address %s to peer=%d\n", addrLocal.ToString(), pnode->GetId());
|
||||
return addrLocal;
|
||||
}
|
||||
}
|
||||
// Address is unroutable. Don't advertise.
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
// learn a new local address
|
||||
|
|
|
@ -197,7 +197,8 @@ enum
|
|||
};
|
||||
|
||||
bool IsPeerAddrLocalGood(CNode *pnode);
|
||||
void AdvertiseLocal(CNode *pnode);
|
||||
/** Returns a local address that we should advertise to this peer */
|
||||
Optional<CAddress> GetLocalAddrForPeer(CNode *pnode);
|
||||
|
||||
/**
|
||||
* Mark a network as reachable or unreachable (no automatic connects to it)
|
||||
|
|
|
@ -4426,7 +4426,10 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
|
|||
if (pto->m_next_local_addr_send != 0us) {
|
||||
pto->m_addr_known->reset();
|
||||
}
|
||||
AdvertiseLocal(pto);
|
||||
if (Optional<CAddress> local_addr = GetLocalAddrForPeer(pto)) {
|
||||
FastRandomContext insecure_rand;
|
||||
pto->PushAddress(*local_addr, insecure_rand);
|
||||
}
|
||||
pto->m_next_local_addr_send = PoissonNextSend(current_time, AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL);
|
||||
}
|
||||
|
||||
|
|
|
@ -691,7 +691,7 @@ BOOST_AUTO_TEST_CASE(ipv4_peer_with_ipv6_addrMe_test)
|
|||
pnode->SetAddrLocal(addrLocal);
|
||||
|
||||
// before patch, this causes undefined behavior detectable with clang's -fsanitize=memory
|
||||
AdvertiseLocal(&*pnode);
|
||||
GetLocalAddrForPeer(&*pnode);
|
||||
|
||||
// suppress no-checks-run warning; if this test fails, it's by triggering a sanitizer
|
||||
BOOST_CHECK(1);
|
||||
|
|
Loading…
Add table
Reference in a new issue