public void Process(byte[] data) { var message = Encoding.ASCII.GetString(data); message = message.Substring(0, message.IndexOf('\r')); FtpServerMessageHandler.SendMessage(Id, message); string command; string value; int spaceIndex = message.IndexOf(' '); if (spaceIndex < 0) { command = message.ToUpper(); value = string.Empty; } else { command = message.Substring(0, spaceIndex).ToUpper(); value = message.Substring(command.Length + 1); } var handler = commandHashTable[command] as FtpCommandHandler; if (handler == null) { FtpServerMessageHandler.SendMessage(Id, string.Format("\"{0}\" : Unknown command", command)); SocketHelpers.Send(Socket, "550 Unknown command\r\n"); } else { handler.Process(value); } }
private void ThreadRun() { this.serverSocketListener = SocketHelpers.CreateTcpListener(port); if (this.serverSocketListener != null) { this.serverSocketListener.Start(); FtpServerMessageHandler.SendMessage(0, "FTP Server Started"); this.UpdateSubSystemHost(this, "FTP Server Multi-Threaded Core Started"); bool shouldContinue = true; while (shouldContinue) { TcpClient socket = null; try { socket = serverSocketListener.AcceptTcpClient(); } catch (SocketException) { shouldContinue = false; } finally { if (socket == null) { shouldContinue = false; } else { socket.NoDelay = false; id++; FtpServerMessageHandler.SendMessage(id, "New connection"); this.UpdateSubSystemHost(this, "New connection id = " + id); SendAcceptMessage(socket); this.InitialiseSocketHandler(socket); } } } } else { FtpServerMessageHandler.SendMessage(0, "Error in starting FTP server"); this.UpdateSubSystemHost(this, "Error in starting FTP server"); } }
private void CloseSocket() { FtpServerMessageHandler.SendMessage(this.Id, "Connection closed"); if (this.clientSocket.Connected) { this.clientSocket.Close(); } if (this.Closed != null) { this.Closed(this); } }