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.
147 lines
3.9 KiB
147 lines
3.9 KiB
//
|
|
// Microsoft Corporation - Copyright 1997
|
|
//
|
|
|
|
//
|
|
// TEXTPARS.CPP - Parses text/plain submissions
|
|
//
|
|
|
|
#include "pch.h"
|
|
|
|
//
|
|
// Constructor / Destructor
|
|
//
|
|
CTextPlainParse::CTextPlainParse(
|
|
LPECB lpEcb,
|
|
LPSTR *lppszOut,
|
|
LPSTR *lpszDebug,
|
|
LPDUMPTABLE lpDT )
|
|
:CBase( lpEcb, lppszOut, lpszDebug, lpDT )
|
|
{
|
|
DebugMsg( lpszOut, g_cszTableHeader, "<BR>\
|
|
(NOTE: To turn on detailed debugging information, add '?debug' to the end of action URL in the orginating HTML file.)\
|
|
<br>\
|
|
<H2>Text/Plain Form Data (METHOD=POST, ENCTYPE=TEXT/PLAIN)</H2>\
|
|
",
|
|
"TBLMULTIFORM" );
|
|
|
|
} // CTextPlainParse( )
|
|
|
|
CTextPlainParse::~CTextPlainParse( )
|
|
{
|
|
|
|
} // ~CTextPlainParse( )
|
|
|
|
CTextPlainParse::Parse( LPBYTE lpbData, LPDWORD lpdwParsed )
|
|
{
|
|
BOOL fReturn = TRUE;
|
|
|
|
TraceMsg( TF_FUNC | TF_PARSE, "Parse()" );
|
|
|
|
_lpbParse = _lpbData = lpbData;
|
|
|
|
while ( (DWORD)(_lpbParse - _lpbData) < lpEcb->cbTotalBytes )
|
|
{
|
|
LPSTR lpszName = NULL; // points to the "name" field
|
|
LPSTR lpszValue = NULL; // points to the "value" field
|
|
LPSTR lpszEqual = NULL; // points to the "=" sign
|
|
CHAR cTmp;
|
|
|
|
lpszName = (LPSTR) _lpbParse;
|
|
|
|
while (( *_lpbParse != '='
|
|
&& (DWORD)(_lpbParse - _lpbData) < lpEcb->cbTotalBytes ))
|
|
_lpbParse++;
|
|
|
|
if ( *_lpbParse != '=' )
|
|
{
|
|
DebugMsg( lpszDebug, "Expected to find an '=' after %u (0x%x) bytes.",
|
|
(LPBYTE)lpszName - _lpbData, (LPBYTE)lpszName - _lpbData );
|
|
fReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
lpszEqual = (LPSTR) _lpbParse;
|
|
*lpszEqual = 0; // terminate (save)
|
|
|
|
_lpbParse++; // move past
|
|
|
|
lpszValue = (LPSTR) _lpbParse;
|
|
|
|
while (( *_lpbParse != '\r'
|
|
&& *_lpbParse != '\n'
|
|
&& (DWORD)(_lpbParse - _lpbData) < lpEcb->cbTotalBytes ))
|
|
_lpbParse++;
|
|
|
|
if (( *_lpbParse != '\r' ) && ( *_lpbParse != '\n' ))
|
|
{
|
|
DebugMsg( lpszDebug, "Expected to find a CR, LF, CRLF or LFCR after %u (0x%x) bytes.",
|
|
(LPBYTE)lpszValue - _lpbData, (LPBYTE)lpszValue - _lpbData );
|
|
fReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
cTmp = *_lpbParse; // save
|
|
*_lpbParse = 0; // terminate
|
|
|
|
DebugMsg( lpszOut, "<TR ID=TR%s><TD ID=TD%s>%s</TD><TD ID=%s>%s</TD></TR>",
|
|
lpszName, lpszName, lpszName, lpszName, lpszValue );
|
|
|
|
*_lpbParse = cTmp; // restore
|
|
*lpszEqual = '='; // restore
|
|
|
|
_lpbParse++; // move past
|
|
|
|
// A possible combination of CR, LF, CRLF or LFCR are acceptable.
|
|
if (( *_lpbParse = '\r' ) || ( *_lpbParse = '\n' ))
|
|
{
|
|
_lpbParse++; // move past
|
|
}
|
|
}
|
|
|
|
DebugMsg( lpszDebug, "Parsed %u (0x%x) bytes.", ( _lpbParse - _lpbData ), ( _lpbParse - _lpbData ) );
|
|
|
|
Cleanup:
|
|
// End table output
|
|
StrCat( lpszOut, g_cszTableEnd );
|
|
|
|
*lpdwParsed = _lpbParse - _lpbData;
|
|
|
|
// indicates EOTable, this will be an empty table for text/plain
|
|
lpDT[ 0 ].lpAddr = NULL;
|
|
|
|
TraceMsg( TF_FUNC | TF_PARSE, "Parse() Exit = %s",
|
|
BOOLTOSTRING( fReturn ) );
|
|
return fReturn;
|
|
} // Parse()
|
|
|
|
/*****************************************************************************
|
|
//
|
|
// FUNCTION TEMPLATE
|
|
//
|
|
// ***************************************************************************
|
|
//
|
|
// What:
|
|
//
|
|
// Desc:
|
|
//
|
|
// In:
|
|
//
|
|
// Out:
|
|
//
|
|
// Return:
|
|
//
|
|
BOOL CTextPlainParse::( )
|
|
{
|
|
BOOL fReturn = TRUE;
|
|
|
|
TraceMsg( TF_FUNC | TF_PARSE, "()" );
|
|
|
|
|
|
TraceMsg( TF_FUNC | TF_PARSE, "() Exit = %s",
|
|
BOOLTOSTRING( fReturn ) );
|
|
return fReturn;
|
|
|
|
} // ( )
|
|
|
|
******************************************************************************/
|