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.
 
 
 
 
 
 

138 lines
4.8 KiB

//-----------------------------------------------------------------------------
//
//
// File: asyncqadm.h
//
// Description:
// Header for for CAsyncAdminQueue class. This is the base class that
// our QAPI implementation is based on.
//
// The object model for QAPI is (<>'s indicate a template class):
// CAsyncQueueBase - pure base class for async queue
// CAsyncQueue<> - original async queue implementations
// CAsyncRetryQueue<> - async queue /w retry queue
// CAsyncAdminQueue<> - Base for admin funtionality
// CAsyncAdminMailMsgQueue - MailMsg specific
// CAsyncAdminMsgRefQueue - MsgRef specific
//
// Author: Mike Swafford (MikeSwa)
//
// History:
// 12/6/2000 - MikeSwa Created (from t-toddc's summer work)
//
// Copyright (C) 2000 Microsoft Corporation
//
//-----------------------------------------------------------------------------
#ifndef __ASYNCQADM_H__
#define __ASYNCQADM_H__
#include <fifoq.h>
#include <intrnlqa.h>
#include <baseobj.h>
#include <aqstats.h>
#include <aqadmtyp.h>
#include <aqnotify.h>
#include <hndlmgr.h>
class CAQSvrInst;
//---[ CAsyncAdminQueue ]------------------------------------------------------
//
//
// Description:
// Base class that implements basic functionality of Administratable queues
// Hungarian:
//
//
//-----------------------------------------------------------------------------
template<class PQDATA, DWORD TEMPLATE_SIG>
class CAsyncAdminQueue :
public IQueueAdminAction,
public IQueueAdminQueue,
public CAsyncRetryQueue<PQDATA, TEMPLATE_SIG>,
public CBaseObject
{
private:
DWORD m_cbDomain;
LPSTR m_szDomain;
DWORD m_cbLinkName;
LPSTR m_szLinkName;
GUID m_guid;
DWORD m_dwID;
protected:
typename CFifoQueue<PQDATA>::MAPFNAPI m_pfnMessageAction;
CAQSvrInst *m_paqinst;
IAQNotify *m_pAQNotify;
CQueueHandleManager m_qhmgr;
public:
HRESULT HrInitialize(
DWORD cMaxSyncThreads,
DWORD cItemsPerATQThread,
DWORD cItemsPerSyncThread,
PVOID pvContext,
QCOMPFN pfnQueueCompletion,
QCOMPFN pfnFailedItem,
typename CFifoQueue<PQDATA>::MAPFNAPI pfnQueueFailure,
DWORD cMaxPendingAsyncCompletions = 0);
CAsyncAdminQueue(LPCSTR szDomain, LPCSTR szLinkName,
const GUID *pguid, DWORD dwID, CAQSvrInst *paqinst,
typename CFifoQueue<PQDATA>::MAPFNAPI pfnMessageAction);
~CAsyncAdminQueue();
//
// Used to set the interface to do stats updates to
//
inline void SetAQNotify(IAQNotify *pAQNotify) {m_pAQNotify = pAQNotify;};
public: //IUnknown
STDMETHOD(QueryInterface)(REFIID riid, LPVOID * ppvObj);
STDMETHOD_(ULONG, AddRef)(void) {return CBaseObject::AddRef();};
//All of these objects are allocated as part CAQSvrInst... we can
//add the assert below to make sure that someone does not relese it
//early
STDMETHOD_(ULONG, Release)(void)
{_ASSERT(m_lReferences > 1); return CBaseObject::Release();};
public: //IQueueAdminAction
STDMETHOD(HrApplyQueueAdminFunction)(
IQueueAdminMessageFilter *pIQueueAdminMessageFilter);
STDMETHOD(HrApplyActionToMessage)(
IUnknown *pIUnknownMsg,
MESSAGE_ACTION ma,
PVOID pvContext,
BOOL *pfShouldDelete);
STDMETHOD_(BOOL, fMatchesID)
(QUEUELINK_ID *QueueLinkID);
STDMETHOD(QuerySupportedActions)(DWORD *pdwSupportedActions,
DWORD *pdwSupportedFilterFlags)
{
return HrInternalQuerySupportedActions(pdwSupportedActions,
pdwSupportedFilterFlags);
};
public: //IQueueAdminQueue
STDMETHOD(HrGetQueueInfo)(
QUEUE_INFO *pliQueueInfo);
STDMETHOD(HrGetQueueID)(
QUEUELINK_ID *pQueueID);
protected: // Virutal functions used to implement msg specific actions
virtual HRESULT HrDeleteMsgFromQueueNDR(IUnknown *pIUnknownMsg) = 0;
virtual HRESULT HrDeleteMsgFromQueueSilent(IUnknown *pIUnknownMsg) = 0;
virtual HRESULT HrFreezeMsg(IUnknown *pIUnknownMsg) = 0;
virtual HRESULT HrThawMsg(IUnknown *pIUnknownMsg) = 0;
virtual HRESULT HrGetStatsForMsg(IUnknown *pIUnknownMsg, CAQStats *paqstats) = 0;
virtual HRESULT HrInternalQuerySupportedActions(DWORD *pdwSupportedActions,
DWORD *pdwSupportedFilterFlags) = 0;
};
#endif //__ASYNCQADM_H__