diff options
-rw-r--r-- | netfs/daemon.cpp | 2 | ||||
-rw-r--r-- | netfs/daemon.xml | 20 | ||||
-rw-r--r-- | netfs/daemonConfig.cpp | 24 | ||||
-rw-r--r-- | netfs/daemonConfig.h | 19 |
4 files changed, 55 insertions, 10 deletions
diff --git a/netfs/daemon.cpp b/netfs/daemon.cpp index 9d0e4f7..691b681 100644 --- a/netfs/daemon.cpp +++ b/netfs/daemon.cpp @@ -158,7 +158,7 @@ createListeners(DaemonGlobalStatePtr dgs, SocketSet & lsocks) hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; struct addrinfo *result, *rp; - if (getaddrinfo(NULL, dgs->config->tcpPort.c_str(), &hints, &result) == 0) { + if (getaddrinfo(NULL, dgs->config->self->tcpPort.c_str(), &hints, &result) == 0) { for (rp = result; rp != NULL; rp = rp->ai_next) { int sfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); if (sfd == -1) { diff --git a/netfs/daemon.xml b/netfs/daemon.xml index 2454ff6..72d4ad6 100644 --- a/netfs/daemon.xml +++ b/netfs/daemon.xml @@ -1,9 +1,23 @@ <config> - <tcpPort>4000</tcpPort> + <hosts> + <host> + <self>true</self> + <tcpPort>4000</tcpPort> + <name>akira.random.lan</name> + </host> + <host> + <tcpPort>4000</tcpPort> + <name>vmware2.random.lan</name> + </host> + </hosts> <exports> <export> - <name>tmp</name> - <root>/tmp</root> + <name>test</name> + <root>/tmp/netfsTest</root> + <replicate> + <name>akira.random.lan</name> + <name>vmware2.random.lan</name> + </replicate> </export> </exports> </config> diff --git a/netfs/daemonConfig.cpp b/netfs/daemonConfig.cpp index 520cec1..ad3621d 100644 --- a/netfs/daemonConfig.cpp +++ b/netfs/daemonConfig.cpp @@ -10,18 +10,34 @@ DaemonConfig::Load(const char * path) return dc; } -DaemonConfig::DaemonConfig(xmlNodePtr conf) : - tcpPort(xmlGetNodeValue(conf, "tcpPort")) +DaemonConfig::DaemonConfig(xmlNodePtr conf) { + foreachxml(hos, xmlGetNode(conf, "hosts"), "hosts") { + HostPtr h = new Host(hos); + hosts[h->name] = h; + if (h->self) { + self = h; + } + } foreachxml(exp, xmlGetNode(conf, "exports"), "export") { - ExportPtr e = new Export(exp); + ExportPtr e = new Export(exp, hosts); exports[e->name] = e; } } -DaemonConfig::Export::Export(xmlNodePtr exp) : +DaemonConfig::Export::Export(xmlNodePtr exp, const HostMap & hosts) : root(xmlGetNodeValue(exp, "root")), name(xmlGetNodeValue(exp, "name")) { + foreachxml(rep, xmlGetNode(exp, "replicate"), "name") { + replicate.insert(hosts.find(xmlGetNodeValue(rep))->second); + } +} + +DaemonConfig::Host::Host(xmlNodePtr hos) : + tcpPort(xmlGetNodeValue(hos, "tcpPort")), + name(xmlGetNodeValue(hos, "name")), + self(strcmp(xmlGetNodeValue(hos, "self", "false"), "true") == 0) +{ } diff --git a/netfs/daemonConfig.h b/netfs/daemonConfig.h index d15fade..223436c 100644 --- a/netfs/daemonConfig.h +++ b/netfs/daemonConfig.h @@ -3,17 +3,31 @@ #include <string> #include <map> +#include <set> #include "smartpointer.h" #include "xml.h" class DaemonConfig : public virtual IsRefCounted { public: + class Host : public virtual IsRefCounted { + public: + Host(xmlNodePtr); + + std::string tcpPort; + std::string name; + bool self; + }; + typedef SmartPointer<Host> HostPtr; + typedef std::map<std::string, HostPtr> HostMap; + typedef std::set<HostPtr> HostSet; + class Export : public virtual IsRefCounted { public: - Export(xmlNodePtr); + Export(xmlNodePtr, const HostMap &); std::string root; std::string name; + HostSet replicate; }; typedef SmartPointer<Export> ExportPtr; typedef std::map<std::string, ExportPtr> ExportMap; @@ -22,8 +36,9 @@ class DaemonConfig : public virtual IsRefCounted { static SmartPointer<DaemonConfig> Load(const char * path); - std::string tcpPort; ExportMap exports; + HostMap hosts; + HostPtr self; }; typedef SmartPointer<DaemonConfig> DaemonConfigPtr; |