323 lines
8.3 KiB
C++
323 lines
8.3 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
|