|
|
@ -89,9 +89,6 @@ std::string strSubVersion; |
|
|
|
|
|
|
|
|
|
|
|
limitedmap<uint256, int64_t> mapAlreadyAskedFor(MAX_INV_SZ); |
|
|
|
limitedmap<uint256, int64_t> mapAlreadyAskedFor(MAX_INV_SZ); |
|
|
|
|
|
|
|
|
|
|
|
NodeId nLastNodeId = 0; |
|
|
|
|
|
|
|
CCriticalSection cs_nLastNodeId; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static CSemaphore *semOutbound = NULL; |
|
|
|
static CSemaphore *semOutbound = NULL; |
|
|
|
boost::condition_variable messageHandlerCondition; |
|
|
|
boost::condition_variable messageHandlerCondition; |
|
|
|
|
|
|
|
|
|
|
@ -404,7 +401,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo |
|
|
|
addrman.Attempt(addrConnect, fCountFailure); |
|
|
|
addrman.Attempt(addrConnect, fCountFailure); |
|
|
|
|
|
|
|
|
|
|
|
// Add node
|
|
|
|
// Add node
|
|
|
|
CNode* pnode = new CNode(hSocket, addrConnect, pszDest ? pszDest : "", false); |
|
|
|
CNode* pnode = new CNode(GetNewNodeId(), hSocket, addrConnect, pszDest ? pszDest : "", false); |
|
|
|
GetNodeSignals().InitializeNode(pnode->GetId(), pnode); |
|
|
|
GetNodeSignals().InitializeNode(pnode->GetId(), pnode); |
|
|
|
pnode->AddRef(); |
|
|
|
pnode->AddRef(); |
|
|
|
|
|
|
|
|
|
|
@ -1038,7 +1035,7 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
CNode* pnode = new CNode(hSocket, addr, "", true); |
|
|
|
CNode* pnode = new CNode(GetNewNodeId(), hSocket, addr, "", true); |
|
|
|
GetNodeSignals().InitializeNode(pnode->GetId(), pnode); |
|
|
|
GetNodeSignals().InitializeNode(pnode->GetId(), pnode); |
|
|
|
pnode->AddRef(); |
|
|
|
pnode->AddRef(); |
|
|
|
pnode->fWhitelisted = whitelisted; |
|
|
|
pnode->fWhitelisted = whitelisted; |
|
|
@ -2030,6 +2027,7 @@ CConnman::CConnman() |
|
|
|
{ |
|
|
|
{ |
|
|
|
setBannedIsDirty = false; |
|
|
|
setBannedIsDirty = false; |
|
|
|
fAddressesInitialized = false; |
|
|
|
fAddressesInitialized = false; |
|
|
|
|
|
|
|
nLastNodeId = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool StartNode(CConnman& connman, boost::thread_group& threadGroup, CScheduler& scheduler, std::string& strNodeError) |
|
|
|
bool StartNode(CConnman& connman, boost::thread_group& threadGroup, CScheduler& scheduler, std::string& strNodeError) |
|
|
@ -2041,9 +2039,13 @@ bool StartNode(CConnman& connman, boost::thread_group& threadGroup, CScheduler& |
|
|
|
return ret; |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool CConnman::Start(boost::thread_group& threadGroup, CScheduler& scheduler, std::string& strNodeError) |
|
|
|
NodeId CConnman::GetNewNodeId() |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
return nLastNodeId.fetch_add(1, std::memory_order_relaxed); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool CConnman::Start(boost::thread_group& threadGroup, CScheduler& scheduler, std::string& strNodeError) |
|
|
|
|
|
|
|
{ |
|
|
|
uiInterface.InitMessage(_("Loading addresses...")); |
|
|
|
uiInterface.InitMessage(_("Loading addresses...")); |
|
|
|
// Load addresses from peers.dat
|
|
|
|
// Load addresses from peers.dat
|
|
|
|
int64_t nStart = GetTimeMillis(); |
|
|
|
int64_t nStart = GetTimeMillis(); |
|
|
@ -2089,7 +2091,7 @@ bool CConnman::Start(boost::thread_group& threadGroup, CScheduler& scheduler, st |
|
|
|
if (pnodeLocalHost == NULL) { |
|
|
|
if (pnodeLocalHost == NULL) { |
|
|
|
CNetAddr local; |
|
|
|
CNetAddr local; |
|
|
|
LookupHost("127.0.0.1", local, false); |
|
|
|
LookupHost("127.0.0.1", local, false); |
|
|
|
pnodeLocalHost = new CNode(INVALID_SOCKET, CAddress(CService(local, 0), nLocalServices)); |
|
|
|
pnodeLocalHost = new CNode(GetNewNodeId(), INVALID_SOCKET, CAddress(CService(local, 0), nLocalServices)); |
|
|
|
GetNodeSignals().InitializeNode(pnodeLocalHost->GetId(), pnodeLocalHost); |
|
|
|
GetNodeSignals().InitializeNode(pnodeLocalHost->GetId(), pnodeLocalHost); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -2478,7 +2480,7 @@ void CNode::Fuzz(int nChance) |
|
|
|
unsigned int ReceiveFloodSize() { return 1000*GetArg("-maxreceivebuffer", DEFAULT_MAXRECEIVEBUFFER); } |
|
|
|
unsigned int ReceiveFloodSize() { return 1000*GetArg("-maxreceivebuffer", DEFAULT_MAXRECEIVEBUFFER); } |
|
|
|
unsigned int SendBufferSize() { return 1000*GetArg("-maxsendbuffer", DEFAULT_MAXSENDBUFFER); } |
|
|
|
unsigned int SendBufferSize() { return 1000*GetArg("-maxsendbuffer", DEFAULT_MAXSENDBUFFER); } |
|
|
|
|
|
|
|
|
|
|
|
CNode::CNode(SOCKET hSocketIn, const CAddress& addrIn, const std::string& addrNameIn, bool fInboundIn) : |
|
|
|
CNode::CNode(NodeId idIn, SOCKET hSocketIn, const CAddress& addrIn, const std::string& addrNameIn, bool fInboundIn) : |
|
|
|
ssSend(SER_NETWORK, INIT_PROTO_VERSION), |
|
|
|
ssSend(SER_NETWORK, INIT_PROTO_VERSION), |
|
|
|
addr(addrIn), |
|
|
|
addr(addrIn), |
|
|
|
nKeyedNetGroup(CalculateKeyedNetGroup(addrIn)), |
|
|
|
nKeyedNetGroup(CalculateKeyedNetGroup(addrIn)), |
|
|
@ -2531,16 +2533,12 @@ CNode::CNode(SOCKET hSocketIn, const CAddress& addrIn, const std::string& addrNa |
|
|
|
minFeeFilter = 0; |
|
|
|
minFeeFilter = 0; |
|
|
|
lastSentFeeFilter = 0; |
|
|
|
lastSentFeeFilter = 0; |
|
|
|
nextSendTimeFeeFilter = 0; |
|
|
|
nextSendTimeFeeFilter = 0; |
|
|
|
|
|
|
|
id = idIn; |
|
|
|
|
|
|
|
|
|
|
|
BOOST_FOREACH(const std::string &msg, getAllNetMessageTypes()) |
|
|
|
BOOST_FOREACH(const std::string &msg, getAllNetMessageTypes()) |
|
|
|
mapRecvBytesPerMsgCmd[msg] = 0; |
|
|
|
mapRecvBytesPerMsgCmd[msg] = 0; |
|
|
|
mapRecvBytesPerMsgCmd[NET_MESSAGE_COMMAND_OTHER] = 0; |
|
|
|
mapRecvBytesPerMsgCmd[NET_MESSAGE_COMMAND_OTHER] = 0; |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
LOCK(cs_nLastNodeId); |
|
|
|
|
|
|
|
id = nLastNodeId++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (fLogIPs) |
|
|
|
if (fLogIPs) |
|
|
|
LogPrint("net", "Added connection to %s peer=%d\n", addrName, id); |
|
|
|
LogPrint("net", "Added connection to %s peer=%d\n", addrName, id); |
|
|
|
else |
|
|
|
else |
|
|
|