|
|
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
rtsrc.h
Abstract:
Implementation of IRoutingSource interface
Author:
Fei Su (feisu) 9/22/97 Created.
Revision History:
--*/
#include "stdafx.h"
#include "smtpadm.h"
#include "smtpprop.h"
#include "rtsrc.h"
#include "oleutil.h"
#include "metautil.h"
// Must define THIS_FILE_* macros to use SmtpCreateException()
#define THIS_FILE_HELP_CONTEXT 0
#define THIS_FILE_PROG_ID _T("Smtpadm.VirtualServer.1")
#define THIS_FILE_IID IID_IRoutingSource
#define RS_RELATIVE_NAME _T("RoutingSources")
#define ID_DS_TYPE 0
#define ID_DS_DATA_DIRECTORY 1
#define ID_DS_DEFAULT_MAIL_ROOT 2
#define ID_DS_BIND_TYPE 3
#define ID_DS_SCHEMA_TYPE 4
#define ID_DS_HOST 5
#define ID_DS_NAMING_CONTEXT 6
#define ID_DS_ACCOUNT 7
#define ID_DS_PASSWORD 8
#define DEFAULT_DS_TYPE _T("LDAP")
#define DEFAULT_DS_DATA_DIRECTORY _T("")
#define DEFAULT_DS_DEFAULT_MAIL_ROOT _T("/Mailbox")
#define DEFAULT_DS_BIND_TYPE _T("None")
#define DEFAULT_DS_SCHEMA_TYPE _T("Exchange5")
#define DEFAULT_DS_HOST _T("")
#define DEFAULT_DS_NAMING_CONTEXT _T("")
#define DEFAULT_DS_ACCOUNT _T("")
#define DEFAULT_DS_PASSWORD _T("")
/////////////////////////////////////////////////////////////////////////////
//
STDMETHODIMP CRoutingSource::InterfaceSupportsErrorInfo(REFIID riid) { static const IID* arr[] = { &IID_IRoutingSource, };
for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++) { if (InlineIsEqualGUID(*arr[i],riid)) return S_OK; } return S_FALSE; }
//////////////////////////////////////////////////////////////////////
// Properties:
//////////////////////////////////////////////////////////////////////
STDMETHODIMP CRoutingSource::get_Type( BSTR * pstrType ) { return StdPropertyGet ( m_strType, pstrType ); }
STDMETHODIMP CRoutingSource::put_Type( BSTR strType ) { return StdPropertyPut ( &m_strType, strType, &m_dwFC, BitMask(ID_DS_TYPE)); }
STDMETHODIMP CRoutingSource::get_DataDirectory( BSTR * pstrDataDirectory ) { return StdPropertyGet ( m_strDataDirectory, pstrDataDirectory ); }
STDMETHODIMP CRoutingSource::put_DataDirectory( BSTR strDataDirectory ) { return StdPropertyPut ( &m_strDataDirectory, strDataDirectory, &m_dwFC, BitMask(ID_DS_DATA_DIRECTORY) ); }
STDMETHODIMP CRoutingSource::get_DefaultMailRoot( BSTR * pstrDefaultMailRoot ) { return StdPropertyGet ( m_strDefaultMailroot, pstrDefaultMailRoot ); }
STDMETHODIMP CRoutingSource::put_DefaultMailRoot( BSTR strDefaultMailRoot ) { return StdPropertyPut ( &m_strDefaultMailroot, strDefaultMailRoot, &m_dwFC, BitMask(ID_DS_DEFAULT_MAIL_ROOT) ); }
STDMETHODIMP CRoutingSource::get_BindType( BSTR * pstrBindType ) { return StdPropertyGet ( m_strBindType, pstrBindType ); }
STDMETHODIMP CRoutingSource::put_BindType( BSTR strBindType ) { return StdPropertyPut ( &m_strBindType, strBindType, &m_dwFC, BitMask(ID_DS_BIND_TYPE) ); }
STDMETHODIMP CRoutingSource::get_SchemaType( BSTR * pstrSchemaType ) { return StdPropertyGet ( m_strSchemaType, pstrSchemaType ); }
STDMETHODIMP CRoutingSource::put_SchemaType( BSTR strSchemaType ) { return StdPropertyPut ( &m_strSchemaType, strSchemaType, &m_dwFC, BitMask(ID_DS_SCHEMA_TYPE) ); }
STDMETHODIMP CRoutingSource::get_Host( BSTR * pstrHost ) { return StdPropertyGet ( m_strHost, pstrHost ); }
STDMETHODIMP CRoutingSource::put_Host( BSTR strHost ) { return StdPropertyPut ( &m_strHost, strHost, &m_dwFC, BitMask(ID_DS_HOST) ); }
STDMETHODIMP CRoutingSource::get_NamingContext( BSTR * pstrNamingContext ) { return StdPropertyGet ( m_strNamingContext, pstrNamingContext ); }
STDMETHODIMP CRoutingSource::put_NamingContext( BSTR strNamingContext ) { return StdPropertyPut ( &m_strNamingContext, strNamingContext, &m_dwFC, BitMask(ID_DS_NAMING_CONTEXT) ); }
STDMETHODIMP CRoutingSource::get_Account( BSTR * pstrAccount ) { return StdPropertyGet ( m_strAccount, pstrAccount ); }
STDMETHODIMP CRoutingSource::put_Account( BSTR strAccount ) { return StdPropertyPut ( &m_strAccount, strAccount, &m_dwFC, BitMask(ID_DS_ACCOUNT) ); }
STDMETHODIMP CRoutingSource::get_Password( BSTR * pstrPassword ) { return StdPropertyGet ( m_strPassword, pstrPassword ); }
STDMETHODIMP CRoutingSource::put_Password( BSTR strPassword ) { return StdPropertyPut ( &m_strPassword, strPassword, &m_dwFC, BitMask(ID_DS_PASSWORD) ); }
///////////////////////////////////////////////////////////////////
// Get / Set methods (internal)
///////////////////////////////////////////////////////////////////
HRESULT CRoutingSource::Get(CMetabaseKey * pMBVirtualServer) { TraceFunctEnter ( "CRoutingSource::Get" ); HRESULT hr = NOERROR;
if( !pMBVirtualServer ) BAIL_WITH_FAILURE(hr, E_POINTER);
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_TYPE, DEFAULT_DS_TYPE, &m_strType, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_DATA_DIRECTORY, DEFAULT_DS_DATA_DIRECTORY, &m_strDataDirectory, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_DEFAULT_MAIL_ROOT, DEFAULT_DS_DEFAULT_MAIL_ROOT, &m_strDefaultMailroot, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_BIND_TYPE, DEFAULT_DS_BIND_TYPE, &m_strBindType, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_SCHEMA_TYPE, DEFAULT_DS_SCHEMA_TYPE, &m_strSchemaType, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_HOST, DEFAULT_DS_HOST, &m_strHost, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_NAMING_CONTEXT, DEFAULT_DS_NAMING_CONTEXT, &m_strNamingContext, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_ACCOUNT, DEFAULT_DS_ACCOUNT, &m_strAccount, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( !StdGetMetabaseProp(pMBVirtualServer, MD_SMTP_DS_PASSWORD, DEFAULT_DS_PASSWORD, &m_strPassword, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
Exit: TraceFunctLeave (); return hr; }
HRESULT CRoutingSource::Set(CMetabaseKey * pMBVirtualServer) { TraceFunctEnter ( "CRoutingSource::Set" ); HRESULT hr = NOERROR;
if( !pMBVirtualServer ) BAIL_WITH_FAILURE(hr, E_POINTER);
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_TYPE)) && !StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_TYPE, m_strType, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_DATA_DIRECTORY)) && !StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_DATA_DIRECTORY, m_strDataDirectory, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_DEFAULT_MAIL_ROOT)) && !StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_DEFAULT_MAIL_ROOT, m_strDefaultMailroot, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_BIND_TYPE)) && !StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_BIND_TYPE, m_strBindType, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_SCHEMA_TYPE)) && !StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_SCHEMA_TYPE, m_strSchemaType, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_HOST)) && !StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_HOST, m_strHost, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_NAMING_CONTEXT)) && !StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_NAMING_CONTEXT, m_strNamingContext, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_ACCOUNT)) && !StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_ACCOUNT, m_strAccount, RS_RELATIVE_NAME) ) BAIL_WITH_FAILURE(hr, GetLastError());
if( IS_FLAG_SET(m_dwFC, BitMask(ID_DS_PASSWORD)) && !StdPutMetabaseProp(pMBVirtualServer, MD_SMTP_DS_PASSWORD, m_strPassword, RS_RELATIVE_NAME, IIS_MD_UT_SERVER, METADATA_SECURE | METADATA_INHERIT) ) BAIL_WITH_FAILURE(hr, GetLastError());
Exit: TraceFunctLeave (); return hr; }
|