public void ProcessTextCode(eResponseTextContext pTextContext, cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cSelectedMailbox), nameof(ProcessTextCode), pTextContext, pData); switch (pData) { case cResponseDataPermanentFlags lPermanentFlags: mMailboxCacheItem.SetPermanentFlags(mSelectedForUpdate, lPermanentFlags.Flags, lContext); return; case cResponseDataUIDValidity lUIDValidity: mCache = new cSelectedMailboxCache(mCache, lUIDValidity.UIDValidity, lContext); return; case cResponseDataAccess lAccess: if (lAccess.ReadOnly != mAccessReadOnly) { mAccessReadOnly = lAccess.ReadOnly; mSynchroniser.InvokeMailboxPropertiesChanged(mMailboxCacheItem, fMailboxProperties.isaccessreadonly, lContext); } return; } mCache.ProcessTextCode(pTextContext, pData, lContext); }
public override eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandHookFetchBody), nameof(ProcessData)); if (!(pData is cResponseDataFetch lFetch)) { return(eProcessDataResult.notprocessed); } if (lFetch.Flags == null) { return(eProcessDataResult.notprocessed); } uint lUInt; if (mFeedbackCollector.KeyType == cStoreFeedbackCollector.eKeyType.uid) { if (lFetch.UID == null) { return(eProcessDataResult.notprocessed); } lUInt = lFetch.UID.Value; } else { lUInt = lFetch.MSN; } if (mFeedbackCollector.ReceivedFlagsUpdate(lUInt)) { return(eProcessDataResult.observed); } return(eProcessDataResult.notprocessed); }
public override eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandHookSelect), nameof(ProcessData)); if (mMailboxCache.SelectedMailboxDetails != null) { return(eProcessDataResult.notprocessed); } switch (pData) { case cResponseDataFlags lFlags: mFlags = lFlags.Flags; return(eProcessDataResult.processed); case cResponseDataExists lExists: mExists = lExists.Exists; return(eProcessDataResult.processed); case cResponseDataRecent lRecent: mRecent = lRecent.Recent; return(eProcessDataResult.processed); } return(eProcessDataResult.notprocessed); }
public eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cMailboxCache), nameof(ProcessData)); if (mSelectedMailbox != null) { var lResult = mSelectedMailbox.ProcessData(pData, lContext); if (lResult != eProcessDataResult.notprocessed) { return(lResult); } } switch (pData) { case cResponseDataListMailbox lListMailbox: ZProcessListMailbox(lListMailbox, lContext); return(eProcessDataResult.observed); case cResponseDataLSub lLSub: ZProcessLSub(lLSub, lContext); return(eProcessDataResult.observed); default: return(eProcessDataResult.notprocessed); } }
public bool Process(cBytesCursor pCursor, out cResponseData rResponseData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cResponseDataParserLSub), nameof(Process)); if (!pCursor.SkipBytes(kLSubSpace)) { rResponseData = null; return(false); } if (!pCursor.GetFlags(out var lFlags) || !pCursor.SkipByte(cASCII.SPACE) || !pCursor.GetMailboxDelimiter(out var lDelimiter) || !pCursor.SkipByte(cASCII.SPACE) || !pCursor.GetAString(out IList <byte> lEncodedMailboxPath) || !pCursor.Position.AtEnd || !cMailboxName.TryConstruct(lEncodedMailboxPath, lDelimiter, mUTF8Enabled, out var lMailboxName)) { lContext.TraceWarning("likely malformed lsub response"); rResponseData = null; return(true); } rResponseData = new cResponseDataLSub(lMailboxName, !lFlags.Contains(@"\Noselect", StringComparer.InvariantCultureIgnoreCase)); return(true); }
public void ProcessTextCode(eResponseTextContext pTextContext, cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cMailboxCache), nameof(ProcessTextCode), pTextContext, pData); if (mSelectedMailbox != null) { mSelectedMailbox.ProcessTextCode(pTextContext, pData, lContext); } }
public void ProcessTextCode(eResponseTextContext pTextContext, cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cActiveCommands), nameof(ProcessTextCode), pTextContext, pData); foreach (var lCommand in this) { lCommand.Hook.ProcessTextCode(pTextContext, pData, lContext); } }
public override eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cListDelimiterCommandHook), nameof(ProcessData)); if (!(pData is cResponseDataListDelimiter lListDelimiter)) { return(eProcessDataResult.notprocessed); } Delimiter = lListDelimiter.Delimiter; return(eProcessDataResult.observed); }
public eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cSelectedMailbox), nameof(ProcessData)); if (pData is cResponseDataFlags lFlags) { mMailboxCacheItem.SetMessageFlags(lFlags.Flags, lContext); return(eProcessDataResult.processed); } return(mCache.ProcessData(pData, lContext)); }
public override eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cLogoutCommandHook), nameof(ProcessData)); if (pData is cResponseDataBye lBye) { GotBye = true; return(eProcessDataResult.processed); } return(eProcessDataResult.notprocessed); }
public void ProcessTextCode(eResponseTextContext pTextContext, cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cSelectedMailboxCache), nameof(ProcessTextCode), pTextContext, pData); if (pData is cResponseDataUIDNext lUIDNext) { ZUIDNext(lUIDNext.UIDNext, lContext); } else if (pTextContext == eResponseTextContext.success && pData is cResponseDataHighestModSeq lHighestModSeq) { ZHighestModSeq(lHighestModSeq.HighestModSeq, lContext); } }
public override eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cListExtendedCommandHook), nameof(ProcessData)); if (!(pData is cResponseDataListMailbox lListMailbox)) { return(eProcessDataResult.notprocessed); } if (!mPattern.Matches(lListMailbox.MailboxName.Path)) { return(eProcessDataResult.notprocessed); } switch (mSelect) { case eListExtendedSelect.exists: // if it is non-existent it may be being reported because it has children if ((lListMailbox.Flags & fListFlags.nonexistent) == 0 || (lListMailbox.Flags & fListFlags.subscribed) == 0 || (lListMailbox.Flags & fListFlags.haschildren) != 0) { mMailboxes.Add(lListMailbox.MailboxName); return(eProcessDataResult.observed); } return(eProcessDataResult.notprocessed); case eListExtendedSelect.subscribed: if ((lListMailbox.Flags & fListFlags.subscribed) != 0) { mMailboxes.Add(lListMailbox.MailboxName); return(eProcessDataResult.observed); } return(eProcessDataResult.notprocessed); case eListExtendedSelect.subscribedrecursive: if ((lListMailbox.Flags & fListFlags.subscribed) != 0 || lListMailbox.HasSubscribedChildren) { mMailboxes.Add(lListMailbox.MailboxName); return(eProcessDataResult.observed); } return(eProcessDataResult.notprocessed); default: throw new cInternalErrorException(lContext); } }
} = null; // note that this body may start before the origin position requested and may be longer or shorter than requested public override eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandHookFetchBody), nameof(ProcessData)); if (!(pData is cResponseDataFetch lFetch)) { return(eProcessDataResult.notprocessed); } if (!IsThisTheMessageThatIAmInterestedIn(lFetch)) { return(eProcessDataResult.notprocessed); } eProcessDataResult lResult = eProcessDataResult.notprocessed; foreach (var lBody in lFetch.Bodies) { uint lOrigin = (lBody.Origin ?? 0); if (lBody.Binary == mBinary && lBody.Section == mSection && lOrigin <= mOrigin) { if (lBody.Bytes == null) { // this is the case where NIL is returned by the server (e.g. * 1 FETCH (BODY[] NIL)) // most likely because the message has been expunged if (lOrigin >= mOrigin) { lResult = eProcessDataResult.observed; } } else { uint lTo = lOrigin + (uint)lBody.Bytes.Count; if (lTo >= mOrigin) { lResult = eProcessDataResult.observed; if (Body == null || lTo > mTo) { Body = lBody; mTo = lTo; } } } } } return(lResult); }
public override eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandHookListMailboxes), nameof(ProcessData)); if (!(pData is cResponseDataListMailbox lListMailbox)) { return(eProcessDataResult.notprocessed); } if (!mPattern.Matches(lListMailbox.MailboxName.Path)) { return(eProcessDataResult.notprocessed); } mMailboxes.Add(lListMailbox.MailboxName); return(eProcessDataResult.observed); }
public bool Process(cBytesCursor pCursor, out cResponseData rResponseData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cResponseDataParserSelect), nameof(Process)); if (pCursor.SkipBytes(kFlagsSpace)) { if (pCursor.GetFlags(out var lRawFlags) && pCursor.Position.AtEnd && cFetchableFlags.TryConstruct(lRawFlags, out var lFlags)) { rResponseData = new cResponseDataFlags(lFlags); } else { lContext.TraceWarning("likely malformed flags response"); rResponseData = null; } return(true); }
public override eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandHookLSub), nameof(ProcessData)); if (!(pData is cResponseDataLSub lLSub)) { return(eProcessDataResult.notprocessed); } if (!mPattern.Matches(lLSub.MailboxName.Path)) { return(eProcessDataResult.notprocessed); } if (lLSub.Subscribed) { mMailboxes.Add(lLSub.MailboxName); } else if (mHasSubscribedChildren) { mMailboxes.Add(lLSub.MailboxName); } return(eProcessDataResult.observed); }
public eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cSelectedMailboxCache), nameof(ProcessData)); switch (pData) { case cResponseDataFetch lFetch: ZFetch(lFetch, lContext); return(eProcessDataResult.observed); case cResponseDataExists lExists: ZExists(lExists.Exists, lContext); return(eProcessDataResult.processed); case cResponseDataRecent lRecent: ZRecent(lRecent.Recent, lContext); return(eProcessDataResult.processed); } return(eProcessDataResult.notprocessed); }
public override eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandHookBaseSearchExtended), nameof(ProcessData)); if (!(pData is cResponseDataESearch lESearch)) { return(eProcessDataResult.notprocessed); } if (!cASCII.Compare(mCommandTag, lESearch.Tag, true)) { return(eProcessDataResult.notprocessed); } if (mSequenceSets == null) { mSequenceSets = new cSequenceSets(); } if (lESearch.SequenceSet != null) { mSequenceSets.Add(lESearch.SequenceSet); } return(eProcessDataResult.processed); }
public bool Process(cBytesCursor pCursor, out cResponseData rResponseData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cResponseDataParserList), nameof(Process)); if (!pCursor.SkipBytes(kListSpace)) { rResponseData = null; return(false); } if (!pCursor.GetFlags(out var lFlags) || !pCursor.SkipByte(cASCII.SPACE) || !pCursor.GetMailboxDelimiter(out var lDelimiter) || !pCursor.SkipByte(cASCII.SPACE) || !pCursor.GetAString(out IList <byte> lEncodedMailboxPath) || !ZProcessExtendedItems(pCursor, out var lExtendedItems) || !pCursor.Position.AtEnd) { lContext.TraceWarning("likely malformed list response"); rResponseData = null; return(true); } if (lEncodedMailboxPath.Count == 0) { if (lFlags.Count == 0 && lExtendedItems.Count == 0) { if (lDelimiter == null) { rResponseData = new cResponseDataListDelimiter(); } else { rResponseData = new cResponseDataListDelimiter((char)lDelimiter.Value); } } else { lContext.TraceWarning("likely malformed list delimiter response"); rResponseData = null; } } else { if (cMailboxName.TryConstruct(lEncodedMailboxPath, lDelimiter, mUTF8Enabled, out var lMailboxName)) { fListFlags lListFlags = 0; if (lFlags.Contains(@"\Noinferiors", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.noinferiors | fListFlags.hasnochildren; } if (lFlags.Contains(@"\Noselect", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.noselect; } if (lFlags.Contains(@"\Marked", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.marked; } if (lFlags.Contains(@"\Unmarked", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.unmarked; } if (lFlags.Contains(@"\NonExistent", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.noselect | fListFlags.nonexistent; } if (lFlags.Contains(@"\Subscribed", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.subscribed; } if (lFlags.Contains(@"\Remote", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.remote; } if (lFlags.Contains(@"\HasChildren", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.haschildren; } if (lFlags.Contains(@"\HasNoChildren", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.hasnochildren; } if (lFlags.Contains(@"\All", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.all; } if (lFlags.Contains(@"\Archive", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.archive; } if (lFlags.Contains(@"\Drafts", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.drafts; } if (lFlags.Contains(@"\Flagged", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.flagged; } if (lFlags.Contains(@"\Junk", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.junk; } if (lFlags.Contains(@"\Sent", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.sent; } if (lFlags.Contains(@"\Trash", StringComparer.InvariantCultureIgnoreCase)) { lListFlags |= fListFlags.trash; } bool lHasSubscribedChildren = false; foreach (var lItem in lExtendedItems) { if (lItem.Tag.Equals("childinfo", StringComparison.InvariantCultureIgnoreCase) && lItem.Value.Contains("subscribed", StringComparison.InvariantCultureIgnoreCase)) { lHasSubscribedChildren = true; break; } } rResponseData = new cResponseDataListMailbox(lMailboxName, lListFlags, lHasSubscribedChildren); } else { lContext.TraceWarning("likely malformed list mailbox response"); rResponseData = null; } } return(true); }
public virtual void ProcessTextCode(eResponseTextContext pTextContext, cResponseData pData, cTrace.cContext pParentContext) { }
public bool Process(cByteList pCode, cByteList pArguments, out cResponseData rResponseData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cResponseTextCodeParserSelect), nameof(Process)); if (pCode.Equals(kPermanentFlags)) { if (pArguments != null) { cBytesCursor lCursor = new cBytesCursor(pArguments); if (lCursor.GetFlags(out var lRawFlags) && lCursor.Position.AtEnd && cPermanentFlags.TryConstruct(lRawFlags, out var lFlags)) { rResponseData = new cResponseDataPermanentFlags(lFlags); return(true); } } lContext.TraceWarning("likely malformed permanentflags"); rResponseData = null; return(false); } if (pCode.Equals(kUIDNext)) { if (pArguments != null) { cBytesCursor lCursor = new cBytesCursor(pArguments); if (lCursor.GetNZNumber(out _, out var lNumber) && lCursor.Position.AtEnd) { rResponseData = new cResponseDataUIDNext(lNumber); return(true); } } lContext.TraceWarning("likely malformed uidnext"); rResponseData = null; return(false); } if (pCode.Equals(kUIDValidity)) { if (pArguments != null) { cBytesCursor lCursor = new cBytesCursor(pArguments); if (lCursor.GetNZNumber(out _, out var lNumber) && lCursor.Position.AtEnd) { rResponseData = new cResponseDataUIDValidity(lNumber); return(true); } } lContext.TraceWarning("likely malformed uidvalidity"); rResponseData = null; return(false); } if (mCapabilities.CondStore) { if (pCode.Equals(kHighestModSeq)) { if (pArguments != null) { cBytesCursor lCursor = new cBytesCursor(pArguments); if (lCursor.GetNZNumber(out _, out var lNumber) && lCursor.Position.AtEnd) { rResponseData = new cResponseDataHighestModSeq(lNumber); return(true); } } lContext.TraceWarning("likely malformed highestmodseq"); rResponseData = null; return(false); } } if (pCode.Equals(kReadWrite) && pArguments == null) { rResponseData = new cResponseDataAccess(false); return(true); } if (pCode.Equals(kReadOnly) && pArguments == null) { rResponseData = new cResponseDataAccess(true); return(true); } rResponseData = null; return(false); }
public virtual eProcessDataResult ProcessData(cResponseData pData, cTrace.cContext pParentContext) => eProcessDataResult.notprocessed;
public override void ProcessTextCode(eResponseTextContext pTextContext, cResponseData pData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandHookSelect), nameof(ProcessTextCode), pTextContext, pData); if (mMailboxCache.SelectedMailboxDetails != null) { return; } if (pTextContext == eResponseTextContext.information) { switch (pData) { case cResponseDataPermanentFlags lFlags: mPermanentFlags = lFlags.Flags; return; case cResponseDataUIDNext lUIDNext: mUIDNext = lUIDNext.UIDNext; return; case cResponseDataUIDValidity lUIDValidity: mUIDValidity = lUIDValidity.UIDValidity; return; case cResponseDataHighestModSeq lHighestModSeq: mHighestModSeq = lHighestModSeq.HighestModSeq; return; } } else if (pTextContext == eResponseTextContext.success && pData is cResponseDataAccess lAccess) { mAccessReadOnly = lAccess.ReadOnly; } }
public bool Process(cBytesCursor pCursor, out cResponseData rResponseData, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cResponseDataParserESearch), nameof(Process)); if (!pCursor.SkipBytes(kESearch)) { rResponseData = null; return(false); } if (pCursor.Position.AtEnd) { rResponseData = new cResponseDataESearch(null, false, null); return(true); } bool lSetParsedAs = false; // just in case there is another response that starts with the string "ESEARCH" IList <byte> lTag; if (pCursor.SkipBytes(kSpaceLParenTAGSpace)) { if (!pCursor.GetString(out lTag) || !pCursor.SkipByte(cASCII.RPAREN)) { rResponseData = null; return(true); } lSetParsedAs = true; } else { lTag = null; } bool lUID; if (pCursor.SkipBytes(kSpaceUID)) { lUID = true; lSetParsedAs = true; } else { lUID = false; } cSequenceSet lSequenceSet = null; while (true) { if (!pCursor.SkipByte(cASCII.SPACE)) { break; } lSetParsedAs = true; if (!pCursor.GetToken(cCharset.Atom, null, null, out cByteList lName) || !pCursor.SkipByte(cASCII.SPACE) || !pCursor.ProcessExtendedValue(out var lValue) ) { rResponseData = null; return(true); } if (cASCII.Compare(lName, kAll, false) && lValue is cExtendedValue.cSequenceSetEV lSequenceSetEV) { lSequenceSet = lSequenceSetEV.SequenceSet; } } if (!pCursor.Position.AtEnd) { rResponseData = null; return(lSetParsedAs); } rResponseData = new cResponseDataESearch(lTag, lUID, lSequenceSet); return(true); }