windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/loadbal/serv/iislbs.hxx
2020-09-26 16:20:57 +08:00

149 lines
2.6 KiB
C++

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
iislbs.hxx
Abstract:
Definition of Load balancing structures
Author:
Philippe Choquier (phillich)
--*/
#if !defined( _IISLBS_HXX )
#define _IISLBS_HXX
#include <iislbh.hxx>
#define PERFMON_SLEEP_TIME (10*1000)
#define USER_TO_KERNEL_INTERVAL (60*1000)
#define STOP_PERFMON_THREAD_TIMEOUT (140*1000)
class CPerfmonThreadControlBlock {
public:
CAllocString m_ServerName;
HANDLE m_hStopEvent;
};
class CKernelIpMapHelper : public CKernelIpMapMinHelper {
public:
CKernelIpMapHelper();
BOOL Init();
LPWSTR GetServerName( UINT i )
{ return m_ServerNames.GetEntry( i ); }
BOOL
SetPublicIpList(
CIPMap* pIpMap
);
BOOL
StringToIpEndpoint(
LPWSTR pNew,
CKernelIpEndpoint* pIp
);
BOOL
IpEndpointToString(
CKernelIpEndpoint* pIp,
LPWSTR pAddr,
DWORD cAddr
);
BOOL
AddServer(
LPWSTR pNew
);
BOOL
RemoveServer(
UINT i
);
BOOL
StopServerThread(
DWORD iServer,
DWORD dwTimeOut
);
BOOL
StartServerThread(
DWORD iServer
);
// private IP list management
BOOL
CheckAndAddPrivateIp(
CKernelIpEndpoint* pEndpoint,
BOOL fAddIfNotPresent,
LPUINT piFound
);
VOID
ResetPrivateIpList()
{ m_PrivateIpList.Reset(); }
DWORD
PrivateIpListCount()
{ return m_PrivateIpList.GetUsed() / sizeof(CKernelIpEndpoint); }
BOOL
EnumPrivateIpList(
UINT iIndex,
CKernelIpEndpoint** ppEndpoint
);
private:
CStrPtrXBF m_ServerNames;
CPtrXBF m_PerfmonThreadHandle;
CPtrXBF m_PerfmonThreadStopEvent;
CStoreXBF m_PrivateIpList;
} ;
// list of computers , load
// list of public IP addresses
// list of counters : as CComputerPerfCounters
// array (computers)(public IP addresses->private IP address | load )
// one thread per computer to query perfmon counters, wait on stop event
// control block : ptr to computer name, array
BOOL
KernelConfigToIpList(
XBF* pxbf
);
BOOL
IpListToKernelConfig(
CIPMap* pIpMap
);
BOOL
KernelConfigToPerfmonCounters(
XBF* pxbf
);
BOOL
PerfmonCountersToKernelConfig(
CComputerPerfCounters* pPerfmonCounters
);
extern "C" DWORD WINAPI
PermonThread(
LPVOID pV
);
extern "C" DWORD WINAPI
UserToKernelThread(
LPVOID pV
);
#endif