|
|
/************************************************************
* 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__
|