diff options
| author | randomdan <randomdan@localhost> | 2010-10-06 19:12:24 +0000 | 
|---|---|---|
| committer | randomdan <randomdan@localhost> | 2010-10-06 19:12:24 +0000 | 
| commit | 4cd9f97f851355c90a84c56bd3abbe2c9ab03a39 (patch) | |
| tree | f838cc5a14a204dca7e44332d2b5c7f52b8bead3 | |
| parent | Ahhhh so bjam IS all knowing (diff) | |
| download | netfs-4cd9f97f851355c90a84c56bd3abbe2c9ab03a39.tar.bz2 netfs-4cd9f97f851355c90a84c56bd3abbe2c9ab03a39.tar.xz netfs-4cd9f97f851355c90a84c56bd3abbe2c9ab03a39.zip | |
Commit more work to date
| -rw-r--r-- | netfs/Jamfile.jam | 1 | ||||
| -rw-r--r-- | netfs/daemon.cpp | 8 | ||||
| -rw-r--r-- | netfs/daemon.h | 4 | ||||
| -rw-r--r-- | netfs/daemonConfig.h | 24 | ||||
| -rw-r--r-- | netfs/daemonDirs.cpp | 7 | ||||
| -rw-r--r-- | netfs/daemonDirs.h | 10 | ||||
| -rw-r--r-- | netfs/daemonFiles.cpp | 35 | ||||
| -rw-r--r-- | netfs/daemonFiles.h | 10 | ||||
| -rw-r--r-- | netfs/daemonMisc.cpp | 32 | ||||
| -rw-r--r-- | netfs/daemonMisc.h | 6 | ||||
| -rw-r--r-- | netfs/daemonModule.cpp | 6 | ||||
| -rw-r--r-- | netfs/daemonModule.h | 12 | ||||
| -rw-r--r-- | netfs/daemonSystem.cpp | 5 | ||||
| -rw-r--r-- | netfs/daemonSystem.h | 5 | ||||
| -rw-r--r-- | netfs/fuseFiles.cpp | 25 | ||||
| -rw-r--r-- | netfs/fuseMisc.cpp | 25 | ||||
| -rw-r--r-- | netfs/netfsComms.ice | 2 | 
17 files changed, 138 insertions, 79 deletions
| diff --git a/netfs/Jamfile.jam b/netfs/Jamfile.jam index 2e688cc..33f1ecd 100644 --- a/netfs/Jamfile.jam +++ b/netfs/Jamfile.jam @@ -100,5 +100,6 @@ exe netfsd :  	<implicit-dependency>common  	<library>common  	<library>boost_regex +	<library>boost_filesystem  	<library>Ice  	; diff --git a/netfs/daemon.cpp b/netfs/daemon.cpp index 314479a..65388e5 100644 --- a/netfs/daemon.cpp +++ b/netfs/daemon.cpp @@ -15,10 +15,10 @@ int main(int argc, char* argv[])  	try {  		ic = Ice::initialize(argc, argv);  		Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWithEndpoints("NetFSDaemonAdapter", "default -p 10000"); -		adapter->add(new FileServer(), ic->stringToIdentity("Files")); -		adapter->add(new DirsServer(), ic->stringToIdentity("Dirs")); -		adapter->add(new MiscServer(), ic->stringToIdentity("Misc")); -		adapter->add(new SystemServer(), ic->stringToIdentity("System")); +		adapter->add(new FileServer(dgs), ic->stringToIdentity("Files")); +		adapter->add(new DirsServer(dgs), ic->stringToIdentity("Dirs")); +		adapter->add(new MiscServer(dgs), ic->stringToIdentity("Misc")); +		adapter->add(new SystemServer(dgs), ic->stringToIdentity("System"));  		adapter->activate();  		ic->waitForShutdown();  	} diff --git a/netfs/daemon.h b/netfs/daemon.h index a34c586..7dd6d63 100644 --- a/netfs/daemon.h +++ b/netfs/daemon.h @@ -3,7 +3,7 @@  #include "daemonConfig.h" -class DaemonGlobalState : public IsRefCounted { +class DaemonGlobalState : public IntrusivePtrBase {  	public:  		DaemonGlobalState(DaemonConfigPtr c) :  			config(c) @@ -12,7 +12,7 @@ class DaemonGlobalState : public IsRefCounted {  		const DaemonConfigPtr config;  }; -typedef SmartPointer<DaemonGlobalState> DaemonGlobalStatePtr; +typedef boost::intrusive_ptr<DaemonGlobalState> DaemonGlobalStatePtr;  #endif diff --git a/netfs/daemonConfig.h b/netfs/daemonConfig.h index 223436c..a27f686 100644 --- a/netfs/daemonConfig.h +++ b/netfs/daemonConfig.h @@ -4,12 +4,14 @@  #include <string>  #include <map>  #include <set> -#include "smartpointer.h" +#include <intrusivePtrBase.h> +#include <boost/intrusive_ptr.hpp> +#include <boost/filesystem/path.hpp>  #include "xml.h" -class DaemonConfig : public virtual IsRefCounted { +class DaemonConfig : public virtual IntrusivePtrBase {  	public: -		class Host : public virtual IsRefCounted { +		class Host : public virtual IntrusivePtrBase {  			public:  				Host(xmlNodePtr); @@ -17,30 +19,30 @@ class DaemonConfig : public virtual IsRefCounted {  				std::string		name;  				bool			self;  		}; -		typedef SmartPointer<Host> HostPtr; +		typedef boost::intrusive_ptr<Host> HostPtr;  		typedef std::map<std::string, HostPtr> HostMap;  		typedef std::set<HostPtr> HostSet; -		class Export : public virtual IsRefCounted { +		class Export : public virtual IntrusivePtrBase {  			public:  				Export(xmlNodePtr, const HostMap &); -				std::string		root; -				std::string		name; -				HostSet			replicate; +				boost::filesystem::path root; +				std::string name; +				HostSet replicate;  		}; -		typedef SmartPointer<Export> ExportPtr; +		typedef boost::intrusive_ptr<Export> ExportPtr;  		typedef std::map<std::string, ExportPtr> ExportMap;  		DaemonConfig(xmlNodePtr); -		static SmartPointer<DaemonConfig>	Load(const char * path); +		static boost::intrusive_ptr<DaemonConfig>	Load(const char * path);  		ExportMap		exports;  		HostMap			hosts;  		HostPtr			self;  }; -typedef SmartPointer<DaemonConfig> DaemonConfigPtr; +typedef boost::intrusive_ptr<DaemonConfig> DaemonConfigPtr;  #endif diff --git a/netfs/daemonDirs.cpp b/netfs/daemonDirs.cpp index 75ce7c9..3833e8c 100644 --- a/netfs/daemonDirs.cpp +++ b/netfs/daemonDirs.cpp @@ -5,8 +5,11 @@  #include <sys/types.h>  #include "daemonDirs.h" -int dirNo = 0; -std::map<Ice::Int, DIR*> dirs; +DirsServer::DirsServer(DaemonGlobalStatePtr dgs) : +	DaemonModule(dgs), +	dirNo(0) +{ +}  Ice::Int  DirsServer::opendir(const std::string & path, const Ice::Current&) diff --git a/netfs/daemonDirs.h b/netfs/daemonDirs.h index 8073583..dfd04fb 100644 --- a/netfs/daemonDirs.h +++ b/netfs/daemonDirs.h @@ -2,15 +2,23 @@  #define DAEMONDIRS_H  #include "netfsComms.h" +#include "daemonModule.h" +#include <dirent.h> -class DirsServer : public NetFSComms::Dirs { +class DirsServer : public DaemonModule, public NetFSComms::Dirs {  	public: +		DirsServer(DaemonGlobalStatePtr dgs); +  		virtual Ice::Int opendir(const std::string & path, const Ice::Current&);  		virtual void closedir(Ice::Int id, const Ice::Current&);  		virtual NetFSComms::NameList readdir(Ice::Int id, const Ice::Current&);  		virtual void mkdir(const std::string & path, Ice::Int id, const Ice::Current&);  		virtual void rmdir(const std::string & path, const Ice::Current&); + +	private: +		int dirNo; +		std::map<Ice::Int, DIR*> dirs;  };  #endif diff --git a/netfs/daemonFiles.cpp b/netfs/daemonFiles.cpp index 31a48cf..f447a20 100644 --- a/netfs/daemonFiles.cpp +++ b/netfs/daemonFiles.cpp @@ -1,10 +1,14 @@  #include <errno.h>  #include <map>  #include <fcntl.h> +#include <sys/stat.h>  #include "daemonFiles.h" -int fileNo = 0; -std::map<Ice::Int, int> files; +FileServer::FileServer(DaemonGlobalStatePtr dgs) : +	DaemonModule(dgs), +	fileNo(0) +{ +}  void  FileServer::truncate(const std::string & path, Ice::Long size, const Ice::Current&) @@ -29,6 +33,33 @@ FileServer::ftruncate(Ice::Int id, Ice::Long size, const Ice::Current&)  	// s.replicatedRequest = true;  } +NetFSComms::Attr +FileServer::fgetattr(Ice::Int id, const Ice::Current &) +{ +	if (files.find(id) == files.end()) { +		throw NetFSComms::SystemError(EBADF); +	} +	struct stat s; +	if (::fstat(files[id], &s) != 0) { +		throw NetFSComms::SystemError(errno); +	} +	NetFSComms::Attr a; +	a.dev = s.st_dev; +	a.inode = s.st_ino; +	a.mode = s.st_mode; +	a.links = s.st_nlink; +	a.uid = s.st_uid; +	a.gid = s.st_gid; +	a.rdev = s.st_rdev; +	a.size = s.st_size; +	a.blockSize = s.st_blksize; +	a.blocks = s.st_blocks; +	a.atime = s.st_atime; +	a.mtime = s.st_mtime; +	a.ctime = s.st_ctime; +	return a; +} +  void  FileServer::unlink(const std::string & path, const Ice::Current&)  { diff --git a/netfs/daemonFiles.h b/netfs/daemonFiles.h index be24586..1ba844c 100644 --- a/netfs/daemonFiles.h +++ b/netfs/daemonFiles.h @@ -2,11 +2,15 @@  #define DAEMONFILES_H  #include "netfsComms.h" +#include "daemonModule.h" -class FileServer : public NetFSComms::Files { +class FileServer : public DaemonModule, public NetFSComms::Files {  	public: +		FileServer(DaemonGlobalStatePtr dgs); +  		virtual void truncate(const std::string & path, Ice::Long size, const Ice::Current&);  		virtual void ftruncate(Ice::Int id, Ice::Long size, const Ice::Current&); +		virtual NetFSComms::Attr fgetattr(Ice::Int id, const Ice::Current&);  		virtual void unlink(const std::string & path, const Ice::Current&); @@ -15,6 +19,10 @@ class FileServer : public NetFSComms::Files {  		virtual void close(Ice::Int id, const Ice::Current&);  		virtual NetFSComms::Buffer read(Ice::Int id, Ice::Long offset, Ice::Long size, const Ice::Current&);  		virtual void write(Ice::Int id, Ice::Long offset, Ice::Long size, const NetFSComms::Buffer & data, const Ice::Current&); + +	private: +		int fileNo; +		std::map<Ice::Int, int> files;  };  #endif diff --git a/netfs/daemonMisc.cpp b/netfs/daemonMisc.cpp index 5a30e31..9327fad 100644 --- a/netfs/daemonMisc.cpp +++ b/netfs/daemonMisc.cpp @@ -7,6 +7,11 @@  extern std::map<Ice::Int, int> files; +MiscServer::MiscServer(DaemonGlobalStatePtr dgs) : +	DaemonModule(dgs) +{ +} +  Ice::Int  MiscServer::access(const std::string & path, Ice::Int mode, const Ice::Current &)  { @@ -37,33 +42,6 @@ MiscServer::getattr(const std::string & path, const Ice::Current &)  	return a;  } -NetFSComms::Attr -MiscServer::fgetattr(Ice::Int id, const Ice::Current &) -{ -	if (files.find(id) == files.end()) { -		throw NetFSComms::SystemError(EBADF); -	} -	struct stat s; -	if (::fstat(files[id], &s) != 0) { -		throw NetFSComms::SystemError(errno); -	} -	NetFSComms::Attr a; -	a.dev = s.st_dev; -	a.inode = s.st_ino; -	a.mode = s.st_mode; -	a.links = s.st_nlink; -	a.uid = s.st_uid; -	a.gid = s.st_gid; -	a.rdev = s.st_rdev; -	a.size = s.st_size; -	a.blockSize = s.st_blksize; -	a.blocks = s.st_blocks; -	a.atime = s.st_atime; -	a.mtime = s.st_mtime; -	a.ctime = s.st_ctime; -	return a; -} -  void  MiscServer::symlink(const std::string & path1, const std::string & path2, const Ice::Current &)  { diff --git a/netfs/daemonMisc.h b/netfs/daemonMisc.h index af36392..69223f5 100644 --- a/netfs/daemonMisc.h +++ b/netfs/daemonMisc.h @@ -2,12 +2,14 @@  #define DAEMONMISC_H  #include "netfsComms.h" +#include "daemonModule.h" -class MiscServer : public NetFSComms::Misc { +class MiscServer : public DaemonModule, public NetFSComms::Misc {  	public: +		MiscServer(DaemonGlobalStatePtr dgs); +  		virtual Ice::Int access(const std::string & path, Ice::Int mode, const Ice::Current&);  		virtual NetFSComms::Attr getattr(const std::string & path, const Ice::Current&); -		virtual NetFSComms::Attr fgetattr(Ice::Int id, const Ice::Current&);  		virtual void symlink(const std::string & path1, const std::string & path2, const Ice::Current&);  		virtual void link(const std::string & path1, const std::string & path2, const Ice::Current&);  		virtual void rename(const std::string & path1, const std::string & path2, const Ice::Current&); diff --git a/netfs/daemonModule.cpp b/netfs/daemonModule.cpp new file mode 100644 index 0000000..e0f59bd --- /dev/null +++ b/netfs/daemonModule.cpp @@ -0,0 +1,6 @@ +#include "daemonModule.h" + +DaemonModule::DaemonModule(DaemonGlobalStatePtr dgs) +{ +} + diff --git a/netfs/daemonModule.h b/netfs/daemonModule.h new file mode 100644 index 0000000..5d2123c --- /dev/null +++ b/netfs/daemonModule.h @@ -0,0 +1,12 @@ +#ifndef DAEMONMODULE_H +#define DAEMONMODULE_H + +#include "daemon.h" + +class DaemonModule { +	protected: +		DaemonModule(DaemonGlobalStatePtr dgs); +}; + +#endif + diff --git a/netfs/daemonSystem.cpp b/netfs/daemonSystem.cpp index 74c9a57..9690fc4 100644 --- a/netfs/daemonSystem.cpp +++ b/netfs/daemonSystem.cpp @@ -3,6 +3,11 @@  #include <sys/vfs.h>  #include "daemonSystem.h" +SystemServer::SystemServer(DaemonGlobalStatePtr dgs) : +	DaemonModule(dgs) +{ +} +  NetFSComms::VFS  SystemServer::statfs(const std::string & path, const Ice::Current&)  { diff --git a/netfs/daemonSystem.h b/netfs/daemonSystem.h index 0e2bedb..3d5f2be 100644 --- a/netfs/daemonSystem.h +++ b/netfs/daemonSystem.h @@ -2,9 +2,12 @@  #define DAEMONSYSTEM_H  #include "netfsComms.h" +#include "daemonModule.h" -class SystemServer : public NetFSComms::System { +class SystemServer : public DaemonModule, public NetFSComms::System {  	public: +		SystemServer(DaemonGlobalStatePtr dgs); +  		virtual NetFSComms::VFS statfs(const std::string & path, const Ice::Current&);  }; diff --git a/netfs/fuseFiles.cpp b/netfs/fuseFiles.cpp index 8cb96b3..430b411 100644 --- a/netfs/fuseFiles.cpp +++ b/netfs/fuseFiles.cpp @@ -90,6 +90,31 @@ NetFS::ftruncate(const char *, off_t o, fuse_file_info * fi)  }  int +NetFS::fgetattr(const char *, struct stat * s, fuse_file_info * fi) +{ +	try { +		NetFSComms::Attr a = files->fgetattr(fi->fh); +		s->st_dev = a.dev; +		s->st_ino = a.inode; +		s->st_mode = a.mode; +		s->st_nlink = a.links; +		s->st_uid = a.uid; +		s->st_gid = a.gid; +		s->st_rdev = a.rdev; +		s->st_size = a.size; +		s->st_blksize = a.blockSize; +		s->st_blocks = a.blocks; +		s->st_atime = a.atime; +		s->st_mtime = a.mtime; +		s->st_ctime = a.ctime; +		return 0; +	} +	catch (NetFSComms::SystemError & e) { +		return -e.syserrno; +	} +} + +int  NetFS::unlink(const char * p)  {  	try { diff --git a/netfs/fuseMisc.cpp b/netfs/fuseMisc.cpp index 074da48..4b3a4bf 100644 --- a/netfs/fuseMisc.cpp +++ b/netfs/fuseMisc.cpp @@ -32,31 +32,6 @@ NetFS::getattr(const char * p, struct stat * s)  }  int -NetFS::fgetattr(const char *, struct stat * s, fuse_file_info * fi) -{ -	try { -		NetFSComms::Attr a = misc->fgetattr(fi->fh); -		s->st_dev = a.dev; -		s->st_ino = a.inode; -		s->st_mode = a.mode; -		s->st_nlink = a.links; -		s->st_uid = a.uid; -		s->st_gid = a.gid; -		s->st_rdev = a.rdev; -		s->st_size = a.size; -		s->st_blksize = a.blockSize; -		s->st_blocks = a.blocks; -		s->st_atime = a.atime; -		s->st_mtime = a.mtime; -		s->st_ctime = a.ctime; -		return 0; -	} -	catch (NetFSComms::SystemError & e) { -		return -e.syserrno; -	} -} - -int  NetFS::chmod(const char * p, mode_t m)  {  	try { diff --git a/netfs/netfsComms.ice b/netfs/netfsComms.ice index 32c96bc..1fcfaf1 100644 --- a/netfs/netfsComms.ice +++ b/netfs/netfsComms.ice @@ -38,6 +38,7 @@ module NetFSComms {  	interface Files {  		void truncate(string path, long size);  		void ftruncate(int id, long size); +		Attr fgetattr(int id);  		void unlink(string path); @@ -62,7 +63,6 @@ module NetFSComms {  	interface Misc {  		int access(string path, int mode);  		Attr getattr(string path); -		Attr fgetattr(int id);  		void symlink(string path1, string path2);  		void link(string path1, string path2);  		void rename(string from, string to); | 
