예제 #1
0
        public void TestHas()
        {
            var list = new ImapCapabilityList(new[] {
            ImapCapability.LiteralNonSync,
            ImapCapability.Binary,
            new ImapCapability("AUTH=CRAM-MD5"),
            new ImapCapability("AUTH=PLAIN"),
              });

              Assert.IsTrue(list.Has(ImapCapability.LiteralNonSync));
              Assert.IsTrue(list.Has("LITERAL+"));
              Assert.IsTrue(list.Has("literal+"));

              Assert.IsTrue(list.Has("AUTH=CRAM-MD5"));
              Assert.IsTrue(list.Has(new ImapCapability("auth=cram-md5")));

              Assert.IsFalse(list.Has(ImapCapability.Imap4Rev1));
              Assert.IsFalse(list.Has("imap4rev1"));
              Assert.IsFalse(list.Has(new ImapCapability("auth=login")));
              Assert.IsFalse(list.Has("auth=login"));
        }
예제 #2
0
 internal static ImapStatusDataItem GetStatusDataItem(ImapCapabilityList serverCapabilities)
 {
     if (serverCapabilities.Has(ImapCapability.CondStore))
     return ImapStatusDataItem.StandardAll + ImapStatusDataItem.HighestModSeq;
       else
     return ImapStatusDataItem.StandardAll;
 }
예제 #3
0
        /*
         * methods for internal state management
         */
        internal void SetServerCapabilities(ImapCapabilityList newCapabilities)
        {
            serverCapabilities = new ImapCapabilityList(true, newCapabilities);

            #if false
              defaultLiteralSynchronizationMode = serverCapabilities.Has(ImapCapability.LiteralNonSync)
            ? ImapLiteralOptions.NonSynchronizing
            : ImapLiteralOptions.Synchronizing;
            #endif
        }
예제 #4
0
        private ImapSearchCriteria GetSearchCriteria(ImapCapabilityList serverCapabilities, bool splitCharset, out string charset)
        {
            if (ImapStyleUriParser.GetUriForm(requestUri) != ImapUriForm.SearchMessages)
            throw new InvalidOperationException("request URI does not include query");

              /*
               * http://tools.ietf.org/html/rfc5092
               * RFC 5092 - IMAP URL Scheme
               *
               *    Note that quoted strings and non-synchronizing literals [LITERAL+]
               *    are allowed in the <enc-search> content; however, synchronizing
               *    literals are not allowed, as their presence would effectively mean
               *    that the agent interpreting IMAP URLs needs to parse an <enc-search>
               *    content, find all synchronizing literals, and perform proper command
               *    continuation request handling (see Sections 4.3 and 7 of [IMAP4]).
               */
              charset = null;

              bool containsLiteral;

              var ret = ImapSearchCriteria.FromUri(requestUri, splitCharset, out containsLiteral, out charset);

              if (!serverCapabilities.Has(ImapCapability.LiteralNonSync) && containsLiteral)
            throw new ImapIncapableException("query contains literal but LITERAL+ is incapable.");

              return ret;
        }