Skip to content

Commit b84afb2

Browse files
codablockUdjinM6
authored andcommitted
Allow to filter for fully connected nodes when calling CopyNodeVector (#1864)
And use this where needed. This avoids warnings about unset version fields and is also generally a good thing (we really should only communicate with nodes we know are good)
1 parent 4052401 commit b84afb2

File tree

7 files changed

+16
-8
lines changed

7 files changed

+16
-8
lines changed

src/governance.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1363,7 +1363,7 @@ void CGovernanceManager::UpdatedBlockTip(const CBlockIndex *pindex, CConnman& co
13631363

13641364
void CGovernanceManager::RequestOrphanObjects(CConnman& connman)
13651365
{
1366-
std::vector<CNode*> vNodesCopy = connman.CopyNodeVector();
1366+
std::vector<CNode*> vNodesCopy = connman.CopyNodeVector(CConnman::FullyConnectedOnly);
13671367

13681368
std::vector<uint256> vecHashesFiltered;
13691369
{

src/masternode-sync.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ void CMasternodeSync::ProcessTick(CConnman& connman)
179179

180180
// gradually request the rest of the votes after sync finished
181181
if(IsSynced()) {
182-
std::vector<CNode*> vNodesCopy = connman.CopyNodeVector();
182+
std::vector<CNode*> vNodesCopy = connman.CopyNodeVector(CConnman::FullyConnectedOnly);
183183
governance.RequestGovernanceObjectVotes(vNodesCopy, connman);
184184
connman.ReleaseNodeVector(vNodesCopy);
185185
return;
@@ -190,7 +190,7 @@ void CMasternodeSync::ProcessTick(CConnman& connman)
190190
LogPrintf("CMasternodeSync::ProcessTick -- nTick %d nRequestedMasternodeAssets %d nRequestedMasternodeAttempt %d nSyncProgress %f\n", nTick, nRequestedMasternodeAssets, nRequestedMasternodeAttempt, nSyncProgress);
191191
uiInterface.NotifyAdditionalDataSyncProgressChanged(nSyncProgress);
192192

193-
std::vector<CNode*> vNodesCopy = connman.CopyNodeVector();
193+
std::vector<CNode*> vNodesCopy = connman.CopyNodeVector(CConnman::FullyConnectedOnly);
194194

195195
BOOST_FOREACH(CNode* pnode, vNodesCopy)
196196
{

src/masternodeman.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1056,7 +1056,7 @@ bool CMasternodeMan::SendVerifyRequest(const CAddress& addr, const std::vector<C
10561056
CMasternodeVerification mnv(addr, GetRandInt(999999), nCachedBlockHeight - 1);
10571057
mWeAskedForVerification[addr] = mnv;
10581058
LogPrintf("CMasternodeMan::SendVerifyRequest -- verifying node using nonce %d addr=%s\n", mnv.nonce, addr.ToString());
1059-
CNetMsgMaker msgMaker(pnode->GetSendVersion());
1059+
CNetMsgMaker msgMaker(pnode->GetSendVersion()); // TODO this gives a warning about version not being set (we should wait for VERSION exchange)
10601060
connman.PushMessage(pnode, msgMaker.Make(NetMsgType::MNVERIFY, mnv));
10611061
return true;
10621062
});

src/net.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2841,18 +2841,25 @@ int64_t PoissonNextSend(int64_t nNow, int average_interval_seconds) {
28412841
return nNow + (int64_t)(log1p(GetRand(1ULL << 48) * -0.0000000000000035527136788 /* -1/2^48 */) * average_interval_seconds * -1000000.0 + 0.5);
28422842
}
28432843

2844-
std::vector<CNode*> CConnman::CopyNodeVector()
2844+
std::vector<CNode*> CConnman::CopyNodeVector(std::function<bool(const CNode* pnode)> cond)
28452845
{
28462846
std::vector<CNode*> vecNodesCopy;
28472847
LOCK(cs_vNodes);
28482848
for(size_t i = 0; i < vNodes.size(); ++i) {
28492849
CNode* pnode = vNodes[i];
2850+
if (!cond(pnode))
2851+
continue;
28502852
pnode->AddRef();
28512853
vecNodesCopy.push_back(pnode);
28522854
}
28532855
return vecNodesCopy;
28542856
}
28552857

2858+
std::vector<CNode*> CConnman::CopyNodeVector()
2859+
{
2860+
return CopyNodeVector(AllNodes);
2861+
}
2862+
28562863
void CConnman::ReleaseNodeVector(const std::vector<CNode*>& vecNodes)
28572864
{
28582865
LOCK(cs_vNodes);

src/net.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ class CConnman
303303
ForEachNodeThen(FullyConnectedOnly, pre, post);
304304
}
305305

306+
std::vector<CNode*> CopyNodeVector(std::function<bool(const CNode* pnode)> cond);
306307
std::vector<CNode*> CopyNodeVector();
307308
void ReleaseNodeVector(const std::vector<CNode*>& vecNodes);
308309

src/privatesend-client.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -889,7 +889,7 @@ bool CPrivateSendClient::JoinExistingQueue(CAmount nBalanceNeedsAnonymized, CCon
889889
infoMixingMasternode = infoMn;
890890
nSessionDenom = dsq.nDenom;
891891

892-
CNetMsgMaker msgMaker(pnode->GetSendVersion());
892+
CNetMsgMaker msgMaker(pnode->GetSendVersion()); // TODO this gives a warning about version not being set (we should wait for VERSION exchange)
893893
connman.PushMessage(pnode, msgMaker.Make(NetMsgType::DSACCEPT, nSessionDenom, txMyCollateral));
894894
LogPrintf("CPrivateSendClient::JoinExistingQueue -- connected (from queue), sending DSACCEPT: nSessionDenom: %d (%s), addr=%s\n",
895895
nSessionDenom, CPrivateSend::GetDenominationsToString(nSessionDenom), pnode->addr.ToString());
@@ -963,7 +963,7 @@ bool CPrivateSendClient::StartNewQueue(CAmount nValueMin, CAmount nBalanceNeedsA
963963
nSessionDenom = CPrivateSend::GetDenominationsByAmounts(vecAmounts);
964964
}
965965

966-
CNetMsgMaker msgMaker(pnode->GetSendVersion());
966+
CNetMsgMaker msgMaker(pnode->GetSendVersion()); // TODO this gives a warning about version not being set (we should wait for VERSION exchange)
967967
connman.PushMessage(pnode, msgMaker.Make(NetMsgType::DSACCEPT, nSessionDenom, txMyCollateral));
968968
LogPrintf("CPrivateSendClient::StartNewQueue -- connected, sending DSACCEPT, nSessionDenom: %d (%s)\n",
969969
nSessionDenom, CPrivateSend::GetDenominationsToString(nSessionDenom));

src/privatesend.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ bool CDarksendQueue::CheckSignature(const CPubKey& pubKeyMasternode)
6565

6666
bool CDarksendQueue::Relay(CConnman& connman)
6767
{
68-
std::vector<CNode*> vNodesCopy = connman.CopyNodeVector();
68+
std::vector<CNode*> vNodesCopy = connman.CopyNodeVector(CConnman::FullyConnectedOnly);
6969
BOOST_FOREACH(CNode* pnode, vNodesCopy) {
7070
CNetMsgMaker msgMaker(pnode->GetSendVersion());
7171
if (pnode->nVersion >= MIN_PRIVATESEND_PEER_PROTO_VERSION)

0 commit comments

Comments
 (0)