protected async Task <CommandBase> GetCommandAsync(String line, List <Type> possibleCommands) { if (String.IsNullOrEmpty(line)) { return(null); } CommandBase cmd = null; String payload = null; if ((payload = this.GetPayloadByCommand(line, HeloCommand.Command)) != null) { cmd = new HeloCommand(payload); } else if ((payload = this.GetPayloadByCommand(line, EhloCommand.Command)) != null) { cmd = new EhloCommand(payload); } else if ((payload = this.GetPayloadByCommand(line, StartTlsCommand.Command)) != null) { cmd = new StartTlsCommand(payload); } else if ((payload = this.GetPayloadByCommand(line, MailCommand.Command)) != null) { cmd = new MailCommand(payload); } else if ((payload = this.GetPayloadByCommand(line, RcptCommand.Command)) != null) { cmd = new RcptCommand(payload); } else if ((payload = this.GetPayloadByCommand(line, DataCommand.Command)) != null) { cmd = new DataCommand(payload); } else if ((payload = this.GetPayloadByCommand(line, QuitCommand.Command)) != null) { cmd = new QuitCommand(payload); } else if ((payload = this.GetPayloadByCommand(line, RstCommand.Command)) != null) { cmd = new RstCommand(payload); } else if ((payload = this.GetPayloadByCommand(line, NoopCommand.Command)) != null) { cmd = new NoopCommand(payload); } if (cmd != null) { if (possibleCommands.Contains(cmd.GetType())) { var error = cmd.ParseParameter(); if (error == null) { error = await cmd.ParseParameterAsync(this.Connection); } if (error != null) { await this.Connection.WriteLineAsync(error); cmd = null; } } else { cmd = new InvalidCommand(payload); } } else { await this.Connection.WriteLineAsync("500 Unrecognized command"); } return(cmd); }
/// <summary> /// Visit an STARTTLS command. /// </summary> /// <param name="command">The command that is being visited.</param> protected override void Visit(StartTlsCommand command) { _output.WriteLine("STARTTLS"); }
public StartTlsState(StartTlsCommand cmd, Connection connection) : this(connection) { }