windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/smtp/inc/route.h
2020-09-26 16:20:57 +08:00

274 lines
11 KiB
C++

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