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")); }
internal static ImapStatusDataItem GetStatusDataItem(ImapCapabilityList serverCapabilities) { if (serverCapabilities.Has(ImapCapability.CondStore)) return ImapStatusDataItem.StandardAll + ImapStatusDataItem.HighestModSeq; else return ImapStatusDataItem.StandardAll; }
/* * 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 }
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; }