diff options
author | Mattes D <github@xoft.cz> | 2013-10-07 22:19:14 +0200 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2013-10-07 22:19:14 +0200 |
commit | e3ba3b8f97f8dd2a4e6dc7ec17f61a2d576fe346 (patch) | |
tree | 47b7c978eb2dfdb3771b1edf907482ade9eb1d34 /source/HTTPServer/EnvelopeParser.h | |
parent | Fixed startup timings on server restart. (diff) | |
parent | Fixed memory leaks in the HTTP framework (diff) | |
download | cuberite-e3ba3b8f97f8dd2a4e6dc7ec17f61a2d576fe346.tar cuberite-e3ba3b8f97f8dd2a4e6dc7ec17f61a2d576fe346.tar.gz cuberite-e3ba3b8f97f8dd2a4e6dc7ec17f61a2d576fe346.tar.bz2 cuberite-e3ba3b8f97f8dd2a4e6dc7ec17f61a2d576fe346.tar.lz cuberite-e3ba3b8f97f8dd2a4e6dc7ec17f61a2d576fe346.tar.xz cuberite-e3ba3b8f97f8dd2a4e6dc7ec17f61a2d576fe346.tar.zst cuberite-e3ba3b8f97f8dd2a4e6dc7ec17f61a2d576fe346.zip |
Diffstat (limited to 'source/HTTPServer/EnvelopeParser.h')
-rw-r--r-- | source/HTTPServer/EnvelopeParser.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/source/HTTPServer/EnvelopeParser.h b/source/HTTPServer/EnvelopeParser.h new file mode 100644 index 000000000..6430fbebf --- /dev/null +++ b/source/HTTPServer/EnvelopeParser.h @@ -0,0 +1,69 @@ + +// EnvelopeParser.h + +// Declares the cEnvelopeParser class representing a parser for RFC-822 envelope headers, used both in HTTP and in MIME + + + + + +#pragma once + + + + + +class cEnvelopeParser +{ +public: + class cCallbacks + { + public: + /// Called when a full header line is parsed + virtual void OnHeaderLine(const AString & a_Key, const AString & a_Value) = 0; + } ; + + + cEnvelopeParser(cCallbacks & a_Callbacks); + + /** Parses the incoming data. + Returns the number of bytes consumed from the input. The bytes not consumed are not part of the envelope header + */ + int Parse(const char * a_Data, int a_Size); + + /// Makes the parser forget everything parsed so far, so that it can be reused for parsing another datastream + void Reset(void); + + /// Returns true if more input is expected for the envelope header + bool IsInHeaders(void) const { return m_IsInHeaders; } + + /// Sets the IsInHeaders flag; used by cMultipartParser to simplify the parser initial conditions + void SetIsInHeaders(bool a_IsInHeaders) { m_IsInHeaders = a_IsInHeaders; } + +public: + /// Callbacks to call for the various events + cCallbacks & m_Callbacks; + + /// Set to true while the parser is still parsing the envelope headers. Once set to true, the parser will not consume any more data. + bool m_IsInHeaders; + + /// Buffer for the incoming data until it is parsed + AString m_IncomingData; + + /// Holds the last parsed key; used for line-wrapped values + AString m_LastKey; + + /// Holds the last parsed value; used for line-wrapped values + AString m_LastValue; + + + /// Notifies the callback of the key/value stored in m_LastKey/m_LastValue, then erases them + void NotifyLast(void); + + /// Parses one line of header data. Returns true if successful + bool ParseLine(const char * a_Data, size_t a_Size); +} ; + + + + |