//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1998 - 1999 // // File: snapdata.h // //-------------------------------------------------------------------------- #ifndef _SNAPDATA_H #define _SNAPDATA_H //////////////////////////////////////////////////////////////////////// // defines for test thread messages #define WM_TIMER_THREAD_ADD_SERVER (WM_USER + 1) #define WM_TIMER_THREAD_REMOVE_SERVER (WM_USER + 2) #define WM_TIMER_THREAD_SEND_QUERY (WM_USER + 3) #define WM_TIMER_THREAD_SEND_QUERY_TEST_NOW (WM_USER + 4) ///////////////////////////////////////////////////////////////////////// // defines for filtering // filtering options #define DNS_QUERY_FILTER_DISABLED 0 #define DNS_QUERY_FILTER_NONE 1 #define DNS_QUERY_FILTER_STARTS 2 #define DNS_QUERY_FILTER_CONTAINS 3 #define DNS_QUERY_FILTER_RANGE 4 // # of items per folder: must be >=0 and <= 0xFFFFFFFF (DWORD) to serialize #define DNS_QUERY_OBJ_COUNT_DEFAULT 10000 // default value #define DNS_QUERY_OBJ_COUNT_MIN 10 // min value #define DNS_QUERY_OBJ_COUNT_MAX 999999 // max value /////////////////////////////////////////////////////////////////////////////// // GLOBAL FUNCTIONS HRESULT SaveStringHelper(LPCWSTR pwsz, IStream* pStm); HRESULT LoadStringHelper(CString& sz, IStream* pStm); HRESULT SaveDWordHelper(IStream* pStm, DWORD dw); HRESULT LoadDWordHelper(IStream* pStm, DWORD* pdw); /////////////////////////////////////////////////////////////////////////////// // FORWARD DECLARATIONS class CDNSServerNode; class CNewServerDialog; class CDNSServerWizardHolder; class CDNSServerTestQueryResult; class CDNSComponentDataObjectEx; class CDNSQueryFilterNamePage; class CDNSQueryFilterAdvancedPage; ////////////////////////////////////////////////////////////////////// // CDNSQueryFilter class CDNSQueryFilter { public: CDNSQueryFilter() { m_nFilterOption = DNS_QUERY_FILTER_NONE; m_nMaxObjectCount = DNS_QUERY_OBJ_COUNT_DEFAULT; m_bGetAll = FALSE; } ~CDNSQueryFilter(){} BOOL EditFilteringOptions(CComponentDataObject* pComponentData); // accessor methods UINT GetFilterOption() { return m_nFilterOption;} LPCWSTR GetFilterString() { if (m_nFilterOption == DNS_QUERY_FILTER_STARTS) return m_szStartsString; else if (m_nFilterOption == DNS_QUERY_FILTER_CONTAINS) return m_szContainsString; else if (m_nFilterOption == DNS_QUERY_FILTER_RANGE) return m_szRangeFrom; return NULL; } LPCWSTR GetFilterStringRange() { if (m_nFilterOption == DNS_QUERY_FILTER_RANGE) return m_szRangeTo; return NULL; } ULONG GetMaxObjectCount() { return m_nMaxObjectCount;} BOOL GetAll() { return m_bGetAll;} // serialization HRESULT Load(IStream* pStm); HRESULT Save(IStream* pStm); private: // name filtering UINT m_nFilterOption; CString m_szStartsString; CString m_szContainsString; CString m_szRangeFrom; CString m_szRangeTo; // query limit ULONG m_nMaxObjectCount; BOOL m_bGetAll; friend class CDNSQueryFilterNamePage; friend class CDNSQueryFilterAdvancedPage; }; /////////////////////////////////////////////////////////////////// // CDNSRootData class CDNSRootData : public CRootData { public: CDNSRootData(CComponentDataObject* pComponentData); virtual ~CDNSRootData(); // node info DECLARE_NODE_GUID() virtual HRESULT OnCommand(long nCommandID, DATA_OBJECT_TYPES type, CComponentDataObject* pComponentData, CNodeList* pNodeList); virtual void OnDelete(CComponentDataObject*, CNodeList*) { ASSERT(FALSE);} virtual BOOL OnRefresh(CComponentDataObject* pComponentData, CNodeList* pNodeList); virtual BOOL OnSetRefreshVerbState(DATA_OBJECT_TYPES type, BOOL* pbHide, CNodeList* pNodeList); virtual int GetImageIndex(BOOL) { return ROOT_IMAGE;} virtual LPWSTR GetDescriptionBarText(); // filtering BOOL IsAdvancedView() { return m_bAdvancedView; } CDNSQueryFilter* GetFilter() { return &m_filterObj;} virtual BOOL OnEnumerate(CComponentDataObject* pComponentData, BOOL bAsync = TRUE); // IStream manipulation helpers overrides virtual HRESULT IsDirty(); virtual HRESULT Load(IStream* pStm); virtual HRESULT Save(IStream* pStm, BOOL fClearDirty); virtual CColumnSet* GetColumnSet() { if (m_pColumnSet == NULL) { m_pColumnSet = ((CDNSComponentDataObjectBase*)GetComponentDataObject())->GetColumnSet(L"---Server Column Set---"); } return m_pColumnSet; } virtual LPCWSTR GetColumnID() { return GetColumnSet()->GetColumnID(); } HRESULT GetResultViewType(CComponentDataObject* pComponentData, LPOLESTR *ppViewType, long *pViewOptions); HRESULT OnShow(LPCONSOLE lpConsole); virtual BOOL CanExpandSync() { return TRUE; } virtual HRESULT OnSetToolbarVerbState(IToolbar* pToolbar, CNodeList* pNodeList); DECLARE_TOOLBAR_MAP() protected: virtual BOOL CanCloseSheets(); virtual LPCONTEXTMENUITEM2 OnGetContextMenuItemTable() { return CDNSRootDataMenuHolder::GetContextMenuItem(); } virtual BOOL OnAddMenuItem(LPCONTEXTMENUITEM2 pContextMenuItem2, long *pInsertionAllowed); // server testing public: void TestServers(DWORD dwCurrTime, DWORD dwTimeInterval,CComponentDataObject* pComponentData); void OnServerTestData(WPARAM wParam, LPARAM lParam, CComponentDataObject* pComponentData); private: void AddServerToThreadList(CDNSServerNode* pServerNode, CComponentDataObject* pComponentData); void RemoveServerFromThreadList(CDNSServerNode* pServerNode, CComponentDataObject* pComponentData); private: BOOL m_bAdvancedView; // view option toggle CDNSQueryFilter m_filterObj; // menu message handlers HRESULT OnConnectToServer(CComponentDataObject* pComponentData, CNodeList* pNodeList = NULL); public: BOOL OnViewOptions(CComponentDataObject* pComponentData); BOOL OnFilteringOptions(CComponentDataObject* pComponentData); BOOL IsFilteringEnabled(); void SetCreatePTRWithHost(BOOL bCreate = FALSE) { m_bCreatePTRWithHost = bCreate; } BOOL GetCreatePTRWithHost() { return m_bCreatePTRWithHost; } private: BOOL VerifyServerName(LPCTSTR lpszServerName); void AddServer(CDNSServerNode* p, CComponentDataObject* pComponentData); friend class CDNSServerWizardHolder; friend class CNewServerDialog; friend class CDNSServerNode; friend class CDNSComponentDataObjectEx; CString m_szDescriptionBar; CColumnSet* m_pColumnSet; BOOL m_bCreatePTRWithHost; }; //////////////////////////////////////////////////////////////////////// // CDNSServerTestQueryInfo class CDNSServerTestQueryInfo { public: CDNSServerTestQueryInfo() { m_serverCookie = 0; } // data CString m_szServerName; MMC_COOKIE m_serverCookie; }; //////////////////////////////////////////////////////////////////////// // CDNSServerTestQueryInfoList class CDNSServerTestQueryInfoList : public CList< CDNSServerTestQueryInfo*, CDNSServerTestQueryInfo*> { public: ~CDNSServerTestQueryInfoList() { while (!IsEmpty()) delete RemoveHead(); } }; /////////////////////////////////////////////////////////////////// // CDNSServerTestTimerThread class CDNSServerTestTimerThread : public CTimerThread { public: virtual int Run(); private: // message handlers void OnExecuteQuery(CDNSServerTestQueryInfo* pInfo, DWORD dwQueryFlags, BOOL bAsyncQuery); DNS_STATUS FindIP(LPCTSTR lpszServerName, IP_ADDRESS** pipArray, int* pnIPCount); DNS_STATUS DoNothingQuery(PIP_ARRAY pipArr, BOOL bSimple); CDNSServerTestQueryInfoList m_serverInfoList; }; #endif // _SNAPDATA_H