Changeset View
Changeset View
Standalone View
Standalone View
src/net.cpp
Show First 20 Lines • Show All 2,340 Lines • ▼ Show 20 Lines | |||||
CConnman::CConnman(const Config &configIn, uint64_t nSeed0In, uint64_t nSeed1In) | CConnman::CConnman(const Config &configIn, uint64_t nSeed0In, uint64_t nSeed1In) | ||||
: config(&configIn), nSeed0(nSeed0In), nSeed1(nSeed1In) { | : config(&configIn), nSeed0(nSeed0In), nSeed1(nSeed1In) { | ||||
fNetworkActive = true; | fNetworkActive = true; | ||||
setBannedIsDirty = false; | setBannedIsDirty = false; | ||||
fAddressesInitialized = false; | fAddressesInitialized = false; | ||||
nLastNodeId = 0; | nLastNodeId = 0; | ||||
nSendBufferMaxSize = 0; | nSendBufferMaxSize = 0; | ||||
nReceiveFloodSize = 0; | nReceiveFloodSize = 0; | ||||
semOutbound = nullptr; | |||||
semAddnode = nullptr; | |||||
flagInterruptMsgProc = false; | flagInterruptMsgProc = false; | ||||
Options connOptions; | Options connOptions; | ||||
Init(connOptions); | Init(connOptions); | ||||
} | } | ||||
NodeId CConnman::GetNewNodeId() { | NodeId CConnman::GetNewNodeId() { | ||||
return nLastNodeId.fetch_add(1, std::memory_order_relaxed); | return nLastNodeId.fetch_add(1, std::memory_order_relaxed); | ||||
▲ Show 20 Lines • Show All 99 Lines • ▼ Show 20 Lines | bool CConnman::Start(CScheduler &scheduler, const Options &connOptions) { | ||||
} | } | ||||
uiInterface.InitMessage(_("Starting network threads...")); | uiInterface.InitMessage(_("Starting network threads...")); | ||||
fAddressesInitialized = true; | fAddressesInitialized = true; | ||||
if (semOutbound == nullptr) { | if (semOutbound == nullptr) { | ||||
// initialize semaphore | // initialize semaphore | ||||
semOutbound = new CSemaphore( | semOutbound = std::unique_ptr<CSemaphore>(new CSemaphore( | ||||
std::min((nMaxOutbound + nMaxFeeler), nMaxConnections)); | std::min((nMaxOutbound + nMaxFeeler), nMaxConnections))); | ||||
} | } | ||||
if (semAddnode == nullptr) { | if (semAddnode == nullptr) { | ||||
// initialize semaphore | // initialize semaphore | ||||
semAddnode = new CSemaphore(nMaxAddnode); | semAddnode = std::unique_ptr<CSemaphore>(new CSemaphore(nMaxAddnode)); | ||||
} | } | ||||
// | // | ||||
// Start threads | // Start threads | ||||
// | // | ||||
assert(m_msgproc); | assert(m_msgproc); | ||||
InterruptSocks5(false); | InterruptSocks5(false); | ||||
interruptNet.reset(); | interruptNet.reset(); | ||||
▲ Show 20 Lines • Show All 121 Lines • ▼ Show 20 Lines | for (CNode *pnode : vNodes) { | ||||
DeleteNode(pnode); | DeleteNode(pnode); | ||||
} | } | ||||
for (CNode *pnode : vNodesDisconnected) { | for (CNode *pnode : vNodesDisconnected) { | ||||
DeleteNode(pnode); | DeleteNode(pnode); | ||||
} | } | ||||
vNodes.clear(); | vNodes.clear(); | ||||
vNodesDisconnected.clear(); | vNodesDisconnected.clear(); | ||||
vhListenSocket.clear(); | vhListenSocket.clear(); | ||||
delete semOutbound; | semOutbound.reset(); | ||||
semOutbound = nullptr; | semAddnode.reset(); | ||||
delete semAddnode; | |||||
semAddnode = nullptr; | |||||
} | } | ||||
void CConnman::DeleteNode(CNode *pnode) { | void CConnman::DeleteNode(CNode *pnode) { | ||||
assert(pnode); | assert(pnode); | ||||
bool fUpdateConnectionTime = false; | bool fUpdateConnectionTime = false; | ||||
m_msgproc->FinalizeNode(*config, pnode->GetId(), fUpdateConnectionTime); | m_msgproc->FinalizeNode(*config, pnode->GetId(), fUpdateConnectionTime); | ||||
if (fUpdateConnectionTime) { | if (fUpdateConnectionTime) { | ||||
addrman.Connected(pnode->addr); | addrman.Connected(pnode->addr); | ||||
▲ Show 20 Lines • Show All 262 Lines • ▼ Show 20 Lines | CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, | ||||
filterInventoryKnown.reset(); | filterInventoryKnown.reset(); | ||||
fSendMempool = false; | fSendMempool = false; | ||||
fGetAddr = false; | fGetAddr = false; | ||||
nNextLocalAddrSend = 0; | nNextLocalAddrSend = 0; | ||||
nNextAddrSend = 0; | nNextAddrSend = 0; | ||||
nNextInvSend = 0; | nNextInvSend = 0; | ||||
fRelayTxes = false; | fRelayTxes = false; | ||||
fSentAddr = false; | fSentAddr = false; | ||||
pfilter = new CBloomFilter(); | pfilter = std::unique_ptr<CBloomFilter>(new CBloomFilter()); | ||||
timeLastMempoolReq = 0; | timeLastMempoolReq = 0; | ||||
nLastBlockTime = 0; | nLastBlockTime = 0; | ||||
nLastTXTime = 0; | nLastTXTime = 0; | ||||
nPingNonceSent = 0; | nPingNonceSent = 0; | ||||
nPingUsecStart = 0; | nPingUsecStart = 0; | ||||
nPingUsecTime = 0; | nPingUsecTime = 0; | ||||
fPingQueued = false; | fPingQueued = false; | ||||
nMinPingUsecTime = std::numeric_limits<int64_t>::max(); | nMinPingUsecTime = std::numeric_limits<int64_t>::max(); | ||||
Show All 13 Lines | if (fLogIPs) { | ||||
LogPrint(BCLog::NET, "Added connection to %s peer=%d\n", addrName, id); | LogPrint(BCLog::NET, "Added connection to %s peer=%d\n", addrName, id); | ||||
} else { | } else { | ||||
LogPrint(BCLog::NET, "Added connection peer=%d\n", id); | LogPrint(BCLog::NET, "Added connection peer=%d\n", id); | ||||
} | } | ||||
} | } | ||||
CNode::~CNode() { | CNode::~CNode() { | ||||
CloseSocket(hSocket); | CloseSocket(hSocket); | ||||
if (pfilter) { | |||||
delete pfilter; | |||||
} | |||||
} | } | ||||
void CNode::AskFor(const CInv &inv) { | void CNode::AskFor(const CInv &inv) { | ||||
if (mapAskFor.size() > MAPASKFOR_MAX_SZ || | if (mapAskFor.size() > MAPASKFOR_MAX_SZ || | ||||
setAskFor.size() > SETASKFOR_MAX_SZ) { | setAskFor.size() > SETASKFOR_MAX_SZ) { | ||||
return; | return; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 173 Lines • Show Last 20 Lines |