Load() public méthode

public Load ( String path ) : uint
path String
Résultat uint
Exemple #1
0
        public virtual NfsPacket GetAttr(NfsPacket packet)
        {
            try {
                FileHandle        f  = new FileHandle(packet);
                NfsFileAttributes fa = new NfsFileAttributes();

                string file = GetNameFromHandle(f.Handle, packet.XID);

                if (!File.Exists(file) && !Directory.Exists(file))
                {
                    throw new NFSException(packet.XID, (uint)NfsReply.ERR_NOENT);
                }

                Console.WriteLine("NfsDirectory.GetAttr: file: " + file);
                fa.Load(file);

                NfsPacket reply = new NfsPacket(96);
                reply.AddReplyHeader(packet.XID);
                reply.SetUInt((uint)NfsReply.OK);

                fa.Emit(ref reply);

                return(reply);
            }
            catch (FileNotFoundException) {
                throw new NFSException(packet.XID, (uint)NfsReply.ERR_NOENT);
            }
        }
Exemple #2
0
        public NfsPacket Write(uint xid, NfsPacket packet)
        {
            string fileName = null;

            try {
                // read info out of packet
                FileHandle fh          = new FileHandle(packet);
                uint       beginoffset = packet.GetUInt();
                uint       offset      = packet.GetUInt();
                uint       totalcount  = packet.GetUInt();
                // next comes the data which is a uint of size and the bytes.
                uint datalen      = packet.GetUInt();
                uint packetOffset = (uint)packet.Position;
                packet.Advance(datalen);

                // carry out the write operation
                fileName = HandleManager.Current.GetName(fh.Handle);
                if (fileName == null)
                {
                    throw new NFSException(xid, (uint)NfsReply.ERR_STALE);
                }
                // XXX comment out print lines to improve performance
                // System.out.print("Write(" + fileName + ", " + offset + ", " +
                //		     datalen + ")\n");
                using (StreamWriter sw = new StreamWriter(fileName)) {
                    sw.BaseStream.Seek(offset, SeekOrigin.Begin);
                    sw.BaseStream.Write(packet.Data, (int)packetOffset, (int)datalen);
                }

                // load in new file attributes
                NfsFileAttributes fa = new NfsFileAttributes();
                fa.Load(fileName);

                // create the reply packet
                NfsPacket result = new NfsPacket(128);
                result.Reset();
                result.AddReplyHeader(xid);
                result.SetUInt((uint)NfsReply.OK);
                fa.Emit(ref result);

                return(result);
            }
            catch (IOException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_IO);
            }
            catch (System.Security.SecurityException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_PERM);
            }
        }
Exemple #3
0
        public virtual NfsPacket Create(uint xid, NfsPacket packet)
        {
            try {
                FileHandle dirFH   = new FileHandle(packet);
                string     entry   = packet.GetString();
                string     dirName = GetNameFromHandle(dirFH.Handle, xid);
                string     path    = Path.Combine(dirName, entry);

                // make the file

                if (File.Exists(path))
                {
                    throw new NFSException(xid, (uint)NfsReply.ERR_EXIST);
                }

                using (var file = File.Create(path)) { }

                // make a new handle for this file
                FileHandle fh     = new FileHandle();
                long       handle = HandleManager.Current.GetHandle(path);
                fh.Set(dirFH.Root, (uint)handle, dirFH.ReadOnly);

                // get the attributes of this new file
                NfsFileAttributes fa = new NfsFileAttributes();
                fa.Load(path);

                // create the reply packet
                NfsPacket reply = new NfsPacket(128);
                reply.AddReplyHeader(xid);
                reply.SetUInt((uint)NfsReply.OK);
                fh.Emit(ref reply);
                fa.Emit(ref reply);
                return(reply);
            }
            catch (FileNotFoundException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_IO);
            }
            catch (IOException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_IO);
            }
            catch (System.Security.SecurityException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_PERM);
            }
        }
Exemple #4
0
        public virtual NfsPacket Create(uint xid, NfsPacket packet)
        {
            try {
                FileHandle dirFH = new FileHandle(packet);
                string entry = packet.GetString();
                string dirName = GetNameFromHandle(dirFH.Handle, xid);
                string path = Path.Combine(dirName, entry);

                // make the file

                if (File.Exists(path)) {
                    throw new NFSException(xid, (uint)NfsReply.ERR_EXIST);
                }

                using (var file = File.Create(path)) { }

                // make a new handle for this file
                FileHandle fh = new FileHandle();
                long handle = HandleManager.Current.GetHandle(path);
                fh.Set(dirFH.Root, (uint)handle, dirFH.ReadOnly);

                // get the attributes of this new file
                NfsFileAttributes fa = new NfsFileAttributes();
                fa.Load(path);

                // create the reply packet
                NfsPacket reply = new NfsPacket(128);
                reply.AddReplyHeader(xid);
                reply.SetUInt((uint)NfsReply.OK);
                fh.Emit(ref reply);
                fa.Emit(ref reply);
                return reply;

            }
            catch (FileNotFoundException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_IO);
            }
            catch (IOException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_IO);
            }
            catch (System.Security.SecurityException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_PERM);
            }
        }
Exemple #5
0
        public virtual NfsPacket Lookup(NfsPacket packet)
        {
            try {
                FileHandle dir      = new FileHandle(packet);
                String     entry    = packet.GetString();
                String     dirName  = GetNameFromHandle(dir.Handle, packet.XID);
                String     fileName = Path.Combine(dirName, entry);

                Console.WriteLine("Lookup -> " + entry);

                if (!File.Exists(fileName) && !Directory.Exists(fileName))
                {
                    throw new NFSException(packet.XID, (uint)NfsReply.ERR_NOENT);
                }

                NfsFileAttributes attributes = new NfsFileAttributes();
                attributes.Load(fileName);

                // make a FileHandle for this new path
                uint handleId = HandleManager.Current.GetHandle(fileName);

                FileHandle handle = new FileHandle();
                handle.Set(dir.Root, handleId, dir.ReadOnly);

                // make the reply
                NfsPacket reply = new NfsPacket(128);
                reply.AddReplyHeader(packet.XID);
                reply.SetUInt((uint)NfsReply.OK);

                handle.Emit(ref reply);
                attributes.Emit(ref reply);

                return(reply);
            }
            catch (FileNotFoundException) {
                throw new NFSException(packet.XID, (uint)NfsReply.ERR_NOENT);
            }
        }
Exemple #6
0
        public virtual NfsPacket SetAttr(uint xid, NfsPacket packet)
        {
            try {
                FileHandle f        = new FileHandle(packet);
                String     fileName = GetNameFromHandle(f.Handle, xid);

                // the attributes
                int     mode  = (int)packet.GetUInt();
                int     uid   = (int)packet.GetUInt();
                int     gid   = (int)packet.GetUInt();
                int     size  = (int)packet.GetUInt();
                NfsTime atime = new NfsTime(packet);
                NfsTime mtime = new NfsTime(packet);

                // the only attribute that can be set is the size can be set to 0 to truncate the file
                if (size == 0)
                {
                    // truncate by deleting and recreating the file
                    using (var fs = new FileStream(fileName, FileMode.Truncate, FileAccess.ReadWrite)) { }
                }

                NfsPacket reply = new NfsPacket(128);
                reply.AddReplyHeader(xid);
                reply.SetUInt((uint)NfsReply.OK);

                NfsFileAttributes fa = new NfsFileAttributes();
                fa.Load(fileName);
                fa.Emit(ref reply);

                return(reply);
            }
            catch (FileNotFoundException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_NOENT);
            }
            catch (IOException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_PERM);
            }
        }
Exemple #7
0
        public virtual NfsPacket Mkdir(uint xid, NfsPacket packet)
        {
            try {
                FileHandle fileHandle = new FileHandle(packet);
                string     entry      = packet.GetString();

                string dirName = GetNameFromHandle(fileHandle.Handle, xid);
                string newdir  = Path.Combine(dirName, entry);

                var dir = new DirectoryInfo(newdir);

                if (dir.Exists)
                {
                    throw new NFSException(xid, (uint)NfsReply.ERR_EXIST);
                }

                dir.Create();

                // make a FileHandle for this directory
                long       handle = HandleManager.Current.GetHandle(newdir);
                FileHandle newFH  = new FileHandle();
                newFH.Set(fileHandle.Root, (uint)handle, fileHandle.ReadOnly);

                // get the attributes
                NfsFileAttributes fa = new NfsFileAttributes();
                fa.Load(newdir);

                NfsPacket reply = new NfsPacket(128);
                reply.AddReplyHeader(xid);
                reply.SetUInt((uint)NfsReply.OK);
                newFH.Emit(ref reply);
                fa.Emit(ref reply);
                return(reply);
            }
            catch (FileNotFoundException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_IO);
            }
        }
Exemple #8
0
        public NfsPacket Write(uint xid, NfsPacket packet)
        {
            string fileName = null;

            try {
                // read info out of packet
                FileHandle fh = new FileHandle(packet);
                uint beginoffset = packet.GetUInt();
                uint offset = packet.GetUInt();
                uint totalcount = packet.GetUInt();
                // next comes the data which is a uint of size and the bytes.
                uint datalen = packet.GetUInt();
                uint packetOffset = (uint)packet.Position;
                packet.Advance(datalen);

                // carry out the write operation
                fileName = HandleManager.Current.GetName(fh.Handle);
                if (fileName == null) {
                    throw new NFSException(xid, (uint)NfsReply.ERR_STALE);
                }
                // XXX comment out print lines to improve performance
                // System.out.print("Write(" + fileName + ", " + offset + ", " +
                //		     datalen + ")\n");
                using (StreamWriter sw = new StreamWriter(fileName)) {
                    sw.BaseStream.Seek(offset, SeekOrigin.Begin);
                    sw.BaseStream.Write(packet.Data, (int)packetOffset, (int)datalen);
                }

                // load in new file attributes
                NfsFileAttributes fa = new NfsFileAttributes();
                fa.Load(fileName);

                // create the reply packet
                NfsPacket result = new NfsPacket(128);
                result.Reset();
                result.AddReplyHeader(xid);
                result.SetUInt((uint)NfsReply.OK);
                fa.Emit(ref result);

                return result;
            }
            catch (IOException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_IO);
            }
            catch (System.Security.SecurityException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_PERM);
            }
        }
Exemple #9
0
        public virtual NfsPacket GetAttr(NfsPacket packet)
        {
            try {
                FileHandle f = new FileHandle(packet);
                NfsFileAttributes fa = new NfsFileAttributes();

                string file = GetNameFromHandle(f.Handle, packet.XID);

                if (!File.Exists(file) && !Directory.Exists(file)) {
                    throw new NFSException(packet.XID, (uint)NfsReply.ERR_NOENT);
                }

                Console.WriteLine("NfsDirectory.GetAttr: file: " + file);
                fa.Load(file);

                NfsPacket reply = new NfsPacket(96);
                reply.AddReplyHeader(packet.XID);
                reply.SetUInt((uint)NfsReply.OK);

                fa.Emit(ref reply);

                return reply;
            }
            catch (FileNotFoundException) {
                throw new NFSException(packet.XID, (uint)NfsReply.ERR_NOENT);
            }
        }
Exemple #10
0
        public virtual NfsPacket SetAttr(uint xid, NfsPacket packet)
        {
            try {
                FileHandle f = new FileHandle(packet);
                String fileName = GetNameFromHandle(f.Handle, xid);

                // the attributes
                int mode = (int)packet.GetUInt();
                int uid = (int)packet.GetUInt();
                int gid = (int)packet.GetUInt();
                int size = (int)packet.GetUInt();
                NfsTime atime = new NfsTime(packet);
                NfsTime mtime = new NfsTime(packet);

                // the only attribute that can be set is the size can be set to 0 to truncate the file
                if (size == 0) {
                    // truncate by deleting and recreating the file
                    using (var fs = new FileStream(fileName, FileMode.Truncate, FileAccess.ReadWrite)) { }
                }

                NfsPacket reply = new NfsPacket(128);
                reply.AddReplyHeader(xid);
                reply.SetUInt((uint)NfsReply.OK);

                NfsFileAttributes fa = new NfsFileAttributes();
                fa.Load(fileName);
                fa.Emit(ref reply);

                return reply;
            }
            catch (FileNotFoundException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_NOENT);
            }
            catch (IOException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_PERM);
            }
        }
Exemple #11
0
        public virtual NfsPacket Mkdir(uint xid, NfsPacket packet)
        {
            try {
                FileHandle fileHandle = new FileHandle(packet);
                string entry = packet.GetString();

                string dirName = GetNameFromHandle(fileHandle.Handle, xid);
                string newdir = Path.Combine(dirName, entry);

                var dir = new DirectoryInfo(newdir);

                if (dir.Exists) {
                    throw new NFSException(xid, (uint)NfsReply.ERR_EXIST);
                }

                dir.Create();

                // make a FileHandle for this directory
                long handle = HandleManager.Current.GetHandle(newdir);
                FileHandle newFH = new FileHandle();
                newFH.Set(fileHandle.Root, (uint)handle, fileHandle.ReadOnly);

                // get the attributes
                NfsFileAttributes fa = new NfsFileAttributes();
                fa.Load(newdir);

                NfsPacket reply = new NfsPacket(128);
                reply.AddReplyHeader(xid);
                reply.SetUInt((uint)NfsReply.OK);
                newFH.Emit(ref reply);
                fa.Emit(ref reply);
                return reply;

            }
            catch (FileNotFoundException) {
                throw new NFSException(xid, (uint)NfsReply.ERR_IO);
            }
        }
Exemple #12
0
        public virtual NfsPacket Lookup(NfsPacket packet)
        {
            try {
                FileHandle dir = new FileHandle(packet);
                String entry = packet.GetString();
                String dirName = GetNameFromHandle(dir.Handle, packet.XID);
                String fileName = Path.Combine(dirName, entry);

                Console.WriteLine("Lookup -> " + entry);

                if (!File.Exists(fileName) && !Directory.Exists(fileName)) {
                    throw new NFSException(packet.XID, (uint)NfsReply.ERR_NOENT);
                }

                NfsFileAttributes attributes = new NfsFileAttributes();
                attributes.Load(fileName);

                // make a FileHandle for this new path
                uint handleId = HandleManager.Current.GetHandle(fileName);

                FileHandle handle = new FileHandle();
                handle.Set(dir.Root, handleId, dir.ReadOnly);

                // make the reply
                NfsPacket reply = new NfsPacket(128);
                reply.AddReplyHeader(packet.XID);
                reply.SetUInt((uint)NfsReply.OK);

                handle.Emit(ref reply);
                attributes.Emit(ref reply);

                return reply;

            }
            catch (FileNotFoundException) {
                throw new NFSException(packet.XID, (uint)NfsReply.ERR_NOENT);
            }
        }