Example #1
0
        public ImapToken(ImapTokenType type, object value = null)
        {
            Value = value;
            Type = type;

            //System.Console.WriteLine ("token: {0}", this);
        }
Example #2
0
        public ImapToken(ImapTokenType type, object value = null)
        {
            Value = value;
            Type  = type;

            //System.Console.WriteLine ("token: {0}", this);
        }
Example #3
0
        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));
        }
Example #4
0
        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;
        }
Example #5
0
 public static ImapToken Create(ImapTokenType type, string value)
 {
     return(new ImapToken(type, value));
 }
Example #6
0
        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));
        }
Example #7
0
 public static ImapToken Create(ImapTokenType type, int literalLength)
 {
     return(new ImapToken(type, literalLength));
 }