public ImapToken(ImapTokenType type, object value = null) { Value = value; Type = type; //System.Console.WriteLine ("token: {0}", this); }
public static ImapToken Create(ImapTokenType type, char c) { switch (type) { case ImapTokenType.Asterisk: return(Asterisk); case ImapTokenType.OpenParen: return(OpenParen); case ImapTokenType.CloseParen: return(CloseParen); case ImapTokenType.OpenBracket: return(OpenBracket); case ImapTokenType.CloseBracket: return(CloseBracket); case ImapTokenType.Eoln: return(Eoln); } return(new ImapToken(type, c)); }
void UpdateCapabilities(ImapTokenType sentinel, CancellationToken cancellationToken) { ProtocolVersion = ImapProtocolVersion.Unknown; Capabilities = ImapCapabilities.None; AuthenticationMechanisms.Clear (); CompressionAlgorithms.Clear (); ThreadingAlgorithms.Clear (); SupportedContexts.Clear (); CapabilitiesVersion++; var token = stream.ReadToken (cancellationToken); while (token.Type == ImapTokenType.Atom) { var atom = (string) token.Value; if (atom.StartsWith ("AUTH=", StringComparison.Ordinal)) { AuthenticationMechanisms.Add (atom.Substring ("AUTH=".Length)); } else if (atom.StartsWith ("COMPRESS=", StringComparison.Ordinal)) { CompressionAlgorithms.Add (atom.Substring ("COMPRESS=".Length)); Capabilities |= ImapCapabilities.Compress; } else if (atom.StartsWith ("CONTEXT=", StringComparison.Ordinal)) { SupportedContexts.Add (atom.Substring ("CONTEXT=".Length)); Capabilities |= ImapCapabilities.Context; } else if (atom.StartsWith ("THREAD=", StringComparison.Ordinal)) { var algorithm = atom.Substring ("THREAD=".Length); switch (algorithm) { case "ORDEREDSUBJECT": ThreadingAlgorithms.Add (ThreadingAlgorithm.OrderedSubject); break; case "REFERENCES": ThreadingAlgorithms.Add (ThreadingAlgorithm.References); break; } Capabilities |= ImapCapabilities.Thread; } else { switch (atom.ToUpperInvariant ()) { case "IMAP4": Capabilities |= ImapCapabilities.IMAP4; break; case "IMAP4REV1": Capabilities |= ImapCapabilities.IMAP4rev1; break; case "STATUS": Capabilities |= ImapCapabilities.Status; break; case "QUOTA": Capabilities |= ImapCapabilities.Quota; break; case "LITERAL+": Capabilities |= ImapCapabilities.LiteralPlus; break; case "IDLE": Capabilities |= ImapCapabilities.Idle; break; case "NAMESPACE": Capabilities |= ImapCapabilities.Namespace; break; case "CHILDREN": Capabilities |= ImapCapabilities.Children; break; case "LOGINDISABLED": Capabilities |= ImapCapabilities.LoginDisabled; break; case "STARTTLS": Capabilities |= ImapCapabilities.StartTLS; break; case "MULTIAPPEND": Capabilities |= ImapCapabilities.MultiAppend; break; case "BINARY": Capabilities |= ImapCapabilities.Binary; break; case "UNSELECT": Capabilities |= ImapCapabilities.Unselect; break; case "UIDPLUS": Capabilities |= ImapCapabilities.UidPlus; break; case "CATENATE": Capabilities |= ImapCapabilities.Catenate; break; case "CONDSTORE": Capabilities |= ImapCapabilities.CondStore; break; case "ESEARCH": Capabilities |= ImapCapabilities.ESearch; break; case "SASL-IR": Capabilities |= ImapCapabilities.SaslIR; break; case "WITHIN": Capabilities |= ImapCapabilities.Within; break; case "ENABLE": Capabilities |= ImapCapabilities.Enable; break; case "QRESYNC": Capabilities |= ImapCapabilities.QuickResync; break; case "SORT": Capabilities |= ImapCapabilities.Sort; break; case "LIST-EXTENDED": Capabilities |= ImapCapabilities.ListExtended; break; case "CONVERT": Capabilities |= ImapCapabilities.Convert; break; case "ESORT": Capabilities |= ImapCapabilities.ESort; break; case "METADATA": Capabilities |= ImapCapabilities.Metadata; break; case "NOTIFY": Capabilities |= ImapCapabilities.Notify; break; case "LIST-STATUS": Capabilities |= ImapCapabilities.ListStatus; break; case "SPECIAL-USE": Capabilities |= ImapCapabilities.SpecialUse; break; case "MULTISEARCH": Capabilities |= ImapCapabilities.MultiSearch; break; case "MOVE": Capabilities |= ImapCapabilities.Move; break; case "XLIST": Capabilities |= ImapCapabilities.XList; break; case "X-GM-EXT-1": Capabilities |= ImapCapabilities.GMailExt1; break; } } token = stream.ReadToken (cancellationToken); } if (token.Type != sentinel) { Debug.WriteLine ("Expected '{0}' at the end of the CAPABILITIES, but got: {1}", sentinel, token); throw UnexpectedToken (token, false); } // unget the sentinel stream.UngetToken (token); if ((Capabilities & ImapCapabilities.IMAP4rev1) != 0) { ProtocolVersion = ImapProtocolVersion.Imap4rev1; Capabilities |= ImapCapabilities.Status; } else if ((Capabilities & ImapCapabilities.IMAP4) != 0) { ProtocolVersion = ImapProtocolVersion.Imap4; } if ((Capabilities & ImapCapabilities.QuickResync) != 0) Capabilities |= ImapCapabilities.CondStore; }
public static ImapToken Create(ImapTokenType type, string value) { return(new ImapToken(type, value)); }
public static ImapToken Create(ImapTokenType type, ByteArrayBuilder builder) { string value; if (type == ImapTokenType.Flag) { foreach (var token in CommonMessageFlagTokens) { value = (string)token.Value; if (builder.Equals(value, true)) { return(token); } } } else if (builder.Equals("NIL", true)) { foreach (var token in NilTokens) { value = (string)token.Value; if (builder.Equals(value)) { return(token); } } var nil = new ImapToken(ImapTokenType.Nil, builder.ToString()); NilTokens.Add(nil); return(nil); } else { if (builder.Equals("FETCH", false)) { return(Fetch); } if (builder.Equals("BODY", false)) { return(Body); } if (builder.Equals("BODYSTRUCTURE", false)) { return(BodyStructure); } if (builder.Equals("ENVELOPE", false)) { return(Envelope); } if (builder.Equals("FLAGS", false)) { return(Flags); } if (builder.Equals("INTERNALDATE", false)) { return(InternalDate); } if (builder.Equals("MODSEQ", false)) { return(ModSeq); } if (builder.Equals("RFC822.SIZE", false)) { return(Rfc822Size); } if (builder.Equals("UID", false)) { return(Uid); } if (builder.Equals("X-GM-LABELS", false)) { return(XGMLabels); } if (builder.Equals("X-GM-MSGID", false)) { return(XGMMsgId); } if (builder.Equals("X-GM-THRID", false)) { return(XGMThrId); } } value = builder.ToString(); return(new ImapToken(type, value)); }
public static ImapToken Create(ImapTokenType type, int literalLength) { return(new ImapToken(type, literalLength)); }