// (note for when adding more: they need to be disposed) public cSession(cCallbackSynchroniser pSynchroniser, fCapabilities pIgnoreCapabilities, fMailboxCacheDataItems pMailboxCacheDataItems, cBatchSizerConfiguration pNetworkWriteConfiguration, cIdleConfiguration pIdleConfiguration, cBatchSizerConfiguration pFetchCacheItemsConfiguration, cBatchSizerConfiguration pFetchBodyReadConfiguration, Encoding pEncoding, cTrace.cContext pParentContext) { var lContext = pParentContext.NewObject(nameof(cSession), pIgnoreCapabilities, pMailboxCacheDataItems, pNetworkWriteConfiguration, pIdleConfiguration, pFetchCacheItemsConfiguration, pFetchBodyReadConfiguration); mSynchroniser = pSynchroniser ?? throw new ArgumentNullException(nameof(pSynchroniser)); mIgnoreCapabilities = pIgnoreCapabilities; mMailboxCacheDataItems = pMailboxCacheDataItems; mPipeline = new cCommandPipeline(pSynchroniser, ZDisconnected, pNetworkWriteConfiguration, pIdleConfiguration, lContext); mFetchCacheItemsSizer = new cBatchSizer(pFetchCacheItemsConfiguration); mFetchBodyReadSizer = new cBatchSizer(pFetchBodyReadConfiguration); mCommandPartFactory = new cCommandPartFactory(false, null); if (pEncoding == null) { mEncodingPartFactory = mCommandPartFactory; } else { mEncodingPartFactory = new cCommandPartFactory(false, pEncoding); } }
internal cCapabilities(cStrings pCapabilities, cStrings pAuthenticationMechanisms, fCapabilities pIgnoreCapabilities) { Capabilities = pCapabilities ?? throw new ArgumentNullException(nameof(pCapabilities)); AuthenticationMechanisms = pAuthenticationMechanisms ?? throw new ArgumentNullException(nameof(pAuthenticationMechanisms)); fCapabilities lCapabilities = 0; if (pCapabilities.Contains("LoginDisabled", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.logindisabled; } if (pCapabilities.Contains("StartTLS", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.starttls; } if (pCapabilities.Contains("Idle", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.idle; } if (pCapabilities.Contains("Literal+", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.literalplus; } if (pCapabilities.Contains("Literal-", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.literalminus; } if (pCapabilities.Contains("Enable", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.enable; } if (pCapabilities.Contains("UTF8=Accept", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.utf8accept; } if (pCapabilities.Contains("UTF8=Only", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.utf8only; } if (pCapabilities.Contains("List-Extended", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.listextended; } if (pCapabilities.Contains("Children", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.children; } if (pCapabilities.Contains("SASL-IR", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.sasl_ir; } if (pCapabilities.Contains("Login-Referrals", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.loginreferrals; } if (pCapabilities.Contains("Mailbox-Referrals", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.mailboxreferrals; } if (pCapabilities.Contains("Id", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.id; } if (pCapabilities.Contains("Binary", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.binary; } if (pCapabilities.Contains("Namespace", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.namespaces; } if (pCapabilities.Contains("List-Status", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.liststatus; } if (pCapabilities.Contains("Special-Use", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.specialuse; } if (pCapabilities.Contains("ESearch", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.esearch; } if (pCapabilities.Contains("Sort", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.sort; } if (pCapabilities.Contains("Sort=Display", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.sortdisplay; } if (pCapabilities.Contains("ESort", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.esort; } //if (pCapabilities.Contains("Thread=OrderedSubject", StringComparer.InvariantCultureIgnoreCase)) lCapabilities |= fCapabilities.threadorderedsubject; //if (pCapabilities.Contains("Thread=References", StringComparer.InvariantCultureIgnoreCase)) lCapabilities |= fCapabilities.threadreferences; if (pCapabilities.Contains("CondStore", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.condstore; } if (pCapabilities.Contains("QResync", StringComparer.InvariantCultureIgnoreCase)) { lCapabilities |= fCapabilities.qresync | fCapabilities.condstore; } EffectiveCapabilities = lCapabilities & ~pIgnoreCapabilities; }
private async void cmdConnect_Click(object sender, EventArgs e) { if (!ValidateChildren(ValidationConstraints.Enabled)) { return; } try { mClient.SetServer(txtHost.Text.Trim(), int.Parse(txtPort.Text), chkSSL.Checked); if (rdoCredNone.Checked) { mClient.SetNoCredentials(); } else { eTLSRequirement lTLSRequirement; if (rdoTLSIndifferent.Checked) { lTLSRequirement = eTLSRequirement.indifferent; } else if (rdoTLSRequired.Checked) { lTLSRequirement = eTLSRequirement.required; } else { lTLSRequirement = eTLSRequirement.disallowed; } if (rdoCredAnon.Checked) { mClient.SetAnonymousCredentials(txtTrace.Text.Trim(), lTLSRequirement, chkTryIfNotAdvertised.Checked); } else { mClient.SetPlainCredentials(txtUserId.Text.Trim(), txtPassword.Text.Trim(), lTLSRequirement, chkTryIfNotAdvertised.Checked); } } fMailboxCacheDataItems lMailboxCacheData = 0; if (chkCacheSubscribed.Checked) { lMailboxCacheData |= fMailboxCacheDataItems.subscribed; } if (chkCacheChildren.Checked) { lMailboxCacheData |= fMailboxCacheDataItems.children; } if (chkCacheSpecialUse.Checked) { lMailboxCacheData |= fMailboxCacheDataItems.specialuse; } if (chkCacheMessageCount.Checked) { lMailboxCacheData |= fMailboxCacheDataItems.messagecount; } if (chkCacheRecentCount.Checked) { lMailboxCacheData |= fMailboxCacheDataItems.recentcount; } if (chkCacheUIDNext.Checked) { lMailboxCacheData |= fMailboxCacheDataItems.uidnext; } if (chkCacheUIDValidity.Checked) { lMailboxCacheData |= fMailboxCacheDataItems.uidvalidity; } if (chkCacheUnseenCount.Checked) { lMailboxCacheData |= fMailboxCacheDataItems.unseencount; } if (chkCacheHighestModSeq.Checked) { lMailboxCacheData |= fMailboxCacheDataItems.highestmodseq; } mClient.MailboxCacheDataItems = lMailboxCacheData; fCapabilities lKnownCapabilities = 0; if (chkIgnoreStartTLS.Checked) { lKnownCapabilities |= fCapabilities.starttls; } if (chkIgnoreEnable.Checked) { lKnownCapabilities |= fCapabilities.enable; } if (chkIgnoreUTF8.Checked) { lKnownCapabilities |= fCapabilities.utf8accept | fCapabilities.utf8only; } if (chkIgnoreId.Checked) { lKnownCapabilities |= fCapabilities.id; } if (chkIgnoreNamespace.Checked) { lKnownCapabilities |= fCapabilities.namespaces; } if (chkIgnoreMailboxReferrals.Checked) { lKnownCapabilities |= fCapabilities.mailboxreferrals; } if (chkIgnoreListExtended.Checked) { lKnownCapabilities |= fCapabilities.listextended; } if (chkIgnoreListStatus.Checked) { lKnownCapabilities |= fCapabilities.liststatus; } if (chkIgnoreSpecialUse.Checked) { lKnownCapabilities |= fCapabilities.specialuse; } if (chkIgnoreCondStore.Checked) { lKnownCapabilities |= fCapabilities.condstore; } if (chkIgnoreQResync.Checked) { lKnownCapabilities |= fCapabilities.qresync; } if (chkIgnoreLiteralPlus.Checked) { lKnownCapabilities |= fCapabilities.literalplus | fCapabilities.literalminus; } if (chkIgnoreBinary.Checked) { lKnownCapabilities |= fCapabilities.binary; } if (chkIgnoreIdle.Checked) { lKnownCapabilities |= fCapabilities.idle; } if (chkIgnoreSASLIR.Checked) { lKnownCapabilities |= fCapabilities.sasl_ir; } if (chkIgnoreESearch.Checked) { lKnownCapabilities |= fCapabilities.esearch; } if (chkIgnoreSort.Checked) { lKnownCapabilities |= fCapabilities.sort; } if (chkIgnoreSortDisplay.Checked) { lKnownCapabilities |= fCapabilities.sortdisplay; } //if (chkIgnoreThreadOrderedSubject.Checked) lKnownCapabilities |= fCapabilities.threadorderedsubject; //if (chkIgnoreThreadReferences.Checked) lKnownCapabilities |= fCapabilities.threadreferences; if (chkIgnoreESort.Checked) { lKnownCapabilities |= fCapabilities.esort; } mClient.IgnoreCapabilities = lKnownCapabilities; mClient.MailboxReferrals = chkMailboxReferrals.Checked; mClient.NetworkWriteConfiguration = new cBatchSizerConfiguration(int.Parse(txtNWMin.Text), int.Parse(txtNWMax.Text), int.Parse(txtNWMaxTime.Text), int.Parse(txtNWInitial.Text)); await mClient.ConnectAsync(); } catch (Exception ex) { if (!IsDisposed) { MessageBox.Show(this, $"Connect error\n{ex}"); } } }
public async Task <List <iMailboxHandle> > ListExtendedAsync(cMethodControl pMC, eListExtendedSelect pSelect, bool pRemote, string pListMailbox, char?pDelimiter, cMailboxPathPattern pPattern, bool pStatus, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cSession), nameof(ListExtendedAsync), pMC, pSelect, pRemote, pListMailbox, pDelimiter, pPattern, pStatus); // caller needs to determine if list status is supported if (mDisposed) { throw new ObjectDisposedException(nameof(cSession)); } if (_ConnectionState != eConnectionState.notselected && _ConnectionState != eConnectionState.selected) { throw new InvalidOperationException(kInvalidOperationExceptionMessage.NotConnected); } if (pListMailbox == null) { throw new ArgumentNullException(nameof(pListMailbox)); } if (pPattern == null) { throw new ArgumentNullException(nameof(pPattern)); } if (!mCommandPartFactory.TryAsListMailbox(pListMailbox, pDelimiter, out var lListMailboxCommandPart)) { throw new ArgumentOutOfRangeException(nameof(pListMailbox)); } using (var lBuilder = new cCommandDetailsBuilder()) { if (!_Capabilities.QResync) { lBuilder.Add(await mSelectExclusiveAccess.GetBlockAsync(pMC, lContext).ConfigureAwait(false)); // block select if mailbox-data delivered during the command would be ambiguous } lBuilder.Add(await mMSNUnsafeBlock.GetBlockAsync(pMC, lContext).ConfigureAwait(false)); // this command is msnunsafe lBuilder.BeginList(eListBracketing.none); lBuilder.Add(kListExtendedCommandPartList); lBuilder.BeginList(eListBracketing.ifany); if (pSelect == eListExtendedSelect.subscribed) { lBuilder.Add(kListExtendedCommandPartSubscribed); } else if (pSelect == eListExtendedSelect.subscribedrecursive) { lBuilder.Add(kListExtendedCommandPartSubscribed); lBuilder.Add(kListExtendedCommandPartRecursiveMatch); } if (pRemote) { lBuilder.Add(kListExtendedCommandPartRemote); } lBuilder.EndList(); lBuilder.Add(kListExtendedCommandPartMailbox); lBuilder.Add(lListMailboxCommandPart); // return options lBuilder.BeginList(eListBracketing.ifany, kListExtendedCommandPartReturnSpace); if ((mMailboxCacheDataItems & fMailboxCacheDataItems.subscribed) != 0) { lBuilder.Add(kListExtendedCommandPartSubscribed); } if ((mMailboxCacheDataItems & fMailboxCacheDataItems.children) != 0) { lBuilder.Add(kListExtendedCommandPartChildren); } if ((mMailboxCacheDataItems & fMailboxCacheDataItems.specialuse) != 0 && _Capabilities.SpecialUse) { lBuilder.Add(kListExtendedCommandPartSpecialUse); } if (pStatus) { lBuilder.Add(kListExtendedCommandPartStatus); lBuilder.AddStatusAttributes(mStatusAttributes); } lBuilder.EndList(); lBuilder.EndList(); var lHook = new cListExtendedCommandHook(mMailboxCache, pSelect, pPattern, pStatus); lBuilder.Add(lHook); var lResult = await mPipeline.ExecuteAsync(pMC, lBuilder.EmitCommandDetails(), lContext).ConfigureAwait(false); if (lResult.ResultType == eCommandResultType.ok) { lContext.TraceInformation("listextended success"); return(lHook.MailboxHandles); } fCapabilities lTryIgnoring = 0; if ((mMailboxCacheDataItems & fMailboxCacheDataItems.specialuse) != 0 && _Capabilities.SpecialUse) { lTryIgnoring |= fCapabilities.specialuse; } if (pStatus) { lTryIgnoring |= fCapabilities.liststatus; } if (lTryIgnoring == 0) { lTryIgnoring |= fCapabilities.listextended; } if (lResult.ResultType == eCommandResultType.no) { throw new cUnsuccessfulCompletionException(lResult.ResponseText, lTryIgnoring, lContext); } throw new cProtocolErrorException(lResult, lTryIgnoring, lContext); } }
internal cUnsuccessfulCompletionException(cResponseText pResponseText, fCapabilities pTryIgnoring, cTrace.cContext pContext) { ResponseText = pResponseText; TryIgnoring = pTryIgnoring; pContext.TraceError("{0}: {1}", nameof(cUnsuccessfulCompletionException), pResponseText); }
internal cUnexpectedServerActionException(fCapabilities pTryIgnoring, string pMessage, cTrace.cContext pContext) : base(pMessage) { TryIgnoring = pTryIgnoring; pContext.TraceError("{0}: {1}", nameof(cUnexpectedServerActionException), pMessage); }
internal cUnexpectedServerActionException(string pMessage) : base(pMessage) { TryIgnoring = 0; }
internal cProtocolErrorException(cCommandResult pCommandResult, fCapabilities pTryIgnoring, cTrace.cContext pContext) { CommandResult = pCommandResult; TryIgnoring = pTryIgnoring; pContext.TraceError("{0}: {1}", nameof(cProtocolErrorException), pCommandResult); }