protected override string OnProcess(string sMessage) { string sFilePath = GetPath(sMessage); if (!ConnectionObject.FileSystemObject.FileExists(sFilePath)) { return GetMessage(550, "File doesn't exist"); } var replySocket = new FtpReplySocket(ConnectionObject); if (!replySocket.Loaded) { return GetMessage(550, "Unable to establish data connection"); } Send("150 Starting data transfer, please wait...\r\n"); const int bufferSize = 65536; FtpFile file = ConnectionObject.FileSystemObject.OpenFile(sFilePath, false); if (file == null) { return GetMessage(550, "Couldn't open file"); } var byteBuffer = new byte[bufferSize]; int read = file.Read(byteBuffer, bufferSize); try { while (read > 0) { replySocket.Send(byteBuffer, read); read = file.Read(byteBuffer, bufferSize); } return GetMessage(226, "File download succeeded."); } finally { file.Close(); replySocket.Close(); } }
protected override string OnProcess(string sMessage) { Send("150 Opening data connection for LIST\r\n"); string[] asFiles = null; string[] asDirectories = null; sMessage = sMessage.Trim(); string sPath = GetPath(""); if (sMessage.Length == 0 || sMessage[0] == '-') { asFiles = ConnectionObject.FileSystemObject.GetFiles(sPath); asDirectories = ConnectionObject.FileSystemObject.GetDirectories(sPath); } else { asFiles = ConnectionObject.FileSystemObject.GetFiles(sPath, sMessage); asDirectories = ConnectionObject.FileSystemObject.GetDirectories(sPath, sMessage); } var asAll = ArrayHelpers.Add(asDirectories, asFiles) as string[]; string sFileList = BuildReply(sMessage, asAll); var socketReply = new FtpReplySocket(ConnectionObject); if (!socketReply.Loaded) { return GetMessage(550, "LIST unable to establish return connection."); } try { socketReply.Send(sFileList, ConnectionObject.Id); return GetMessage(226, "LIST successful."); } finally { socketReply.Close(); } }