Created
November 3, 2016 14:07
-
-
Save theuni/cc4eb87f0196ddadb637d1a41c5c5b2e to your computer and use it in GitHub Desktop.
8708-rebase
This file contains 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 --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