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.
 
 
 
 
 
 

125 lines
4.2 KiB

//-----------------------------------------------------------------------------
//
//
// File: dsnconv.h
//
// Description: Base classes for DSN resource conversion
//
// Author: Mike Swafford (MikeSwa)
//
// History:
// 10/21/98 - MikeSwa Created
//
// Copyright (C) 1998 Microsoft Corporation
//
//-----------------------------------------------------------------------------
#ifndef __DSNCONV_H__
#define __DSNCONV_H__
//---[ CResourceConversionContext ]----------------------------------------------
//
//
// Description:
// Class used to abstract the various types of content conversion we
// may be forced to do to support charsets other than US-ASCII.
// Hungarian:
// resconv, presconv
//
//-----------------------------------------------------------------------------
class CResourceConversionContext
{
public:
//Used to convert a UNICODE/ASCII resource to DSN body text
//This additional abstraction (UNICODE vs ASCII)
//is require for supporting potential additions like without messing with
//the mainline buffer code
// - guaranteed line length
// - handling special ASCII characters in RFC822 headers
// - Provides single code path for all buffer writes
virtual BOOL fConvertBuffer(
IN BOOL fASCII,
IN PBYTE pbInputBuffer,
IN DWORD cbInputBuffer,
IN PBYTE pbOutputBuffer,
IN DWORD cbOutputBuffer,
OUT DWORD *pcbWritten,
OUT DWORD *pcbRead) = 0;
};
//---[ CDefaultResourceConversionContext ]-------------------------------------
//
//
// Description:
// Default resource conversion object... simple memcpy for base case
// Hungarian:
// defconv, pdefconv
//
//-----------------------------------------------------------------------------
class CDefaultResourceConversionContext : public CResourceConversionContext
{
public:
BOOL fConvertBuffer(
IN BOOL fASCII,
IN PBYTE pbInputBuffer,
IN DWORD cbInputBuffer,
IN PBYTE pbOutputBuffer,
IN DWORD cbOutputBuffer,
OUT DWORD *pcbWritten,
OUT DWORD *pcbRead);
};
//---[ CDefaultResourceConversionContext::fConvertBuffer ]----------------------
//
//
// Description:
// Default Resource conversion for DSNs
// Parameters:
// IN fASCII TRUE if buffer is ASCII
// (*must* be TRUE for default)
// IN pbInputBuffer Pointer to UNICODE string buffer
// IN cbInputBuffer Size (in bytes) of string buffer
// IN pbOutputBuffer Buffer to write data to
// IN cbOutputBuffer Size of buffer to write data to
// OUT pcbWritten # of bytes written to output bufferbuffer
// OUT pcbRead # of bytes read from Input buffer
// Returns:
// TRUE if done converting
// FALSE if needs more output buffer
// History:
// 10/21/98 - MikeSwa Created
//
//-----------------------------------------------------------------------------
inline BOOL CDefaultResourceConversionContext::fConvertBuffer(
IN BOOL fASCII,
IN PBYTE pbInputBuffer,
IN DWORD cbInputBuffer,
IN PBYTE pbOutputBuffer,
IN DWORD cbOutputBuffer,
OUT DWORD *pcbWritten,
OUT DWORD *pcbRead)
{
_ASSERT(pcbWritten);
_ASSERT(pcbRead);
_ASSERT(fASCII);
if (cbInputBuffer <= cbOutputBuffer)
{
//everything can fit in current buffer
memcpy(pbOutputBuffer, pbInputBuffer, cbInputBuffer);
*pcbRead = cbInputBuffer;
*pcbWritten = cbInputBuffer;
return TRUE;
}
else
{
//we need to write in chunks
memcpy(pbOutputBuffer, pbInputBuffer, cbOutputBuffer);
*pcbRead = cbOutputBuffer;
*pcbWritten = cbOutputBuffer;
return FALSE;
}
}
#endif //__DSNCONV_H__