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))); }
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))); }
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")); }
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))); }
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")); }
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))); }