|
|
/*++
Copyright (c) 1994 Microsoft Corporation
Module Name :
route.h
Abstract:
This file defines functions and types required for routing interface library.
Revision History:
--*/
#ifndef _ROUTE_H_
#define _ROUTE_H_
#define ROUTING_DLL_NAME "abookdb.dll"
#define ROUTING_FUN_INIT "AbInitialize"
#define ROUTING_FUN_TERM "AbTerminate"
#define ROUTING_FUN_GETMAILROOT "AbGetUserMailRoot"
#define ROUTING_FUN_RESOLVEADDRESS "AbResolveAddress"
#define ROUTING_FUN_GET_RESOLVE_ADDRESS "AbGetResolveAddress"
#define ROUTING_FUN_END_RESOLVE_ADDRESS "AbEndResolveAddress"
#define ROUTING_FUN_GETNEXTENUM "AbGetNextEnumResult"
#define ROUTING_FUN_ENDENUMRESULT "AbEndEnumResult"
#define ROUTING_FUN_SETDOMAIN_MAPPING "AbSetDomainMapping"
#define ROUTING_FUN_GET_ROUTING_DIRECTORY "AbGetRoutingDirectory"
#define ROUTING_FUN_SET_SOURCES "AbSetSources"
#define ROUTING_FUN_VALIDATE_SOURCE "AbValidateSource"
#define ROUTING_FUN_VALIDATE_NUM_SOURCES "AbValidateNumSources"
#define ROUTING_FUN_SET_LOCAL_DOMAINS "AbSetLocalDomains"
#define ROUTING_FUN_CREATE_USER "AbCreateUser"
#define ROUTING_FUN_DELETE_USER "AbDeleteUser"
#define ROUTING_FUN_SET_FORWARD "AbSetForward"
#define ROUTING_FUN_SET_MAILROOT "AbSetMailRoot"
#define ROUTING_FUN_SET_MAILBOX_SIZE "AbSetMailboxSize"
#define ROUTING_FUN_SET_MAILBOX_MESSAGE_SIZE "AbSetMailboxMessageSize"
#define ROUTING_FUN_GET_USER_PROPS "AbGetUserProps"
#define ROUTING_FUN_CREATE_DL "AbCreateDL"
#define ROUTING_FUN_DELETE_DL "AbDeleteDL"
#define ROUTING_FUN_CREATE_DL_MEMBER "AbCreateDLMember"
#define ROUTING_FUN_DELETE_DL_MEMBER "AbDeleteDLMember"
#define ROUTING_FUN_ENUM_NAME_LIST "AbEnumNameList"
#define ROUTING_FUN_ENUM_NAME_LIST_FROM_DL "AbEnumNameListFromDL"
#define ROUTING_FUN_GET_NEXT_EMAIL "AbGetNextEmail"
#define ROUTING_FUN_END_ENUM_RESULT "AbEndEnumResult"
#define ROUTING_FUN_GETERRORSTRING "AbGetErrorString"
#define ROUTING_FUN_ADD_LOCAL_DOMAIN "AbAddLocalDomain"
#define ROUTING_FUN_ADD_ALIAS_DOMAIN "AbAddAliasDomain"
#define ROUTING_FUN_DELETE_LOCAL_DOMAIN "AbDeleteLocalDomain"
#define ROUTING_FUN_DELETE_ALL_LOCAL_DOMAINS "AbDeleteAllLocalDomains"
#define ROUTING_FUN_ABCANCEL "AbCancel"
#define ROUTING_FUN_MAKE_BACKUP "AbMakeBackup"
#define ROUTING_FUN_GET_TYPE "AbGetType"
#if defined(TDC)
#define ROUTING_FUN_FREE_MEMORY "AbFreeMemory"
#define ROUTING_FUN_GET_DL_PROPS "AbGetDLProps"
#define ROUTING_FUN_GET_NEXT_ENUM_RESULT "AbGetNextEnumResult"
#endif
#define RtxFlag(i) ((0x1) << (i))
#define IsRtxFlagSet(rtxflag, rtxmask) (((rtxflag) & (rtxmask)) != 0)
#define cbEmailNameMax (316)
#define cbVRootMax (250)
#define cbDomainMax (250)
#define cbSourceMax (512)
#define rtxnameUser RtxFlag(0)
#define rtxnameDistListNormal RtxFlag(1)
#define rtxnameDistListExtended RtxFlag(2)
#define rtxnameDistListSite RtxFlag(3)
#define rtxnameDistListDomain RtxFlag(4)
#define rtxnameDistListAll ( \
rtxnameDistListNormal | \ rtxnameDistListExtended | \ rtxnameDistListSite | \ rtxnameDistListDomain \ )
#define rtxnameAll ( \
rtxnameUser | \ rtxnameDistListAll \ )
#define ROUTING_INIT_MAIL_ROOT (RtxFlag(1))
#define ROUTING_INIT_USER_CONFIG (RtxFlag(2))
#define ROUTING_INIT_DL_CONFIG (RtxFlag(3))
#define ROUTING_INIT_RESOLVE (RtxFlag(4))
#define ROUTING_INIT_SOURCES (RtxFlag(5))
#define ROUTING_INIT_DOMAIN (RtxFlag(6))
#define ROUTING_INIT_PERF (RtxFlag(7))
#define ROUTING_INIT_ENUM (RtxFlag(8))
#define ROUTING_INIT_LIST (RtxFlag(9))
#define ROUTING_INIT_UTIL (RtxFlag(10))
#define ROUTING_INIT_BACKUP (RtxFlag(11))
#define ROUTING_INIT_ALL ( \
ROUTING_INIT_MAIL_ROOT | \ ROUTING_INIT_USER_CONFIG | \ ROUTING_INIT_DL_CONFIG | \ ROUTING_INIT_RESOLVE | \ ROUTING_INIT_SOURCES | \ ROUTING_INIT_DOMAIN | \ ROUTING_INIT_PERF | \ ROUTING_INIT_ENUM | \ ROUTING_INIT_LIST | \ ROUTING_INIT_UTIL \ )
enum RTTYPE {rttypeNone, rttypeSQL, rttypeFF, rttypeLDAP};
typedef HANDLE HRTXENUM, *PHRTXENUM;
typedef struct _RTX_DOMAIN_ENTRY { LIST_ENTRY m_list; char m_szDomain[cbDomainMax]; } RTX_DOMAIN_ENTRY, *PRTX_DOMAIN_ENTRY;
typedef struct _RTX_USER_PROPS { CHAR szEmail[cbEmailNameMax]; CHAR szForward[cbEmailNameMax]; BOOL fLocal; DWORD cbMailBoxSize; DWORD cbMailboxMessageSize; CHAR szVRoot[cbVRootMax]; } RTX_USER_PROPS, *LPRTX_USER_PROPS;
/*
typedef struct _RTX_DIST_LIST_PROPS { CHAR szEmail[cbEmailNameMax]; DWORD dwToken; } RTX_DIST_LIST_PROPS, *LPRTX_DIST_LIST_PROPS; */
class CRtx { private: HINSTANCE m_hDll; HANDLE m_hContext; RTTYPE m_rttype;
struct __ROUTINGVTBL__ { LPFNAB_INIT pfnInit; LPFNAB_TERM pfnTerm; LPFNAB_GET_MAILROOT pfnGetMailRoot; LPFNAB_CREATE_USER pfnCreateUser; LPFNAB_DELETE_USER pfnDeleteUser; LPFNAB_SET_FORWARD pfnSetForward; LPFNAB_SET_MAILROOT pfnSetVRoot; LPFNAB_SET_MAILBOX_SIZE pfnSetMailboxSize; LPFNAB_SET_MAILBOX_MESSAGE_SIZE pfnSetMailboxMessageSize; LPFNAB_CREATE_DL pfnCreateDL; LPFNAB_DELETE_DL pfnDeleteDL; LPFNAB_CREATE_DL_MEMBER pfnCreateDLMember; LPFNAB_DELETE_DL_MEMBER pfnDeleteDLMember; LPFNAB_GET_ROUTING_DIRECTORY pfnGetRoutingDirectory; LPFNAB_SET_SOURCES pfnSetSources; LPFNAB_GET_USER_PROPS pfnGetUserProps; #if defined(TDC)
LPFNAB_GET_DL_PROPS pfnGetDLProps; #endif
LPFNAB_ADD_LOCAL_DOMAIN pfnAddLocalDomain; LPFNAB_ADD_ALIAS_DOMAIN pfnAddAliasDomain; LPFNAB_DELETE_LOCAL_DOMAIN pfnDeleteLocalDomain; LPFNAB_DELETE_ALL_LOCAL_DOMAINS pfnDeleteAllLocalDomains; #if defined(TDC)
LPFNAB_GET_NEXT_ENUM_RESULT pfnGetNextEnumResult; #endif
LPFNAB_END_ENUM_RESULT pfnEndEnumResult; LPFNAB_ENUM_NAME_LIST pfnEnumNameList; LPFNAB_ENUM_NAME_LIST_FROM_DL pfnEnumNameListFromDL; LPFNAB_GET_NEXT_EMAIL pfnGetNextEmail; LPFNAB_RES_ADDR pfnResolveAddress; LPFNAB_GET_RES_ADDR pfnGetResolveAddress; LPFNAB_END_RES_ADDR pfnEndResolveAddress; #if defined(TDC)
LPFNAB_FREE_MEMORY pfnFreeMemory; #endif
LPFNAB_GET_ERROR_STRING pfnGetErrorString; LPFNAB_CANCEL pfnCancel; LPFNAB_MAKE_BACKUP pfnMakeBackup; LPFNAB_GET_TYPE pfnGetType; LPFNAB_VALIDATE_SOURCE pfnValidateSource; LPFNAB_VALIDATE_NUM_SOURCES pfnValidateNumSources; } m_routingvtbl;
public: CRtx() : m_hDll(NULL), m_hContext(NULL), m_rttype(rttypeNone) { FillMemory(&m_routingvtbl, sizeof(m_routingvtbl), 0xFF); }
~CRtx() {};
BOOL Initialize(LPSTR szDll, LPSTR szDisplayName, LPFNLOGTRANX pfnlogtranx, DWORD dwFlags, PLIST_ENTRY pleDbConfig); void Terminate(); RTTYPE GetRtType() { return m_rttype; } BOOL AddOptionalEntryPoints(DWORD dwFlags);
BOOL GetMailRoot(LPSTR szUser, LPSTR szMoniker, DWORD *pcbMoniker);
BOOL CreateUser(LPSTR szEmail, LPSTR szForward, BOOL fLocalUser, LPSTR szVRoot, DWORD cbMailboxMax, DWORD cbMailboxMessageMax); BOOL DeleteUser(LPSTR szEmail); BOOL GetUserProps(LPSTR szEmail, RTX_USER_PROPS *pUserProps); BOOL SetForward(LPSTR szEmail, LPSTR szForward); BOOL SetMailboxSize(LPSTR szEmail, DWORD cbMailboxMax); BOOL SetMailboxMessageSize(LPSTR szEmail, DWORD cbMailboxMessageMax); BOOL SetVRoot(LPSTR szEmail, LPSTR szVRoot);
BOOL CreateDistList(LPSTR szEmail, DWORD dwType); BOOL DeleteDistList(LPSTR szEmail); BOOL CreateDistListMember(LPSTR szEmail, LPSTR szMember); BOOL DeleteDistListMember(LPSTR szEmail, LPSTR szMember);
BOOL GetRoutingDirectory(LPSTR szDll, PLIST_ENTRY pleSources, LPSTR szDirectory); BOOL SetSources(PLIST_ENTRY pHead); BOOL ValidateSource(LPSTR szSource); BOOL ValidateNumSources(DWORD dwNumSources);
BOOL AddLocalDomain(LPSTR szName); BOOL AddAliasDomain(LPSTR szName, LPSTR szAlias); BOOL DeleteLocalDomain(LPSTR szName); BOOL DeleteAllLocalDomains();
BOOL EnumNameList(LPSTR szEmail, BOOL fForward, DWORD crowsReq, DWORD dwFlags, PHRTXENUM phrtxenum); BOOL EnumNameListFromDL(LPSTR szEmailDL, LPSTR szEmail, BOOL fForward, DWORD crowsReq, DWORD dwFlags, PHRTXENUM phrtxenum); BOOL GetNextEmail(HRTXENUM hrtxenum, DWORD *pdwType, LPSTR szEmail); #if defined(TDC)
BOOL GetNextEnumResult(HRTXENUM hrtxenum, LPVOID pvBuf, LPDWORD pcbBuf); #endif
BOOL EndEnumResult(HRTXENUM hrtxenum);
DWORD EnumRowsReturned(HRTXENUM hrtxenum);
BOOL FreeHrtxenum(HRTXENUM hrtxtenum);
#if defined(TDC)
BOOL FreeMemory(PABROUTING pabrouting); #endif
BOOL GetErrorString(DWORD dwErr, LPSTR lpBuf, DWORD cbBufSize);
BOOL ResolveAddress(PLIST_ENTRY HeadOfList, PABADDRSTAT pabAddrStat, PABROUTING pabrouting, PABRESOLVE pabresolve); BOOL GetResolveAddress(PABRESOLVE pabresolve, PABROUTING pabrouting); BOOL EndResolveAddress(PABRESOLVE pabresolve); BOOL Cancel(void);
BOOL MakeBackup(LPSTR szDirectory);
#if defined(TDC)
LPFNAB_FREE_MEMORY PfnFreeMemory() { return m_routingvtbl.pfnFreeMemory; } #endif
};
#endif
|