summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--netfs/daemon.cpp2
-rw-r--r--netfs/daemon.xml20
-rw-r--r--netfs/daemonConfig.cpp24
-rw-r--r--netfs/daemonConfig.h19
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;