327 lines
8.8 KiB
C++
327 lines
8.8 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
actreg.h
|
|
WINS active registrations node information.
|
|
|
|
FILE HISTORY:
|
|
|
|
*/
|
|
|
|
#include "loadrecs.h"
|
|
|
|
#ifndef _ACTREG_H
|
|
#define _ACTREG_H
|
|
|
|
#ifndef _WINSHAND_H
|
|
#include "winshand.h"
|
|
#endif
|
|
|
|
#ifndef _WINSDB_H
|
|
#include "winsdb.h"
|
|
#endif
|
|
|
|
#ifndef _MULTIP_H
|
|
#include "multip.h"
|
|
#endif
|
|
|
|
#ifndef _BUSYDLG_H
|
|
#include "..\common\busydlg.h"
|
|
#endif
|
|
|
|
#ifndef _VERIFY_H
|
|
#include "verify.h"
|
|
#endif
|
|
|
|
#ifndef _CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
typedef struct WinsStrRecord_t
|
|
{
|
|
int nIndex;
|
|
CString strName;
|
|
CString strExpiration;
|
|
CString strActive;
|
|
CString strStatic;
|
|
CString strIPAdd;
|
|
CString strOwner;
|
|
CString strType;
|
|
CString strVersion;
|
|
} WinsStrRecord;
|
|
|
|
typedef enum _ACTREG_COL
|
|
{
|
|
ACTREG_COL_NAME,
|
|
ACTREG_COL_TYPE,
|
|
ACTREG_COL_IPADDRESS,
|
|
ACTREG_COL_STATE,
|
|
ACTREG_COL_STATIC,
|
|
ACTREG_COL_OWNER,
|
|
ACTREG_COL_VERSION,
|
|
ACTREG_COL_EXPIRATION,
|
|
ACTREG_COL_MAX
|
|
};
|
|
|
|
class CDlgWorkerThread;
|
|
|
|
|
|
typedef CList<WinsStrRecord*,WinsStrRecord*> RecordListBase;
|
|
typedef CArray<WINSERVERS, WINSERVERS> WinsServersArray;
|
|
|
|
|
|
class RecordList : public RecordListBase
|
|
{
|
|
public:
|
|
~RecordList()
|
|
{
|
|
RemoveAllEntries();
|
|
}
|
|
|
|
WinsStrRecord * FindItem(int nIndex)
|
|
{
|
|
WinsStrRecord * pRec = NULL;
|
|
POSITION pos = GetHeadPosition();
|
|
while (pos)
|
|
{
|
|
WinsStrRecord * pCurRec = GetNext(pos);
|
|
if (pCurRec->nIndex == nIndex)
|
|
{
|
|
pRec = pCurRec;
|
|
break;
|
|
}
|
|
}
|
|
return pRec;
|
|
}
|
|
|
|
void RemoveAllEntries()
|
|
{
|
|
// cleanup the list
|
|
while (!IsEmpty())
|
|
delete RemoveHead();
|
|
}
|
|
|
|
POSITION AddTail(WinsStrRecord * pwsr)
|
|
{
|
|
// Sets a maximum size. If we hit this we remove the oldest element.
|
|
// this works because we always add to the tail of the list.
|
|
if ( GetCount() > 500 )
|
|
{
|
|
delete RemoveHead();
|
|
}
|
|
|
|
return RecordListBase::AddTail(pwsr);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
class CSortWorker : public CDlgWorkerThread
|
|
{
|
|
public:
|
|
CSortWorker(IWinsDatabase * pCurrentDatabase, int nColumn, DWORD dwSortOptions);
|
|
~CSortWorker();
|
|
|
|
void OnDoAction();
|
|
|
|
private:
|
|
IWinsDatabase * m_pCurrentDatabase;
|
|
int m_nColumn;
|
|
DWORD m_dwSortOptions;
|
|
};
|
|
|
|
/*---------------------------------------------------------------------------
|
|
Class: CActiveRegistrationsHandler
|
|
---------------------------------------------------------------------------*/
|
|
class CActiveRegistrationsHandler : public CMTWinsHandler
|
|
|
|
{
|
|
// Interface
|
|
public:
|
|
CActiveRegistrationsHandler(ITFSComponentData *pCompData);
|
|
~CActiveRegistrationsHandler();
|
|
|
|
// base handler functionality we override
|
|
OVERRIDE_NodeHandler_HasPropertyPages();
|
|
OVERRIDE_NodeHandler_CreatePropertyPages();
|
|
OVERRIDE_NodeHandler_DestroyHandler();
|
|
|
|
OVERRIDE_NodeHandler_OnAddMenuItems();
|
|
OVERRIDE_NodeHandler_OnCommand();
|
|
|
|
OVERRIDE_NodeHandler_GetString();
|
|
OVERRIDE_BaseHandlerNotify_OnCreateNodeId2();
|
|
OVERRIDE_BaseHandlerNotify_OnExpand();
|
|
|
|
OVERRIDE_BaseResultHandlerNotify_OnResultSelect();
|
|
OVERRIDE_BaseResultHandlerNotify_OnResultDelete();
|
|
OVERRIDE_BaseResultHandlerNotify_OnResultRefresh();
|
|
|
|
OVERRIDE_ResultHandler_AddMenuItems();
|
|
OVERRIDE_ResultHandler_Command();
|
|
OVERRIDE_ResultHandler_OnGetResultViewType();
|
|
OVERRIDE_ResultHandler_GetVirtualString();
|
|
OVERRIDE_ResultHandler_GetVirtualImage();
|
|
OVERRIDE_ResultHandler_CreatePropertyPages();
|
|
OVERRIDE_ResultHandler_HasPropertyPages();
|
|
|
|
// base result handler overridees
|
|
|
|
STDMETHODIMP CacheHint(int nStartIndex, int nEndIndex);
|
|
STDMETHODIMP SortItems(int nColumn,
|
|
DWORD dwSortOptions,
|
|
LPARAM lUserParam);
|
|
|
|
HRESULT SetVirtualLbSize(ITFSComponent * pComponent, LONG_PTR data);
|
|
|
|
// needed for background threading with a QueryObject
|
|
virtual void OnHaveData(ITFSNode * pParentNode, LPARAM Data, LPARAM Type);
|
|
ITFSQueryObject* OnCreateQuery(ITFSNode * pNode);
|
|
|
|
// multi select support
|
|
virtual const GUID * GetVirtualGuid(int nIndex)
|
|
{
|
|
return &GUID_WinsActiveRegistrationLeafNodeType;
|
|
}
|
|
|
|
public:
|
|
// CWinsHandler overrides
|
|
virtual HRESULT InitializeNode(ITFSNode * pNode);
|
|
|
|
// base result handler overrides
|
|
OVERRIDE_BaseHandlerNotify_OnPropertyChange();
|
|
OVERRIDE_BaseResultHandlerNotify_OnResultPropertyChange();
|
|
|
|
virtual int GetImageIndex(BOOL bOpenImage);
|
|
void GetServerName(ITFSNode * pNode, CString &strServerName);
|
|
|
|
HRESULT OnImportLMHOSTS(ITFSNode* pNode);
|
|
HRESULT OnExportEntries();
|
|
BOOL IsLocalConnection(ITFSNode *pNode);
|
|
HRESULT ImportStaticMappingsFile(ITFSNode *pNode, CString strTmpFile,BOOL fDelete);
|
|
DWORD RemoteTmp(CString & strDir, CString & strPrefix, CString & strRemoteFile);
|
|
HRESULT EditMapping(ITFSNode *pNode, ITFSComponent *pComponent, int nIndex);
|
|
HRESULT OnCheckRegNames(ITFSNode* pNode);
|
|
HRESULT OnDeleteOwner(ITFSNode* pNode);
|
|
void CheckNameConsistency(ITFSNode* pNode, BOOL fVerifyWithPartners);
|
|
HRESULT RefreshResults(ITFSNode *pNode);
|
|
|
|
// helpers
|
|
public:
|
|
HRESULT OnCreateMapping(ITFSNode *pNode);
|
|
HRESULT OnDatabaseLoadStart(ITFSNode *pNode);
|
|
HRESULT OnDatabaseLoadStop(ITFSNode *pNode);
|
|
HRESULT AddMapping(ITFSNode* pNode);
|
|
void GetStateString(DWORD dwState, CString& strType);
|
|
void FilterCleanup(ITFSNode *pNode);
|
|
|
|
void GetVersionInfo(LONG lLowWord, LONG lHighWord, CString& strVers);
|
|
void CleanNetBIOSName(LPCSTR lpszSrc,
|
|
CString & strDest,
|
|
BOOL fExpandChars,
|
|
BOOL fTruncate,
|
|
BOOL fLanmanCompatible,
|
|
BOOL fOemName,
|
|
BOOL fWackwack,
|
|
int nLength);
|
|
PWINSINTF_RECORD_ACTION_T QueryForName(ITFSNode *pNode, PWINSINTF_RECORD_ACTION_T pRecAction, BOOL fStatic = TRUE);
|
|
void GetStaticTypeString(DWORD dwState, CString& strStaticType);
|
|
DWORD TombstoneRecords(ITFSComponent *pComponent, WinsRecord* pws);
|
|
DWORD TombstoneAllRecords(DWORD dwServerIpAddress, ITFSNode * pNode);
|
|
HRESULT UpdateRecord(ITFSComponent *pComponenet, WinsRecord *pws, int nDelIndex);
|
|
BOOL GetRecordOwner(ITFSNode * pNode, WinsRecord * pWinsRecord);
|
|
void GetOwnerInfo(CServerInfoArray & serverInfoArray);
|
|
HRESULT BuildOwnerArray(handle_t hBinding);
|
|
void SetServer(ITFSNode * pServer) { m_spServerNode.Set(pServer); }
|
|
BOOL IsLanManCompatible();
|
|
|
|
public:
|
|
CLoadRecords m_dlgLoadRecords;
|
|
|
|
SPIWinsDatabase m_spWinsDatabase;
|
|
SPITFSNode m_spServerNode;
|
|
IWinsDatabase * m_pCurrentDatabase;
|
|
CString m_strFindName;
|
|
BOOL m_fMatchCase;
|
|
BOOL m_fFindNameOrIP; // TRUE for Name
|
|
|
|
// for the static mapping dialog
|
|
CString m_strStaticMappingName;
|
|
CString m_strStaticMappingScope;
|
|
CStringArray m_strArrayStaticMappingIPAddress;
|
|
CString m_strStaticMappingType;
|
|
int m_nStaticMappingType;
|
|
CDWordArray m_lArrayIPAddress;
|
|
|
|
CMultipleIpNamePair m_Multiples;
|
|
ULONG m_nSelectedIndex;
|
|
|
|
// for the combobox of Find record
|
|
CStringArray m_strFindNamesArray;
|
|
|
|
NameTypeMapping m_NameTypeMap;
|
|
|
|
CServerInfoArray * m_pServerInfoArray;
|
|
BOOL m_fLoadedOnce;
|
|
BOOL m_fFindLoaded;
|
|
BOOL m_fDbLoaded;
|
|
BOOL m_fForceReload;
|
|
|
|
// Implementation
|
|
private:
|
|
void GetServerIP(ITFSNode * pNode, DWORD &dwIP,CString &strIP);
|
|
|
|
WinsStrRecord * BuildWinsStrRecord(int nIndex);
|
|
|
|
void DatabaseLoadingCleanup();
|
|
HRESULT UpdateListboxCount(ITFSNode * pNode, BOOL bClear = FALSE);
|
|
HRESULT UpdateCurrentView(ITFSNode * pNode);
|
|
HRESULT UpdateVerbs(ITFSNode * pNode);
|
|
|
|
BOOL CompareRecName(LPSTR szNewName);
|
|
|
|
DWORD AddMappingToServer(ITFSNode* pNode,
|
|
int nType,
|
|
int nCount,
|
|
CMultipleIpNamePair& mipnp,
|
|
BOOL fEdit = FALSE); // Editing existing mapping?
|
|
void AppendScopeName(char* lpName, char* lpAppend);
|
|
|
|
HRESULT AddToLocalStorage(PWINSINTF_RECORD_ACTION_T pRecAction,ITFSNode* pNode);
|
|
|
|
|
|
HRESULT DeleteRegistration(ITFSComponent * pComponent, int nIndex);
|
|
DWORD DeleteMappingFromServer(ITFSComponent * pComponent,WinsRecord *pws,int nIndex);
|
|
HRESULT EditMappingToServer(ITFSNode* pNode,
|
|
int nType,
|
|
int nCount,
|
|
CMultipleIpNamePair& mipnp,
|
|
BOOL fEdit,
|
|
WinsRecord *pRecord); // Editing existing mapping?
|
|
void ToString(DWORD dwParam, CString& strParam);
|
|
void SetLoadedOnce(ITFSNode * pNode);
|
|
|
|
private:
|
|
CString m_strActiveReg;
|
|
CString m_strDesp;
|
|
RecordList m_RecList;
|
|
WINSDB_STATE m_winsdbState;
|
|
|
|
WSAData m_WsaData;
|
|
SOCKET m_sd;
|
|
u_long m_NonBlocking;
|
|
|
|
struct sockaddr_in myad;
|
|
u_short m_uTranID;
|
|
char m_pScope[20];
|
|
|
|
WinsRecord m_CurrentRecord;
|
|
|
|
CConfiguration m_Config;
|
|
};
|
|
|
|
#endif _ACTREG_H
|