BOOL ClientInfoManager::ParseData( const CommData& commData, CLIENT_BASE_INFO& baseInfo ) const { DECLARE_STR_PARAM(cn); DECLARE_STR_PARAM(ip); DECLARE_STR_PARAM(groups); DECLARE_STR_PARAM(vercode); DECLARE_STR_PARAM(priv); DECLARE_UINT64_PARAM(lang); DECLARE_UINT64_PARAM(mem); DECLARE_UINT64_PARAM(instime); DECLARE_UINT64_PARAM(os); DECLARE_UINT64_PARAM(x64); DECLARE_UINT64_PARAM(proto); DECLARE_UINT64_PARAM(cpufrep); DECLARE_UINT64_PARAM(cpunum); tstring mods; commData.GetStrData(_T("mods"), mods); baseInfo.computerName = cn; splitByChar(ip.c_str(), baseInfo.localIPList, ','); baseInfo.installTime = instime; baseInfo.windowsVersion = (WIN_VER_DETAIL) os; baseInfo.bX64 = (BOOL)x64; baseInfo.mods = mods; baseInfo.commtype = (COMM_NAME)proto; baseInfo.cpufrep = cpufrep; baseInfo.cpunum = cpunum; baseInfo.memsize = mem; baseInfo.groups = groups; baseInfo.priv = priv; baseInfo.vercode = vercode; baseInfo.lang = TransferLanguage(lang); _time64(&baseInfo.reportTime); SOCKADDR_IN addr; if (CommManager::GetInstanceRef().GetLastConnectionAddr(commData.GetClientID(), addr)) { baseInfo.connectIP = addr.sin_addr.S_un.S_addr; } else { baseInfo.connectIP = 0; } baseInfo.bValid = TRUE; return TRUE; }
BOOL Shell::RefershPartitions() { for (int i = 0; i < 26; i++) { m_partitions[i].bValid = FALSE; } CommData request; request.SetMsgID(MSGID_DISKS); CommData commData; if (! AskAndWaitForReply(request, commData)) { return FALSE; } DECLARE_STR_PARAM(result); TStringVector partitionVector; splitByChar(result.c_str(), partitionVector, ':'); BOOL bFoundOne = FALSE; TStringVector::iterator partitionIter = partitionVector.begin(); for (; partitionIter != partitionVector.end(); partitionIter++) { tstring& partitionStr = *partitionIter; TStringVector infoVector; splitByChar(partitionStr.c_str(), infoVector, '|'); if (infoVector.size() != 4) continue; //partition(str)|drivertype(uint)|totalbytes(uint64)|freebytes(uint64): if (infoVector[0].size() == 0) continue; TCHAR partition = infoVector[0][0]; int index = 0; if (partition >= 'a' && partition <= 'z') index = partition - 'a'; else if (partition >= 'A' && partition <= 'Z') index = partition - 'A'; else continue; if (1 != _stscanf_s(infoVector[1].c_str(), _T("%u"), &m_partitions[index].drivertype)) continue; if (1 != _stscanf_s(infoVector[2].c_str(), _T("%I64u"), &m_partitions[index].totalBytes)) continue; if (1 != _stscanf_s(infoVector[3].c_str(), _T("%I64u"), &m_partitions[index].freeBytes)) continue; m_partitions[index].curPath = ('A' + index); m_partitions[index].curPath += _T(":\\"); m_partitions[index].bValid = TRUE; bFoundOne = TRUE; } return bFoundOne; }
BOOL Shell::Execute_Dir( const TStringVector& cmdparts, tstring& reply ) { tstring findstr = _T("*"); if (cmdparts.size() > 1) { findstr = cmdparts[1]; } findstr = m_currentPath + _T("\\") + findstr; MakeAbsolutePath(findstr.c_str(), findstr); if (findstr.find('*') == tstring::npos && findstr.find('?') == tstring::npos) { trim(findstr, '\\'); findstr += _T("\\*"); } CommData request; request.SetMsgID(MSGID_LIST_FILES); request.SetData(_T("findstr"), findstr.c_str()); CommData commData; if (! AskAndWaitForReply(request, commData)) { reply = _T("客户端响应超时"); return FALSE; } DECLARE_STR_PARAM(result); // result str 目录内容 filename(str)|attr(dword)|filesize(uint64)|lastWriteTime(uint64 filetime): tostringstream toss; TStringVector fileParts; splitByChar(result.c_str(), fileParts, ':'); TStringVector::iterator fileIter = fileParts.begin(); for (; fileIter != fileParts.end(); fileIter++) { tstring& fileInfo = *fileIter; TStringVector attrParts; splitByChar(fileInfo.c_str(), attrParts, '|'); if (attrParts.size() != 4) continue; tstring& filename = attrParts[0]; DWORD dwAttrs = 0; ULARGE_INTEGER filesize = {0}; ULARGE_INTEGER lastWriteTime = {0}; if (1 != _stscanf_s(attrParts[1].c_str(), _T("%u"), &dwAttrs)) continue; if (1 != _stscanf_s(attrParts[2].c_str(), _T("%I64u"), &filesize.QuadPart)) continue; if (1 != _stscanf_s(attrParts[3].c_str(), _T("%I64u"), &lastWriteTime.QuadPart)) continue; SYSTEMTIME systime; FILETIME ftLastWriteTime; ftLastWriteTime.dwLowDateTime = lastWriteTime.LowPart; ftLastWriteTime.dwHighDateTime = lastWriteTime.HighPart; FILETIME ftLocalLastWriteTime; FileTimeToLocalFileTime(&ftLastWriteTime, &ftLocalLastWriteTime); FileTimeToSystemTime(&ftLocalLastWriteTime, &systime); BOOL bDir = (dwAttrs & FILE_ATTRIBUTE_DIRECTORY); TCHAR line[MAX_PATH * 2] = {0}; _stprintf_s(line, _T("%04d/%02d/%02d %02d:%02d:%02d %20s %s\r\n"), systime.wYear, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute, systime.wSecond, (bDir ? _T("<DIR> ") : FormatSizeWithUnit(filesize.QuadPart).c_str()), filename.c_str()); toss << line; } reply = toss.str(); return TRUE; }
BOOL ClientInfoManager::MsgHandler_OutputError( MSGID msgid, const CommData& commData, LPVOID lpParameter ) { DECLARE_STR_PARAM(error); errorLog(_T("[CLIENT ERROR][%s] %s"),error.c_str(),commData.GetClientID()); return TRUE; }