home *** CD-ROM | disk | FTP | other *** search
- // --msgemit.h--------------------------------------------------------------
- //
- // API entry points for the msgemit static link library.
- // Contains helper functions for converting MAPI messages to
- // 822-style headers and 822-style ASCII headers to MAPI messages.
- //
- // Copyright (C) Microsoft Corp., 1986-1996. All rights reserved.
- //
- // ---------------------------------------------------------------------------
-
- #ifndef _MSGEMIT_H
- #define _MSGEMIT_H
-
- #ifdef __cplusplus
- extern "C" {
- #endif // __cplusplus
-
- // Constants for the binary encode and decode functions.
- const ULONG nBytesEncodePerLine = 24; // # of bytes encoded per line
- const ULONG nCharsPerEncodedByte = 3; // # of chars written per encoded byte
-
- // Convenient macro for determining the number of data bytes (not
- // counting the null terminator) in a string.
- static __inline ULONG cbStrBytes(
- IN LPCSTR pszString) // string pointer
- {
- return (lstrlenA(pszString));
- }
-
- //$--HrCreateDateTimeString@-------------------------------------------------
- //
- // DESCRIPTION: Builds a date & time (UT) created string for a MAPI message file time
- //
- // INPUT: lpFileTime -- file time structure pointer (UT)
- //
- // OUTPUT: lppTimeString -- Pointer to time string output buffer
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if bad input,
- // E_OUTOFMEMORY if memory problems,
- // E_FAIL otherwise
- //
- // ---------------------------------------------------------------------------
-
- HRESULT HrCreateDateTimeStringW(
- IN LPFILETIME lpFileTime, // file time structure pointer
- OUT LPWSTR * lppTimeString); // pointer to time string buffer
-
- HRESULT HrCreateDateTimeStringA(
- IN LPFILETIME lpFileTime, // file time structure pointer
- OUT LPSTR * lppTimeString); // pointer to time string buffer
-
- #ifdef UNICODE
- #define HrCreateDateTimeString HrCreateDateTimeStringW
- #else
- #define HrCreateDateTimeString HrCreateDateTimeStringA
- #endif
-
- //$--HrCreateImportanceString------------------------------------------------
- //
- // DESCRIPTION: Creates an message importance string from a MAPI message importance value
- //
- // INPUT: ulImportance -- message's PR_IMPORTANCE value
- //
- // OUTPUT: lppImportance -- Pointer to importance string buffer
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if invalid parameter,
- // E_OUTOFMEMORY if memory problems,
- // E_FAIL otherwise.
- //
- // ---------------------------------------------------------------------------
-
- HRESULT HrCreateImportanceString( // RETURNS: HRESULT
- IN ULONG ulImportance, // message's PR_IMPORTANCE value
- OUT LPSTR * lppImportance); // pointer to importance string buffer
-
- //$--HrEmitTagDataLine-------------------------------------------------------
- //
- // DESCRIPTION: Emits a line constructed from a static tag and dynamic
- // data to the specified stream.
- //
- // INPUT: lpszTag -- tag portion of line
- // lpData -- data portion of line (may be "")
- // lpStream -- stream to write line to
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if invalid parameter,d
- // E_FAIL otherwise
- //
- // ---------------------------------------------------------------------------
-
- HRESULT HrEmitTagDataLine(
- IN LPCSTR lpszTag, // static portion of line
- IN LPSTR lpData, // dynamic portion of line
- IN LPSTREAM lpStream); // stream to write line to
-
- //$--HrCreatePriorityString-------------------------------------------------------
- //
- // DESCRIPTION: Creates message priority data string from a MAPI priority value
- //
- // INPUT: ulPriority -- message's PR_PRIORITY value
- //
- // OUTPUT: lppPriorityString -- message priority data string pointer
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if invalid parameter,
- // E_OUTOFMEMORY if memory problems
- // E_FAIL otherwise
- //
- // ---------------------------------------------------------------------------
-
- HRESULT HrCreatePriorityString(
- IN ULONG ulPriority, // message's PR_PRIORITY value
- OUT LPSTR * lppPriorityString); // message priority data string pointer
-
- //$--HrEDKEncodeBinaryStreamDataToStream-----------------------------------------------
- //
- // DESCRIPTION: Copies binary data from an input stream or
- // specified output stream,
- // encoding each byte as a two-character
- // hexadecimal ASCII representation of the byte.
- // E.g. 255 becomes 'FF'.
- //
- // INPUT:
- // lpStreamIn -- input stream pointer
- // lpStreamOut -- output stream pointer
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if invalid parameter,
- // E_FAIL otherwise
- //
- // ---------------------------------------------------------------------------
- HRESULT HrEDKEncodeBinaryStreamDataToStream(
- IN LPSTREAM lpStreamIn, // input stream pointer
- IN LPSTREAM lpStreamOut); // output stream pointer
-
- //$--HrCreateExternalTraceString------------------------------------------------
- //
- // DESCRIPTION: Creates a string from a message's external trace information.
- //
- // INPUT: lAction -- trace action
- // lpCountry -- country
- // lpADMDName -- ADMD name
- // lpPRMDId -- PRMD identifier
- //
- // OUTPUT: lppTraceString -- pointer to trace information string buffer
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if invalid parameter,
- // E_OUTOFMEMORY if memory problems
- // E_FAIL otherwise,
- //
- // -----------------------------------------------------------------------------
-
- HRESULT HrCreateExternalTraceString(
- IN LONG lAction, // trace action
- IN LPSTR lpCountry, // country name
- IN LPSTR lpADMDName, // ADMD name
- IN LPSTR lpPRMDId, // PRMD identifier
- OUT LPSTR * lppTraceString); // trace information string pointer
-
- //$--HrCreateInternalTraceString------------------------------------------------
- //
- // DESCRIPTION: Creates a string from a message's internal trace information.
- //
- // INPUT: lAction -- trace action
- // lpCountry -- country
- // lpADMDName -- ADMD name
- // lpPRMDId -- PRMD identifier
- // lpMTAName -- MTA name
- //
- // OUTPUT: lppTraceString -- pointer to trace information string buffer
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if invalid parameter,
- // E_OUTOFMEMORY if memory problems
- // E_FAIL otherwise,
- //
- // -----------------------------------------------------------------------------
-
- HRESULT HrCreateInternalTraceString(
- IN LONG lAction, // trace action
- IN LPSTR lpCountry, // country name
- IN LPSTR lpADMDName, // ADMD name
- IN LPSTR lpPRMDId, // PRMD identifier
- IN LPSTR lpMTAName, // MTA name
- OUT LPSTR * lppTraceString); // trace information string pointer
-
- //$--HrGetRecipientList------------------------------------------
- //
- // DESCRIPTION: Utility function which retrieves columns
- // desired from a MAPI recipient table.
- //
- // INPUT: lpMessage -- pointer to MAPI message
- // lpPropTags -- list of columns (properties) to retrieve
- //
- // OUTPUT: lppRows -- pointer to array of rows returned pointer.
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if bad input,
- // E_FAIL otherwise
- //
- // -------------------------------------------------------------
- HRESULT HrGetRecipientList(
- IN LPMESSAGE lpMessage, // MAPI message pointer
- IN LPSPropTagArray lpPropTags, // properties (columns) desired
- OUT LPSRowSet * lppRows); // pointer to rows returned
-
- //$--HrParseTagAndData-------------------------------------------------------
- //
- // DESCRIPTION: Parse ASCII 822-style header line into
- // tag and data components.
- //
- // INPUT: lpStream -- stream pointer to read from
- //
- // OUTPUT: pcbRead -- number of bytes read from stream
- // ppTag -- pointer to tag buffer
- // ppData -- pointer to data buffer
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if bad input
- // E_OUTOFMEMORY if memory problem
- // E_EOF if end of stream
- // E_FAIL otherwise
- //
- // ---------------------------------------------------------------------------
- HRESULT HrParseTagAndData(
- IN LPSTREAM lpStream, // stream pointer
- OUT ULONG * pcbRead, // # of bytes read
- OUT LPSTR * lppTag, // pointer to tag buffer
- OUT LPSTR * lppData); // pointer to data buffer
-
- //$--HrParseDateTimeString----------------------------------------------------
- //
- // DESCRIPTION: Parses a date and time string into a file time
- // structure.
- //
- // INPUT: lpDateTimeString -- date and time string
- //
- // OUTPUT: pFileTime -- file time pointer
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if bad input,
- // E_FAIL otherwise
- //
- // ----------------------------------------------------------------------------
- HRESULT HrParseDateTimeString(
- IN LPSTR lpDateTimeString, // date and time string
- OUT FILETIME * pFileTime); // file time pointer
-
- //$--HrParsePriorityString----------------------------------------------------
- //
- // DESCRIPTION: Convert a priority string to its associated
- // integer value.
- //
- // INPUT: lpPriority -- priority string
- //
- // OUTPUT: pulPriority -- pointer to priority value
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if bad input,
- // E_FAIL otherwise
- //
- // ----------------------------------------------------------------------------
- HRESULT HrParsePriorityString(
- IN LPSTR lpPriority, // Priority string
- OUT ULONG * pulPriority); // priority value pointer
-
- //$--HrParseImportanceString----------------------------------------------------
- //
- // DESCRIPTION: Convert an importance string to its associated
- // integer value.
- //
- // INPUT: lpImportance -- importance string
- //
- // OUTPUT: pulImportance -- pointer to importance value
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if bad input,
- // E_FAIL otherwise
- //
- // ----------------------------------------------------------------------------
- HRESULT HrParseImportanceString(
- IN LPSTR lpImportance, // Importance string
- OUT ULONG * pulImportance); // importance value pointer
-
- //$--HrParseExternalTraceString-------------------------------------------------
- //
- // DESCRIPTION: Parse External-Received-By or
- // External-Attempted-By trace string into a
- // its separate components.
- //
- // INPUT: lpTraceString -- External-Received/Attempted-By trace string
- //
- // OUTPUT: plAction -- trace action
- // pCountry -- country name
- // pADMDName -- ADMD name
- // pPRMDId -- PRMD identifier
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if bad input
- // E_FAIL otherwise
- //
- // ----------------------------------------------------------------------------
- HRESULT HrParseExternalTraceString(
- IN LPSTR lpTraceString, // trace information string
- OUT LONG * plAction, // trace action pointer
- OUT CHAR * pCountry, // country name
- OUT CHAR * pADMDName, // ADMD name
- OUT CHAR * pPRMDId); // PRMD identifier
-
- //$--HrParseInternalTraceString-------------------------------------------------
- //
- // DESCRIPTION: Parse Internal-Received-By or
- // Internal-Attempted-By trace string into
- // its separate components.
- //
- // INPUT: lpTraceString -- Internal-Received/Attempted-By trace string
- //
- // OUTPUT: plAction -- trace action
- // pCountry -- country name
- // pADMDName -- ADMD name
- // pPRMDId -- PRMD identifier
- // pMTAName -- MTA name
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if bad input
- // E_FAIL otherwise
- //
- // -----------------------------------------------------------------------------
- HRESULT HrParseInternalTraceString(
- IN LPSTR lpTraceString, // trace information string
- OUT LONG * plAction, // trace action pointer
- OUT CHAR * pCountry, // country name
- OUT CHAR * pADMDName, // ADMD name
- OUT CHAR * pPRMDId, // PRMD identifier
- OUT CHAR * pMTAName); // MTA name
-
- //$--HrParseAttachmentHeader--------------------------------------------------
- //
- // DESCRIPTION: Parse attachment header data into its file name
- // and file size components.
- //
- // INPUT: lpHeader -- attachment header data string
- //
- // OUTPUT: lppFileName -- attachment file name
- // pcb -- pointer to # of bytes in attachment
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if bad input,
- // E_FAIL otherwise.
- //
- // ----------------------------------------------------------------------------
- HRESULT HrParseAttachmentHeader(
- IN LPSTR lpHeader, // attachment header data string
- OUT LPSTR * lppFileName, // attachment file name
- OUT ULONG * pcb); // pointer to number of bytes in file name
-
- //$--HrEDKDecodeBinaryStreamDataToStream-----------------------------------------------
- //
- // DESCRIPTION: Read attachment hexadecimal encoding from input
- // stream to attachment.
- //
- // INPUT: cb -- number of bytes in binary attachment.
- // lpStream -- stream pointer
- // lpAttach -- attachment pointer
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if bad input
- // E_FAIL otherwise.
- //
- // ----------------------------------------------------------------------------
-
- HRESULT HrEDKDecodeBinaryStreamDataToStream(
- IN LPSTREAM lpStreamIn, // input stream
- IN ULONG cb, // number of bytes in original binary data
- IN LPSTREAM lpStreamOut); // output stream
-
- //$--HrEDKParseSubjectPrefix---------------------------------------------------
- //
- // DESCRIPTION: Break a subject into its prefix component & its
- // original subject component. (The prefix is everything
- // up to and including the first colon and the first space
- // after the colon, if any.
- //
- // INPUT: pszSubject -- subject text
- //
- // OUTPUT ppszPrefix -- prefix string pointer
- // ppszOrigSub -- original subject pointer
- //
- // RETURNS: HRESULT -- NOERROR if successful,
- // E_INVALIDARG if bad input,
- // E_OUTOFMEMORY if memory propblems,
- // E_FAIL otherwise.
- //
- // ----------------------------------------------------------------------------
- HRESULT HrEDKParseSubjectPrefix(
- IN LPSTR pszSubject, // subject text
- OUT LPSTR * ppszPrefix, // subject prefix
- OUT LPSTR * ppszOrigSub); // original subject text
-
- //$--nEDKEncodedBytes-------------------------------------------------------------
- //
- // DESCRIPTION: Returns the number of encoded bytes based on the number of
- // un-encoded bytes.
- //
- // INPUT: cbUnencoded -- # of un-encoded bytes
- //
- // RETURNS: ULONG -- # of encoded bytes
- //
- // NOTE: This is implemented as a static __inline macro for
- // efficiency and because it is so simple.
- //
- //-----------------------------------------------------------------------------
- static __inline ULONG nEDKEncodedBytes(
- IN ULONG cbUnencoded) // # of un-encoded bytes
- {
- ASSERTERROR(cbUnencoded != 0, "Bad cbUnencoded"); // debug check
-
- if ( (cbUnencoded % nBytesEncodePerLine) == 0 )
- {
- return ( (nCharsPerEncodedByte * cbUnencoded) +
- (cbUnencoded/nBytesEncodePerLine) );
- }
- else
- {
- return ( (nCharsPerEncodedByte * cbUnencoded) +
- (cbUnencoded/nBytesEncodePerLine) + 1 );
- }
- }
-
- #ifdef __cplusplus
- }
- #endif // __cplusplus
-
- #endif
-