Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name :
parse.hxx
Abstract:
Simple parser class for extrapolating HTTP headers information
Author: John Ludeman (JohnL) 18-Jan-1995
Project: HTTP server
Revision History:
--*/
# ifndef _PARSE_HXX_
# define _PARSE_HXX_
//
// Simple class for parsing all those lovely "Field: value\r\n" protocols
// Token and copy functions stop at the terminating '\n' and '\r' is
// considered white space. All methods except NextLine() stop at the end
// of the line.
//
class INET_PARSER { public:
dllexp INET_PARSER( CHAR * pszStart );
//
// Be careful about destruction. The Parser will attempt to restore any
// modifications to the string it is parsing
//
dllexp ~INET_PARSER( VOID );
//
// Returns the current position in the buffer w/o any terminators
//
dllexp CHAR * QueryPos( VOID );
//
// Returns the current zero terminated token. If list mode is on, then
// ',' is considered a delimiter.
//
dllexp CHAR * QueryToken( VOID );
//
// Returns the current zero terminated line
//
dllexp CHAR * QueryLine( VOID );
//
// Skips to the first token after the next '\n'
//
dllexp CHAR * NextLine( VOID );
//
// Returns the next non-white string after the current string with a
// zero terminator. The end of the token is '\n' or white space
//
dllexp CHAR * NextToken( VOID );
//
// Returns the next non-white string after the current string with a
// zero terminator. The end of the token is '\n', white space or ch.
//
dllexp CHAR * NextToken( CHAR ch );
//
// Move position cch characters into the current token. Automatically
// moves to next non-white space character
//
dllexp VOID operator+=( int cch ) { if ( cch ) while ( cch-- && *m_pszPos ) m_pszPos++; EatWhite(); }
//
// Look for the character ch, stops at '\r' or '\n'
//
dllexp CHAR * SkipTo( CHAR ch );
//
// If list mode is on, then commas and semi-colons are considered
// delimiters, otherwise only white space is considered
//
dllexp VOID SetListMode( BOOL fListMode );
//
// Sets the current pointer to passed position
//
dllexp VOID SetPtr( CHAR * pch );
//
// Returns the next semi-colon delimited parameter in the character
// stream as a zero terminated, white space trimmed string
//
dllexp CHAR * NextParam( VOID ) { return NextToken( ';' ); }
//
// Returns the next comma delmited item in the character stream as
// a zero terminated, white space trimmed string
//
dllexp CHAR * NextItem( VOID ) { return NextToken( ',' ); }
//
// Copies from the current position to the first white space character
// (or \r or \n). If fAdvance is TRUE, the position is automatically
// moved to the next token.
//
dllexp BOOL CopyToken( STR * pstr, BOOL fAdvanceToken = FALSE );
//
// Copies from the current parse position to the first of a \r or \n and
// trims any white space
//
dllexp BOOL CopyToEOL( STR * pstr, BOOL fAdvanceLine = FALSE );
//
// Same as CopyToEOL except the data is appended to pstr
//
dllexp BOOL AppendToEOL( STR * pstr, BOOL fAdvanceLine = FALSE );
//
// Moves the current parse position to the first white or non-white
// character after the current position
//
dllexp CHAR * EatWhite( VOID ) { return m_pszPos = AuxEatWhite(); }
dllexp CHAR * EatNonWhite( VOID ) { return m_pszPos = AuxEatNonWhite(); }
//
// Undoes any temporary terminators in the string
//
dllexp VOID RestoreBuffer( VOID ) { RestoreToken(); RestoreLine(); }
protected:
dllexp CHAR * AuxEatWhite( VOID ); dllexp CHAR * AuxEatNonWhite( CHAR ch = '\0' ); dllexp CHAR * AuxSkipTo( CHAR ch );
dllexp VOID TerminateToken( CHAR ch = '\0' ); dllexp VOID RestoreToken( VOID );
dllexp VOID TerminateLine( VOID ); dllexp VOID RestoreLine( VOID );
private:
//
// Current position in parse buffer
//
CHAR * m_pszPos;
//
// If we have to temporarily zero terminate a token or line these
// members contain the information
//
CHAR * m_pszTokenTerm; CHAR m_chTokenTerm;
CHAR * m_pszLineTerm; CHAR m_chLineTerm;
BOOL m_fListMode; };
# endif // _PARSE_HXX_
|