diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-04-30 16:03:44 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-04-30 16:03:44 -0700 |
commit | 9a34fde8a51f9218d4062336dddbb42fe19b6764 (patch) | |
tree | 08f0347e89cb0d481469aa23068fd7eff9d0432d /node | |
parent | 918fc8884b142452e350ff32beb90b34bbd442c1 (diff) | |
download | infinitytier-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.cpp | 22 | ||||
-rw-r--r-- | node/Node.hpp | 4 |
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 |