windows-nt/Source/XPSP1/NT/net/mmc/wins/server.h
2020-09-26 16:20:57 +08:00

323 lines
8 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
/**********************************************************************/
/*
server.h
WINS server node information.
FILE HISTORY:
*/
#ifndef _SERVER_H
#define _SERVER_H
#ifndef _WINSHAND_H
#include "winshand.h"
#endif
#ifndef _CONFIG_H
#include "config.h"
#endif
#ifndef _SVRSTATS_H
#include "svrstats.h"
#endif
#ifndef _TASK_H
#include <task.h>
#endif
#ifndef _WINSMON_H
#include "winsmon.h"
#endif
class CServerStatsFrame;
#define WINS_QDATA_SERVER_INFO 0x00000001
#define WINS_SERVER_FLAGS_DEFAULT FLAG_LANMAN_COMPATIBLE | FLAG_STATUS_BAR | FLAG_AUTO_REFRESH
#define WINS_SERVER_REFRESH_DEFAULT 600
// this structure contains all of the info the background thread enumerates about
// the server and posts to the main thread
class CServerData
{
public:
CString m_strServerName;
DWORD m_dwServerIp;
CConfiguration m_config;
handle_t m_hBinding;
};
/*---------------------------------------------------------------------------
Class: CNameCacheEntry
---------------------------------------------------------------------------*/
class CNameCacheEntry
{
public:
DWORD m_dwIp;
CString m_strName;
CTime m_timeLastUpdate;
};
typedef CArray<CNameCacheEntry, CNameCacheEntry&> CNameCache;
/*---------------------------------------------------------------------------
Class: CNameThread
---------------------------------------------------------------------------*/
class CNameThread : public CWinThread
{
public:
CNameThread();
~CNameThread();
public:
void Init(CServerInfoArray * pServerInfoArray);
BOOL Start();
void Abort(BOOL fAutoDelete = TRUE);
void AbortAndWait();
BOOL FCheckForAbort();
BOOL IsRunning();
void UpdateNameCache();
BOOL GetNameFromCache(DWORD dwIp, CString & strName);
virtual BOOL InitInstance() { return TRUE; } // MFC override
virtual int Run();
private:
HANDLE m_hEventHandle;
CServerInfoArray * m_pServerInfoArray;
};
/*---------------------------------------------------------------------------
Class: CWinsServerHandler
---------------------------------------------------------------------------*/
class CWinsServerHandler : public CMTWinsHandler//public CWinsHandler
{
public:
CWinsServerHandler(ITFSComponentData* pTFSComponentData,
LPCWSTR pServerName = NULL,
BOOL fConnected = TRUE,
DWORD dwIP = 0,
DWORD dwFlags = WINS_SERVER_FLAGS_DEFAULT,
DWORD dwRefreshInterval = WINS_SERVER_REFRESH_DEFAULT);
~CWinsServerHandler();
// Interface
public:
// base handler functionality we override
OVERRIDE_NodeHandler_HasPropertyPages();
OVERRIDE_NodeHandler_CreatePropertyPages();
OVERRIDE_NodeHandler_OnAddMenuItems();
OVERRIDE_NodeHandler_OnCommand();
OVERRIDE_NodeHandler_GetString()
{
if(nCol == 0 || nCol == -1)
return GetDisplayName();
else if(nCol == 1)
return m_strConnected;
else
return NULL;
}
OVERRIDE_BaseHandlerNotify_OnCreateNodeId2();
// Result handler functionality we override
OVERRIDE_BaseHandlerNotify_OnDelete();
OVERRIDE_BaseResultHandlerNotify_OnResultRefresh();
virtual DWORD UpdateStatistics(ITFSNode * pNode);
HRESULT LoadColumns(ITFSComponent * pComponent, MMC_COOKIE cookie, LPARAM arg, LPARAM lParam);
OVERRIDE_ResultHandler_AddMenuItems();
OVERRIDE_ResultHandler_Command();
public:
// CMTWinsHandler functionality
ITFSQueryObject* OnCreateQuery(ITFSNode * pNode);
virtual void GetErrorInfo(CString & strTitle, CString & strBody, IconIdentifier * pIcon);
// implementation
BOOL GetConnected()
{
return m_fConnected;
};
const CString& GetServerAddress()
{
return m_strServerAddress;
}
const DWORD GetServerIP()
{
return m_dwIPAdd;
}
void SetServerIP(DWORD dwIPAdd)
{
m_dwIPAdd = dwIPAdd;
}
HRESULT GetActiveRegNode(ITFSNode ** ppNode)
{
Assert(ppNode);
SetI((LPUNKNOWN *) ppNode, m_spActiveReg);
return hrOK;
}
CConfiguration& GetConfig()
{
return m_cConfig;
}
void SetConfig(CConfiguration & configNew)
{
m_cConfig = configNew;
}
DWORD GetStatus()
{
return m_dwStatus;
}
handle_t GetBinding()
{
return m_hBinding;
}
DWORD GetFlags()
{
return m_dwFlags;
}
DWORD GetStatsRefreshInterval()
{
return m_dwRefreshInterval;
}
BOOL IsLocalConnection();
virtual HRESULT InitializeNode(ITFSNode * pNode);
virtual int GetImageIndex(BOOL bOpenImage);
virtual void OnHaveData(ITFSNode * pParentNode, ITFSNode * pNode);
virtual void OnHaveData(ITFSNode * pParentNode, LPARAM Data, LPARAM Type);
OVERRIDE_BaseHandlerNotify_OnPropertyChange();
DWORD ConnectToWinsServer(ITFSNode *pNode);
BOOL IsValidNetBIOSName(CString & strAddress,
BOOL fLanmanCompatible,
BOOL fWackwack // expand slashes if not present
);
DWORD GetStatistics(ITFSNode * pNode, PWINSINTF_RESULTS_T * ppStats);
DWORD ClearStatistics(ITFSNode *pNode);
// for the owner dilaog
DWORD GetOwnerConfig(PWINSINTF_RESULTS_NEW_T pResults, CString strIP);
DWORD DeleteWinsServer(DWORD dwIpAddress);
BOOL CheckIfNT351Server();
void SetExtensionName();
void SetDisplay(ITFSNode * pNode, BOOL fFQDN);
public:
// holds both the server name and the IP Address
CString m_strServerAddress;
// stores whether the server is connected to or not
CString m_strConnected;
// holds the IP Address of the server
DWORD m_dwIPAdd;
// holds the monitoring IP address, case whrwe the server is not yet connected
// so IP not known.
DWORD m_dwIPMon;
char szIPMon[MAX_PATH];
// to be made persistent, those in the Preferences dialog
// of the admin tool
DWORD m_dwFlags;
DWORD m_dwRefreshInterval;
// monitoring stuff
DWORD m_dwMsgCount;
char m_szNameToQry[STR_BUF_SIZE]; // the name to use in the queries
char m_nbtFrameBuf[MAX_NBT_PACKET_SIZE]; // buffer to store the NetBT frame
WINSINTF_RESULTS_T m_wrResults;
CServerStatsFrame m_dlgStats;
CString m_strTaskpadTitle;
// Owner info array
CServerInfoArray m_ServerInfoArray;
// Implementation
private:
// helper functions
HRESULT ShowServerStatDialog(ITFSNode* pNode);
// Task menu for the server
HRESULT DoDBBackup(ITFSNode * pNode);
HRESULT DoDBCompact(ITFSNode * pNode);
HRESULT DoDBRestore(ITFSNode * pNode);
HRESULT DoDBScavenge(ITFSNode * pNode);
HRESULT OnDoConsistencyCheck(ITFSNode * pNode);
HRESULT OnDoVersionConsistencyCheck(ITFSNode * pNode);
HRESULT OnSendPushTrigger(ITFSNode * pNode);
HRESULT OnSendPullTrigger(ITFSNode * pNode);
HRESULT OnControlService(ITFSNode * pNode, BOOL fStart);
HRESULT OnPauseResumeService(ITFSNode * pNode, BOOL fPause);
HRESULT OnRestartService(ITFSNode * pNode);
// Helpers
DWORD BackupDatabase(CString strBackupPath);
BOOL GetFolderName(CString & strPath, CString & strHelpText);
void DisConnectFromWinsServer();
// used for compacting the DB
DWORD RunApp(LPCTSTR input, LPCTSTR startingDirectory, LPSTR * output);
private:
SPITFSNode m_spActiveReg;
SPITFSNode m_spReplicationPartner;
CConfiguration m_cConfig;
handle_t m_hBinding;
DWORD m_dwStatus;
BOOL m_fConnected;
BOOL m_bExtension;
CNameThread * m_pNameThread;
};
/*---------------------------------------------------------------------------
Class: CWinsServerQueryObj
---------------------------------------------------------------------------*/
class CWinsServerQueryObj : public CWinsQueryObj
{
public:
CWinsServerQueryObj(ITFSComponentData * pTFSComponentData,
ITFSNodeMgr * pNodeMgr)
: CWinsQueryObj(pTFSComponentData, pNodeMgr) {};
STDMETHODIMP Execute();
virtual void OnEventAbort(DWORD dwData, DWORD dwType);
void AddNodes(handle_t handle);
public:
CNameThread * m_pNameThread;
CServerInfoArray * m_pServerInfoArray;
DWORD m_dwIPAdd;
};
#endif _SERVER_H