436 lines
12 KiB
C++
436 lines
12 KiB
C++
|
/**********************************************************************/
|
||
|
/** Microsoft Windows/NT **/
|
||
|
/** Copyright(c) Microsoft Corporation, 1997 - 1998 **/
|
||
|
/**********************************************************************/
|
||
|
|
||
|
/*
|
||
|
DVSumSTRM.cpp
|
||
|
|
||
|
FILE HISTORY:
|
||
|
|
||
|
*/
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "dmvstrm.h"
|
||
|
#include "dmvcomp.h"
|
||
|
#include "xstream.h"
|
||
|
#include "dmvroot.h"
|
||
|
#include "refresh.h"
|
||
|
|
||
|
#define CURRENT_DMVCONFIGSTREAM_VERSION 0x00020000
|
||
|
|
||
|
/*!--------------------------------------------------------------------------
|
||
|
DMVConfigStream::DMVConfigStream
|
||
|
-
|
||
|
Author: KennT
|
||
|
---------------------------------------------------------------------------*/
|
||
|
DMVConfigStream::DMVConfigStream()
|
||
|
{
|
||
|
m_nVersionAdmin = 0x00010000;
|
||
|
m_nVersion = CURRENT_DMVCONFIGSTREAM_VERSION;
|
||
|
m_bAutoRefresh = FALSE;
|
||
|
m_dwRefreshInterval = DEFAULT_REFRESH_INTERVAL;
|
||
|
}
|
||
|
|
||
|
/*!--------------------------------------------------------------------------
|
||
|
DMVConfigStream::InitNew
|
||
|
-
|
||
|
Author: KennT
|
||
|
---------------------------------------------------------------------------*/
|
||
|
HRESULT DMVConfigStream::InitNew()
|
||
|
{
|
||
|
// Setup the appropriate defaults
|
||
|
// m_nVersionAdmin = 0x00020000;
|
||
|
// m_nVersion = 0x00020000;
|
||
|
// m_stName.Empty();
|
||
|
return hrOK;
|
||
|
}
|
||
|
|
||
|
HRESULT DMVConfigStream::PrepareAutoRefreshDataForSave()
|
||
|
{
|
||
|
SPIRouterRefresh spRefresh;
|
||
|
|
||
|
ASSERT(m_pDMVRootHandler);
|
||
|
if (!m_pDMVRootHandler)
|
||
|
return S_OK;
|
||
|
|
||
|
HRESULT hr = m_pDMVRootHandler->GetServerNodesRefreshObject(&spRefresh);
|
||
|
|
||
|
if(FAILED(hr) || !spRefresh)
|
||
|
return S_OK;
|
||
|
|
||
|
if(spRefresh->IsRefreshStarted() == hrOK)
|
||
|
m_bAutoRefresh = TRUE;
|
||
|
return spRefresh->GetRefreshInterval(&m_dwRefreshInterval);
|
||
|
}
|
||
|
|
||
|
/*!--------------------------------------------------------------------------
|
||
|
DMVConfigStream::SaveTo
|
||
|
-
|
||
|
Author: KennT
|
||
|
---------------------------------------------------------------------------*/
|
||
|
HRESULT DMVConfigStream::SaveTo(IStream *pstm)
|
||
|
{
|
||
|
return XferVersion0(pstm, XferStream::MODE_WRITE, NULL);
|
||
|
}
|
||
|
|
||
|
/*!--------------------------------------------------------------------------
|
||
|
DMVConfigStream::SaveAs
|
||
|
-
|
||
|
Author: KennT
|
||
|
---------------------------------------------------------------------------*/
|
||
|
HRESULT DMVConfigStream::SaveAs(UINT nVersion, IStream *pstm)
|
||
|
{
|
||
|
return XferVersion0(pstm, XferStream::MODE_WRITE, NULL);
|
||
|
}
|
||
|
|
||
|
/*!--------------------------------------------------------------------------
|
||
|
DMVConfigStream::LoadFrom
|
||
|
-
|
||
|
Author: KennT
|
||
|
---------------------------------------------------------------------------*/
|
||
|
HRESULT DMVConfigStream::LoadFrom(IStream *pstm)
|
||
|
{
|
||
|
return XferVersion0(pstm, XferStream::MODE_READ, NULL);
|
||
|
}
|
||
|
|
||
|
/*!--------------------------------------------------------------------------
|
||
|
DMVConfigStream::GetSize
|
||
|
-
|
||
|
Author: KennT
|
||
|
---------------------------------------------------------------------------*/
|
||
|
HRESULT DMVConfigStream::GetSize(ULONG *pcbSize)
|
||
|
{
|
||
|
return XferVersion0(NULL, XferStream::MODE_SIZE, NULL);
|
||
|
}
|
||
|
|
||
|
/*!--------------------------------------------------------------------------
|
||
|
DMVConfigStream::GetVersionInfo
|
||
|
-
|
||
|
Author: KennT
|
||
|
---------------------------------------------------------------------------*/
|
||
|
HRESULT DMVConfigStream::GetVersionInfo(DWORD *pdwVersion, DWORD *pdwAdminVersion)
|
||
|
{
|
||
|
if (pdwVersion)
|
||
|
*pdwVersion = m_nVersion;
|
||
|
if (pdwAdminVersion)
|
||
|
*pdwAdminVersion = m_nVersionAdmin;
|
||
|
return hrOK;
|
||
|
}
|
||
|
|
||
|
/*!--------------------------------------------------------------------------
|
||
|
DMVConfigStream::XferVersion0
|
||
|
-
|
||
|
Author: KennT
|
||
|
---------------------------------------------------------------------------*/
|
||
|
|
||
|
|
||
|
struct _ViewInfoEntry
|
||
|
{
|
||
|
ULONG m_ulId;
|
||
|
ULONG m_idSort;
|
||
|
ULONG m_idAscending;
|
||
|
ULONG m_idColumns;
|
||
|
ULONG m_idPos;
|
||
|
};
|
||
|
|
||
|
/*static const _ViewInfoEntry s_rgDVSumAdminViewInfo[]
|
||
|
{
|
||
|
{ DVSumSTRM_STATS_DVSumNBR,
|
||
|
DVSumSTRM_TAG_STATS_DVSumNBR_SORT, DVSumSTRM_TAG_STATS_DVSumNBR_ASCENDING,
|
||
|
DVSumSTRM_TAG_STATS_DVSumNBR_COLUMNS, DVSumSTRM_TAG_STATS_DVSumNBR_POSITION },
|
||
|
{ DVSumSTRM_IFSTATS_DVSumNBR,
|
||
|
DVSumSTRM_TAG_IFSTATS_DVSumNBR_SORT, DVSumSTRM_TAG_IFSTATS_DVSumNBR_ASCENDING,
|
||
|
DVSumSTRM_TAG_IFSTATS_DVSumNBR_COLUMNS, DVSumSTRM_TAG_IFSTATS_DVSumNBR_POSITION },
|
||
|
};
|
||
|
*/
|
||
|
|
||
|
HRESULT DMVConfigStream::XferVersion0(IStream *pstm, XferStream::Mode mode, ULONG *pcbSize)
|
||
|
{
|
||
|
XferStream xstm(pstm, mode);
|
||
|
HRESULT hr = hrOK;
|
||
|
DWORD dwNum1;
|
||
|
DWORD dwNum2;
|
||
|
int i;
|
||
|
|
||
|
if (mode==XferStream::MODE_WRITE)
|
||
|
{
|
||
|
// If we are writing the data, reload the current set of server names
|
||
|
// (get it from the real list of nodes)
|
||
|
// -------------------------------------------------------------
|
||
|
Assert(m_pDMVRootHandler);
|
||
|
m_pDMVRootHandler->LoadPersistedServerListFromNode();
|
||
|
};
|
||
|
|
||
|
CORg( xstm.XferDWORD( DMVSTRM_TAG_VERSION, &m_nVersion ) );
|
||
|
CORg( xstm.XferDWORD( DMVSTRM_TAG_VERSIONADMIN, &m_nVersionAdmin ) );
|
||
|
|
||
|
if (m_nVersion != CURRENT_DMVCONFIGSTREAM_VERSION)
|
||
|
return E_FAIL;
|
||
|
|
||
|
/*
|
||
|
for ( i=0; i<DimensionOf(s_rgDVSumAdminViewInfo); i++)
|
||
|
{
|
||
|
CORg( m_rgViewInfo[s_rgDVSumAdminViewInfo[i].m_ulId].Xfer(&xstm,
|
||
|
s_rgDVSumAdminViewInfo[i].m_idSort,
|
||
|
s_rgDVSumAdminViewInfo[i].m_idAscending,
|
||
|
s_rgDVSumAdminViewInfo[i].m_idColumns) );
|
||
|
CORg( xstm.XferRect( s_rgDVSumAdminViewInfo[i].m_idPos,
|
||
|
&m_prgrc[s_rgDVSumAdminViewInfo[i].m_ulId]) );
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
CORg( xstm.XferDWORD( DMVSTRM_TAG_SIZEQRY, &(m_RQPersist.m_dwSizeQry) ) );
|
||
|
|
||
|
if (mode==XferStream::MODE_READ)
|
||
|
{
|
||
|
CORg( xstm.XferDWORD( DMVSTRM_TAG_NUMQRY, &(dwNum1) ) );
|
||
|
m_RQPersist.createQry(dwNum1);
|
||
|
CORg( xstm.XferDWORD( DMVSTRM_TAG_NUMSRV, &(dwNum2) ) );
|
||
|
m_RQPersist.createSrv(dwNum2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
CORg( xstm.XferDWORD( DMVSTRM_TAG_NUMQRY, &(m_RQPersist.m_dwNumQry) ) );
|
||
|
CORg( xstm.XferDWORD( DMVSTRM_TAG_NUMSRV, &(m_RQPersist.m_dwNumSrv) ) );
|
||
|
}
|
||
|
|
||
|
Assert(m_RQPersist.m_v_pQData.size()==m_RQPersist.m_dwNumQry);
|
||
|
Assert(m_RQPersist.m_v_pSData.size()==m_RQPersist.m_dwNumSrv);
|
||
|
|
||
|
//persist the query list
|
||
|
for (i=0; i < m_RQPersist.m_dwNumQry;i++)
|
||
|
{
|
||
|
CORg( xstm.XferDWORD( DMVSTRM_TAG_CATFLAG, &(m_RQPersist.m_v_pQData[i]->dwCatFlag) ) );
|
||
|
CORg( xstm.XferCString( DMVSTRM_TAG_SCOPE, &(m_RQPersist.m_v_pQData[i]->strScope) ) );
|
||
|
CORg( xstm.XferCString( DMVSTRM_TAG_FILTER, &(m_RQPersist.m_v_pQData[i]->strFilter) ) );
|
||
|
}
|
||
|
|
||
|
//persist the servername list
|
||
|
for (i=0; i < m_RQPersist.m_dwNumSrv;i++)
|
||
|
{
|
||
|
CORg( xstm.XferCString(DMVSTRM_TAG_SERVERNAME, m_RQPersist.m_v_pSData[i]) );
|
||
|
}
|
||
|
|
||
|
if (mode==XferStream::MODE_READ)
|
||
|
{
|
||
|
// Load the list of persisted servers (add them to the list of
|
||
|
// servers to be added into the UI).
|
||
|
Assert(m_pDMVRootHandler);
|
||
|
m_pDMVRootHandler->LoadPersistedServerList();
|
||
|
}
|
||
|
|
||
|
// refresh settings
|
||
|
if (mode==XferStream::MODE_WRITE)
|
||
|
{
|
||
|
PrepareAutoRefreshDataForSave();
|
||
|
}
|
||
|
CORg( xstm.XferDWORD( DMVSTRM_TAG_IFAUTOREFRESHISON, &m_bAutoRefresh ) );
|
||
|
CORg( xstm.XferDWORD( DMVSTRM_TAG_AUTOREFRESHINTERVAL, &m_dwRefreshInterval ) );
|
||
|
|
||
|
if (pcbSize)
|
||
|
*pcbSize = xstm.GetSize();
|
||
|
|
||
|
Error:
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
DVSumComponentConfigStream implementation
|
||
|
---------------------------------------------------------------------------*/
|
||
|
|
||
|
enum DVSCOMPSTRM_TAG
|
||
|
{
|
||
|
DVSCOMPSTRM_TAG_VERSION = XFER_TAG(1, XFER_DWORD),
|
||
|
DVSCOMPSTRM_TAG_VERSIONADMIN = XFER_TAG(2, XFER_DWORD),
|
||
|
|
||
|
DVSCOMPSTRM_TAG_SUMMARY_COLUMNS = XFER_TAG(3, XFER_COLUMNDATA_ARRAY),
|
||
|
DVSCOMPSTRM_TAG_SUMMARY_SORT_COLUMN = XFER_TAG(4, XFER_DWORD),
|
||
|
DVSCOMPSTRM_TAG_SUMMARY_SORT_ASCENDING = XFER_TAG(5, XFER_DWORD),
|
||
|
|
||
|
DVSCOMPSTRM_TAG_IFADMIN_COLUMNS = XFER_TAG(6, XFER_COLUMNDATA_ARRAY),
|
||
|
DVSCOMPSTRM_TAG_IFADMIN_SORT_COLUMN = XFER_TAG(7, XFER_DWORD),
|
||
|
DVSCOMPSTRM_TAG_IFADMIN_SORT_ASCENDING = XFER_TAG(8, XFER_DWORD),
|
||
|
|
||
|
DVSCOMPSTRM_TAG_DIALIN_COLUMNS = XFER_TAG(9, XFER_COLUMNDATA_ARRAY),
|
||
|
DVSCOMPSTRM_TAG_DIALIN_SORT_COLUMN = XFER_TAG(10, XFER_DWORD),
|
||
|
DVSCOMPSTRM_TAG_DIALIN_SORT_ASCENDING = XFER_TAG(11, XFER_DWORD),
|
||
|
|
||
|
DVSCOMPSTRM_TAG_PORTS_COLUMNS = XFER_TAG(12, XFER_COLUMNDATA_ARRAY),
|
||
|
DVSCOMPSTRM_TAG_PORTS_SORT_COLUMN = XFER_TAG(13, XFER_DWORD),
|
||
|
DVSCOMPSTRM_TAG_PORTS_SORT_ASCENDING = XFER_TAG(14, XFER_DWORD),
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
HRESULT DVComponentConfigStream::XferVersion0(IStream *pstm, XferStream::Mode mode, ULONG *pcbSize)
|
||
|
{
|
||
|
XferStream xstm(pstm, mode);
|
||
|
HRESULT hr = hrOK;
|
||
|
|
||
|
CORg( xstm.XferDWORD( DVSCOMPSTRM_TAG_VERSION, &m_nVersion ) );
|
||
|
CORg( xstm.XferDWORD( DVSCOMPSTRM_TAG_VERSIONADMIN, &m_nVersionAdmin ) );
|
||
|
|
||
|
CORg( m_rgViewInfo[DM_COLUMNS_DVSUM].Xfer(&xstm,
|
||
|
DVSCOMPSTRM_TAG_SUMMARY_SORT_COLUMN,
|
||
|
DVSCOMPSTRM_TAG_SUMMARY_SORT_ASCENDING,
|
||
|
DVSCOMPSTRM_TAG_SUMMARY_COLUMNS) );
|
||
|
CORg( m_rgViewInfo[DM_COLUMNS_IFADMIN].Xfer(&xstm,
|
||
|
DVSCOMPSTRM_TAG_IFADMIN_SORT_COLUMN,
|
||
|
DVSCOMPSTRM_TAG_IFADMIN_SORT_ASCENDING,
|
||
|
DVSCOMPSTRM_TAG_IFADMIN_COLUMNS) );
|
||
|
CORg( m_rgViewInfo[DM_COLUMNS_DIALIN].Xfer(&xstm,
|
||
|
DVSCOMPSTRM_TAG_DIALIN_SORT_COLUMN,
|
||
|
DVSCOMPSTRM_TAG_DIALIN_SORT_ASCENDING,
|
||
|
DVSCOMPSTRM_TAG_DIALIN_COLUMNS) );
|
||
|
CORg( m_rgViewInfo[DM_COLUMNS_PORTS].Xfer(&xstm,
|
||
|
DVSCOMPSTRM_TAG_PORTS_SORT_COLUMN,
|
||
|
DVSCOMPSTRM_TAG_PORTS_SORT_ASCENDING,
|
||
|
DVSCOMPSTRM_TAG_PORTS_COLUMNS) );
|
||
|
|
||
|
if (pcbSize)
|
||
|
*pcbSize = xstm.GetSize();
|
||
|
|
||
|
Error:
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------------
|
||
|
// RRASQryPersist implementation
|
||
|
//---------------------------------------------------------------
|
||
|
HRESULT RRASQryPersist::createQry(DWORD dwNum)
|
||
|
{
|
||
|
HRESULT hr=S_OK;
|
||
|
try
|
||
|
{
|
||
|
removeAllQry();
|
||
|
|
||
|
m_dwNumQry=dwNum;
|
||
|
|
||
|
for (int i=0;i<m_dwNumQry;i++)
|
||
|
{
|
||
|
RRASQryData* p = new RRASQryData;
|
||
|
p->dwCatFlag=RRAS_QRY_CAT_NONE;
|
||
|
p->strScope=_T("");
|
||
|
p->strFilter=_T("");
|
||
|
m_v_pQData.push_back(p);
|
||
|
}
|
||
|
}
|
||
|
catch(...)
|
||
|
{
|
||
|
hr=E_FAIL;
|
||
|
}
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
HRESULT RRASQryPersist::createSrv(DWORD dwNum)
|
||
|
{
|
||
|
HRESULT hr=S_OK;
|
||
|
try
|
||
|
{
|
||
|
removeAllSrv();
|
||
|
|
||
|
m_dwNumSrv=dwNum;
|
||
|
|
||
|
for (int i=0;i<m_dwNumSrv;i++)
|
||
|
m_v_pSData.push_back(new CString);
|
||
|
}
|
||
|
catch(...)
|
||
|
{
|
||
|
hr=E_FAIL;
|
||
|
}
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
HRESULT RRASQryPersist::add_Qry(const RRASQryData& qd)
|
||
|
{
|
||
|
HRESULT hr=S_OK;
|
||
|
try
|
||
|
{
|
||
|
for (int i=0;i<m_v_pQData.size(); i++ )
|
||
|
{
|
||
|
RRASQryData& qd0 = *(m_v_pQData[i]);
|
||
|
if ( (qd0.dwCatFlag==qd.dwCatFlag) &&
|
||
|
(qd0.strScope==qd.strScope) &&
|
||
|
(qd0.strFilter==qd.strFilter) )
|
||
|
return S_FALSE;
|
||
|
}
|
||
|
|
||
|
RRASQryData *pqd= new RRASQryData ;
|
||
|
pqd->dwCatFlag=qd.dwCatFlag;
|
||
|
pqd->strScope=qd.strScope;
|
||
|
pqd->strFilter=qd.strFilter;
|
||
|
m_v_pQData.push_back(pqd);
|
||
|
m_dwNumQry++;
|
||
|
}
|
||
|
catch(...)
|
||
|
{
|
||
|
hr=E_FAIL;
|
||
|
}
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
HRESULT RRASQryPersist::add_Srv(const CString& szServer)
|
||
|
{
|
||
|
HRESULT hr=S_OK;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
for (int i=0;i<m_v_pSData.size(); i++ )
|
||
|
{
|
||
|
if ( szServer==*(m_v_pSData[i]) )
|
||
|
return S_FALSE;
|
||
|
}
|
||
|
|
||
|
CString* psz= new CString(szServer) ;
|
||
|
m_v_pSData.push_back(psz);
|
||
|
m_dwNumSrv++;
|
||
|
}
|
||
|
catch(...)
|
||
|
{
|
||
|
hr=E_FAIL;
|
||
|
}
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
HRESULT RRASQryPersist::removeAllSrv()
|
||
|
{
|
||
|
HRESULT hr=S_OK;
|
||
|
try
|
||
|
{
|
||
|
for (int i=0;i<m_v_pSData.size(); i++ )
|
||
|
delete m_v_pSData[i];
|
||
|
m_v_pSData.clear();
|
||
|
}
|
||
|
catch(...)
|
||
|
{
|
||
|
hr=E_FAIL;
|
||
|
}
|
||
|
m_dwNumSrv=0;
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
HRESULT RRASQryPersist::removeAllQry()
|
||
|
{
|
||
|
HRESULT hr=S_OK;
|
||
|
try
|
||
|
{
|
||
|
for (int i=0;i<m_v_pQData.size(); i++ )
|
||
|
delete m_v_pQData[i];
|
||
|
m_v_pQData.clear();
|
||
|
}
|
||
|
catch(...)
|
||
|
{
|
||
|
TRACE0("RRASQryPersist::remove error\n");
|
||
|
hr=E_FAIL;
|
||
|
}
|
||
|
m_dwNumQry=0;
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|