Avoid recalculating vchKeyedNetGroup in eviction logic.

Lazy calculate vchKeyedNetGroup in CNode::GetKeyedNetGroup.
This commit is contained in:
Patrick Strateman
2016-05-23 00:21:05 -07:00
committed by Pieter Wuille
parent 22e0b35676
commit 053930ffc4
2 changed files with 29 additions and 34 deletions

View File

@@ -9,6 +9,8 @@
#include "amount.h"
#include "bloom.h"
#include "compat.h"
#include "crypto/common.h"
#include "crypto/sha256.h"
#include "limitedmap.h"
#include "netbase.h"
#include "protocol.h"
@@ -362,6 +364,8 @@ public:
CBloomFilter* pfilter;
int nRefCount;
NodeId id;
std::vector<unsigned char> vchKeyedNetGroup;
protected:
// Denial-of-service detection/prevention
@@ -450,6 +454,22 @@ private:
CNode(const CNode&);
void operator=(const CNode&);
void CalculateKeyedNetGroup() {
static std::vector<unsigned char> vchSecretKey;
if (vchSecretKey.empty()) {
vchSecretKey.resize(32, 0);
GetRandBytes(vchSecretKey.data(), vchSecretKey.size());
}
std::vector<unsigned char> vchNetGroup(this->addr.GetGroup());
CSHA256 hash;
hash.Write(begin_ptr(vchNetGroup), vchNetGroup.size());
hash.Write(begin_ptr(vchSecretKey), vchSecretKey.size());
vchKeyedNetGroup.resize(32, 0);
hash.Finalize(begin_ptr(vchKeyedNetGroup));
}
public:
NodeId GetId() const {