|
|
/*++
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
|