diff options
Diffstat (limited to 'node/Node.cpp')
| -rw-r--r-- | node/Node.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/node/Node.cpp b/node/Node.cpp index 3a73b461..c36b82d9 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -45,6 +45,7 @@ namespace ZeroTier { Node::Node( + uint64_t now, ZT1_DataStoreGetFunction *dataStoreGetFunction, ZT1_DataStorePutFunction *dataStorePutFunction, ZT1_WirePacketSendFunction *wirePacketSendFunction, @@ -60,7 +61,7 @@ Node::Node( _statusCallback(statusCallback), _networks(), _networks_m(), - _now(0), + _now(now), _timeOfLastPacketReceived(0), _timeOfLastPrivilegedPacket(0), _spamCounter(0) @@ -129,14 +130,18 @@ ZT1_ResultCode Node::join(uint64_t nwid) Mutex::Lock _l(_networks_m); SharedPtr<Network> &nw = _networks[nwid]; if (!nw) - nw = new Network(); + nw = SharedPtr<Network>(new Network(RR,nwid)); return ZT1_RESULT_OK; } ZT1_ResultCode Node::leave(uint64_t nwid) { Mutex::Lock _l(_networks_m); - _networks.erase(nwid); + std::map< uint64_t,SharedPtr<Network> >::iterator nw(_networks.find(nwid)); + if (nw != _networks.end()) { + nw->second->destroy(); + _networks.erase(nw); + } } ZT1_ResultCode Node::multicastSubscribe(ZT1_Node *node,uint64_t nwid,uint64_t multicastGroup,unsigned long multicastAdi) @@ -180,6 +185,7 @@ extern "C" { enum ZT1_ResultCode ZT1_Node_new( ZT1_Node **node, + uint64_t now, ZT1_DataStoreGetFunction *dataStoreGetFunction, ZT1_DataStorePutFunction *dataStorePutFunction, ZT1_WirePacketSendFunction *wirePacketSendFunction, @@ -189,7 +195,7 @@ enum ZT1_ResultCode ZT1_Node_new( { *node = (ZT1_Node *)0; try { - *node = reinterpret_cast<ZT1_Node *>(new ZeroTier::Node(dataStoreGetFunction,dataStorePutFunction,wirePacketSendFunction,virtualNetworkFrameFunction,virtualNetworkConfigCallback,statusCallback)); + *node = reinterpret_cast<ZT1_Node *>(new ZeroTier::Node(now,dataStoreGetFunction,dataStorePutFunction,wirePacketSendFunction,virtualNetworkFrameFunction,virtualNetworkConfigCallback,statusCallback)); return ZT1_RESULT_OK; } catch (std::bad_alloc &exc) { return ZT1_RESULT_ERROR_OUT_OF_MEMORY; |
