From 302bf1b523012e11b60425d6eee1221ebc2724eb Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Sun, 3 Nov 2019 00:17:46 -0400 Subject: Issue #1258 - Part 1: Import mailnews, ldap, and mork from comm-esr52.9.1 --- mailnews/imap/src/nsIMAPGenericParser.h | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 mailnews/imap/src/nsIMAPGenericParser.h (limited to 'mailnews/imap/src/nsIMAPGenericParser.h') diff --git a/mailnews/imap/src/nsIMAPGenericParser.h b/mailnews/imap/src/nsIMAPGenericParser.h new file mode 100644 index 000000000..34f66e4ff --- /dev/null +++ b/mailnews/imap/src/nsIMAPGenericParser.h @@ -0,0 +1,76 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* +nsIMAPGenericParser is the base parser class used by the server parser and body shell parser +*/ + +#ifndef nsIMAPGenericParser_H +#define nsIMAPGenericParser_H + +#include "nsImapCore.h" + +#define WHITESPACE " \015\012" // token delimiter + + +class nsIMAPGenericParser +{ + +public: + nsIMAPGenericParser(); + virtual ~nsIMAPGenericParser(); + + // Add any specific stuff in the derived class + virtual bool LastCommandSuccessful(); + + bool SyntaxError() { return (fParserState & stateSyntaxErrorFlag) != 0; } + bool ContinueParse() { return fParserState == stateOK; } + bool Connected() { return !(fParserState & stateDisconnectedFlag); } + void SetConnected(bool error); + +protected: + + // This is a pure virtual member which must be overridden in the derived class + // for each different implementation of a nsIMAPGenericParser. + // For instance, one implementation (the nsIMAPServerState) might get the next line + // from an open socket, whereas another implementation might just get it from a buffer somewhere. + // This fills in nextLine with the buffer, and returns true if everything is OK. + // Returns false if there was some error encountered. In that case, we reset the parser. + virtual bool GetNextLineForParser(char **nextLine) = 0; + + virtual void HandleMemoryFailure(); + void skip_to_CRLF(); + void skip_to_close_paren(); + char *CreateString(); + char *CreateAstring(); + char *CreateNilString(); + char *CreateLiteral(); + char *CreateAtom(bool isAstring = false); + char *CreateQuoted(bool skipToEnd = true); + char *CreateParenGroup(); + virtual void SetSyntaxError(bool error, const char *msg); + + void AdvanceToNextToken(); + void AdvanceToNextLine(); + void AdvanceTokenizerStartingPoint(int32_t bytesToAdvance); + void ResetLexAnalyzer(); + +protected: + // use with care + const char *fNextToken; + char *fCurrentLine; + char *fLineOfTokens; + char *fStartOfLineOfTokens; + char *fCurrentTokenPlaceHolder; + bool fAtEndOfLine; + +private: + enum nsIMAPGenericParserState { stateOK = 0, + stateSyntaxErrorFlag = 0x1, + stateDisconnectedFlag = 0x2 }; + uint32_t fParserState; +}; + +#endif -- cgit v1.2.3