本文整理汇总了C#中MailKit.Net.Imap.ImapEngine.ReadToken方法的典型用法代码示例。如果您正苦于以下问题:C# ImapEngine.ReadToken方法的具体用法?C# ImapEngine.ReadToken怎么用?C# ImapEngine.ReadToken使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MailKit.Net.Imap.ImapEngine
的用法示例。
在下文中一共展示了ImapEngine.ReadToken方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ParseThread
static MessageThread ParseThread (ImapEngine engine, uint uidValidity, CancellationToken cancellationToken)
{
var token = engine.ReadToken (cancellationToken);
MessageThread thread, node, child;
uint uid;
if (token.Type != ImapTokenType.Atom || !uint.TryParse ((string) token.Value, out uid))
throw ImapEngine.UnexpectedToken (token, false);
node = thread = new MessageThread (new UniqueId (uidValidity, uid));
do {
token = engine.ReadToken (cancellationToken);
if (token.Type == ImapTokenType.CloseParen)
break;
if (token.Type == ImapTokenType.OpenParen) {
child = ParseThread (engine, uidValidity, cancellationToken);
node.Children.Add (child);
} else {
if (token.Type != ImapTokenType.Atom || !uint.TryParse ((string) token.Value, out uid))
throw ImapEngine.UnexpectedToken (token, false);
child = new MessageThread (new UniqueId (uidValidity, uid));
node.Children.Add (child);
node = child;
}
} while (true);
return thread;
}
示例2: SearchMatches
static void SearchMatches (ImapEngine engine, ImapCommand ic, int index)
{
var results = new SearchResults ();
var uids = new List<UniqueId> ();
ImapToken token;
ulong modseq;
uint uid;
do {
token = engine.PeekToken (ic.CancellationToken);
// keep reading UIDs until we get to the end of the line or until we get a "(MODSEQ ####)"
if (token.Type == ImapTokenType.Eoln || token.Type == ImapTokenType.OpenParen)
break;
token = engine.ReadToken (ic.CancellationToken);
if (token.Type != ImapTokenType.Atom || !uint.TryParse ((string) token.Value, out uid) || uid == 0)
throw ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, "SEARCH", token);
uids.Add (new UniqueId (ic.Folder.UidValidity, uid));
} while (true);
if (token.Type == ImapTokenType.OpenParen) {
engine.ReadToken (ic.CancellationToken);
do {
token = engine.ReadToken (ic.CancellationToken);
if (token.Type == ImapTokenType.CloseParen)
break;
if (token.Type != ImapTokenType.Atom)
throw ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, "SEARCH", token);
var atom = (string) token.Value;
switch (atom) {
case "MODSEQ":
token = engine.ReadToken (ic.CancellationToken);
if (token.Type != ImapTokenType.Atom || !ulong.TryParse ((string) token.Value, out modseq)) {
Debug.WriteLine ("Expected 64-bit nz-number as the MODSEQ value, but got: {0}", token);
throw ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);
}
break;
}
token = engine.PeekToken (ic.CancellationToken);
} while (token.Type != ImapTokenType.Eoln);
}
results.UniqueIds = uids;
ic.UserData = results;
}
示例3: OnFetch
internal void OnFetch (ImapEngine engine, int index, CancellationToken cancellationToken)
{
var labels = new MessageLabelsChangedEventArgs (index);
var flags = new MessageFlagsChangedEventArgs (index);
var token = engine.ReadToken (cancellationToken);
bool labelsChanged = false;
bool flagsChanged = false;
if (token.Type != ImapTokenType.OpenParen)
throw ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, "FETCH", token);
do {
token = engine.ReadToken (cancellationToken);
if (token.Type == ImapTokenType.CloseParen || token.Type == ImapTokenType.Eoln)
break;
if (token.Type != ImapTokenType.Atom)
throw ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, "FETCH", token);
var atom = (string) token.Value;
ulong modseq;
uint uid;
switch (atom) {
case "MODSEQ":
token = engine.ReadToken (cancellationToken);
if (token.Type != ImapTokenType.OpenParen)
throw ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);
token = engine.ReadToken (cancellationToken);
if (token.Type != ImapTokenType.Atom || !ulong.TryParse ((string) token.Value, out modseq))
throw ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);
token = engine.ReadToken (cancellationToken);
if (token.Type != ImapTokenType.CloseParen)
throw ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);
labels.ModSeq = modseq;
flags.ModSeq = modseq;
break;
case "UID":
token = engine.ReadToken (cancellationToken);
if (token.Type != ImapTokenType.Atom || !uint.TryParse ((string) token.Value, out uid) || uid == 0)
throw ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);
labels.UniqueId = new UniqueId (UidValidity, uid);
flags.UniqueId = new UniqueId (UidValidity, uid);
break;
case "FLAGS":
flags.Flags = ImapUtils.ParseFlagsList (engine, atom, flags.UserFlags, cancellationToken);
flagsChanged = true;
break;
case "X-GM-LABELS":
labels.Labels = ImapUtils.ParseLabelsList (engine, cancellationToken);
labelsChanged = true;
break;
default:
throw ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, "FETCH", token);
}
} while (true);
if (token.Type != ImapTokenType.CloseParen)
throw ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, "FETCH", token);
if (flagsChanged)
OnMessageFlagsChanged (flags);
if (labelsChanged)
OnMessageLabelsChanged (labels);
}
示例4: UntaggedQuota
static void UntaggedQuota (ImapEngine engine, ImapCommand ic, int index)
{
string format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, "QUOTA", "{0}");
var encodedName = ReadStringToken (engine, format, ic.CancellationToken);
ImapFolder quotaRoot;
FolderQuota quota;
if (!engine.GetCachedFolder (encodedName, out quotaRoot)) {
// Note: this shouldn't happen because the quota root should
// be one of the parent folders which will all have been added
// to the folder cache by this point.
}
ic.UserData = quota = new FolderQuota (quotaRoot);
var token = engine.ReadToken (ic.CancellationToken);
if (token.Type != ImapTokenType.OpenParen)
throw ImapEngine.UnexpectedToken (format, token);
while (token.Type != ImapTokenType.CloseParen) {
uint used, limit;
string resource;
token = engine.ReadToken (ic.CancellationToken);
if (token.Type != ImapTokenType.Atom)
throw ImapEngine.UnexpectedToken (format, token);
resource = (string) token.Value;
token = engine.ReadToken (ic.CancellationToken);
if (token.Type != ImapTokenType.Atom || !uint.TryParse ((string) token.Value, out used))
throw ImapEngine.UnexpectedToken (format, token);
token = engine.ReadToken (ic.CancellationToken);
if (token.Type != ImapTokenType.Atom || !uint.TryParse ((string) token.Value, out limit))
throw ImapEngine.UnexpectedToken (format, token);
switch (resource.ToUpperInvariant ()) {
case "MESSAGE":
quota.CurrentMessageCount = used;
quota.MessageLimit = limit;
break;
case "STORAGE":
quota.CurrentStorageSize = used;
quota.StorageLimit = limit;
break;
}
token = engine.PeekToken (ic.CancellationToken);
}
// read the closing paren
engine.ReadToken (ic.CancellationToken);
}
示例5: FetchSummaryItems
void FetchSummaryItems (ImapEngine engine, ImapCommand ic, int index)
{
var token = engine.ReadToken (ic.CancellationToken);
if (token.Type != ImapTokenType.OpenParen)
throw ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, "FETCH", token);
var ctx = (FetchSummaryContext) ic.UserData;
IMessageSummary isummary;
MessageSummary summary;
if (!ctx.Results.TryGetValue (index, out isummary)) {
summary = new MessageSummary (index);
ctx.Results.Add (index, summary);
} else {
summary = (MessageSummary) isummary;
}
do {
token = engine.ReadToken (ic.CancellationToken);
if (token.Type == ImapTokenType.CloseParen || token.Type == ImapTokenType.Eoln)
break;
if (token.Type != ImapTokenType.Atom)
throw ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, "FETCH", token);
var atom = (string) token.Value;
string format;
ulong value64;
uint value;
int idx;
switch (atom) {
case "INTERNALDATE":
token = engine.ReadToken (ic.CancellationToken);
switch (token.Type) {
case ImapTokenType.QString:
case ImapTokenType.Atom:
summary.InternalDate = ImapUtils.ParseInternalDate ((string) token.Value);
break;
case ImapTokenType.Nil:
summary.InternalDate = null;
break;
default:
throw ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);
}
summary.Fields |= MessageSummaryItems.InternalDate;
break;
case "RFC822.SIZE":
token = engine.ReadToken (ic.CancellationToken);
if (token.Type != ImapTokenType.Atom || !uint.TryParse ((string) token.Value, out value))
throw ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);
summary.Fields |= MessageSummaryItems.MessageSize;
summary.Size = value;
break;
case "BODYSTRUCTURE":
format = string.Format (ImapEngine.GenericItemSyntaxErrorFormat, "BODYSTRUCTURE", "{0}");
summary.Body = ImapUtils.ParseBody (engine, format, string.Empty, ic.CancellationToken);
summary.Fields |= MessageSummaryItems.BodyStructure;
break;
case "BODY":
token = engine.PeekToken (ic.CancellationToken);
if (token.Type == ImapTokenType.OpenBracket) {
// consume the '['
token = engine.ReadToken (ic.CancellationToken);
if (token.Type != ImapTokenType.OpenBracket)
throw ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);
// References and/or other headers were requested...
do {
token = engine.ReadToken (ic.CancellationToken);
if (token.Type == ImapTokenType.CloseBracket)
break;
if (token.Type == ImapTokenType.OpenParen) {
do {
token = engine.ReadToken (ic.CancellationToken);
if (token.Type == ImapTokenType.CloseParen)
break;
// the header field names will generally be atoms or qstrings but may also be literals
switch (token.Type) {
case ImapTokenType.Literal:
engine.ReadLiteral (ic.CancellationToken);
break;
case ImapTokenType.QString:
case ImapTokenType.Atom:
break;
default:
throw ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);
//.........这里部分代码省略.........
示例6: TestParseExampleEnvelopeRfc3501
public void TestParseExampleEnvelopeRfc3501 ()
{
const string text = "(\"Wed, 17 Jul 1996 02:23:25 -0700 (PDT)\" \"IMAP4rev1 WG mtg summary and minutes\" ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\")) ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\")) ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\")) ((NIL NIL \"imap\" \"cac.washington.edu\")) ((NIL NIL \"minutes\" \"CNRI.Reston.VA.US\") (\"John Klensin\" NIL \"KLENSIN\" \"MIT.EDU\")) NIL NIL \"<[email protected]>\")\r\n";
using (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {
using (var tokenizer = new ImapStream (memory, null, new NullProtocolLogger ())) {
using (var engine = new ImapEngine (null)) {
Envelope envelope;
engine.SetStream (tokenizer);
try {
envelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);
} catch (Exception ex) {
Assert.Fail ("Parsing ENVELOPE failed: {0}", ex);
return;
}
var token = engine.ReadToken (CancellationToken.None);
Assert.AreEqual (ImapTokenType.Eoln, token.Type, "Expected new-line, but got: {0}", token);
Assert.IsTrue (envelope.Date.HasValue, "Parsed ENVELOPE date is null.");
Assert.AreEqual ("Wed, 17 Jul 1996 02:23:25 -0700", DateUtils.FormatDate (envelope.Date.Value), "Date does not match.");
Assert.AreEqual ("IMAP4rev1 WG mtg summary and minutes", envelope.Subject, "Subject does not match.");
Assert.AreEqual (1, envelope.From.Count, "From counts do not match.");
Assert.AreEqual ("\"Terry Gray\" <[email protected]>", envelope.From.ToString (), "From does not match.");
Assert.AreEqual (1, envelope.Sender.Count, "Sender counts do not match.");
Assert.AreEqual ("\"Terry Gray\" <[email protected]>", envelope.Sender.ToString (), "Sender does not match.");
Assert.AreEqual (1, envelope.ReplyTo.Count, "Reply-To counts do not match.");
Assert.AreEqual ("\"Terry Gray\" <[email protected]>", envelope.ReplyTo.ToString (), "Reply-To does not match.");
Assert.AreEqual (1, envelope.To.Count, "To counts do not match.");
Assert.AreEqual ("[email protected]", envelope.To.ToString (), "To does not match.");
Assert.AreEqual (2, envelope.Cc.Count, "Cc counts do not match.");
Assert.AreEqual ("[email protected], \"John Klensin\" <[email protected]>", envelope.Cc.ToString (), "Cc does not match.");
Assert.AreEqual (0, envelope.Bcc.Count, "Bcc counts do not match.");
Assert.IsNull (envelope.InReplyTo, "In-Reply-To is not null.");
Assert.AreEqual ("[email protected]", envelope.MessageId, "Message-Id does not match.");
}
}
}
}
示例7: TestParseExampleThreads
public void TestParseExampleThreads ()
{
const string text = "(2)(3 6 (4 23)(44 7 96))\r\n";
using (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {
using (var tokenizer = new ImapStream (memory, null, new NullProtocolLogger ())) {
using (var engine = new ImapEngine (null)) {
IList<MessageThread> threads;
engine.SetStream (tokenizer);
try {
threads = ImapUtils.ParseThreads (engine, 0, CancellationToken.None);
} catch (Exception ex) {
Assert.Fail ("Parsing THREAD response failed: {0}", ex);
return;
}
var token = engine.ReadToken (CancellationToken.None);
Assert.AreEqual (ImapTokenType.Eoln, token.Type, "Expected new-line, but got: {0}", token);
Assert.AreEqual (2, threads.Count, "Expected 2 threads.");
Assert.AreEqual ((uint) 2, threads[0].UniqueId.Value.Id);
Assert.AreEqual ((uint) 3, threads[1].UniqueId.Value.Id);
var branches = threads[1].Children.ToArray ();
Assert.AreEqual (1, branches.Length, "Expected 1 child.");
Assert.AreEqual ((uint) 6, branches[0].UniqueId.Value.Id);
branches = branches[0].Children.ToArray ();
Assert.AreEqual (2, branches.Length, "Expected 2 branches.");
Assert.AreEqual ((uint) 4, branches[0].UniqueId.Value.Id);
Assert.AreEqual ((uint) 44, branches[1].UniqueId.Value.Id);
var children = branches[0].Children.ToArray ();
Assert.AreEqual (1, children.Length, "Expected 1 child.");
Assert.AreEqual ((uint) 23, children[0].UniqueId.Value.Id);
Assert.AreEqual (0, children[0].Children.Count (), "Expected no children.");
children = branches[1].Children.ToArray ();
Assert.AreEqual (1, children.Length, "Expected 1 child.");
Assert.AreEqual ((uint) 7, children[0].UniqueId.Value.Id);
children = children[0].Children.ToArray ();
Assert.AreEqual (1, children.Length, "Expected 1 child.");
Assert.AreEqual ((uint) 96, children[0].UniqueId.Value.Id);
Assert.AreEqual (0, children[0].Children.Count (), "Expected no children.");
}
}
}
}
示例8: ParseParameterList
static void ParseParameterList (StringBuilder builder, ImapEngine engine, CancellationToken cancellationToken)
{
ImapToken token;
do {
token = engine.PeekToken (cancellationToken);
if (token.Type == ImapTokenType.CloseParen)
break;
var name = ReadStringToken (engine, cancellationToken);
// Note: technically, the value should also be a 'string' token and not an 'nstring',
// but issue #124 reveals a server that is sending NIL for boundary values.
var value = ReadNStringToken (engine, false, cancellationToken) ?? string.Empty;
builder.Append ("; ").Append (name).Append ('=');
if (NeedsQuoting (value))
builder.Append (MimeUtils.Quote (value));
else
builder.Append (value);
} while (true);
// read the ')'
engine.ReadToken (cancellationToken);
}
示例9: ParseContentType
static bool ParseContentType (ImapEngine engine, CancellationToken cancellationToken, out ContentType contentType, out string value)
{
var type = ReadNStringToken (engine, false, cancellationToken) ?? string.Empty;
var token = engine.PeekToken (cancellationToken);
value = null;
if (engine.IsGMail && token.Type == ImapTokenType.OpenParen) {
// Note: GMail's IMAP server implementation breaks when it encounters
// nested multiparts with the same boundary and returns a BODYSTRUCTURE
// like the example in https://github.com/jstedfast/MailKit/issues/205
contentType = null;
value = type;
return false;
}
var subtype = ReadNStringToken (engine, false, cancellationToken) ?? string.Empty;
token = engine.ReadToken (cancellationToken);
if (token.Type == ImapTokenType.Nil) {
contentType = new ContentType (type, subtype);
return true;
}
if (token.Type != ImapTokenType.OpenParen)
throw ImapEngine.UnexpectedToken (token, false);
var builder = new StringBuilder ();
builder.AppendFormat ("{0}/{1}", type, subtype);
ParseParameterList (builder, engine, cancellationToken);
if (!ContentType.TryParse (builder.ToString (), out contentType))
contentType = new ContentType (type, subtype);
return true;
}
示例10: ReadNStringToken
static string ReadNStringToken (ImapEngine engine, bool rfc2047, CancellationToken cancellationToken)
{
var token = engine.ReadToken (cancellationToken);
string value;
switch (token.Type) {
case ImapTokenType.Literal:
value = engine.ReadLiteral (cancellationToken);
break;
case ImapTokenType.QString:
case ImapTokenType.Atom:
value = (string) token.Value;
break;
case ImapTokenType.Nil:
return null;
default:
throw ImapEngine.UnexpectedToken (token, false);
}
return rfc2047 ? Rfc2047.DecodeText (Latin1.GetBytes (value)) : value;
}
示例11: ReadNumber
static uint ReadNumber (ImapEngine engine, CancellationToken cancellationToken)
{
var token = engine.ReadToken (cancellationToken);
uint number;
if (token.Type != ImapTokenType.Atom || !uint.TryParse ((string) token.Value, out number))
throw ImapEngine.UnexpectedToken (token, false);
return number;
}
示例12: ParseFolderList
/// <summary>
/// Parses an untagged LIST or LSUB response.
/// </summary>
/// <param name="engine">The IMAP engine.</param>
/// <param name="ic">The IMAP command.</param>
/// <param name="index">The index.</param>
public static void ParseFolderList (ImapEngine engine, ImapCommand ic, int index)
{
var token = engine.ReadToken (ic.CancellationToken);
var list = (List<ImapFolder>) ic.UserData;
var attrs = FolderAttributes.None;
string encodedName;
ImapFolder folder;
char delim;
// parse the folder attributes list
if (token.Type != ImapTokenType.OpenParen)
throw ImapEngine.UnexpectedToken (token, false);
token = engine.ReadToken (ic.CancellationToken);
while (token.Type == ImapTokenType.Flag || token.Type == ImapTokenType.Atom) {
string atom = (string) token.Value;
switch (atom) {
case "\\NoInferiors": attrs |= FolderAttributes.NoInferiors; break;
case "\\Noselect": attrs |= FolderAttributes.NoSelect; break;
case "\\Marked": attrs |= FolderAttributes.Marked; break;
case "\\Unmarked": attrs |= FolderAttributes.Unmarked; break;
case "\\NonExistent": attrs |= FolderAttributes.NonExistent; break;
case "\\Subscribed": attrs |= FolderAttributes.Subscribed; break;
case "\\Remote": attrs |= FolderAttributes.Remote; break;
case "\\HasChildren": attrs |= FolderAttributes.HasChildren; break;
case "\\HasNoChildren": attrs |= FolderAttributes.HasNoChildren; break;
case "\\All": attrs |= FolderAttributes.All; break;
case "\\Archive": attrs |= FolderAttributes.Archive; break;
case "\\Drafts": attrs |= FolderAttributes.Drafts; break;
case "\\Flagged": attrs |= FolderAttributes.Flagged; break;
case "\\Junk": attrs |= FolderAttributes.Junk; break;
case "\\Sent": attrs |= FolderAttributes.Sent; break;
case "\\Trash": attrs |= FolderAttributes.Trash; break;
// XLIST flags:
case "\\AllMail": attrs |= FolderAttributes.All; break;
case "\\Important": attrs |= FolderAttributes.Flagged; break;
case "\\Inbox": attrs |= FolderAttributes.Inbox; break;
case "\\Spam": attrs |= FolderAttributes.Junk; break;
case "\\Starred": attrs |= FolderAttributes.Flagged; break;
}
token = engine.ReadToken (ic.CancellationToken);
}
if (token.Type != ImapTokenType.CloseParen)
throw ImapEngine.UnexpectedToken (token, false);
// parse the path delimeter
token = engine.ReadToken (ic.CancellationToken);
if (token.Type == ImapTokenType.QString) {
var qstring = (string) token.Value;
delim = qstring[0];
} else if (token.Type == ImapTokenType.Nil) {
delim = '\0';
} else {
throw ImapEngine.UnexpectedToken (token, false);
}
// parse the folder name
token = engine.ReadToken (ImapStream.StringSpecials, ic.CancellationToken);
switch (token.Type) {
case ImapTokenType.Literal:
encodedName = engine.ReadLiteral (ic.CancellationToken);
break;
case ImapTokenType.QString:
case ImapTokenType.Atom:
encodedName = (string) token.Value;
break;
default:
throw ImapEngine.UnexpectedToken (token, false);
}
if (IsInbox (encodedName))
attrs |= FolderAttributes.Inbox;
if (engine.GetCachedFolder (encodedName, out folder)) {
attrs |= (folder.Attributes & ~(FolderAttributes.Marked | FolderAttributes.Unmarked));
folder.UpdateAttributes (attrs);
} else {
folder = engine.CreateImapFolder (encodedName, attrs, delim);
engine.CacheFolder (folder);
}
list.Add (folder);
}
示例13: ParseImplementation
/// <summary>
/// Parses an untagged ID response.
/// </summary>
/// <param name="engine">The IMAP engine.</param>
/// <param name="ic">The IMAP command.</param>
/// <param name="index">The index.</param>
public static void ParseImplementation (ImapEngine engine, ImapCommand ic, int index)
{
var token = engine.ReadToken (ic.CancellationToken);
var implementation = new ImapImplementation ();
ic.UserData = implementation;
if (token.Type == ImapTokenType.Nil)
return;
if (token.Type != ImapTokenType.OpenParen)
throw ImapEngine.UnexpectedToken (token, false);
token = engine.PeekToken (ic.CancellationToken);
while (token.Type != ImapTokenType.CloseParen) {
var property = ImapUtils.ReadStringToken (engine, ic.CancellationToken);
var value = ImapUtils.ReadNStringToken (engine, false, ic.CancellationToken);
implementation.Properties[property] = value;
token = engine.PeekToken (ic.CancellationToken);
}
// read the ')' token
engine.ReadToken (ic.CancellationToken);
}
示例14: ParseThreads
/// <summary>
/// Parses the threads.
/// </summary>
/// <returns>The threads.</returns>
/// <param name="engine">The IMAP engine.</param>
/// <param name="uidValidity">The UIDVALIDITY of the folder.</param>
/// <param name="cancellationToken">The cancellation token.</param>
public static IList<MessageThread> ParseThreads (ImapEngine engine, uint uidValidity, CancellationToken cancellationToken)
{
var threads = new List<MessageThread> ();
ImapToken token;
do {
token = engine.PeekToken (cancellationToken);
if (token.Type == ImapTokenType.Eoln)
break;
token = engine.ReadToken (cancellationToken);
if (token.Type != ImapTokenType.OpenParen)
throw ImapEngine.UnexpectedToken (token, false);
threads.Add (ParseThread (engine, uidValidity, cancellationToken));
} while (true);
return threads;
}
示例15: TestParseLabelsListWithNIL
public void TestParseLabelsListWithNIL ()
{
const string text = "(atom-label \\flag-label \"quoted-label\" NIL)\r\n";
using (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {
using (var tokenizer = new ImapStream (memory, null, new NullProtocolLogger ())) {
using (var engine = new ImapEngine (null)) {
IList<string> labels;
engine.SetStream (tokenizer);
try {
labels = ImapUtils.ParseLabelsList (engine, CancellationToken.None);
} catch (Exception ex) {
Assert.Fail ("Parsing X-GM-LABELS failed: {0}", ex);
return;
}
var token = engine.ReadToken (CancellationToken.None);
Assert.AreEqual (ImapTokenType.Eoln, token.Type, "Expected new-line, but got: {0}", token);
}
}
}
}