Created
November 3, 2016 14:08
-
-
Save theuni/2e448a23324bedb9861c4c64dad8a357 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
```diff | |
diff --git a/src/net.cpp b/src/net.cpp | |
index 0392f6b..15cf7ce 100644 | |
--- a/src/net.cpp | |
+++ b/src/net.cpp | |
@@ -64,6 +64,7 @@ | |
const static std::string NET_MESSAGE_COMMAND_OTHER = "*other*"; | |
static const uint64_t RANDOMIZER_ID_NETGROUP = 0x6c0edd8036ef4036ULL; // SHA256("netgroup")[0:8] | |
+static const uint64_t RANDOMIZER_ID_LOCALHOSTNONCE = 0xd93e69e2bbfa5735ULL; // SHA256("localhostnonce")[0:8] | |
// | |
// Global state variables | |
// | |
@@ -389,7 +390,9 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo | |
addrman.Attempt(addrConnect, fCountFailure); | |
// Add node | |
- CNode* pnode = new CNode(GetNewNodeId(), nLocalServices, GetBestHeight(), hSocket, addrConnect, CalculateKeyedNetGroup(addrConnect), pszDest ? pszDest : "", false); | |
+ NodeId id = GetNewNodeId(); | |
+ uint64_t nonce = GetDeterministicRandomizer(RANDOMIZER_ID_LOCALHOSTNONCE).Write(id).Finalize(); | |
+ CNode* pnode = new CNode(id, nLocalServices, GetBestHeight(), hSocket, addrConnect, CalculateKeyedNetGroup(addrConnect), nonce, pszDest ? pszDest : "", false); | |
pnode->nServicesExpected = ServiceFlags(addrConnect.nServices & nRelevantServices); | |
pnode->nTimeConnected = GetTime(); | |
pnode->AddRef(); | |
@@ -1005,7 +1008,10 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) { | |
} | |
} | |
- CNode* pnode = new CNode(GetNewNodeId(), nLocalServices, GetBestHeight(), hSocket, addr, CalculateKeyedNetGroup(addr), "", true); | |
+ NodeId id = GetNewNodeId(); | |
+ uint64_t nonce = GetDeterministicRandomizer(RANDOMIZER_ID_LOCALHOSTNONCE).Write(id).Finalize(); | |
+ | |
+ CNode* pnode = new CNode(id, nLocalServices, GetBestHeight(), hSocket, addr, CalculateKeyedNetGroup(addr), nonce, "", true); | |
pnode->AddRef(); | |
pnode->fWhitelisted = whitelisted; | |
GetNodeSignals().InitializeNode(pnode, *this); | |
@@ -2095,7 +2101,11 @@ bool CConnman::Start(boost::thread_group& threadGroup, CScheduler& scheduler, st | |
if (pnodeLocalHost == NULL) { | |
CNetAddr local; | |
LookupHost("127.0.0.1", local, false); | |
- pnodeLocalHost = new CNode(GetNewNodeId(), nLocalServices, GetBestHeight(), INVALID_SOCKET, CAddress(CService(local, 0), nLocalServices), 0); | |
+ | |
+ NodeId id = GetNewNodeId(); | |
+ uint64_t nonce = GetDeterministicRandomizer(RANDOMIZER_ID_LOCALHOSTNONCE).Write(id).Finalize(); | |
+ | |
+ pnodeLocalHost = new CNode(id, nLocalServices, GetBestHeight(), INVALID_SOCKET, CAddress(CService(local, 0), nLocalServices), 0, nonce); | |
GetNodeSignals().InitializeNode(pnodeLocalHost, *this); | |
} | |
@@ -2451,11 +2461,16 @@ int CConnman::GetBestHeight() const | |
unsigned int CConnman::GetReceiveFloodSize() const { return nReceiveFloodSize; } | |
unsigned int CConnman::GetSendBufferSize() const{ return nSendBufferMaxSize; } | |
-CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn, SOCKET hSocketIn, const CAddress& addrIn, uint64_t nKeyedNetGroupIn, const std::string& addrNameIn, bool fInboundIn) : | |
+CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn, SOCKET hSocketIn, const CAddress& addrIn, uint64_t nKeyedNetGroupIn, uint64_t nLocalHostNonceIn, const std::string& addrNameIn, bool fInboundIn) : | |
addr(addrIn), | |
+ fInbound(fInboundIn), | |
+ id(idIn), | |
nKeyedNetGroup(nKeyedNetGroupIn), | |
addrKnown(5000, 0.001), | |
filterInventoryKnown(50000, 0.000001), | |
+ nLocalHostNonce(nLocalHostNonceIn), | |
+ nLocalServices(nLocalServicesIn), | |
+ nMyStartingHeight(nMyStartingHeightIn), | |
nSendVersion(0) | |
{ | |
nServices = NODE_NONE; | |
@@ -2475,7 +2490,6 @@ CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn | |
fOneShot = false; | |
fClient = false; // set by version message | |
fFeeler = false; | |
- fInbound = fInboundIn; | |
fNetworkNode = false; | |
fSuccessfullyConnected = false; | |
fDisconnect = false; | |
@@ -2504,11 +2518,6 @@ CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn | |
minFeeFilter = 0; | |
lastSentFeeFilter = 0; | |
nextSendTimeFeeFilter = 0; | |
- id = idIn; | |
- nLocalServices = nLocalServicesIn; | |
- | |
- GetRandBytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce)); | |
- nMyStartingHeight = nMyStartingHeightIn; | |
BOOST_FOREACH(const std::string &msg, getAllNetMessageTypes()) | |
mapRecvBytesPerMsgCmd[msg] = 0; | |
@@ -2564,7 +2573,7 @@ void CNode::AskFor(const CInv& inv) | |
CDataStream CConnman::BeginMessage(CNode* pnode, int nVersion, int flags, const std::string& sCommand) | |
{ | |
- return {SER_NETWORK, nVersion ? nVersion | flags : pnode->GetSendVersion() | flags, CMessageHeader(Params().MessageStart(), sCommand.c_str(), 0) }; | |
+ return {SER_NETWORK, (nVersion ? nVersion : pnode->GetSendVersion()) | flags, CMessageHeader(Params().MessageStart(), sCommand.c_str(), 0) }; | |
} | |
void CConnman::EndMessage(CDataStream& strm) | |
``` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment