Ejemplo n.º 1
0
        protected override string OnProcess(string sMessage)
        {
            sMessage = sMessage.Trim();
            if (sMessage == "")
            {
                return(GetMessage(501, string.Format("{0} needs a parameter", Command)));
            }

            string dirToRemove = GetPath(FileNameHelpers.AppendDirTag(sMessage));

            // check whether directory exists
            if (!ConnectionObject.FileSystemObject.DirectoryExists(dirToRemove))
            {
                return(GetMessage(550, string.Format("Directory \"{0}\" does not exist", dirToRemove)));
            }

            // can not delete root directory
            if (dirToRemove == "/")
            {
                return(GetMessage(553, "Can not remove root directory"));
            }

            // delete directory
            if (ConnectionObject.FileSystemObject.DeleteDirectory(dirToRemove))
            {
                return(GetMessage(250, string.Format("{0} successful.", Command)));
            }
            else
            {
                return(GetMessage(550, string.Format("Couldn't remove directory ({0}).", dirToRemove)));
            }
        }
        protected override string OnProcess(string sMessage)
        {
            sMessage = sMessage.Trim();
            if (sMessage == "")
            {
                return(GetMessage(500, string.Format("{0} needs a paramter", Command)));
            }

            string dirToMake = GetPath(FileNameHelpers.AppendDirTag(sMessage));

            // check directory name
            if (!FileNameHelpers.IsValid(dirToMake))
            {
                return(GetMessage(553, string.Format("\"{0}\": Invalid directory name", sMessage)));
            }

            // check whether directory already exists
            if (ConnectionObject.FileSystemObject.DirectoryExists(dirToMake))
            {
                return(GetMessage(553, string.Format("Directory \"{0}\" already exists", sMessage)));
            }

            // create directory
            if (!ConnectionObject.FileSystemObject.CreateDirectory(dirToMake))
            {
                return(GetMessage(550, string.Format("Couldn't create directory. ({0})", sMessage)));
            }

            return(GetMessage(257, string.Format("{0} successful \"{1}\".", Command, dirToMake)));
        }
Ejemplo n.º 3
0
        protected override string OnProcess(string sMessage)
        {
            sMessage = sMessage.Trim();
            if (sMessage.Length == 0)
            {
                return(GetMessage(501, string.Format("Syntax error. {0} needs a parameter", Command)));
            }

            // append the final '/' char
            string sMessageFull = FileNameHelpers.AppendDirTag(sMessage);

            #region change to the parent dir
            if (sMessageFull == @"../")
            {
                // get the parent directory
                string parentDir = GetParentDir();
                if (parentDir == null)
                {
                    return(GetMessage(550, "Root directory, cannot change to the parent directory"));
                }

                ConnectionObject.CurrentDirectory = parentDir;
                FtpServer.LogWrite(this, sMessage, 200, 0);
                return(GetMessage(200, string.Format("{0} Successful ({1})", Command, parentDir)));
            }
            #endregion

            if (!FileNameHelpers.IsValid(sMessageFull))
            {
                FtpServer.LogWrite(this, sMessage, 550, 0);
                return(GetMessage(550, string.Format("\"{0}\" is not a valid directory string.", sMessage)));
            }

            // get the new directory path
            string newDirectory = GetPath(sMessageFull);

            // checks whether the new directory exists
            if (!ConnectionObject.FileSystemObject.DirectoryExists(newDirectory))
            {
                FtpServer.LogWrite(this, sMessage, 550, 0);
                return(GetMessage(550, string.Format("\"{0}\" no such directory.", sMessage)));
            }

            ConnectionObject.CurrentDirectory = newDirectory;
            FtpServer.LogWrite(this, sMessage, 250, 0);
            return(GetMessage(250, string.Format("{0} Successful ({1})", Command, newDirectory)));
        }
Ejemplo n.º 4
0
        protected override string OnProcess(string sMessage)
        {
            sMessage = sMessage.Trim();

            // Get the file/dir to list
            string targetToList = GetPath(sMessage);

            // checks the file/dir name
            if (!FileNameHelpers.IsValid(targetToList))
            {
                return(GetMessage(501, string.Format("\"{0}\" is not a valid file/directory name", sMessage)));
            }

            bool targetIsFile = ConnectionObject.FileSystemObject.FileExists(targetToList);
            bool targetIsDir  = ConnectionObject.FileSystemObject.DirectoryExists(FileNameHelpers.AppendDirTag(targetToList));

            if (!targetIsFile && !targetIsDir)
            {
                return(GetMessage(550, string.Format("\"{0}\" not exists", sMessage)));
            }

            SocketHelpers.Send(ConnectionObject.Socket, string.Format("250- MLST {0}\r\n", targetToList), ConnectionObject.Encoding);

            StringBuilder response = new StringBuilder();

            if (targetIsFile)
            {
                response.Append(" ");
                var fileInfo = ConnectionObject.FileSystemObject.GetFileInfo(targetToList);
                response.Append(GenerateEntry(fileInfo));
                response.Append("\r\n");
            }

            if (targetIsDir)
            {
                response.Append(" ");
                var dirInfo = ConnectionObject.FileSystemObject.GetDirectoryInfo(FileNameHelpers.AppendDirTag(targetToList));
                response.Append(GenerateEntry(dirInfo));
                response.Append("\r\n");
            }

            SocketHelpers.Send(ConnectionObject.Socket, response.ToString(), ConnectionObject.Encoding);

            return(GetMessage(250, "MLST successful"));
        }
Ejemplo n.º 5
0
        protected override string OnProcess(string sMessage)
        {
            sMessage = sMessage.Trim();

            if (sMessage == "")
            {
                return(GetMessage(211, "Server status: OK"));
            }

            // if no parameter is given, STAT works as LIST
            // but won't use data connection
            string[] asFiles       = null;
            string[] asDirectories = null;

            // Get the file/dir to list
            string targetToList = GetPath(sMessage);

            // checks the file/dir name
            if (!FileNameHelpers.IsValid(targetToList))
            {
                return(GetMessage(501, string.Format("\"{0}\" is not a valid file/directory name", sMessage)));
            }

            // two vars indicating different list results
            bool targetIsFile = false;
            bool targetIsDir  = false;

            // targetToList ends with '/', must be a directory
            if (targetToList.EndsWith(@"/"))
            {
                targetIsFile = false;
                if (ConnectionObject.FileSystemObject.DirectoryExists(targetToList))
                {
                    targetIsDir = true;
                }
            }
            else
            {
                // check whether the target to list is a directory
                if (ConnectionObject.FileSystemObject.DirectoryExists(FileNameHelpers.AppendDirTag(targetToList)))
                {
                    targetIsDir = true;
                }
                // check whether the target to list is a file
                if (ConnectionObject.FileSystemObject.FileExists(targetToList))
                {
                    targetIsFile = true;
                }
            }

            if (targetIsFile)
            {
                asFiles = new string[1] {
                    targetToList
                };
                if (targetIsDir)
                {
                    asDirectories = new string[1] {
                        FileNameHelpers.AppendDirTag(targetToList)
                    }
                }
                ;
            }
            // list a directory
            else if (targetIsDir)
            {
                targetToList  = FileNameHelpers.AppendDirTag(targetToList);
                asFiles       = ConnectionObject.FileSystemObject.GetFiles(targetToList);
                asDirectories = ConnectionObject.FileSystemObject.GetDirectories(targetToList);
            }
            else
            {
                return(GetMessage(550, string.Format("\"{0}\" not exists", sMessage)));
            }

            // generate the response
            string sFileList = BuildReply(asFiles, asDirectories);

            SocketHelpers.Send(ConnectionObject.Socket, string.Format("213-Begin STAT \"{0}\":\r\n", sMessage), ConnectionObject.Encoding);

            SocketHelpers.Send(ConnectionObject.Socket, sFileList, ConnectionObject.Encoding);

            return(GetMessage(213, string.Format("{0} successful.", Command)));
        }
Ejemplo n.º 6
0
        protected override string OnProcess(string sMessage)
        {
            sMessage = sMessage.Trim();

            // Get the dir to list
            string targetToList = GetPath(sMessage);

            // checks the dir name
            if (!FileNameHelpers.IsValid(targetToList))
            {
                return(GetMessage(501, $"\"{sMessage}\" is not a valid directory name"));
            }

            // specify the directory tag
            targetToList = FileNameHelpers.AppendDirTag(targetToList);

            bool targetIsDir = ConnectionObject.FileSystemObject.DirectoryExists(targetToList);

            if (!targetIsDir)
            {
                return(GetMessage(550, $"Directory \"{targetToList}\" not exists"));
            }

            #region Generate response

            StringBuilder response = new StringBuilder();

            string[] files       = ConnectionObject.FileSystemObject.GetFiles(targetToList);
            string[] directories = ConnectionObject.FileSystemObject.GetDirectories(targetToList);

            if (files != null && files.Any())
            {
                foreach (var file in files)
                {
                    var fileInfo = ConnectionObject.FileSystemObject.GetFileInfo(file);

                    response.Append(GenerateEntry(fileInfo));

                    response.Append("\r\n");
                }
            }

            if (directories != null && directories.Any())
            {
                foreach (var dir in directories)
                {
                    var dirInfo = ConnectionObject.FileSystemObject.GetDirectoryInfo(dir);

                    response.Append(GenerateEntry(dirInfo));

                    response.Append("\r\n");
                }
            }

            #endregion

            #region Write response

            var socketData = new FtpDataSocket(ConnectionObject);

            if (!socketData.Loaded)
            {
                return(GetMessage(425, "Unable to establish the data connection"));
            }

            SocketHelpers.Send(ConnectionObject.Socket, $"150 {ConnectionObject.DataType} Opening data connection for MLSD {targetToList}\r\n", ConnectionObject.Encoding);

            try
            {
                // ToDo, send response according to ConnectionObject.DataType, i.e., Ascii or Binary
                socketData.Send(response.ToString(), ConnectionObject.Encoding);
            }
            finally
            {
                socketData.Close();
            }

            #endregion

            return(GetMessage(226, "MLSD successful"));
        }
Ejemplo n.º 7
0
        protected override string OnProcess(string sMessage)
        {
            sMessage = sMessage.Trim();

            string[] asFiles       = null;
            string[] asDirectories = null;

            // Get the file/dir to list
            string targetToList = GetPath(sMessage);

            // checks the file/dir name
            if (!FileNameHelpers.IsValid(targetToList))
            {
                return(GetMessage(501, string.Format("\"{0}\" is not a valid file/directory name", sMessage)));
            }

            // two vars indicating different list results
            bool targetIsFile = false;
            bool targetIsDir  = false;

            // targetToList ends with '/', must be a directory
            if (targetToList.EndsWith(@"/"))
            {
                targetIsFile = false;
                if (ConnectionObject.FileSystemObject.DirectoryExists(targetToList))
                {
                    targetIsDir = true;
                }
            }
            else
            {
                // check whether the target to list is a directory
                if (ConnectionObject.FileSystemObject.DirectoryExists(FileNameHelpers.AppendDirTag(targetToList)))
                {
                    targetIsDir = true;
                }
                // check whether the target to list is a file
                if (ConnectionObject.FileSystemObject.FileExists(targetToList))
                {
                    targetIsFile = true;
                }
            }

            if (targetIsFile)
            {
                asFiles = new string[1] {
                    targetToList
                };
                if (targetIsDir)
                {
                    asDirectories = new string[1] {
                        FileNameHelpers.AppendDirTag(targetToList)
                    }
                }
                ;
            }
            // list a directory
            else if (targetIsDir)
            {
                targetToList  = FileNameHelpers.AppendDirTag(targetToList);
                asFiles       = ConnectionObject.FileSystemObject.GetFiles(targetToList);
                asDirectories = ConnectionObject.FileSystemObject.GetDirectories(targetToList);
            }
            else
            {
                return(GetMessage(550, string.Format("\"{0}\" not exists", sMessage)));
            }

            var socketData = new FtpDataSocket(ConnectionObject);

            if (!socketData.Loaded)
            {
                return(GetMessage(425, "Unable to establish the data connection"));
            }

            // prepare to write response to data channel
            SocketHelpers.Send(ConnectionObject.Socket, string.Format("150 Opening data connection for {0}\r\n", Command), ConnectionObject.Encoding);

            // generate the response
            string sFileList = BuildReply(asFiles, asDirectories);

            // ToDo, send response according to ConnectionObject.DataType, i.e., Ascii or Binary
            socketData.Send(sFileList, Encoding.UTF8);
            socketData.Close();

            return(GetMessage(226, string.Format("{0} successful.", Command)));
        }