From cd339486b70d8d43ea9fd64c764e63c65730f4cb Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 10 Feb 2014 14:22:57 -0800 Subject: [PATCH] local.conf in NodeConfig --- node/NodeConfig.cpp | 23 +++++++++++++++++++++++ node/NodeConfig.hpp | 11 +++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/node/NodeConfig.cpp b/node/NodeConfig.cpp index acdcd49d8..ea2b59466 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 b26d180be..d7a3984ae 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 > _networks; + Dictionary _localConfig; // persisted as local.conf + Mutex _localConfig_m; + + std::map< uint64_t,SharedPtr > _networks; // persisted in networks.d/ Mutex _networks_m; };