summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--node/NodeConfig.cpp23
-rw-r--r--node/NodeConfig.hpp11
2 files changed, 32 insertions, 2 deletions
diff --git a/node/NodeConfig.cpp b/node/NodeConfig.cpp
index acdcd49d..ea2b5946 100644
--- a/node/NodeConfig.cpp
+++ b/node/NodeConfig.cpp
@@ -109,10 +109,13 @@ NodeConfig::NodeConfig(const RuntimeEnvironment *renv,const char *authToken,unsi
LOG("unable to create network %.16llx: (unknown exception)",(unsigned long long)*nwid);
}
}
+
+ _readLocalConfig();
}
NodeConfig::~NodeConfig()
{
+ _writeLocalConfig();
}
void NodeConfig::clean()
@@ -122,6 +125,9 @@ void NodeConfig::clean()
n->second->clean();
}
+/////////////////////////////////////////////////////////////////////////////
+// UDP localhost control bus
+
// Macro used in execute() to push lines onto the return packet
#undef _P
#define _P(f,...) { r.push_back(std::string()); Utils::stdsprintf(r.back(),(f),##__VA_ARGS__); }
@@ -389,4 +395,21 @@ void NodeConfig::_CBcontrolPacketHandler(UdpSocket *sock,void *arg,const InetAdd
}
}
+/////////////////////////////////////////////////////////////////////////////
+
+void NodeConfig::_readLocalConfig()
+{
+ std::string localDotConf(_r->homePath + ZT_PATH_SEPARATOR_S + "local.conf");
+ std::string buf;
+ if (Utils::readFile(localDotConf.c_str(),buf)) {
+ Mutex::Lock _l(_localConfig_m);
+ _localConfig.fromString(buf.c_str());
+ }
+}
+
+void NodeConfig::_writeLocalConfig()
+{
+ Utils::writeFile(((_r->homePath + ZT_PATH_SEPARATOR_S + "local.conf")).c_str(),_localConfig.toString());
+}
+
} // namespace ZeroTier
diff --git a/node/NodeConfig.hpp b/node/NodeConfig.hpp
index b26d180b..d7a3984a 100644
--- a/node/NodeConfig.hpp
+++ b/node/NodeConfig.hpp
@@ -41,6 +41,7 @@
#include "Utils.hpp"
#include "UdpSocket.hpp"
#include "Buffer.hpp"
+#include "Dictionary.hpp"
namespace ZeroTier {
@@ -121,7 +122,7 @@ public:
}
/**
- * Execute a command
+ * Execute a control command (called when stuff comes in via control bus)
*
* @param command Command and arguments separated by whitespace (must already be trimmed of CR+LF, etc.)
* @return One or more command results (lines of output)
@@ -159,12 +160,18 @@ public:
private:
static void _CBcontrolPacketHandler(UdpSocket *sock,void *arg,const InetAddress &remoteAddr,const void *data,unsigned int len);
+ void _readLocalConfig();
+ void _writeLocalConfig();
+
const RuntimeEnvironment *_r;
unsigned char _controlSocketKey[32];
UdpSocket _controlSocket;
- std::map< uint64_t,SharedPtr<Network> > _networks;
+ Dictionary _localConfig; // persisted as local.conf
+ Mutex _localConfig_m;
+
+ std::map< uint64_t,SharedPtr<Network> > _networks; // persisted in networks.d/
Mutex _networks_m;
};