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.
 
 
 
 
 
 

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;
} // ( )
******************************************************************************/