public override void ProcessTextCode(eResponseTextContext pTextContext, cByteList pCode, cByteList pArguments, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandHookInitial), nameof(ProcessTextCode), pTextContext, pCode, pArguments); if (pTextContext == eResponseTextContext.greetingok || pTextContext == eResponseTextContext.greetingpreauth || pTextContext == eResponseTextContext.success) { if (pCode.Equals(kCapability)) { if (pArguments != null) { cBytesCursor lCursor = new cBytesCursor(pArguments); if (lCursor.ProcessCapability(out var lCapabilities, out var lAuthenticationMechanisms, lContext) && lCursor.Position.AtEnd) { lContext.TraceVerbose("received capabilities: {0} {1}", lCapabilities, lAuthenticationMechanisms); Capabilities = lCapabilities; AuthenticationMechanisms = lAuthenticationMechanisms; return; } } lContext.TraceWarning("likely malformed capability response"); } } }
public override void ProcessTextCode(eResponseTextContext pTextContext, cByteList pCode, cByteList pArguments, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandHookStore), nameof(ProcessTextCode), pTextContext, pCode, pArguments); if (pTextContext == eResponseTextContext.success || pTextContext == eResponseTextContext.failure) { if (pCode.Equals(kModified)) { if (pArguments != null) { cBytesCursor lCursor = new cBytesCursor(pArguments); if (lCursor.GetSequenceSet(out var lSequenceSet) && lCursor.Position.AtEnd && cUIntList.TryConstruct(lSequenceSet, mSelectedMailbox.MessageCache.Count, true, out var lUInts)) { foreach (var lUInt in lUInts) { if (!mFeedbackCollector.WasNotUnchangedSince(lUInt)) { lContext.TraceWarning("likely malformed modified response: message number not recognised: ", lUInt); return; } } return; } } lContext.TraceWarning("likely malformed modified response"); } } }
public override void ProcessTextCode(eResponseTextContext pTextContext, cByteList pCode, cByteList pArguments, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandHookCopy), nameof(ProcessTextCode), pTextContext, pCode, pArguments); if (pTextContext == eResponseTextContext.success && pCode.Equals(kCopyUID)) { if (pArguments != null) { cBytesCursor lCursor = new cBytesCursor(pArguments); if (lCursor.GetNZNumber(out _, out var lDestinationUIDValidity) && lCursor.SkipByte(cASCII.SPACE) && lCursor.GetSequenceSet(out var lSourceUIDSet) && lCursor.SkipByte(cASCII.SPACE) && lCursor.GetSequenceSet(out var lCreatedUIDSet) && lCursor.Position.AtEnd && cUIntList.TryConstruct(lSourceUIDSet, -1, false, out var lSourceUIDs) && cUIntList.TryConstruct(lCreatedUIDSet, -1, false, out var lCreatedUIDs) && lSourceUIDs.Count == lCreatedUIDs.Count) { Feedback = new cCopyFeedback(mSourceUIDValidity, lSourceUIDs, lDestinationUIDValidity, lCreatedUIDs); return; } } lContext.TraceWarning("likely malformed copyuid response"); } }
public override void ProcessTextCode(eResponseTextContext pTextContext, cByteList pCode, cByteList pArguments, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandHookSelect), nameof(ProcessTextCode), pTextContext, pCode, pArguments); if (mMailboxCache.SelectedMailboxDetails == null) { if (pTextContext == eResponseTextContext.information && pCode.Equals(kNoModSeq) && pArguments == null) { mHighestModSeq = 0; } else if (pTextContext == eResponseTextContext.warning && pCode.Equals(kUIDNotSticky) && pArguments == null) { mUIDNotSticky = true; } } else { // the spec (rfc 7162) doesn't specify where this comes - although the only example is of an untagged OK if (pCode.Equals(kClosed) && pArguments == null) { mMailboxCache.Unselect(lContext); } } }
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); }