Refactoring... lalalala...

This commit is contained in:
Adam Ierymenko 2015-03-31 18:17:11 -07:00
parent 36eab4f1a9
commit b723855751
4 changed files with 145 additions and 25 deletions

View File

@ -203,7 +203,7 @@ typedef struct
/** /**
* Packet data * Packet data
*/ */
const char packetData[ZT1_MAX_WIRE_MESSAGE_LENGTH]; char packetData[ZT1_MAX_WIRE_MESSAGE_LENGTH];
/** /**
* Length of packet * Length of packet
@ -244,7 +244,7 @@ typedef struct
/** /**
* Ethernet frame data * Ethernet frame data
*/ */
const char frameData[ZT1_MAX_MTU]; char frameData[ZT1_MAX_MTU];
/** /**
* Ethernet frame length * Ethernet frame length
@ -717,9 +717,7 @@ void ZT1_Node_freeQueryResult(void *qr);
* @param networkConfigMasterInstance Instance of NetworkConfigMaster C++ class or NULL to disable * @param networkConfigMasterInstance Instance of NetworkConfigMaster C++ class or NULL to disable
* @return OK (0) or error code if a fatal error condition has occurred * @return OK (0) or error code if a fatal error condition has occurred
*/ */
enum ZT1_ResultCode ZT1_Node_setNetconfMaster( void ZT1_Node_setNetconfMaster(ZT1_Node *node,void *networkConfigMasterInstance);
ZT1_Node *node,
void *networkConfigMasterInstance);
/** /**
* Get ZeroTier One version * Get ZeroTier One version

View File

@ -27,4 +27,127 @@
#include "Node.hpp" #include "Node.hpp"
#include "RuntimeEnvironment.hpp" #include "RuntimeEnvironment.hpp"
#include "NetworkConfigMaster.hpp"
#include "CMWC4096.hpp"
#include "Switch.hpp"
#include "Multicaster.hpp"
#include "AntiRecursion.hpp"
#include "Topology.hpp"
#include "Buffer.hpp"
#include "Packet.hpp"
#include "Logger.hpp"
#include "Address.hpp"
#include "Identity.hpp"
namespace ZeroTier {
Node::Node(
ZT1_DataStoreGetFunction *dataStoreGetFunction,
ZT1_DataStorePutFunction *dataStorePutFunction,
ZT1_VirtualNetworkConfigCallback *networkConfigCallback,
ZT1_StatusCallback *statusCallback) :
RR(new RuntimeEnvironment(this)),
_outputWireMessages((ZT1_WireMessage *)0),
_outputWireMessageCount(0),
_outputWireMessageCapacity(8),
_outputWireMessages_m(),
_outputFrames((ZT1_VirtualNetworkFrame *)0),
_outputFrameCount(0),
_outputFrameCapacity(8),
_outputFrames_m(),
_dataStoreGetFunction(dataStoreGetFunction),
_dataStorePutFunction(dataStorePutFunction),
_networkConfigCallback(networkConfigCallback),
_statusCallback(statusCallback),
_networks(),
_networks_m(),
_now(0),
_timeOfLastPacketReceived(0),
_timeOfLastPrivilegedPacket(0),
_spamCounter(0)
{
try {
_outputWireMessages = new ZT1_WireMessage[_outputWireMessageCapacity];
_outputFrames = new ZT1_VirtualNetworkFrame[_outputFrameCapacity];
RR->prng = new CMWC4096();
RR->sw = new Switch(RR);
RR->mc = new Multicaster(RR);
RR->antiRec = new AntiRecursion(RR);
RR->topology = new Topology(RR);
} catch ( ... ) {
delete [] _outputFrames;
delete [] _outputWireMessages;
delete RR->topology;
delete RR->antiRec;
delete RR->mc;
delete RR->sw;
delete RR->prng;
delete RR->log;
delete RR;
throw;
}
}
Node::~Node()
{
delete [] _outputFrames;
delete [] _outputWireMessages;
delete RR->topology;
delete RR->antiRec;
delete RR->mc;
delete RR->sw;
delete RR->prng;
delete RR->log;
delete RR;
}
ZT1_ResultCode Node::run(
uint64_t now,
const ZT1_WireMessage *inputWireMessages,
unsigned int inputWireMessageCount,
const ZT1_VirtualNetworkFrame *inputFrames,
unsigned int inputFrameCount,
const ZT1_WireMessage **outputWireMessages,
unsigned int *outputWireMessageCount,
const ZT1_VirtualNetworkFrame **outputFrames,
unsigned int *outputLanFrameCount,
unsigned long *maxNextInterval)
{
}
ZT1_ResultCode Node::join(uint64_t nwid)
{
}
ZT1_ResultCode Node::leave(uint64_t nwid)
{
}
void Node::status(ZT1_NodeStatus *status)
{
}
ZT1_PeerList *Node::peers()
{
}
ZT1_VirtualNetworkConfig *Node::networkConfig(uint64_t nwid)
{
}
ZT1_VirtualNetworkList *Node::listNetworks()
{
}
void Node::freeQueryResult(void *qr)
{
if (qr)
::free(qr);
}
void Node::setNetconfMaster(void *networkConfigMasterInstance)
{
RR->netconfMaster = reinterpret_cast<NetworkConfigMaster *>(networkConfigMasterInstance);
}
} // namespace ZeroTier

View File

@ -45,6 +45,7 @@
namespace ZeroTier { namespace ZeroTier {
class RuntimeEnvironment; class RuntimeEnvironment;
class Network;
/** /**
* Implementation of Node object as defined in CAPI * Implementation of Node object as defined in CAPI
@ -68,8 +69,8 @@ public:
uint64_t now, uint64_t now,
const ZT1_WireMessage *inputWireMessages, const ZT1_WireMessage *inputWireMessages,
unsigned int inputWireMessageCount, unsigned int inputWireMessageCount,
const ZT1_VirtualLanFrame *inputLanFrames, const ZT1_VirtualNetworkFrame *inputFrames,
unsigned int inputLanFrameCount, unsigned int inputFrameCount,
const ZT1_WireMessage **outputWireMessages, const ZT1_WireMessage **outputWireMessages,
unsigned int *outputWireMessageCount, unsigned int *outputWireMessageCount,
const ZT1_VirtualNetworkFrame **outputFrames, const ZT1_VirtualNetworkFrame **outputFrames,
@ -90,9 +91,7 @@ public:
void freeQueryResult(void *qr); void freeQueryResult(void *qr);
ZT1_ResultCode setNetconfMaster( void setNetconfMaster(void *networkConfigMasterInstance);
ZT1_Node *node,
void *networkConfigMasterInstance);
// Internal functions ------------------------------------------------------ // Internal functions ------------------------------------------------------
@ -123,7 +122,7 @@ public:
delete [] old; delete [] old;
} }
ZT1_WireMessage &wm = _outputWireMessages[_outputWireMessageCount++]; ZT1_WireMessage &wm = _outputWireMessages[_outputWireMessageCount++];
memcpy(&(wm.address),&addr,sizeof(ZT_SOCKADDR_STORAGE)); memcpy(&(wm.address),&addr,sizeof(struct sockaddr_storage));
wm.desperation = this->desperation(); wm.desperation = this->desperation();
wm.spam = (int)((++_spamCounter % ZT_DESPERATION_SPAM_EVERY) == 0); wm.spam = (int)((++_spamCounter % ZT_DESPERATION_SPAM_EVERY) == 0);
memcpy(wm.packetData,data,len); memcpy(wm.packetData,data,len);
@ -164,11 +163,11 @@ public:
* @param nwid Network ID * @param nwid Network ID
* @return Network instance * @return Network instance
*/ */
inline SharedPtr<Network> network(uint64_t nwid) inline Network *network(uint64_t nwid)
{ {
Mutex::Lock _l(_networks_m); Mutex::Lock _l(_networks_m);
std::map< uint64_t,Network >::iterator nw(_networks.find(nwid)); std::map< uint64_t,Network * >::iterator nw(_networks.find(nwid));
return ((nw == _networks.end()) ? SharedPtr<Network>() : nw->second); return ((nw == _networks.end()) ? (Network *)0 : nw->second);
} }
private: private:
@ -184,15 +183,15 @@ private:
unsigned long _outputFrameCapacity; unsigned long _outputFrameCapacity;
Mutex _outputFrames_m; Mutex _outputFrames_m;
ZT1_DataStoreGetFunction *_dataStoreGetFunction, ZT1_DataStoreGetFunction *_dataStoreGetFunction;
ZT1_DataStorePutFunction *_dataStorePutFunction, ZT1_DataStorePutFunction *_dataStorePutFunction;
ZT1_VirtualPortConfigCallback *_portConfigCallback, ZT1_VirtualNetworkConfigCallback *_networkConfigCallback;
ZT1_StatusCallback *_statusCallback); ZT1_StatusCallback *_statusCallback;
//Dictionary _localConfig; // persisted as local.conf //Dictionary _localConfig; // persisted as local.conf
//Mutex _localConfig_m; //Mutex _localConfig_m;
std::map< uint64_t,SharedPtr<Network> > _networks; std::map< uint64_t,Network * > _networks;
Mutex _networks_m; Mutex _networks_m;
uint64_t _now; // time of last run() uint64_t _now; // time of last run()

View File

@ -60,7 +60,8 @@ class NetworkConfigMaster;
class RuntimeEnvironment class RuntimeEnvironment
{ {
public: public:
RuntimeEnvironment() : RuntimeEnvironment(Node *n) :
node(n),
identity(), identity(),
netconfMaster((NetworkConfigMaster *)0), netconfMaster((NetworkConfigMaster *)0),
log((Logger *)0), log((Logger *)0),
@ -68,12 +69,13 @@ public:
sw((Switch *)0), sw((Switch *)0),
mc((Multicaster *)0), mc((Multicaster *)0),
antiRec((AntiRecursion *)0), antiRec((AntiRecursion *)0),
topology((Topology *)0), topology((Topology *)0)
nc((NodeConfig *)0),
node((Node *)0)
{ {
} }
// Node instance that owns this RuntimeEnvironment
Node *const node;
// This node's identity // This node's identity
Identity identity; Identity identity;
@ -94,8 +96,6 @@ public:
Multicaster *mc; Multicaster *mc;
AntiRecursion *antiRec; AntiRecursion *antiRec;
Topology *topology; Topology *topology;
NodeConfig *nc;
Node *node;
}; };
} // namespace ZeroTier } // namespace ZeroTier