From 24384005a5fdd0e7ce2fc8d24841479310b53c47 Mon Sep 17 00:00:00 2001 From: randomdan Date: Tue, 2 Mar 2010 19:02:23 +0000 Subject: Config with basic site map --- netfs/daemon.cpp | 2 +- netfs/daemon.xml | 20 +++++++++++++++++--- netfs/daemonConfig.cpp | 24 ++++++++++++++++++++---- 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 @@ - 4000 + + + true + 4000 + akira.random.lan + + + 4000 + vmware2.random.lan + + - tmp - /tmp + test + /tmp/netfsTest + + akira.random.lan + vmware2.random.lan + 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 #include +#include #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 HostPtr; + typedef std::map HostMap; + typedef std::set HostSet; + class Export : public virtual IsRefCounted { public: - Export(xmlNodePtr); + Export(xmlNodePtr, const HostMap &); std::string root; std::string name; + HostSet replicate; }; typedef SmartPointer ExportPtr; typedef std::map ExportMap; @@ -22,8 +36,9 @@ class DaemonConfig : public virtual IsRefCounted { static SmartPointer Load(const char * path); - std::string tcpPort; ExportMap exports; + HostMap hosts; + HostPtr self; }; typedef SmartPointer DaemonConfigPtr; -- cgit v1.2.3