123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- namespace Ant.Service.Utilities
- {
-
-
-
- internal sealed class ListCommand : Pop3Command<ListResponse>
- {
-
- int _messageId;
- public ListCommand(Stream stream)
- : base(stream, true, Pop3State.Transaction)
- {
- }
-
-
-
-
-
- public ListCommand(Stream stream, int messageId)
- : this(stream)
- {
- if (messageId < 0)
- {
- throw new ArgumentOutOfRangeException("messageId");
- }
- _messageId = messageId;
- base.IsMultiline = false;
- }
-
-
-
-
- protected override byte[] CreateRequestMessage()
- {
- string requestMessage = Pop3Commands.List;
- if (!IsMultiline)
- {
- requestMessage += _messageId.ToString();
- }
- return GetRequestMessage(requestMessage, Pop3Commands.Crlf);
- }
-
-
-
-
-
- protected override ListResponse CreateResponse(byte[] buffer)
- {
- Pop3Response response = Pop3Response.CreateResponse(buffer);
- List<Pop3ListItem> items;
- if (IsMultiline)
- {
- items = new List<Pop3ListItem>();
- string[] values;
- string[] lines = GetResponseLines(StripPop3HostMessage(buffer, response.HostMessage));
- foreach (string line in lines)
- {
-
- values = line.Split(' ');
- if (values.Length < 2)
- {
- throw new Pop3Exception(string.Concat("Invalid line in multiline response: ", line));
- }
- items.Add(new Pop3ListItem(Convert.ToInt32(values[0]),
- Convert.ToInt64(values[1])));
- }
- }
- else
- {
- items = new List<Pop3ListItem>(1);
- string[] values = response.HostMessage.Split(' ');
-
- if (values.Length < 3)
- {
- throw new Pop3Exception(string.Concat("Invalid response message: ", response.HostMessage));
- }
- items.Add(new Pop3ListItem(Convert.ToInt32(values[1]), Convert.ToInt64(values[2])));
- }
- return new ListResponse(response, items);
- }
- }
- }
|