Few networking fixes (#1341)
* Few networking fixes: - skip "masternode"/inbound connections for sync related processes - do not sync gov data to other nodes until fully synced ourselves - do not accept incoming connections until fully synced * inbound connections could be harmful only if our node is a masternode * same for CGovernanceManager::Sync
This commit is contained in:
parent
23fa1f5f13
commit
80b71d9746
@ -665,6 +665,9 @@ void CGovernanceManager::Sync(CNode* pfrom, const uint256& nProp, const CBloomFi
|
|||||||
budget object to see if they're OK. If all checks pass, we'll send it to the peer.
|
budget object to see if they're OK. If all checks pass, we'll send it to the peer.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// do not provide any data until our node is synced
|
||||||
|
if(fMasterNode && !masternodeSync.IsSynced()) return;
|
||||||
|
|
||||||
int nObjCount = 0;
|
int nObjCount = 0;
|
||||||
int nVoteCount = 0;
|
int nVoteCount = 0;
|
||||||
|
|
||||||
@ -1045,9 +1048,11 @@ void CGovernanceManager::RequestGovernanceObjectVotes(const std::vector<CNode*>&
|
|||||||
}
|
}
|
||||||
bool fAsked = false;
|
bool fAsked = false;
|
||||||
BOOST_FOREACH(CNode* pnode, vNodesCopy) {
|
BOOST_FOREACH(CNode* pnode, vNodesCopy) {
|
||||||
// only use reqular peers, don't try to ask from temporary nodes we connected to -
|
// Only use reqular peers, don't try to ask from outbound "masternode" connections -
|
||||||
// they stay connected for a short period of time and it's possible that we won't get everything we should
|
// they stay connected for a short period of time and it's possible that we won't get everything we should.
|
||||||
if(pnode->fMasternode) continue;
|
// Only use outbound connections - inbound connection could be a "masternode" connection
|
||||||
|
// initialted from another node, so skip it too.
|
||||||
|
if(pnode->fMasternode || (fMasterNode && pnode->fInbound)) continue;
|
||||||
// only use up to date peers
|
// only use up to date peers
|
||||||
if(pnode->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) continue;
|
if(pnode->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) continue;
|
||||||
// stop early to prevent setAskFor overflow
|
// stop early to prevent setAskFor overflow
|
||||||
|
@ -334,6 +334,12 @@ void CMasternodeSync::ProcessTick()
|
|||||||
|
|
||||||
BOOST_FOREACH(CNode* pnode, vNodesCopy)
|
BOOST_FOREACH(CNode* pnode, vNodesCopy)
|
||||||
{
|
{
|
||||||
|
// Don't try to sync any data from outbound "masternode" connections -
|
||||||
|
// they are temporary and should be considered unreliable for a sync process.
|
||||||
|
// Inbound connection this early is most likely a "masternode" connection
|
||||||
|
// initialted from another node, so skip it too.
|
||||||
|
if(pnode->fMasternode || (fMasterNode && pnode->fInbound)) continue;
|
||||||
|
|
||||||
// QUICK MODE (REGTEST ONLY!)
|
// QUICK MODE (REGTEST ONLY!)
|
||||||
if(Params().NetworkIDString() == CBaseChainParams::REGTEST)
|
if(Params().NetworkIDString() == CBaseChainParams::REGTEST)
|
||||||
{
|
{
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include "darksend.h"
|
#include "darksend.h"
|
||||||
#include "instantx.h"
|
#include "instantx.h"
|
||||||
|
#include "masternode-sync.h"
|
||||||
#include "masternodeman.h"
|
#include "masternodeman.h"
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@ -962,6 +963,12 @@ static bool AttemptToEvictConnection(bool fPreferNewConnection) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void AcceptConnection(const ListenSocket& hListenSocket) {
|
static void AcceptConnection(const ListenSocket& hListenSocket) {
|
||||||
|
// don't accept incoming connections until fully synced
|
||||||
|
if(fMasterNode && !masternodeSync.IsSynced()) {
|
||||||
|
LogPrintf("AcceptConnection -- masternode is not synced yet, skipping inbound connection attempt\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
struct sockaddr_storage sockaddr;
|
struct sockaddr_storage sockaddr;
|
||||||
socklen_t len = sizeof(sockaddr);
|
socklen_t len = sizeof(sockaddr);
|
||||||
SOCKET hSocket = accept(hListenSocket.socket, (struct sockaddr*)&sockaddr, &len);
|
SOCKET hSocket = accept(hListenSocket.socket, (struct sockaddr*)&sockaddr, &len);
|
||||||
|
Loading…
Reference in New Issue
Block a user