summaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-30 16:03:44 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-30 16:03:44 -0700
commit9a34fde8a51f9218d4062336dddbb42fe19b6764 (patch)
tree08f0347e89cb0d481469aa23068fd7eff9d0432d /node
parent918fc8884b142452e350ff32beb90b34bbd442c1 (diff)
downloadinfinitytier-9a34fde8a51f9218d4062336dddbb42fe19b6764.tar.gz
infinitytier-9a34fde8a51f9218d4062336dddbb42fe19b6764.zip
Make sure identity.public exists and stays in sync, cleanup extra new in Node, and test script for local testnets.
Diffstat (limited to 'node')
-rw-r--r--node/Node.cpp22
-rw-r--r--node/Node.hpp4
2 files changed, 12 insertions, 14 deletions
diff --git a/node/Node.cpp b/node/Node.cpp
index e77a977e..1661e9d1 100644
--- a/node/Node.cpp
+++ b/node/Node.cpp
@@ -59,7 +59,8 @@ Node::Node(
ZT1_VirtualNetworkConfigFunction virtualNetworkConfigFunction,
ZT1_EventCallback eventCallback,
const char *overrideRootTopology) :
- RR(new RuntimeEnvironment(this)),
+ _RR(this),
+ RR(&_RR),
_uPtr(uptr),
_dataStoreGetFunction(dataStoreGetFunction),
_dataStorePutFunction(dataStorePutFunction),
@@ -86,19 +87,18 @@ Node::Node(
TRACE("identity.secret not found, generating...");
RR->identity.generate();
idtmp = RR->identity.toString(true);
- if (!dataStorePut("identity.secret",idtmp,true)) {
- delete RR;
+ if (!dataStorePut("identity.secret",idtmp,true))
throw std::runtime_error("unable to write identity.secret");
- }
- idtmp = RR->identity.toString(false);
- if (!dataStorePut("identity.public",idtmp,false)) {
- delete RR;
- throw std::runtime_error("unable to write identity.public");
- }
}
RR->publicIdentityStr = RR->identity.toString(false);
RR->secretIdentityStr = RR->identity.toString(true);
+ idtmp = dataStoreGet("identity.public");
+ if (idtmp != RR->publicIdentityStr) {
+ if (!dataStorePut("identity.public",RR->publicIdentityStr,false))
+ throw std::runtime_error("unable to write identity.public");
+ }
+
try {
RR->prng = new CMWC4096();
RR->sw = new Switch(RR);
@@ -113,7 +113,6 @@ Node::Node(
delete RR->mc;
delete RR->sw;
delete RR->prng;
- delete RR;
throw;
}
@@ -138,14 +137,13 @@ Node::Node(
Node::~Node()
{
Mutex::Lock _l(_networks_m);
- _networks.clear(); // delete these before we delete RR
+ _networks.clear();
delete RR->sa;
delete RR->topology;
delete RR->antiRec;
delete RR->mc;
delete RR->sw;
delete RR->prng;
- delete RR;
}
ZT1_ResultCode Node::processWirePacket(
diff --git a/node/Node.hpp b/node/Node.hpp
index 396e04c0..70531bf8 100644
--- a/node/Node.hpp
+++ b/node/Node.hpp
@@ -38,6 +38,7 @@
#include "../include/ZeroTierOne.h"
+#include "RuntimeEnvironment.hpp"
#include "InetAddress.hpp"
#include "Mutex.hpp"
#include "MAC.hpp"
@@ -52,8 +53,6 @@
namespace ZeroTier {
-class RuntimeEnvironment;
-
/**
* Implementation of Node object as defined in CAPI
*
@@ -229,6 +228,7 @@ public:
#endif
private:
+ RuntimeEnvironment _RR;
RuntimeEnvironment *RR;
void *_uPtr; // _uptr (lower case) is reserved in Visual Studio :P