Skip to content

Commit dd78ec7

Browse files
codablockCryptoCentric
authored andcommitted
Allow to filter for fully connected nodes when calling CopyNodeVector (dashpay#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 180d5f9 commit dd78ec7

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
@@ -1364,7 +1364,7 @@ void CGovernanceManager::UpdatedBlockTip(const CBlockIndex *pindex, CConnman& co
13641364

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

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

src/masternode-sync.cpp

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

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

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

196196
BOOST_FOREACH(CNode* pnode, vNodesCopy)
197197
{

src/masternodeman.cpp

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

10631063
return true;

src/net.cpp

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

2934-
std::vector<CNode*> CConnman::CopyNodeVector()
2934+
std::vector<CNode*> CConnman::CopyNodeVector(std::function<bool(const CNode* pnode)> cond)
29352935
{
29362936
std::vector<CNode*> vecNodesCopy;
29372937
LOCK(cs_vNodes);
29382938
for(size_t i = 0; i < vNodes.size(); ++i) {
29392939
CNode* pnode = vNodes[i];
2940+
if (!cond(pnode))
2941+
continue;
29402942
pnode->AddRef();
29412943
vecNodesCopy.push_back(pnode);
29422944
}
29432945
return vecNodesCopy;
29442946
}
29452947

2948+
std::vector<CNode*> CConnman::CopyNodeVector()
2949+
{
2950+
return CopyNodeVector(AllNodes);
2951+
}
2952+
29462953
void CConnman::ReleaseNodeVector(const std::vector<CNode*>& vecNodes)
29472954
{
29482955
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
@@ -890,7 +890,7 @@ bool CPrivateSendClient::JoinExistingQueue(CAmount nBalanceNeedsAnonymized, CCon
890890
infoMixingMasternode = infoMn;
891891
nSessionDenom = dsq.nDenom;
892892

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

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

src/privatesend.cpp

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

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

0 commit comments

Comments
 (0)