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