|
|
|
@ -4762,6 +4762,7 @@ static void RelayAddress(const CAddress& addr, bool fReachable, CConnman& connma
@@ -4762,6 +4762,7 @@ static void RelayAddress(const CAddress& addr, bool fReachable, CConnman& connma
|
|
|
|
|
uint64_t hashAddr = addr.GetHash(); |
|
|
|
|
std::multimap<uint64_t, CNode*> mapMix; |
|
|
|
|
const CSipHasher hasher = connman.GetDeterministicRandomizer(RANDOMIZER_ID_ADDRESS_RELAY).Write(hashAddr << 32).Write((GetTime() + hashAddr) / (24*60*60)); |
|
|
|
|
FastRandomContext insecure_rand; |
|
|
|
|
|
|
|
|
|
auto sortfunc = [&mapMix, &hasher](CNode* pnode) { |
|
|
|
|
if (pnode->nVersion >= CADDR_TIME_VERSION) { |
|
|
|
@ -4770,9 +4771,9 @@ static void RelayAddress(const CAddress& addr, bool fReachable, CConnman& connma
@@ -4770,9 +4771,9 @@ static void RelayAddress(const CAddress& addr, bool fReachable, CConnman& connma
|
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
auto pushfunc = [&addr, &mapMix, &nRelayNodes] { |
|
|
|
|
auto pushfunc = [&addr, &mapMix, &nRelayNodes, &insecure_rand] { |
|
|
|
|
for (auto mi = mapMix.begin(); mi != mapMix.end() && nRelayNodes-- > 0; ++mi) |
|
|
|
|
mi->second->PushAddress(addr); |
|
|
|
|
mi->second->PushAddress(addr, insecure_rand); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
connman.ForEachNodeThen(std::move(sortfunc), std::move(pushfunc)); |
|
|
|
@ -5082,14 +5083,15 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -5082,14 +5083,15 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
|
|
|
|
if (fListen && !IsInitialBlockDownload()) |
|
|
|
|
{ |
|
|
|
|
CAddress addr = GetLocalAddress(&pfrom->addr, pfrom->GetLocalServices()); |
|
|
|
|
FastRandomContext insecure_rand; |
|
|
|
|
if (addr.IsRoutable()) |
|
|
|
|
{ |
|
|
|
|
LogPrint("net", "ProcessMessages: advertising address %s\n", addr.ToString()); |
|
|
|
|
pfrom->PushAddress(addr); |
|
|
|
|
pfrom->PushAddress(addr, insecure_rand); |
|
|
|
|
} else if (IsPeerAddrLocalGood(pfrom)) { |
|
|
|
|
addr.SetIP(pfrom->addrLocal); |
|
|
|
|
LogPrint("net", "ProcessMessages: advertising address %s\n", addr.ToString()); |
|
|
|
|
pfrom->PushAddress(addr); |
|
|
|
|
pfrom->PushAddress(addr, insecure_rand); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -6012,8 +6014,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -6012,8 +6014,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
|
|
|
|
|
|
|
|
|
pfrom->vAddrToSend.clear(); |
|
|
|
|
vector<CAddress> vAddr = connman.GetAddresses(); |
|
|
|
|
FastRandomContext insecure_rand; |
|
|
|
|
BOOST_FOREACH(const CAddress &addr, vAddr) |
|
|
|
|
pfrom->PushAddress(addr); |
|
|
|
|
pfrom->PushAddress(addr, insecure_rand); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -6846,7 +6849,7 @@ bool SendMessages(CNode* pto, CConnman& connman)
@@ -6846,7 +6849,7 @@ bool SendMessages(CNode* pto, CConnman& connman)
|
|
|
|
|
// until scheduled broadcast, then move the broadcast to within MAX_FEEFILTER_CHANGE_DELAY.
|
|
|
|
|
else if (timeNow + MAX_FEEFILTER_CHANGE_DELAY * 1000000 < pto->nextSendTimeFeeFilter && |
|
|
|
|
(currentFilter < 3 * pto->lastSentFeeFilter / 4 || currentFilter > 4 * pto->lastSentFeeFilter / 3)) { |
|
|
|
|
pto->nextSendTimeFeeFilter = timeNow + (insecure_rand() % MAX_FEEFILTER_CHANGE_DELAY) * 1000000; |
|
|
|
|
pto->nextSendTimeFeeFilter = timeNow + GetRandInt(MAX_FEEFILTER_CHANGE_DELAY) * 1000000; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|