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.
449 lines
15 KiB
449 lines
15 KiB
/************************************************************
|
|
* FILE: cat.h
|
|
* PURPOSE: API for Categorizing IMsg objects.
|
|
* HISTORY:
|
|
* // jstamerj 980211 13:53:44: Created
|
|
************************************************************/
|
|
#ifndef __CAT_H__
|
|
#define __CAT_H__
|
|
|
|
#include <windows.h>
|
|
#include <mailmsg.h>
|
|
#include <aqueue.h>
|
|
|
|
#define CATCALLCONV
|
|
|
|
#define CATEXPDLLCPP extern "C"
|
|
|
|
/************************************************************
|
|
* FUNCTION: CatInit
|
|
* DESCRIPTION: Initialzies Categorizer.
|
|
* PARAMETERS:
|
|
* pszConfig: Indicates where to find configuration defaults
|
|
* Config info found in key
|
|
* HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
|
|
* \PlatinumIMC\CatSources\szConfig
|
|
*
|
|
* phCat: Pointer to a handle. Upon successfull initializtion,
|
|
* handle to use in subsequent Categorizer calls will be
|
|
* plcaed there.
|
|
*
|
|
* pAQConfig: pointer to an AQConfigInfo structure containing
|
|
* per virtual server message cat parameters
|
|
*
|
|
* pfn: Service routine for periodic callbakcs if any time consuming
|
|
* operations are performed
|
|
*
|
|
* pServiceContext: Context for the pfn function.
|
|
*
|
|
* pISMTPServer: ISMTPServer interface to use for triggering server
|
|
* events for this virtual server
|
|
*
|
|
* pIDomainInfo: pointer to an interface that contains domain info routines
|
|
*
|
|
* dwVirtualServerInstance: Virtual Server ID
|
|
*
|
|
* Return value: S_OK if everything is initialized okay.
|
|
*
|
|
* HISTORY:
|
|
* // jstamerj 980217 15:46:26: Created
|
|
* // jstamerj 1998/06/25 12:25:34: Added AQConfig/IMSTPServer.
|
|
*
|
|
************************************************************/
|
|
typedef void (*PCATSRVFN_CALLBACK)(PVOID);
|
|
CATEXPDLLCPP HRESULT CATCALLCONV CatInit(
|
|
IN AQConfigInfo *pAQConfig,
|
|
IN PCATSRVFN_CALLBACK pfn,
|
|
IN PVOID pvServiceContext,
|
|
IN ISMTPServer *pISMTPServer,
|
|
IN IAdvQueueDomainType *pIDomainInfo,
|
|
IN DWORD dwVirtualServerInstance,
|
|
OUT HANDLE *phCat);
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: CatChangeConfig
|
|
//
|
|
// Synopsis: Changes the configuration of a virtual categorizer
|
|
//
|
|
// Arguments:
|
|
// hCat: handle of virtual categorizer
|
|
// pAQConfig: AQConfigInfo pointer
|
|
// pISMTPServer: ISMTPServer to use
|
|
// pIDomainInfo: interface that contains domain information
|
|
//
|
|
// Flags for dwMsgCatFlags in AQConfigInfo
|
|
#define MSGCATFLAG_RESOLVELOCAL 0x00000001
|
|
#define MSGCATFLAG_RESOLVEREMOTE 0x00000002
|
|
#define MSGCATFLAG_RESOLVESENDER 0x00000004
|
|
#define MSGCATFLAG_RESOLVERECIPIENTS 0x00000008
|
|
//
|
|
// Returns:
|
|
// S_OK: Success
|
|
// E_INVALIDARG: Invalid hCat or pAQConfig
|
|
//
|
|
// History:
|
|
// jstamerj 980521 15:47:42: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
CATEXPDLLCPP HRESULT CATCALLCONV CatChangeConfig(
|
|
IN HANDLE hCat,
|
|
IN AQConfigInfo *pAQConfig,
|
|
IN ISMTPServer *pISMTPServer,
|
|
IN IAdvQueueDomainType *pIDomainInfo);
|
|
|
|
|
|
|
|
/************************************************************
|
|
* FUNCTION: PFNCAT_COMPLETION (User supplied)
|
|
* DESCRIPTION: Completion routine called to accept a categorized IMsg
|
|
* PARAMETERS:
|
|
* hr: S_OK unless message categorization was not finished.
|
|
* CAT_W_SOME_UNDELIVERABLE_MSGS if one or more
|
|
* recipient should not be delivered to...
|
|
* pContext: User's value passed into CatMsg
|
|
* pImsg: IMsg interface of categorized object -- if message was
|
|
* bifurcated this parameter will be NULL
|
|
* rpgImsg: NULL unless IMsg was bifurcated -- if message was
|
|
* bifurcated, this will be a NULL termianted array of
|
|
* ptrs to IMsg interfaces.
|
|
* NOTE: Either pImsg or rgpImsg will always be NULL (but never both).
|
|
*
|
|
* Return Value: S_OK if everything is okay (Categorizer will assert
|
|
* check this value)
|
|
*
|
|
* HISTORY:
|
|
* // jstamerj 980217 15:47:20: Created
|
|
************************************************************/
|
|
typedef HRESULT (CATCALLCONV *PFNCAT_COMPLETION)(/* IN */ HRESULT hr,
|
|
/* IN */ PVOID pContext,
|
|
/* IN */ IUnknown *pImsg,
|
|
/* IN */ IUnknown **rgpImsg);
|
|
|
|
|
|
/************************************************************
|
|
* FUNCTION: CatMsg
|
|
* DESCRIPTION: Accepts an IMsg object for async categorization
|
|
* PARAMETERS:
|
|
* hCat: Handle returned from CatInit
|
|
* pImsg: IMsg interface for message to categorize
|
|
* pfn: Completion routine to call when finished
|
|
* pContext: User value passed to completion routine
|
|
*
|
|
* Return value: S_OK if everything is okay.
|
|
*
|
|
* HISTORY:
|
|
* // jstamerj 980217 15:46:15: Created
|
|
************************************************************/
|
|
CATEXPDLLCPP HRESULT CATCALLCONV CatMsg (/* IN */ HANDLE hCat,
|
|
/* IN */ IUnknown *pImsg,
|
|
/* IN */ PFNCAT_COMPLETION pfn,
|
|
/* IN */ LPVOID pContext);
|
|
|
|
/************************************************************
|
|
* FUNCTION: PFNCAT_DLCOMPLETION (User supplied)
|
|
* DESCRIPTION: Completion routine called to accept a categorized message
|
|
* PARAMETERS:
|
|
* hr: S_OK unless message categorization was not finished.
|
|
* pContext: User's value passed into CatMsg
|
|
* pImsg: IMsg interface of categorized object (with expanded recipients)
|
|
* fMatch: TRUE if your user was found
|
|
*
|
|
* Return Value: S_OK if everything is okay (Categorizer will assert
|
|
* check this value)
|
|
*
|
|
* HISTORY:
|
|
* // jstamerj 980217 15:47:20: Created
|
|
************************************************************/
|
|
typedef HRESULT (CATCALLCONV *PFNCAT_DLCOMPLETION)(
|
|
/* IN */ HRESULT hr,
|
|
/* IN */ PVOID pContext,
|
|
/* IN */ IUnknown *pImsg,
|
|
/* IN */ BOOL fMatch);
|
|
|
|
|
|
/************************************************************
|
|
* FUNCTION: CatDLMsg
|
|
* DESCRIPTION: Accepts an IMsg object for async categorization
|
|
* PARAMETERS:
|
|
* hCat: Handle returned from CatInit
|
|
* pImsg: IMsg interface to categorize -- each DL should be a recip
|
|
* pfn: Completion routine to call when finished
|
|
* pContext: User value passed to completion routine
|
|
* fMatchOnly: Stop resolving when a match is found?
|
|
* CAType: The address type of pszAddress
|
|
* pszAddress: THe address you are looking for
|
|
*
|
|
* Return value: S_OK if everything is okay.
|
|
*
|
|
* HISTORY:
|
|
* // jstamerj 980217 15:46:15: Created
|
|
************************************************************/
|
|
CATEXPDLLCPP HRESULT CATCALLCONV CatDLMsg (
|
|
/* IN */ HANDLE hCat,
|
|
/* IN */ IUnknown *pImsg,
|
|
/* IN */ PFNCAT_DLCOMPLETION pfn,
|
|
/* IN */ LPVOID pContext,
|
|
/* IN */ BOOL fMatchOnly = FALSE,
|
|
/* IN */ CAT_ADDRESS_TYPE CAType = CAT_UNKNOWNTYPE,
|
|
/* IN */ LPSTR pszAddress = NULL);
|
|
|
|
|
|
/************************************************************
|
|
* FUNCTION: CatTerm
|
|
* DESCRIPTION: Called when user wishes to terminate categorizer
|
|
* opertions with this handle
|
|
* PARAMETERS:
|
|
* hCat: Categorizer handle received from CatInit
|
|
*
|
|
* HISTORY:
|
|
* // jstamerj 980217 15:47:20: Created
|
|
************************************************************/
|
|
CATEXPDLLCPP VOID CATCALLCONV CatTerm(/* IN */ HANDLE hCat);
|
|
|
|
|
|
/************************************************************
|
|
* FUNCTION: CatCancel
|
|
* DESCRIPTION: Cancels pending searches for this hCat. User's
|
|
* completion routine will be called with an error for
|
|
* each pending message.
|
|
* PARAMETERS:
|
|
* hCat: Categorizer handle received from CatInit
|
|
*
|
|
* HISTORY:
|
|
* // jstamerj 980217 15:52:10: Created
|
|
************************************************************/
|
|
CATEXPDLLCPP HRESULT CATCALLCONV CatCancel(/* IN */ HANDLE hCat);
|
|
|
|
|
|
/************************************************************
|
|
* FUNCTION: CatPrepareForShutdown
|
|
* DESCRIPTION: Begin shutdown for this virtual categorizer (hCat).
|
|
* Stop accepting messages for categorization and cancel
|
|
* pending categorizations.
|
|
* PARAMETERS:
|
|
* hCat: Categorizer handle received from CatInit
|
|
*
|
|
* HISTORY:
|
|
* // jstamerj 1999/07/19 22:35:17: Created
|
|
************************************************************/
|
|
CATEXPDLLCPP VOID CATCALLCONV CatPrepareForShutdown(/* IN */ HANDLE hCat);
|
|
|
|
|
|
/************************************************************
|
|
* FUNCTION: CatVerifySMTPAddress
|
|
* DESCRIPTION: Verifies a the address corresponds to a valid user or DL
|
|
* PARAMETERS:
|
|
* hCat: Categorizer handle received from CatInit
|
|
* szSMTPAddr SMTP Address to lookup (ex: "user@domain")
|
|
*
|
|
* Return Values:
|
|
* S_OK User exists
|
|
* CAT_I_DL This is a distribution list
|
|
* CAT_I_FWD This user has a forwarding address
|
|
* CAT_E_NORESULT There is no such user/distribution list in the DS.
|
|
************************************************************/
|
|
CATEXPDLLCPP HRESULT CATCALLCONV CatVerifySMTPAddress(
|
|
/* IN */ HANDLE hCat,
|
|
/* IN */ LPTSTR szSMTPAddr);
|
|
|
|
|
|
/************************************************************
|
|
* FUNCTION: CatGetForwaringSMTPAddress
|
|
* DESCRIPTION: Retreive a user's forwarding address.
|
|
* PARAMETERS:
|
|
* hCat: Categorizer handle received from CatInit
|
|
* szSMTPAddr: SMTP Address to lookup (ex: "user@domain")
|
|
* pdwcc: Size of forwarding address buffer in Chars
|
|
* (This is set to actuall size of forwarding address
|
|
* string (including NULL terminator) on exit)
|
|
* szSMTPForward: Buffer where retreived forwarding SMTP address
|
|
* will be copied. (can be NULL if *pdwcc is zero)
|
|
*
|
|
* Return Values:
|
|
* S_OK Success
|
|
* HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
|
|
* *pdwcc was not large enough to hold the forwarding
|
|
* address string.
|
|
* CAT_E_DL This is a distribution list.
|
|
* CAT_E_NOFWD This user does not have a forwarding address.
|
|
* CAT_E_NORESULT There is no such user/distribution list in the DS.
|
|
************************************************************/
|
|
CATEXPDLLCPP HRESULT CATCALLCONV CatGetForwardingSMTPAddress(
|
|
/* IN */ HANDLE hCat,
|
|
/* IN */ LPCTSTR szSMTPAddr,
|
|
/* IN,OUT */ PDWORD pdwcc,
|
|
/* OUT */ LPTSTR szSMTPForward);
|
|
|
|
//
|
|
// Com support functions for COM categorizer objects
|
|
//
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: CatDllMain
|
|
//
|
|
// Synopsis: Handle what cat needs to do in DLLMain
|
|
//
|
|
// Arguments:
|
|
// hInstance: instance of this DLL
|
|
// dwReason: Why are you calling me?
|
|
// lpReserved
|
|
//
|
|
// Returns: TRUE
|
|
//
|
|
// History:
|
|
// jstamerj 1998/12/12 23:06:08: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
BOOL WINAPI CatDllMain(
|
|
HINSTANCE hInstance,
|
|
DWORD dwReason,
|
|
LPVOID /* lpReserved */);
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: RegisterCatServer
|
|
//
|
|
// Synopsis: Register the categorizer com objects
|
|
//
|
|
// Arguments:
|
|
//
|
|
// Returns:
|
|
// S_OK: Success
|
|
//
|
|
// History:
|
|
// jstamerj 1998/12/12 15:07:20: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
STDAPI RegisterCatServer();
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: UnregisterCatServer
|
|
//
|
|
// Synopsis: Unregister the categorizer com objects
|
|
//
|
|
// Arguments: NONE
|
|
//
|
|
// Returns:
|
|
// S_OK: Success
|
|
//
|
|
// History:
|
|
// jstamerj 1998/12/12 15:08:09: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
STDAPI UnregisterCatServer();
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: DllCanUnloadCatNow
|
|
//
|
|
// Synopsis: Return to COM wether it's okay or not to unload our dll
|
|
//
|
|
// Arguments: NONE
|
|
//
|
|
// Returns:
|
|
// S_OK: Success, can unload
|
|
// S_FALSE: Success, do not unload
|
|
//
|
|
// History:
|
|
// jstamerj 1998/12/12 15:09:02: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
STDAPI DllCanUnloadCatNow();
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: DllGetCatClassObject
|
|
//
|
|
// Synopsis: Return the class factory object (an interface to it)
|
|
//
|
|
// Arguments:
|
|
// clsid: The CLSID of the object you want a class factory for
|
|
// iid: the interface you want
|
|
// ppv: out param to set to the interface pointer
|
|
//
|
|
// Returns:
|
|
// S_OK: Success
|
|
// E_NOINTERFACE: don't support that interface
|
|
// CLASS_E_CLASSNOTAVAILABLE: don't support that clsid
|
|
//
|
|
// History:
|
|
// jstamerj 1998/12/12 15:11:48: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
STDAPI DllGetCatClassObject(
|
|
const CLSID& clsid,
|
|
const IID& iid,
|
|
void **ppv);
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: CatGetPerfCounters
|
|
//
|
|
// Synopsis: Retrieve the categorizer performance counter block
|
|
//
|
|
// Arguments:
|
|
// hCat: Categorizer handle returned from CatInit
|
|
// pCatPerfBlock: struct to fill in with counter values
|
|
//
|
|
// Returns:
|
|
// S_OK: Success
|
|
//
|
|
// History:
|
|
// jstamerj 1999/02/26 14:53:21: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
HRESULT CatGetPerfCounters(
|
|
HANDLE hCat,
|
|
PCATPERFBLOCK pCatPerfBlock);
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: CatLogEvent
|
|
//
|
|
// Synopsis: Log an event to the event log
|
|
//
|
|
// Arguments:
|
|
// pISMTPServer: ISMTPServer interface to use for logging
|
|
//
|
|
// Returns:
|
|
// S_OK: Success
|
|
//
|
|
// History:
|
|
// dbraun 2000/09/13 : Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
HRESULT CatLogEvent(
|
|
ISMTPServer *pISMTPServer,
|
|
DWORD idMessage,
|
|
WORD cSubstrings,
|
|
LPCSTR *rgszSubstrings,
|
|
DWORD errCode,
|
|
LPCSTR szKey,
|
|
DWORD dwOptions,
|
|
WORD iDebugLevel,
|
|
DWORD iMessageString = 0xffffffff);
|
|
|
|
HRESULT CatLogEvent(
|
|
IN ISMTPServerEx *pISMTPServerEx,
|
|
IN DWORD idMessage,
|
|
IN WORD cSubStrings,
|
|
IN LPCSTR *rgpszSubStrings,
|
|
IN DWORD errCode,
|
|
IN LPCSTR pszKey,
|
|
IN DWORD dwOptions,
|
|
IN WORD wLogLevel,
|
|
IN DWORD iMessageString = 0xffffffff);
|
|
|
|
#endif // __CAT_H__
|