/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 **/ /**********************************************************************/ /* spdutil.cpp FILE HISTORY: */ #include "stdafx.h" #include "spdutil.h" #include "objplus.h" #include "ipaddres.h" #include "spddb.h" #include "server.h" extern CHashTable g_HashTable; const DWORD IPSM_PROTOCOL_TCP = 6; const DWORD IPSM_PROTOCOL_UDP = 17; const TCHAR c_szSingleAddressMask[] = _T("255.255.255.255"); const CHAR c_EqualMatchType[] = "="; const CHAR c_RangeMatchType[] = "IN"; const ProtocolStringMap c_ProtocolStringMap[] = { {0, IDS_PROTOCOL_ANY}, {1, IDS_PROTOCOL_ICMP}, {2, IDS_PROTOCOL_IGMP}, {3, IDS_PROTOCOL_GGP}, {6, IDS_PROTOCOL_TCP}, {8, IDS_PROTOCOL_EGP}, {12, IDS_PROTOCOL_PUP}, {17, IDS_PROTOCOL_UDP}, {20, IDS_PROTOCOL_HMP}, {22, IDS_PROTOCOL_XNS_IDP}, {27, IDS_PROTOCOL_RDP}, {66, IDS_PROTOCOL_RVD} }; const int c_nProtocols = DimensionOf(c_ProtocolStringMap); // The frequency table into which the channel is the index const ULONG g_ulFreqTable[] = {2412000, 2417000, 2422000, 2427000, 2432000, 2437000, 2442000, 2447000, 2452000, 2457000, 2462000, 2467000, 2472000, 2484000}; ULONG RevertDwordBytes(DWORD dw) { ULONG ulRet; ulRet = dw >> 24; ulRet += (dw & 0xFF0000) >> 8; ulRet += (dw & 0x00FF00) << 8; ulRet += (dw & 0x0000FF) << 24; return ulRet; } void ProtocolToString ( BYTE protocol, CString * pst ) { BOOL fFound = FALSE; for (int i = 0; i < DimensionOf(c_ProtocolStringMap); i++) { if (c_ProtocolStringMap[i].dwProtocol == protocol) { pst->LoadString(c_ProtocolStringMap[i].nStringID); fFound = TRUE; } } if (!fFound) { pst->Format(IDS_OTHER_PROTO, protocol); } } void BoolToString ( BOOL bl, CString * pst ) { if (bl) pst->LoadString (IDS_YES); else pst->LoadString (IDS_NO); } void IpToString(ULONG ulIp, CString *pst) { ULONG ul; CIpAddress ipAddr; ul = RevertDwordBytes(ulIp); ipAddr = ul; *pst = (CString) ipAddr; } void NumToString(DWORD number, CString * pst) { pst->Format(_T("%d"), number); return; } void FileTimeToString(FILETIME logDataTime, CString *pst) { SYSTEMTIME timeFields; FileTimeToSystemTime ( (PFILETIME)&logDataTime, &timeFields); pst->Format (_T("%2d/%2d/%4d %02d:%02d:%02d:%03d"), timeFields.wMonth, timeFields.wDay, timeFields.wYear, timeFields.wHour, timeFields.wMinute, timeFields.wSecond, timeFields.wMilliseconds ); return; } VOID SSIDToString(NDIS_802_11_SSID Ssid, CString &SsidStr) { LPTSTR pStr = SsidStr.GetBuffer(Ssid.SsidLength + 1); MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, (LPCSTR)Ssid.Ssid, (int)Ssid.SsidLength, pStr, (int)Ssid.SsidLength); pStr[Ssid.SsidLength] = _T('\0'); SsidStr.ReleaseBuffer(); } VOID GuidToString (LPWSTR guid, CString &guidStr) { guidStr = guid; } VOID MacToString (NDIS_802_11_MAC_ADDRESS macAddress, CString &macAddrStr) { LPTSTR pStr = macAddrStr.GetBuffer(18); UINT i; for (i = 0; i < 6; i++) { wsprintf(pStr, _T("%02X-"), macAddress[i]); pStr += 3; } *(pStr-1) = _T('\0'); } DWORD CategoryToString(DWORD dwCategory, CString &csCategory) { BOOL bLoaded = FALSE; DWORD dwErr = ERROR_SUCCESS; switch (dwCategory) { case DBLOG_CATEG_INFO: bLoaded = csCategory.LoadString(IDS_LOGDATA_TYPE_INFORMATION); Assert(TRUE == bLoaded); break; case DBLOG_CATEG_WARN: bLoaded = csCategory.LoadString(IDS_LOGDATA_TYPE_WARNING); Assert(TRUE == bLoaded); break; case DBLOG_CATEG_ERR: bLoaded = csCategory.LoadString(IDS_LOGDATA_TYPE_ERROR); Assert(TRUE == bLoaded); break; case DBLOG_CATEG_PACKET: bLoaded = csCategory.LoadString(IDS_LOGDATA_TYPE_PACKET); Assert(TRUE == bLoaded); break; default: bLoaded = csCategory.LoadString(IDS_LOGDATA_TYPE_UNKNOWN); Assert(TRUE == bLoaded); dwErr = ERROR_BAD_FORMAT; break; } return dwErr; } DWORD PrivacyToString(ULONG ulPrivacy, CString *pcs) { DWORD dwErr = ERROR_SUCCESS; BOOL bLoaded = FALSE; switch(ulPrivacy) { case 0: bLoaded = pcs->LoadString(IDS_APDATA_PRIVACY_DISABLED); Assert(TRUE == bLoaded); break; case 1: bLoaded = pcs->LoadString(IDS_APDATA_PRIVACY_ENABLED); Assert(TRUE == bLoaded); break; default: bLoaded = pcs->LoadString(IDS_APDATA_PRIVACY_UNKNOWN); Assert(TRUE == bLoaded); dwErr = ERROR_BAD_FORMAT; break; } return dwErr; } DWORD InfraToString(NDIS_802_11_NETWORK_INFRASTRUCTURE InfraMode, CString *pcs) { DWORD dwErr = ERROR_SUCCESS; BOOL bLoaded = FALSE; switch(InfraMode) { case Ndis802_11IBSS: bLoaded = pcs->LoadString(IDS_APDATA_INFRA_PEER); Assert(TRUE == bLoaded); break; case Ndis802_11Infrastructure: bLoaded = pcs->LoadString(IDS_APDATA_INFRA_INFRA); Assert(TRUE == bLoaded); break; default: bLoaded = pcs->LoadString(IDS_APDATA_INFRA_UNKNOWN); Assert(TRUE == bLoaded); dwErr = ERROR_BAD_FORMAT; break; } return dwErr; } DWORD RateToString(NDIS_802_11_RATES Rates, CString *pcs) { int i = 0; UCHAR ucMask = 0x7F; float fMul = 0.5; float fVal = 0.0; DWORD dwErr = ERROR_SUCCESS; CString csTemp; if (0 == Rates[i]) goto done; fVal = fMul * (float)(Rates[i] & ucMask); csTemp.Format(_T("%.2f"), fVal); (*pcs) += csTemp; i++; while (Rates[i] != 0) { (*pcs) += _T(", "); fVal = fMul * (float)(Rates[i] & ucMask); csTemp.Format(_T("%.2f"), fVal); (*pcs) += csTemp; i++; } done: return dwErr; } DWORD ChannelToString(NDIS_802_11_CONFIGURATION *pConfig, CString *pcs) { DWORD dwErr = ERROR_SUCCESS; int nChannel = 0; while ( (nChannel < ARRAYLEN(g_ulFreqTable)) && (g_ulFreqTable[nChannel] != pConfig->DSConfig) ) nChannel++; //channels number from 1 instead of 0 nChannel++; if (nChannel <= ARRAYLEN(g_ulFreqTable)) pcs->Format(_T("%lu [%d]"), pConfig->DSConfig, nChannel); else pcs->Format(_T("%ls [?]"), pConfig->DSConfig); return dwErr; } DWORD ComponentIDToString(DWORD dwCompID, CString &csComponent) { BOOL bLoaded = FALSE; DWORD dwErr = ERROR_SUCCESS; switch (dwCompID) { case DBLOG_COMPID_WZCSVC: bLoaded = csComponent.LoadString(IDS_LOGDATA_SOURCE_WZCSVC); Assert(TRUE == bLoaded); break; case DBLOG_COMPID_EAPOL: bLoaded = csComponent.LoadString(IDS_LOGDATA_SOURCE_EAPOL); Assert(TRUE == bLoaded); break; default: bLoaded = csComponent.LoadString(IDS_LOGDATA_SOURCE_UNKNOWN); Assert(TRUE == bLoaded); dwErr = ERROR_BAD_FORMAT; break; } return dwErr; } DWORD CopyAndStripNULL(LPTSTR lptstrDest, LPTSTR lptstrSrc, DWORD dwLen) { DWORD dwErr = ERROR_SUCCESS; if (0 == dwLen) { lptstrDest[dwLen]=_T('\0'); goto exit; } //Length sent is length of string in bytes + two for NULL terminator dwLen /= sizeof(TCHAR); dwLen--; lptstrDest[dwLen]=_T('\0'); while (0 != dwLen--) { if (_T('\0') != lptstrSrc[dwLen]) lptstrDest[dwLen] = lptstrSrc[dwLen]; else lptstrDest[dwLen] = _T(' '); } exit: return dwErr; } BOOL operator==(const FILETIME& ftLHS, const FILETIME& ftRHS) { BOOL bEqual = FALSE; const ULONGLONG ullLHS = *(const UNALIGNED ULONGLONG * UNALIGNED) &ftLHS; const ULONGLONG ullRHS = *(const UNALIGNED ULONGLONG * UNALIGNED) &ftRHS; LONGLONG llDiff = 0; llDiff = ullRHS - ullLHS; if (0 == llDiff) bEqual = TRUE; return bEqual; } BOOL operator!=(const FILETIME& ftLHS, const FILETIME& ftRHS) { BOOL bNotEqual = FALSE; const ULONGLONG ullLHS = *(const UNALIGNED ULONGLONG * UNALIGNED) &ftLHS; const ULONGLONG ullRHS = *(const UNALIGNED ULONGLONG * UNALIGNED) &ftRHS; LONGLONG llDiff = 0; llDiff = ullRHS - ullLHS; if (0 != llDiff) bNotEqual = TRUE; return bNotEqual; }