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

261 lines
7.1 KiB
C++

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
lbcnfg.hxx
Abstract:
Classes to handle IIS load balancing configuration
Author:
Philippe Choquier (phillich)
--*/
#if !defined( _LBCNFG_HXX )
#define _LBCNFG_HXX
#if !defined(dllexp)
#define dllexp __declspec( dllexport )
#endif
#define IISLOADBAL_REGISTRY_KEY "SOFTWARE\\Microsoft\\IISLoadBalancing"
#define IPLIST_REGISTRY_VALUE "IpList"
#define PERFMON_REGISTRY_VALUE "Perfmon"
#define STICKY_REGISTRY_VALUE "StickyDuration"
#define IPLIST_VERSION_1 1
#define IPLIST_VERSION IPLIST_VERSION_1
#define PERFLIST_VERSION_1 1
#define PERFLIST_VERSION PERFLIST_VERSION_1
//
// Private helper classes and functions
//
class CComputerBalanceCnfg {
public:
CComputerBalanceCnfg() {}
~CComputerBalanceCnfg() {}
BOOL Serialize( CStoreXBF* pX )
{ return m_ComputerName.Serialize( pX ) &&
m_IpPrivate.Serialize( pX ) &&
m_Name.Serialize( pX ); }
BOOL Unserialize( LPBYTE* ppb, LPDWORD pdw, DWORD dwIpPublic )
{ return m_ComputerName.Unserialize( ppb, pdw ) &&
m_IpPrivate.Unserialize( ppb, pdw, dwIpPublic ) &&
m_Name.Unserialize( ppb, pdw, dwIpPublic ); }
BOOL Init( LPWSTR pszName, UINT cIpPublic );
BOOL AddIpPublic()
{ return m_IpPrivate.AddEntry( L"" )!=INDEX_ERROR &&
m_Name.AddEntry( L"" )!=INDEX_ERROR; }
BOOL DeleteIpPublic( UINT iIpPublic )
{ return m_IpPrivate.DeleteEntry( iIpPublic ) &&
m_Name.DeleteEntry( iIpPublic ); }
BOOL SetIpPrivate( UINT iIpPublic, LPWSTR pszIpPrivate, LPWSTR pszName )
{ return m_IpPrivate.SetEntry( iIpPublic, pszIpPrivate) &&
m_Name.SetEntry( iIpPublic, pszName ); }
BOOL GetName( LPWSTR* ppszName )
{ *ppszName = m_ComputerName.Get(); return TRUE; }
BOOL GetIpPrivate( UINT iIpPublic, LPWSTR* ppszIpPrivate, LPWSTR* ppszName )
{ *ppszIpPrivate = m_IpPrivate.GetEntry( iIpPublic );
*ppszName = m_Name.GetEntry( iIpPublic );
return *ppszName != NULL && *ppszIpPrivate != NULL; }
private:
CAllocString m_ComputerName;
CStrPtrXBF m_IpPrivate;
CStrPtrXBF m_Name;
} ;
BOOL
SaveBlobToReg(
HKEY hKey,
LPSTR pszRegKey,
LPSTR pszRegValue,
CStoreXBF* pX
);
BOOL
LoadBlobFromReg(
HKEY hKey,
LPSTR pszRegKey,
LPSTR pszRegValue,
CStoreXBF* pX
);
//
// Class giving access to public/private IP addr mapping
//
class CIPMap {
public:
dllexp CIPMap();
dllexp ~CIPMap();
dllexp VOID Reset();
//
// Serialize all rules info to buffer ( before COM call )
//
dllexp BOOL Serialize( CStoreXBF* pX );
//
// Un-serialize all rules from buffer ( using extensible buffer class )
//
dllexp BOOL Unserialize( CStoreXBF* pX );
//
// Un-serialize all rules from buffer ( after COM call )
//
dllexp BOOL Unserialize( LPBYTE*, LPDWORD );
//
// Load / save from registry. Should not be used if you access this class through COM
// and Serialize() / Unserialize()
//
BOOL Load( HKEY hKey, LPSTR pszRegKey, LPSTR pszRegValue );
BOOL Save( HKEY hKey, LPSTR pszRegKey, LPSTR pszRegValue );
public:
//
// Server management : Add/Enum/Delete. Enum is 0-based
// server name should not include leading "\\"
//
dllexp BOOL AddComputer( LPWSTR pszName );
dllexp BOOL EnumComputer( UINT iComp, LPWSTR* ppszName );
dllexp DWORD ComputerCount() { return m_Servers.GetNbPtr(); }
dllexp BOOL DeleteComputer( UINT iComp );
//
// Public IP addr ( a.k.a. NAT resource ) management : Add/Enum/Delete. Enum is 0-based
// IP addr means IP:port, e.g. 157.56.3.4:80
//
dllexp BOOL AddIpPublic( LPWSTR pszIpPublic, LPWSTR pszName, DWORD dwSticky, DWORD dwAttr );
dllexp BOOL EnumIpPublic( UINT iIpPublic, LPWSTR* ppszIpPublic, LPWSTR* ppszName, LPDWORD pdwSticky, LPDWORD pdwAttr );
dllexp DWORD IpPublicCount() { return m_IpPublic.GetNbEntry(); }
dllexp BOOL DeleteIpPublic( UINT iIpPublic );
//
// Set/Get private IP addr for each (Server, PublicIp) target
// IP addr means IP:port, e.g. 157.56.3.4:80
// empty string means no such resource available on specified Server
//
dllexp BOOL SetIpPrivate( UINT iComp, UINT iIpPublic, LPWSTR pszIpPrivate, LPWSTR pszName );
dllexp BOOL GetIpPrivate( UINT iComp, UINT iIpPublic, LPWSTR* ppszIpPrivate, LPWSTR* ppszName );
private:
CPtrXBF m_Servers; // array of CComputerBalanceCnfg
CStrPtrXBF m_IpPublic; // list of public IP addresses
CStrPtrXBF m_Name; // list of names associated with public IP addresses
CPtrXBF m_Sticky; // array of sticky duration per IP public
CPtrXBF m_Attr; // array of dword attr per IP public
} ;
//
// Class giving access to performance counter list
//
#define LB_WEIGHT_AVAILABILITY_FLAG (DWORD)-2
#define LB_WEIGHT_NORMALIZED_FLAG (DWORD)-3
class CComputerPerfCounters {
public:
CComputerPerfCounters();
~CComputerPerfCounters();
dllexp VOID Reset();
//
// Serialize all rules info to buffer
//
dllexp BOOL Serialize( CStoreXBF* pX );
//
// Un-serialize all rules from buffer ( using extensible buffer class )
//
dllexp BOOL Unserialize( CStoreXBF* pX );
//
// Un-serialize all rules from buffer
//
dllexp BOOL Unserialize( LPBYTE*, LPDWORD );
BOOL Load( HKEY hKey, LPSTR pszRegKey, LPSTR pszRegValue );
BOOL Save( HKEY hKey, LPSTR pszRegKey, LPSTR pszRegValue );
public:
// pszPerfCounter : w/o leading "\\" + computer name, but with leading "\"
// pszServerName : w/ or w/o leading "\\"
dllexp BOOL AddPerfCounter( LPWSTR pszServerName, LPWSTR pszPerfCounter, DWORD dwWeight );
dllexp BOOL EnumPerfCounter( UINT iPerfCounter, LPWSTR* ppszServerName, LPWSTR* ppszPerfCounter, DWORD* pdwWeight );
dllexp BOOL DeletePerfCounter( UINT iPerfCounter );
dllexp BOOL SetPerfCounterWeight( UINT iPerfCounter, DWORD dwWeight );
dllexp DWORD PerfCounterCount()
{ return m_PerfCounters.GetNbEntry(); }
private:
CStrPtrXBF m_PerfCounterServers;
CStrPtrXBF m_PerfCounters;
CPtrXBF m_Weight;
} ;
//
// Class giving access to list of IP addresses on NAT box
//
class CIpEndpointList {
public:
CIpEndpointList();
~CIpEndpointList();
dllexp BOOL BuildListFromLocalhost();
dllexp VOID Reset();
//
// Serialize all rules info to buffer ( before COM call )
//
dllexp BOOL Serialize( CStoreXBF* pX );
//
// Un-serialize all rules from buffer ( using extensible buffer class )
//
dllexp BOOL Unserialize( CStoreXBF* pX );
//
// Un-serialize all rules from buffer ( as result of COM call )
//
dllexp BOOL Unserialize( LPBYTE*, LPDWORD );
//
// Enumerate IP addresses ( 0-based, returns FALSE if no more instance )
//
dllexp BOOL EnumIpEndpoint( UINT iIp, LPWSTR* ppszIp );
private:
CStrPtrXBF m_IpEndpoint; // list of IP addresses
} ;
#endif