Leaked source code of windows server 2003
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.
 
 
 
 
 
 

178 lines
4.8 KiB

//+------------------------------------------------------------
//
// Copyright (C) 1998, Microsoft Corporation
//
// File: icatdsparam.h
//
// Contents: NT5's implementation of ICategorizerParameters
//
// Classes:
// CICategorizerParametersIMP
// CICategorizerRequestedAttributesIMP
//
// Functions:
//
// History:
// jstamerj 980611 16:16:46: Created.
//
//-------------------------------------------------------------
#include "smtpevent.h"
#include "caterr.h"
#include <rwex.h>
#define SIGNATURE_CICategorizerParametersIMP ((DWORD)'ICPI')
#define SIGNATURE_CICategorizerParametersIMP_Invalid ((DWORD)'XCPI')
#define DSPARAMETERS_DEFAULT_ATTR_ARRAY_SIZE 25
class CICategorizerRequestedAttributesIMP;
CatDebugClass(CICategorizerParametersIMP),
public ICategorizerParametersEx
{
public:
//IUnknown
STDMETHOD (QueryInterface) (REFIID iid, LPVOID *ppv);
STDMETHOD_(ULONG, AddRef) ();
STDMETHOD_(ULONG, Release) ();
public:
//ICategorizerParametersEx
STDMETHOD(GetDSParameterA)(
IN DWORD dwDSParameter,
OUT LPSTR *ppszValue);
STDMETHOD(GetDSParameterW)(
IN DWORD dwDSParameter,
OUT LPWSTR *ppszValue);
STDMETHOD(SetDSParameterA)(
IN DWORD dwDSParameter,
IN LPCSTR pszValue);
STDMETHOD(RequestAttributeA)(
IN LPCSTR pszName);
STDMETHOD(GetAllAttributes)(
OUT LPSTR **prgszAllAttributes)
{
return E_NOTIMPL;
}
STDMETHOD(ReserveICatItemPropIds)(
IN DWORD dwNumPropIdsRequested,
OUT DWORD *pdwBeginningPropId);
STDMETHOD(ReserveICatListResolvePropIds)(
IN DWORD dwNumPropIdsRequested,
OUT DWORD *pdwBeginningPropId);
STDMETHOD(GetCCatConfigInfo)(
OUT PCCATCONFIGINFO *ppCCatConfigInfo);
STDMETHOD(GetRequestedAttributes)(
OUT ICategorizerRequestedAttributes **ppIRequestedAttributes);
STDMETHOD(RegisterCatLdapConfigInterface)(
IN ICategorizerLdapConfig *pICatLdapConfigInfo);
STDMETHOD(GetLdapConfigInterface)(
OUT ICategorizerLdapConfig **ppICatLdapConfigInfo);
private:
CICategorizerParametersIMP(
PCCATCONFIGINFO pCCatConfigInfo,
DWORD dwInitialICatItemProps,
DWORD dwInitialICatListResolveProps,
ISMTPServerEx *pISMTPServerEx);
~CICategorizerParametersIMP();
VOID SetReadOnly(BOOL fReadOnly) { m_fReadOnly = fReadOnly; }
DWORD GetNumPropIds_ICatItem() { return m_dwCurPropId_ICatItem; }
DWORD GetNumPropIds_ICatListResolve() { return m_dwCurPropId_ICatListResolve; }
ISMTPServerEx * GetISMTPServerEx()
{
return m_pISMTPServerEx;
}
private:
DWORD m_dwSignature;
ULONG m_cRef;
BOOL m_fReadOnly;
CICategorizerRequestedAttributesIMP *m_pCIRequestedAttributes;
DWORD m_dwCurPropId_ICatItem;
DWORD m_dwCurPropId_ICatListResolve;
LPSTR m_rgszDSParameters[PHAT_DSPARAMETER_ENDENUMMESS];
LPWSTR m_rgwszDSParameters[PHAT_DSPARAMETER_ENDENUMMESS];
PCCATCONFIGINFO m_pCCatConfigInfo;
CExShareLock m_sharelock;
ICategorizerLdapConfig *m_pICatLdapConfigInfo;
ISMTPServerEx *m_pISMTPServerEx;
friend class CCategorizer;
};
CatDebugClass(CICategorizerRequestedAttributesIMP),
public ICategorizerRequestedAttributes
{
public:
//IUnknown
STDMETHOD (QueryInterface) (REFIID iid, LPVOID *ppv);
STDMETHOD_(ULONG, AddRef) ()
{
return InterlockedIncrement((PLONG)&m_ulRef);
}
STDMETHOD_(ULONG, Release) ()
{
ULONG ulRet;
ulRet = InterlockedDecrement((PLONG)&m_ulRef);
if(ulRet == 0)
delete this;
return ulRet;
}
public:
//ICategorizerRequestedAttributes
STDMETHOD (GetAllAttributes) (
OUT LPSTR **prgszAllAttributes);
STDMETHOD (GetAllAttributesW) (
OUT LPWSTR **prgszAllAttributes);
private:
CICategorizerRequestedAttributesIMP(ISMTPServerEx *pISMTPServerEx);
~CICategorizerRequestedAttributesIMP();
HRESULT ReAllocArrayIfNecessary(LONG lNewAttributeCount);
HRESULT AddAttribute(LPCSTR pszAttribute);
HRESULT FindAttribute(LPCSTR pszAttribute);
ULONG GetReferenceCount()
{
return m_ulRef;
}
ISMTPServerEx * GetISMTPServerEx()
{
return m_pISMTPServerEx;
}
private:
#define SIGNATURE_CICATEGORIZERREQUESTEDATTRIBUTESIMP (DWORD)'ICRA'
#define SIGNATURE_CICATEGORIZERREQUESTEDATTRIBUTESIMP_INVALID (DWORD)'XCRA'
DWORD m_dwSignature;
LONG m_ulRef;
LONG m_lAttributeArraySize;
LPSTR *m_rgszAttributeArray;
LPWSTR *m_rgwszAttributeArray;
LONG m_lNumberAttributes;
ISMTPServerEx *m_pISMTPServerEx;
friend class CICategorizerParametersIMP;
};