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.
 
 
 
 
 
 

131 lines
3.7 KiB

//
// Microsoft Corporation - Copyright 1997
//
//
// MULTPARS.H - Multipart parser (CMultipartParse) header
//
// Turn this on to compile a file saving version
// #define FILE_SAVE
#ifndef _MULTPARS_H_
#define _MULTPARS_H_
enum LEXICON {
LEX_UNKNOWN,
LEX_SPACE,
LEX_CRLF,
LEX_BEGIN_COMMENT,
LEX_END_COMMENT,
LEX_QUOTE,
LEX_SEMICOLON,
LEX_SLASH,
// Body keywords
LEX_CONTENTDISP,
LEX_CONTENTTYPE,
// Field IDs
LEX_NAMEFIELD,
LEX_FILENAMEFIELD,
// MIME types
LEX_MULTIPART,
LEX_TEXT,
LEX_APPLICATION,
LEX_AUDIO,
LEX_IMAGE,
LEX_MESSAGE,
LEX_VIDEO,
LEX_MIMEEXTENSION,
// MIME subtypes
LEX_FORMDATA,
LEX_ATTACHMENT,
LEX_MIXED,
LEX_PLAIN,
LEX_XMSDOWNLOAD,
LEX_OCTETSTREAM,
LEX_BINARY,
// Boundary
LEX_BOUNDARY, // "CR/LF" ended boundary string
LEX_EOT, // double-dashed ended boundary string
LEX_STARTBOUNDARY // boundary string missing first CR/LF
};
typedef struct {
LPSTR lpszName; // token name
LEXICON eLex; // token value
DWORD cLength; // length of lpszName, filled in at runtime,
// should be ZERO in table def
DWORD dwColor; // debugging color to be used
LPSTR lpszComment; // debugging comment to be displayed
} PARSETABLE, *LPPARSETABLE;
typedef struct {
LEXICON eContentDisposition;
LPSTR lpszNameField;
LPSTR lpszFilenameField;
LPSTR lpszBodyContents;
DWORD dwContentType;
DWORD dwContentSubtype;
} BODYHEADERINFO, *LPBODYHEADERINFO;
#define LPBHI LPBODYHEADERINFO
class CMultipartParse : public CBase
{
public:
CMultipartParse( LPECB lpEcb, LPSTR *lppszOut, LPSTR *lppszDebug, LPDUMPTABLE lpDT );
~CMultipartParse( );
// Starts parsing data using infomation from server headers
BOOL PreParse( LPBYTE lpbData, LPDWORD lpdwParsed );
private:
LPBYTE _lpbData; // Memory containing send data
LPBYTE _lpbParse; // Current parse location into _lpbData
LPBYTE _lpbLastParse; // Last location of Lex parsing
LPSTR _lpszBoundary; // Boundary string
DWORD _cbBoundary; // Boundary string length
// Debugging Data dump
DWORD _cbDT; // Counter
// Lex
LEXICON Lex( ); // finds next Lex
BOOL BackupLex( LEXICON dwLex ); // moves back one Lex
LPSTR FindTokenName( LEXICON dwLex ); // finds Lex's name
BOOL GetToken( ); // moves post a token of valid
// header characters
// states
BOOL ParseBody( ); // initial state
BOOL BodyHeader( );
BOOL ContentDisposition( LPBODYHEADERINFO lpBHI );
BOOL ContentType( LPBODYHEADERINFO lpBHI );
BOOL BodyContent( LPBODYHEADERINFO lpBHI );
// utilities
BOOL GetBoundaryString( LPBYTE lpbData );
BOOL GetQuotedString( LPSTR *lppszBuf );
BOOL HandleComments( );
#ifndef FILE_SAVE
BOOL MemoryCompare( LPBYTE lpbSrc1, LPBYTE lpbSrc2, DWORD dwSize );
#endif
BOOL FindNextBoundary( LPDWORD lpdwSize );
// files
BOOL HandleFile( LPSTR lpszFilename );
#ifndef FILE_SAVE
BOOL FileCompare( LPBYTE lpbStart, LPSTR lpszFilename, DWORD dwSize );
#else // FILE_SAVE
BOOL FileSave( LPBYTE lpbStart, LPSTR lpszFilename, DWORD dwSize );
#endif // FILE_SAVE
BOOL FixFilename( LPSTR lpszFilename, LPSTR *lppszNewFilename );
CMultipartParse( );
}; // CMultipartParse
#endif // _MULTPARS_H_