windows-nt/Source/XPSP1/NT/net/mmc/ipxsnap/sapstats.cpp
2020-09-26 16:20:57 +08:00

158 lines
4 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
/**********************************************************************/
/*
ipstats.cpp
IP Statistics implementation.
FILE HISTORY:
*/
#include "stdafx.h"
#include "rtrutil.h" // smart MPR handle pointers
#include "format.h" // FormatNumber function
#include "column.h" // containercolumninfo
#include "ipxconn.h" // IPXConnection
#include "routprot.h"
#include "ipxutil.h"
#include "statsdlg.h"
#include "sapstats.h"
#include "resource.h"
/*---------------------------------------------------------------------------
SAPParamsStatistics implementation
---------------------------------------------------------------------------*/
extern const ContainerColumnInfo s_rgSAPParamsStatsColumnInfo[];
const ContainerColumnInfo s_rgSAPParamsStatsColumnInfo[] =
{
{ IDS_STATS_SAPPARAMS_OPER_STATE, 0, TRUE, COL_STATUS },
{ IDS_STATS_SAPPARAMS_SENT_PACKETS, 0, TRUE, COL_LARGE_NUM },
{ IDS_STATS_SAPPARAMS_RCVD_PACKETS, 0, TRUE, COL_LARGE_NUM },
};
SAPParamsStatistics::SAPParamsStatistics()
: IPXStatisticsDialog(STATSDLG_VERTICAL |
STATSDLG_FULLWINDOW |
STATSDLG_CONTEXTMENU |
STATSDLG_SELECT_COLUMNS)
{
SetColumnInfo(s_rgSAPParamsStatsColumnInfo,
DimensionOf(s_rgSAPParamsStatsColumnInfo));
}
HRESULT SAPParamsStatistics::RefreshData(BOOL fGrabNewData)
{
HRESULT hr = hrOK;
CString st;
ULONG iPos;
TCHAR szNumber[32];
SAP_MIB_GET_INPUT_DATA MibGetInputData;
PSAP_MIB_BASE pSapBase = NULL;
DWORD cbSapBase;
SPMprMibBuffer spMib;
PSAP_INTERFACE pSapIf = NULL;
DWORD cbSapIf;
DWORD cSent = 0;
DWORD cRcvd = 0;
DWORD dwErr;
Assert(m_pIPXConn);
MibGetInputData.TableId = SAP_BASE_ENTRY;
dwErr = ::MprAdminMIBEntryGet(m_pIPXConn->GetMibHandle(),
PID_IPX,
IPX_PROTOCOL_SAP,
&MibGetInputData,
sizeof(MibGetInputData),
(LPVOID *) &pSapBase,
&cbSapBase);
spMib = (LPBYTE) pSapBase;
hr = HRESULT_FROM_WIN32(dwErr);
CORg( hr );
if (IsSubitemVisible(MVR_SAPPARAMS_OPER_STATE))
{
st = IpxOperStateToCString(pSapBase->SapOperState);
iPos = MapSubitemToColumn(MVR_SAPPARAMS_OPER_STATE);
m_listCtrl.SetItemText(iPos, 1, (LPCTSTR) st);
}
spMib.Free();
MibGetInputData.TableId = SAP_INTERFACE_TABLE;
dwErr = MprAdminMIBEntryGetFirst(m_pIPXConn->GetMibHandle(),
PID_IPX,
IPX_PROTOCOL_SAP,
&MibGetInputData,
sizeof(MibGetInputData),
(LPVOID *) &pSapIf,
&cbSapIf);
hr = HRESULT_FROM_WIN32(dwErr);
spMib = (LPBYTE) pSapIf;
while (FHrSucceeded(hr))
{
if (pSapIf->InterfaceIndex)
{
cSent += pSapIf->SapIfStats.SapIfOutputPackets;
cRcvd += pSapIf->SapIfStats.SapIfInputPackets;
}
MibGetInputData.InterfaceIndex = pSapIf->InterfaceIndex;
spMib.Free();
pSapIf = NULL;
dwErr = MprAdminMIBEntryGetNext(m_pIPXConn->GetMibHandle(),
PID_IPX,
IPX_PROTOCOL_SAP,
&MibGetInputData,
sizeof(MibGetInputData),
(LPVOID *) &pSapIf,
&cbSapIf);
hr = HRESULT_FROM_WIN32(dwErr);
spMib = (LPBYTE) pSapIf;
}
if (IsSubitemVisible(MVR_SAPPARAMS_SENT_PKTS))
{
FormatNumber(cSent, szNumber, DimensionOf(szNumber), FALSE);
iPos = MapSubitemToColumn(MVR_SAPPARAMS_SENT_PKTS);
m_listCtrl.SetItemText(iPos, 1, (LPCTSTR) szNumber);
}
if (IsSubitemVisible(MVR_SAPPARAMS_RCVD_PKTS))
{
FormatNumber(cRcvd, szNumber, DimensionOf(szNumber), FALSE);
iPos = MapSubitemToColumn(MVR_SAPPARAMS_RCVD_PKTS);
m_listCtrl.SetItemText(iPos, 1, (LPCTSTR) szNumber);
}
Error:
return hr;
}
BOOL SAPParamsStatistics::OnInitDialog()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString st;
st.LoadString(IDS_STATS_SAPPARAMS_TITLE);
SetWindowText((LPCTSTR) st);
return IPXStatisticsDialog::OnInitDialog();
}
void SAPParamsStatistics::Sort(UINT)
{
}