private bool ZProcessNamespaceExtension(cBytesCursor pCursor) { while (true) { if (!pCursor.SkipByte(cASCII.SPACE)) { return(true); } if (!pCursor.GetString(out IList <byte> _) || !pCursor.SkipByte(cASCII.SPACE) || !pCursor.SkipByte(cASCII.LPAREN) || !pCursor.GetString(out IList <byte> _) ) { return(false); } while (true) { if (!pCursor.SkipByte(cASCII.SPACE)) { break; } if (!pCursor.GetString(out IList <byte> _)) { return(false); } } if (!pCursor.SkipByte(cASCII.RPAREN)) { return(false); } } }
private bool ZProcessData(cBytesCursor pCursor, out List <cNamespaceName> rNames, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cNamespaceDataProcessor), nameof(ZProcessData)); if (pCursor.SkipBytes(cBytesCursor.Nil)) { rNames = null; return(true); } if (!pCursor.SkipByte(cASCII.LPAREN)) { rNames = null; return(false); } rNames = new List <cNamespaceName>(); while (true) { if (!pCursor.SkipByte(cASCII.LPAREN) || !pCursor.GetString(out IList <byte> lEncodedPrefix) || !pCursor.SkipByte(cASCII.SPACE) || !pCursor.GetMailboxDelimiter(out var lDelimiter) || !ZProcessNamespaceExtension(pCursor) || !pCursor.SkipByte(cASCII.RPAREN) ) { rNames = null; return(false); } if (!cNamespaceName.TryConstruct(lEncodedPrefix, lDelimiter, mUTF8Enabled, out var lNamespaceName)) { rNames = null; return(false); } rNames.Add(lNamespaceName); if (pCursor.SkipByte(cASCII.RPAREN)) { return(true); } } }
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); }