diff options
-rw-r--r-- | netfs/etc/client.xml | 30 | ||||
-rw-r--r-- | netfs/fuse/Jamfile.jam | 24 | ||||
-rw-r--r-- | netfs/fuse/configuration.ice | 24 | ||||
-rw-r--r-- | netfs/fuse/fuse.cpp | 23 | ||||
-rw-r--r-- | netfs/fuse/fuse.h | 10 | ||||
-rw-r--r-- | netfs/fuse/fuseConfig.cpp | 29 | ||||
-rw-r--r-- | netfs/fuse/fuseConfig.h | 33 |
7 files changed, 84 insertions, 89 deletions
diff --git a/netfs/etc/client.xml b/netfs/etc/client.xml index 9eab8fc..b3af798 100644 --- a/netfs/etc/client.xml +++ b/netfs/etc/client.xml @@ -1,18 +1,24 @@ <?xml version="1.0" encoding="ascii"?> <config> - <exports> - <export> + <resources> + <resource> <name>portage</name> - <endpoints> - <endpoint>tcp -p 4000 -h localhost</endpoint> - </endpoints> - </export> - <export> + <resource> + <export>portage</export> + <endpoints> + <endpoint>tcp -p 4000 -h localhost</endpoint> + </endpoints> + </resource> + </resource> + <resource> <name>store</name> - <endpoints> - <endpoint>tcp -p 4000 -h defiant</endpoint> - </endpoints> - </export> - </exports> + <resource> + <export>store</export> + <endpoints> + <endpoint>tcp -p 4000 -h defiant</endpoint> + </endpoints> + </resource> + </resource> + </resources> </config> diff --git a/netfs/fuse/Jamfile.jam b/netfs/fuse/Jamfile.jam index 40a86f3..8814a9d 100644 --- a/netfs/fuse/Jamfile.jam +++ b/netfs/fuse/Jamfile.jam @@ -1,3 +1,6 @@ +lib slicer : : : : <include>/usr/include/slicer ; +lib slicer-xml : : : : <include>/usr/include/slicer ; + cpp-pch pch : pch.hpp : <define>_FILE_OFFSET_BITS=64 <include>../../libmisc @@ -7,13 +10,26 @@ cpp-pch pch : pch.hpp : <library>..//boost_thread <library>..//fuse <library>..//Ice - <library>..//libxml2 ; +obj configuration : + configuration.ice + : + <slicer>yes + <library>..//Ice + <library>..//IceUtil + <library>..//pthread + <library>slicer + : : + <library>..//IceUtil + <library>..//Ice + <library>..//boost_system + <library>slicer + ; exe netfs : pch - ../../libmisc/xml.cpp + configuration [ glob *.cpp ] [ glob ../../libfusepp/fuse*.cpp ] : @@ -21,6 +37,7 @@ exe netfs : <include>../../libmisc <include>../../libfusepp <implicit-dependency>../ice//netfsComms + <implicit-dependency>configuration <library>../ice//netfsComms <library>../lib//netfsCommon <library>..//boost_thread @@ -29,6 +46,7 @@ exe netfs : <library>..//Ice <library>..//IceUtil <library>..//pthread - <library>..//libxml2 + <library>slicer + <library>slicer-xml ; diff --git a/netfs/fuse/configuration.ice b/netfs/fuse/configuration.ice new file mode 100644 index 0000000..6f76b37 --- /dev/null +++ b/netfs/fuse/configuration.ice @@ -0,0 +1,24 @@ +module NetFS { + module Client { + ["slicer:element:endpoint"] + sequence<string> EndpointList; + + class Resource { + ["slicer:name:export"] + string ExportName; + + ["slicer:name:endpoints"] + EndpointList Endpoints; + }; + + ["slicer:key:name","slicer:value:resource","slicer:item:resource"] + dictionary<string, Resource> ResourceMap; + + ["slicer:root:config"] + class Configuration { + ["slicer:name:resources"] + ResourceMap Resources; + }; + }; +}; + diff --git a/netfs/fuse/fuse.cpp b/netfs/fuse/fuse.cpp index 9887e7b..c0aca45 100644 --- a/netfs/fuse/fuse.cpp +++ b/netfs/fuse/fuse.cpp @@ -5,6 +5,8 @@ #include "lockHelpers.h" #include "cache.impl.h" #include <entCache.h> +#include <slicer/slicer.h> +#include <xml/serializer.h> template class Cache<struct stat, std::string, IceUtil::Shared, IceUtil::Handle<Cacheable<struct stat, std::string, IceUtil::Shared>>>; template class OptimisticCallCacheable<struct stat, std::string, IceUtil::Shared>; @@ -35,7 +37,7 @@ void * NetFS::FuseApp::init(struct fuse_conn_info *) { ic = Ice::initialize(_argc, _argv); - fc = FuseConfig::Load(configPath); + fc = Slicer::Deserialize<Slicer::Xml, NetFS::Client::Configuration>(configPath); return NULL; } @@ -51,9 +53,9 @@ NetFS::FuseApp::opt_parse(void *, const char * arg, int, struct fuse_args *) else if (arg[0] == '-') { return 1; } - else if (exportName.empty()) { + else if (resourceName.empty()) { const char * colon = strchr(arg, ':'); - exportName = colon + 1; + resourceName = colon + 1; configPath.assign(arg, colon); return 0; } @@ -69,12 +71,15 @@ NetFS::FuseApp::connectToService() { if (!service) { Lock(_lock); - FuseConfig::ExportPtr e = fc->exports[exportName]; - const std::string & ep = *e->endpoints.begin(); + auto e = fc->Resources.find(resourceName); + if (e == fc->Resources.end()) { + throw std::runtime_error("No such resource: " + resourceName); + } + const std::string & ep = e->second->Endpoints.front(); service = NetFS::ServicePrx::checkedCast(ic->stringToProxy("Service:" + ep)); if (!service) { - throw "Invalid service proxy"; + throw std::runtime_error("Invalid service proxy: " + ep); } } } @@ -83,7 +88,11 @@ void NetFS::FuseApp::connectToVolume() { if (!volume) { - volume = service->connect(exportName, "bar"); + auto e = fc->Resources.find(resourceName); + if (e == fc->Resources.end()) { + throw std::runtime_error("No such export: " + resourceName); + } + volume = service->connect(e->second->ExportName, "bar"); if (!volume) { throw "Invalid filesystem proxy"; } diff --git a/netfs/fuse/fuse.h b/netfs/fuse/fuse.h index 859c3e6..1f80686 100644 --- a/netfs/fuse/fuse.h +++ b/netfs/fuse/fuse.h @@ -1,11 +1,11 @@ -#ifndef FUSE_H -#define FUSE_H +#ifndef NETFS_FUSE_H +#define NETFS_FUSE_H #include <boost/thread/shared_mutex.hpp> #include <Ice/Ice.h> #include <service.h> #include "fuseapp.h" -#include "fuseConfig.h" +#include "configuration.h" #include "cache.h" namespace NetFS { @@ -91,14 +91,14 @@ namespace NetFS { int & _argc; char ** _argv; Ice::CommunicatorPtr ic; - FuseConfigPtr fc; + Client::ConfigurationPtr fc; mutable boost::shared_mutex _lock; NetFS::VolumePrx volume; NetFS::ServicePrx service; std::string mountPoint; - std::string exportName; + std::string resourceName; std::string configPath; OpenDirs openDirs; diff --git a/netfs/fuse/fuseConfig.cpp b/netfs/fuse/fuseConfig.cpp deleted file mode 100644 index 168550e..0000000 --- a/netfs/fuse/fuseConfig.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "pch.hpp" -#include "fuseConfig.h" -#include <string.h> - -FuseConfigPtr -FuseConfig::Load(const std::string & path) -{ - xmlDoc * doc = xmlReadFile(path.c_str(), NULL, 0); - FuseConfigPtr dc = new FuseConfig(doc->children); - xmlFreeDoc(doc); - return dc; -} - -FuseConfig::FuseConfig(xmlNodePtr conf) -{ - foreachxml(exp, xmlGetNode(conf, "exports"), "export") { - ExportPtr e = new Export(exp); - exports[e->name] = e; - } -} - -FuseConfig::Export::Export(xmlNodePtr conf) : - name(xmlGetNodeValue(conf, "name")) -{ - foreachxml(ep, xmlGetNode(conf, "endpoints"), "endpoint") { - endpoints.insert(xmlGetNodeValue(ep)); - } -} - diff --git a/netfs/fuse/fuseConfig.h b/netfs/fuse/fuseConfig.h deleted file mode 100644 index 32f25b4..0000000 --- a/netfs/fuse/fuseConfig.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef FUSECONFIG_H -#define FUSECONFIG_H - -#include <string> -#include <map> -#include <set> -#include <IceUtil/Shared.h> -#include "xml.h" - -class FuseConfig : public IceUtil::Shared { - public: - class Export; - typedef IceUtil::Handle<Export> ExportPtr; - typedef std::map<std::string, ExportPtr> ExportMap; - class Export : public IceUtil::Shared { - public: - typedef std::set<std::string> Endpoints; - Export(xmlNodePtr); - - std::string name; - Endpoints endpoints; - }; - - FuseConfig(xmlNodePtr); - static IceUtil::Handle<FuseConfig> Load(const std::string & path); - - ExportMap exports; -}; -typedef IceUtil::Handle<FuseConfig> FuseConfigPtr; - -#endif - - |