Пример #1
0
        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");
 }
Пример #3
0
 public StartTlsState(StartTlsCommand cmd, Connection connection) : this(connection)
 {
 }