Source code of Windows XP (NT5)
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.
|
|
// 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(); };
|