228 lines
5.9 KiB
C
228 lines
5.9 KiB
C
|
// domain.h : Declaration of the CSmtpAdminDomain
|
||
|
|
||
|
|
||
|
#include "resource.h" // main symbols
|
||
|
|
||
|
#include "smtptype.h"
|
||
|
#include "smtpapi.h"
|
||
|
#include "cmultisz.h"
|
||
|
#include "metafact.h"
|
||
|
#include "smtpadm.h"
|
||
|
#include "listmacr.h"
|
||
|
|
||
|
struct DomainEntry
|
||
|
{
|
||
|
TCHAR m_strDomainName[256]; // current domain's name
|
||
|
DWORD m_dwActionType;
|
||
|
TCHAR m_strActionString[256];
|
||
|
BOOL m_fAllowEtrn;
|
||
|
DWORD m_dwDomainId;
|
||
|
|
||
|
LIST_ENTRY list;
|
||
|
|
||
|
BOOL FromString( LPCTSTR lpDomainString );
|
||
|
BOOL ToString( LPTSTR lpDomainString ); // big enough to hold the entry
|
||
|
|
||
|
DomainEntry()
|
||
|
{
|
||
|
ZeroMemory( m_strDomainName, sizeof(m_strDomainName) );
|
||
|
ZeroMemory( m_strActionString, sizeof(m_strActionString) );
|
||
|
|
||
|
m_dwActionType = SMTP_DELIVER;
|
||
|
m_fAllowEtrn = FALSE;
|
||
|
m_dwDomainId = (DWORD)-1;
|
||
|
InitializeListHead( &list );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// smtpadm
|
||
|
|
||
|
class CSmtpAdminDomain :
|
||
|
public ISmtpAdminDomain,
|
||
|
public IPrivateUnknown,
|
||
|
public IPrivateDispatch,
|
||
|
public IADsExtension,
|
||
|
public INonDelegatingUnknown,
|
||
|
public ISupportErrorInfo,
|
||
|
public CComObjectRoot,
|
||
|
public CComCoClass<CSmtpAdminDomain,&CLSID_CSmtpAdminDomain>
|
||
|
{
|
||
|
public:
|
||
|
CSmtpAdminDomain();
|
||
|
virtual ~CSmtpAdminDomain();
|
||
|
BEGIN_COM_MAP(CSmtpAdminDomain)
|
||
|
COM_INTERFACE_ENTRY(IDispatch)
|
||
|
COM_INTERFACE_ENTRY(IADs)
|
||
|
COM_INTERFACE_ENTRY(ISmtpAdminDomain)
|
||
|
COM_INTERFACE_ENTRY(IADsExtension)
|
||
|
COM_INTERFACE_ENTRY(IPrivateUnknown)
|
||
|
COM_INTERFACE_ENTRY(IPrivateDispatch)
|
||
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
||
|
END_COM_MAP()
|
||
|
//DECLARE_NOT_AGGREGATABLE(CSmtpAdminDomain)
|
||
|
// Remove the comment from the line above if you don't want your object to
|
||
|
// support aggregation. The default is to support it
|
||
|
|
||
|
DECLARE_REGISTRY(CSmtpAdminDomain, _T("Smtpadm.Domain.1"), _T("Smtpadm.Domain"), IDS_SMTPADMIN_DOMAIN_DESC, THREADFLAGS_BOTH)
|
||
|
// ISupportsErrorInfo
|
||
|
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
|
||
|
|
||
|
//
|
||
|
// This declares methods for the following:
|
||
|
// IADsExtension
|
||
|
// IUnknown
|
||
|
// IDispatch
|
||
|
// IPrivateUnknown
|
||
|
// IPrivateDispatch
|
||
|
//
|
||
|
#define THIS_LIBID LIBID_SMTPADMLib
|
||
|
#define THIS_IID IID_ISmtpAdminDomain
|
||
|
#include "adsimp.inl"
|
||
|
#undef THIS_LIBID
|
||
|
#undef THIS_IID
|
||
|
|
||
|
// ISmtpAdminDomain
|
||
|
public:
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
// Properties:
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
//
|
||
|
// IADs methods:
|
||
|
//
|
||
|
|
||
|
DECLARE_IADS_METHODS()
|
||
|
|
||
|
// Which service to configure:
|
||
|
|
||
|
STDMETHODIMP get_Server ( BSTR * pstrServer );
|
||
|
STDMETHODIMP put_Server ( BSTR strServer );
|
||
|
|
||
|
STDMETHODIMP get_ServiceInstance ( long * plServiceInstance );
|
||
|
STDMETHODIMP put_ServiceInstance ( long lServiceInstance );
|
||
|
|
||
|
// enumeration
|
||
|
STDMETHODIMP get_Count ( long* plCount );
|
||
|
|
||
|
// Domain Properties:
|
||
|
|
||
|
STDMETHODIMP get_DomainName ( BSTR * pstrDomainName );
|
||
|
STDMETHODIMP put_DomainName ( BSTR strDomainName );
|
||
|
|
||
|
STDMETHODIMP get_ActionType ( long * plActionType );
|
||
|
STDMETHODIMP put_ActionType ( long lActionType );
|
||
|
|
||
|
// drop IsDefault!!
|
||
|
STDMETHODIMP get_IsDefault ( BOOL * pfIsDefault );
|
||
|
STDMETHODIMP put_IsDefault ( BOOL fIsDefault );
|
||
|
|
||
|
STDMETHODIMP get_IsLocal ( BOOL * pfIsLocal );
|
||
|
STDMETHODIMP put_IsLocal ( BOOL fIsLocal );
|
||
|
|
||
|
// if local
|
||
|
STDMETHODIMP get_LDAPServer ( BSTR * pstrLDAPServer );
|
||
|
STDMETHODIMP put_LDAPServer ( BSTR strLDAPServer );
|
||
|
|
||
|
STDMETHODIMP get_Account ( BSTR * pstrAccount );
|
||
|
STDMETHODIMP put_Account ( BSTR strAccount );
|
||
|
|
||
|
STDMETHODIMP get_Password ( BSTR * pstrPassword );
|
||
|
STDMETHODIMP put_Password ( BSTR strPassword );
|
||
|
|
||
|
STDMETHODIMP get_LDAPContainer ( BSTR * pstrLDAPContainer );
|
||
|
STDMETHODIMP put_LDAPContainer ( BSTR strLDAPContainer );
|
||
|
|
||
|
// if remote
|
||
|
STDMETHODIMP get_UseSSL ( BOOL * pfUseSSL );
|
||
|
STDMETHODIMP put_UseSSL ( BOOL fUseSSL );
|
||
|
|
||
|
STDMETHODIMP get_EnableETRN ( BOOL * pfEnableETRN );
|
||
|
STDMETHODIMP put_EnableETRN ( BOOL fEnableETRN );
|
||
|
|
||
|
STDMETHODIMP get_DropDir ( BSTR * pstrDropDir );
|
||
|
STDMETHODIMP put_DropDir ( BSTR strDropDir );
|
||
|
|
||
|
STDMETHODIMP get_RoutingDomain ( BSTR * pstrRoutingDomain );
|
||
|
STDMETHODIMP put_RoutingDomain ( BSTR strRoutingDomain );
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
// Methods:
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
STDMETHODIMP Default ( );
|
||
|
|
||
|
STDMETHODIMP Add ( );
|
||
|
STDMETHODIMP Remove ( );
|
||
|
|
||
|
STDMETHODIMP Get ( );
|
||
|
STDMETHODIMP Set ( );
|
||
|
|
||
|
STDMETHODIMP Enumerate ( );
|
||
|
|
||
|
STDMETHODIMP GetNth ( long lIndex );
|
||
|
|
||
|
STDMETHODIMP GetDefaultDomain ( );
|
||
|
|
||
|
STDMETHODIMP SetAsDefaultDomain ( );
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
// Data:
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
private:
|
||
|
|
||
|
CIADsImpl m_iadsImpl;
|
||
|
|
||
|
long m_lCount;
|
||
|
|
||
|
// metabase key values, these shouldn't be changed before Set()
|
||
|
CMultiSz m_mszDomainRouting;
|
||
|
CComBSTR m_strDefaultDomain;
|
||
|
CComBSTR m_strDropDir;
|
||
|
|
||
|
// current domain's property
|
||
|
CComBSTR m_strDomainName; // current domain's name
|
||
|
DWORD m_dwActionType;
|
||
|
CComBSTR m_strActionString;
|
||
|
BOOL m_fAllowEtrn;
|
||
|
DWORD m_dwDomainId;
|
||
|
|
||
|
// if local
|
||
|
CComBSTR m_strLDAPServer;
|
||
|
CComBSTR m_strAccount;
|
||
|
CComBSTR m_strPassword;
|
||
|
CComBSTR m_strLDAPContainer;
|
||
|
|
||
|
// Metabase:
|
||
|
CMetabaseFactory m_mbFactory;
|
||
|
|
||
|
// add a list of domains
|
||
|
LIST_ENTRY m_list;
|
||
|
DWORD m_dwMaxDomainId;
|
||
|
|
||
|
BOOL m_fEnumerated;
|
||
|
|
||
|
// DWORD m_dwCurrentIndex; // optimization
|
||
|
DomainEntry* m_pCurrentDomainEntry;
|
||
|
|
||
|
DomainEntry* m_pDefaultDomainEntry;
|
||
|
|
||
|
// private method
|
||
|
HRESULT SaveData();
|
||
|
|
||
|
BOOL LoadDomainProperty(DomainEntry* pDomainEntry);
|
||
|
|
||
|
DomainEntry* FindDomainEntry( LPCWSTR lpName );
|
||
|
|
||
|
BOOL ConstructListFromMetabaseValues();
|
||
|
BOOL ParseListToMetabaseValues(); // called by SaveData()
|
||
|
|
||
|
HRESULT GetFromMetabase();
|
||
|
HRESULT SaveToMetabase();
|
||
|
|
||
|
void EmptyList();
|
||
|
};
|