예제 #1
0
        private async Task HandleDele(string command)
        {
            var messageNumber = CommandParser.ParseDele(command);

            if (messageNumber.HasValue)
            {
                var commandResult = await _commandHandler.HandleDele(messageNumber.Value);
                await SendCommandResult(commandResult);
            }
            else
            {
                await SendCommandResult(Pop3CommandReply.CreateNoSuchMessage());
            }
        }
예제 #2
0
        private async Task HandleRetr(string command)
        {
            var messageIndex = CommandParser.ParseRetr(command);

            if (messageIndex.HasValue)
            {
                var stream = await _commandHandler.HandleRetr(messageIndex.Value);

                if (stream == null)
                {
                    await SendCommandResult(Pop3CommandReply.CreateNoSuchMessage());
                }
                else
                {
                    using (stream)
                    {
                        await _connection.WriteString("+OK\r\n");

                        // TODO: Add transmission period.
                        byte[] buf = new byte[4096];

                        int bytesRead = 0;
                        while ((bytesRead = stream.Read(buf, 0, buf.Length)) > 0)
                        {
                            if (bytesRead < buf.Length)
                            {
                                var reducedBuffer = new byte[bytesRead];
                                Buffer.BlockCopy(buf, 0, reducedBuffer, 0, bytesRead);
                                await _connection.WriteBytes(reducedBuffer);
                            }
                            else
                            {
                                await _connection.WriteBytes(buf);
                            }
                        }
                    }

                    await _connection.WriteString("\r\n.\r\n");
                }
            }
            else
            {
                await SendCommandResult(Pop3CommandReply.CreateNoSuchMessage());
            }
        }