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.
 
 
 
 
 
 

244 lines
7.9 KiB

#ifndef WLBSCONTROL_H
#define WLBSCONTROL_H
#include "cluster.h"
class CWlbsCluster;
//+----------------------------------------------------------------------------
//
// class CWlbsControl
//
// Description: This class is exported to perform cluster control operation,
// as well as get Cluster objects
//
//
// History: fengsun Created Header 3/2/00
//
//+----------------------------------------------------------------------------
class __declspec(dllexport) CWlbsControl
{
friend DWORD WINAPI WlbsCommitChanges(DWORD cluster);
public:
CWlbsControl();
~CWlbsControl();
DWORD Initialize();
bool ReInitialize();
//
// ChrisDar 2002-01-10
//
// Though this is a public method it is intended to be called internally.
// External use of query should go through the WlbsQuery method that
// takes a DWORD for the cluster argument.
//
DWORD WlbsQuery(CWlbsCluster* pCluster,
DWORD host,
PWLBS_RESPONSE response,
PDWORD num_hosts,
PDWORD host_map,
PFN_QUERY_CALLBACK pfnQueryCallBack);
DWORD WlbsQuery(DWORD cluster,
DWORD host,
PWLBS_RESPONSE response,
PDWORD num_hosts,
PDWORD host_map,
PFN_QUERY_CALLBACK pfnQueryCallBack);
DWORD WlbsQueryState
(
DWORD cluster,
DWORD host,
DWORD operation,
PNLB_OPTIONS pOptions,
PWLBS_RESPONSE pResponse,
PDWORD pcResponses
);
DWORD WlbsSuspend(DWORD cluster,
DWORD host,
PWLBS_RESPONSE response,
PDWORD num_hosts);
DWORD WlbsResume(DWORD cluster,
DWORD host,
PWLBS_RESPONSE response,
PDWORD num_hosts);
DWORD WlbsStart(DWORD cluster,
DWORD host,
PWLBS_RESPONSE response,
PDWORD num_hosts);
DWORD WlbsStop(DWORD cluster,
DWORD host,
PWLBS_RESPONSE response,
PDWORD num_hosts);
DWORD WlbsDrainStop(DWORD cluster,
DWORD host,
PWLBS_RESPONSE response,
PDWORD num_hosts);
DWORD WlbsEnable(DWORD cluster,
DWORD host,
PWLBS_RESPONSE response,
PDWORD num_hosts,
DWORD vip,
DWORD port);
DWORD WlbsDisable(DWORD cluster,
DWORD host,
PWLBS_RESPONSE response,
PDWORD num_hosts,
DWORD vip,
DWORD port);
DWORD WlbsDrain(DWORD cluster,
DWORD host,
PWLBS_RESPONSE response,
PDWORD num_hosts,
DWORD vip,
DWORD port);
//
// Set remote control parameters
//
void WlbsPortSet(DWORD cluster, WORD port);
void WlbsPasswordSet(DWORD cluster, const WCHAR* password);
void WlbsCodeSet(DWORD cluster, DWORD passw);
void WlbsDestinationSet(DWORD cluster, DWORD dest);
void WlbsTimeoutSet(DWORD cluster, DWORD milliseconds);
DWORD EnumClusters(OUT DWORD* pdwAddresses, IN OUT DWORD* pdwNum); // for API wrapper
DWORD GetClusterNum() { return m_dwNumCluster;}
DWORD EnumClusterObjects(OUT CWlbsCluster** &ppClusters, OUT DWORD* pdwNum);
CWlbsCluster* GetClusterFromIp(DWORD dwClusterIp);
CWlbsCluster* GetClusterFromIpOrIndex(DWORD dwClusterIpOrIndex);
HANDLE GetDriverHandle() {return m_hdl;}
//
// GetClusterFromAdapter looks up an adapter based on its GUID.
//
CWlbsCluster*
GetClusterFromAdapter(
IN const GUID &AdapterGuid
);
//
// ValidateParam validates and fixes up the specified parameters structure. It has no side effects other than changing some
// fields within paramp, such as IP addresses which may be reformatted into canonical form.
//
BOOL
ValidateParam(
IN OUT PWLBS_REG_PARAMS paramp
);
//
// Performs local cluster-wide control operations on the specified GUID.
//
/* OBSOLETE
DWORD LocalClusterControl(
IN const GUID& AdapterGuid,
IN LONG ioctl
);
*/
BOOLEAN IsClusterMember (DWORD dwClusterIp);
protected:
struct WLBS_CLUSTER_PARAMS
{
DWORD cluster;
DWORD passw;
DWORD timeout;
DWORD dest;
WORD port;
WORD valid;
};
enum { WLBS_MAX_CLUSTERS = 128};
WLBS_CLUSTER_PARAMS m_cluster_params [WLBS_MAX_CLUSTERS]; // Cluster settings for remote control
BOOL m_init_once; // whether WlbsInit is called
BOOL m_remote_ctrl; // Whether remote operation can be performed on this machine
BOOL m_local_ctrl; // Whether local operation can be performed on this machine
HANDLE m_hdl; // handle to the device object
// HANDLE lock; // An mutex
DWORD m_def_dst_addr; // Default destination address for all clusters, set by WlbsDestinationSet
DWORD m_def_timeout;// Time out value for remote control
WORD m_def_port; // UDP port for remote control
DWORD m_def_passw; // Default password for remote control
HANDLE m_registry_lock; // used for mutually exclusive access to the registry, should use named lock
DWORD m_dwNumCluster; // number of clusters on this host
CWlbsCluster* m_pClusterArray[WLBS_MAX_CLUSTERS]; // an array of all clusters
DWORD GetInitResult()
{
if (m_local_ctrl && m_remote_ctrl)
return WLBS_PRESENT;
if (m_local_ctrl)
return WLBS_LOCAL_ONLY;
else if (m_remote_ctrl)
return WLBS_REMOTE_ONLY;
else
return WLBS_INIT_ERROR;
};
bool IsInitialized() const {return m_hdl != INVALID_HANDLE_VALUE;}
DWORD RemoteQuery(DWORD cluster,
DWORD host,
PWLBS_RESPONSE response,
PDWORD num_hosts,
PDWORD host_map,
PFN_QUERY_CALLBACK pfnQueryCallBack);
DWORD WlbsRemoteControl(LONG ioctl,
PIOCTL_CVY_BUF pin_bufp,
PIOCTL_CVY_BUF pout_bufp,
PWLBS_RESPONSE pcvy_resp,
PDWORD nump,
DWORD trg_addr,
DWORD hst_addr,
PIOCTL_REMOTE_OPTIONS optionsp,
PFN_QUERY_CALLBACK pfnQueryCallBack);
DWORD WlbsQueryLocalState
(
CWlbsCluster * pCluster,
DWORD operation,
PNLB_OPTIONS pOptions,
PWLBS_RESPONSE pResponse,
PDWORD pcResponses
);
DWORD WlbsQueryRemoteState
(
DWORD cluster,
DWORD host,
DWORD operation,
PNLB_OPTIONS pOptions,
PWLBS_RESPONSE pResponse,
PDWORD pcResponses
);
};
DWORD WlbsLocalControl(HANDLE hDevice, const GUID& AdapterGuid,
LONG ioctl, PIOCTL_CVY_BUF in_bufp,
PIOCTL_CVY_BUF out_bufp, PIOCTL_LOCAL_OPTIONS optionsp);
DWORD WINAPI WlbsLocalControlWrapper(HANDLE hdl,
const GUID& AdapterGuid,
LONG ioctl);
#endif