|
@@ -6,8 +6,8 @@
|
|
|
#include <stdio.h>
|
|
|
#include <stdlib.h>
|
|
|
#include "fileutil.h"
|
|
|
-#include "iniutil.h"
|
|
|
#include "CommEntityUtil.hpp"
|
|
|
+#include "CommEntityRestful.hpp"
|
|
|
#include "SpUtility.h"
|
|
|
#include "comm.h"
|
|
|
#include "PinPad_client_g.h"
|
|
@@ -23,10 +23,6 @@ using namespace PinPad;
|
|
|
#include <ws2tcpip.h>
|
|
|
#include <Winsock2.h>
|
|
|
#include <algorithm>
|
|
|
-#include "WMIDeviceQuery.h"
|
|
|
-#include <WinCrypt.h>
|
|
|
-#include <Strsafe.h>
|
|
|
-#include "DeviceBaseClass.h"
|
|
|
#pragma comment(lib, "IPHLPAPI.lib")
|
|
|
#define ALLOW_MULTI_NETWORKD_CARDS
|
|
|
#endif // RVC_OS_WIN
|
|
@@ -132,8 +128,20 @@ struct TimeSynTask : ITaskSp
|
|
|
CSystemStaticInfo si;
|
|
|
m_fsm->GetEntityBase()->GetFunction()->GetSystemStaticInfo(si);
|
|
|
|
|
|
- CSessionkeySynReq timeSyncReq;
|
|
|
- CSessionkeySynAns timeSyncAns;
|
|
|
+ struct TimeSynReqStructJson
|
|
|
+ {
|
|
|
+ std::string terminalNo;
|
|
|
+ int curTime;
|
|
|
+ JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminalNo, curTime)
|
|
|
+ } timeSyncReq;
|
|
|
+ struct TimeSyncAnsStructJson
|
|
|
+ {
|
|
|
+ int timeDiff;
|
|
|
+ int authVersion;
|
|
|
+ std::string sessionKey;
|
|
|
+ std::string reserved;
|
|
|
+ JSONCONVERT2OBJECT_MEMEBER_REGISTER(timeDiff, authVersion, sessionKey, reserved)
|
|
|
+ }timeSyncAns;
|
|
|
|
|
|
timeSyncReq.terminalNo = si.strTerminalID.GetData();
|
|
|
timeSyncReq.curTime = CSmallDateTime::GetNow().GetTime64();
|
|
@@ -256,8 +264,26 @@ struct UpdateWKTask : ITaskSp
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- CAccessAuthUpdateWKReq updateWKReq;
|
|
|
- CAccessAuthUpdateWKAns updateWKAns;
|
|
|
+ struct UpdateWKReq
|
|
|
+ {
|
|
|
+ std::string terminalNo;
|
|
|
+ std::string encRandom;
|
|
|
+ string tpkKeyCheck; //tpk密钥校验值
|
|
|
+ string edkKeyCheck; //edk密钥校验值
|
|
|
+ string keyIndex; //密钥序号
|
|
|
+ JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminalNo, encRandom, tpkKeyCheck, edkKeyCheck, keyIndex)
|
|
|
+ } updateWKReq;
|
|
|
+
|
|
|
+ struct UpdateWKAns
|
|
|
+ {
|
|
|
+ string tmk;
|
|
|
+ string tpk;
|
|
|
+ string edk;
|
|
|
+ string tpkKeyCheck; //密钥校验值
|
|
|
+ string edkKeyCheck; //edk密钥校验值
|
|
|
+ string keyIndex; //密钥序号
|
|
|
+ JSONCONVERT2OBJECT_MEMEBER_REGISTER(tmk, tpk, edk, tpkKeyCheck, edkKeyCheck, keyIndex)
|
|
|
+ } updateWKAns;
|
|
|
|
|
|
updateWKReq.terminalNo = si.strTerminalID.GetData();
|
|
|
auto tmkpair = m_entity->GenerateTmkToKMC();//first是加密的,seconde是没加密的
|
|
@@ -283,7 +309,6 @@ struct UpdateWKTask : ITaskSp
|
|
|
else
|
|
|
{
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Get keyChek && keyIndex failed.");
|
|
|
- return;
|
|
|
}
|
|
|
|
|
|
pPinPad->GetFunction()->CloseSession();
|
|
@@ -291,7 +316,6 @@ struct UpdateWKTask : ITaskSp
|
|
|
else
|
|
|
{
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("connect to pinpad failed.error code:%d", errRc);
|
|
|
- return;
|
|
|
}
|
|
|
|
|
|
HttpClientResponseResult result;
|
|
@@ -368,16 +392,46 @@ struct GetTokenTask : ITaskSp
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("encTerminalInfo: %s", getTokenReq.encTerminalInfo.c_str());
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("sessionTempPubKey:%s", getTokenReq.sessionTempPubKey.c_str());
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("terminalNo: %s", getTokenReq.terminalNo.c_str());
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("terminalVersion: %s", getTokenReq.terminalVersion.c_str());
|
|
|
+ struct GetTokenReq
|
|
|
+ {
|
|
|
+ string installVersion;//终端版本(新加字段)
|
|
|
+ string terminalCharacter;
|
|
|
+ string terminalNo;
|
|
|
+ string sessionTempPubKey;
|
|
|
+ string encTerminalInfo;
|
|
|
+ string publicKeySM;
|
|
|
+ string pinPadID;
|
|
|
+ string existPinPad;
|
|
|
+ JSONCONVERT2OBJECT_MEMEBER_REGISTER(installVersion, terminalCharacter, terminalNo,
|
|
|
+ sessionTempPubKey, encTerminalInfo, publicKeySM, pinPadID, existPinPad)
|
|
|
+ } getTokenReqJson;
|
|
|
+
|
|
|
+ struct AccessTokenJson
|
|
|
+ {
|
|
|
+ string enToken;
|
|
|
+ string retHash;
|
|
|
+ JSONCONVERT2OBJECT_MEMEBER_REGISTER(enToken, retHash)
|
|
|
+ };
|
|
|
+ struct SharedKeyJson
|
|
|
+ {
|
|
|
+ string enToken;
|
|
|
+ string sharedSK;
|
|
|
+ string retHash;
|
|
|
+ JSONCONVERT2OBJECT_MEMEBER_REGISTER(enToken, sharedSK, retHash)
|
|
|
+ };
|
|
|
|
|
|
- CAccessAuthGetTokenAns getTokenAns;
|
|
|
+ struct GetTokenAns
|
|
|
+ {
|
|
|
+ AccessTokenJson accessToken;
|
|
|
+ SharedKeyJson sharedKey;
|
|
|
+ bool flag;
|
|
|
+ string warnMessage;
|
|
|
+ JSONCONVERT2OBJECT_MEMEBER_REGISTER(accessToken, sharedKey, flag, warnMessage)
|
|
|
+ } getTokenAns;
|
|
|
|
|
|
HttpClientResponseResult result;
|
|
|
HttpClientRequestConfig config(HttpRequestMethod::POST, m_fsm->GetmAccessAuthHost().GetData(), &SpGetToken);
|
|
|
- config.SetChildUri("/api/v4/access");
|
|
|
+ config.SetChildUri("/api/v3/access");
|
|
|
|
|
|
if (m_fsm->containsChinese(m_fsm->GetmAccessAuthHost().GetData()))
|
|
|
{
|
|
@@ -391,10 +445,23 @@ struct GetTokenTask : ITaskSp
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- SP::Module::Restful::FulfillRequestJsonBody(&config, getTokenReq);
|
|
|
+ getTokenReqJson.installVersion = getTokenReq.installVersion;
|
|
|
+ getTokenReqJson.terminalCharacter = getTokenReq.terminalCharacter;
|
|
|
+ getTokenReqJson.terminalNo = getTokenReq.terminalNo;
|
|
|
+ getTokenReqJson.sessionTempPubKey = getTokenReq.sessionTempPubKey;
|
|
|
+ getTokenReqJson.encTerminalInfo = getTokenReq.encTerminalInfo;
|
|
|
+ getTokenReqJson.publicKeySM = getTokenReq.publicKeySM;
|
|
|
+ getTokenReqJson.pinPadID = getTokenReq.pinPadID;
|
|
|
+ getTokenReqJson.existPinPad = getTokenReq.existPinPad;
|
|
|
+
|
|
|
+
|
|
|
+ SP::Module::Restful::FulfillRequestJsonBody(&config, getTokenReqJson);
|
|
|
+
|
|
|
+ std::string test;
|
|
|
+ test = config.GetRequestUri();
|
|
|
+
|
|
|
RestfulClient client = RestfulClient::getInstance();
|
|
|
config.PreDo();
|
|
|
-
|
|
|
client.Do(&config, &result);
|
|
|
if (result.ResponseOK()) {
|
|
|
SP::Module::Restful::CommResponseJson responseStatus;
|
|
@@ -409,12 +476,10 @@ struct GetTokenTask : ITaskSp
|
|
|
{
|
|
|
CSimpleStringA tmsg = CSimpleStringA::Format("{\"errcode\": \"%s\", \"message\": %s}",
|
|
|
responseStatus.errorCode.c_str(), getTokenAns.warnMessage.c_str());
|
|
|
- m_entity->SetAuthErrMsg(tmsg.GetData());
|
|
|
m_fsm->GetEntityBase()->GetFunction()->SetSysVar("AuthErrMsg", tmsg.GetData(), true);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- m_entity->SetAuthErrMsg("");
|
|
|
m_fsm->GetEntityBase()->GetFunction()->SetSysVar("AuthErrMsg", "", true);
|
|
|
}
|
|
|
|
|
@@ -454,13 +519,25 @@ struct GetTokenTask : ITaskSp
|
|
|
}
|
|
|
|
|
|
m_fsm->AuthLogWarn(result, config.GetRequestUri(), "获取准入token");
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetTokenTask Connect Failed. [%s]", result.WhatError().c_str());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetTokenTask Connect Failed.");
|
|
|
}
|
|
|
FSMEvent* pEvent = new FSMEvent(CAccessAuthFSM::Event_ReqTokenFail);
|
|
|
m_fsm->PostEventFIFO(pEvent);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+struct InitDeviceTask :public ITaskSp
|
|
|
+{
|
|
|
+ CAccessAuthFSM* m_fsm;
|
|
|
+ InitDeviceReq m_req;
|
|
|
+ InitDeviceTask(CAccessAuthFSM* fsm, InitDeviceReq req) :m_fsm(fsm), m_req(req) {}
|
|
|
+
|
|
|
+ void Process()
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
|
|
|
#ifdef RVC_OS_LINUX
|
|
|
bool isChineseChar(const char* p) {
|
|
@@ -517,8 +594,6 @@ void CAccessAuthFSM::doWarnMsg(int errReason, std::string errMsg, bool bNeedEven
|
|
|
#endif // RVC_OS_WIN
|
|
|
if (bNeedEvent)
|
|
|
{
|
|
|
- auto pEntity = (CAccessAuthEntity*)m_pEntity;
|
|
|
- pEntity->SetAuthErrMsg(fullErrMsg.c_str());
|
|
|
const ErrorCodeEnum ec = m_pEntity->GetFunction()->SetSysVar("AuthErrMsg", fullErrMsg.c_str(), true);
|
|
|
if (ec != Error_Succeed) {
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Update SysVar failed: 0x%X", ec);
|
|
@@ -526,7 +601,6 @@ void CAccessAuthFSM::doWarnMsg(int errReason, std::string errMsg, bool bNeedEven
|
|
|
|
|
|
if (errReason == ERR_ACCESSAUTH_SERVICE_FAILED)
|
|
|
{
|
|
|
- pEntity->SetAuthErrMsg(errMsg.c_str());
|
|
|
m_pEntity->GetFunction()->SetSysVar("AuthErrMsg", errMsg.c_str(), true);
|
|
|
LogEvent(Severity_Middle, ERR_ACCESSAUTH_SERVICE_FAILED, errMsg.c_str());
|
|
|
}
|
|
@@ -815,6 +889,7 @@ DWORD CAccessAuthFSM::HandleGetToken(BYTE* enToken1, BYTE* sharedKey, BYTE* enTo
|
|
|
{
|
|
|
pEntity->SetAuthErrMsg("保存令牌失败");
|
|
|
pEntity->GetFunction()->SetSysVar("AuthErrMsg", "保存令牌失败", true);
|
|
|
+ pEntity->SetAuthErrMsg("保存令牌失败");
|
|
|
doWarnMsg(ERR_ACCESSAUTH_SAVE_TOKEN, "保存令牌失败", true);
|
|
|
DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5208")(GetOutPutStr("%s%08X", "SaveTokenAndSharedSK", rc).c_str());
|
|
|
}
|
|
@@ -822,55 +897,112 @@ DWORD CAccessAuthFSM::HandleGetToken(BYTE* enToken1, BYTE* sharedKey, BYTE* enTo
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
-DWORD CAccessAuthFSM::GetEncTerminalInfoWithKey(CBlob& encInfo, BYTE* key)
|
|
|
+DWORD CAccessAuthFSM::GetEncTerminalInfo(CBlob& encInfo)
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
- ErrorCodeEnum rc = Error_Succeed;
|
|
|
- CSimpleStringA ip, mac, pinpadModel, cpuId, mainBoardId, hardDiskId, osType, osVersion;
|
|
|
- std::map<std::string, std::string> termInfo;
|
|
|
-
|
|
|
- auto pEntity = ((CAccessAuthEntity*)m_pEntity);
|
|
|
- bool bPinPadOnline = false;
|
|
|
- pEntity->GetPinPadModel(pinpadModel, bPinPadOnline);
|
|
|
-
|
|
|
- GetIPandMac(ip, mac);
|
|
|
- GetHardWareInfo(cpuId, mainBoardId, hardDiskId);
|
|
|
- osVersion = GetOsVersion();
|
|
|
+ RequestTokenReq1 req1;
|
|
|
+ memset(&req1, 0, sizeof(req1));
|
|
|
+ BYTE* pBuf = (BYTE*)&req1.encTerminalInfo;
|
|
|
|
|
|
-#ifdef RVC_OS_WIN
|
|
|
- termInfo["osType"] = "Windows";
|
|
|
-#else
|
|
|
- termInfo["osType"] = "UOS";
|
|
|
-#endif // RVC_OS_WIN
|
|
|
- termInfo["osVersion"] = osVersion.GetData();
|
|
|
- termInfo["ip"] = ip.GetData();
|
|
|
- termInfo["mac"] = mac.GetData();
|
|
|
- termInfo["cpuId"] = cpuId.GetData();
|
|
|
- termInfo["mainBoardId"] = mainBoardId.GetData();
|
|
|
- termInfo["hardDiskId"] = hardDiskId.GetData();
|
|
|
- termInfo["pinpadModel"] = pinpadModel.GetData();
|
|
|
-
|
|
|
- std::pair<bool, std::string> strResult;
|
|
|
- strResult = generateJsonStr(termInfo);
|
|
|
-
|
|
|
- char* pBuf = new char[2048];
|
|
|
- int len = 0;
|
|
|
-#ifdef RVC_OS_WIN
|
|
|
- string tmpStr = strResult.second;
|
|
|
- SP::Module::Util::ConvertGBKToUtf8(tmpStr);
|
|
|
- strcpy(pBuf, tmpStr.c_str()); //GBK转UTF8
|
|
|
- len = tmpStr.size();
|
|
|
+ // 设置长度
|
|
|
+ sprintf((char*)pBuf, "%.4d", sizeof(RequestTokenInfo));
|
|
|
+
|
|
|
+ RequestTokenInfo* pInfo = (RequestTokenInfo*)(pBuf + 4);
|
|
|
+
|
|
|
+ CSystemStaticInfo si;
|
|
|
+ m_pEntity->GetFunction()->GetSystemStaticInfo(si);
|
|
|
+ strncpy(pInfo->szTerminalNo, (const char*)si.strTerminalID, sizeof(pInfo->szTerminalNo) - 1);
|
|
|
+
|
|
|
+ CSimpleStringA strPinPadID = "", strDeviceID = "";
|
|
|
+ bool isPinPadMac = false, bPinPadOnline = false;
|
|
|
+ int nRet = ((CAccessAuthEntity*)m_pEntity)->GetPinPadIDAndDeviceID(strPinPadID, strDeviceID, isPinPadMac, bPinPadOnline);
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetPinPadIDAndDeviceID ret: %d, PinPadID: %s, DeviceID: %s", nRet, strPinPadID.GetData(), strDeviceID.GetData());
|
|
|
+ if (nRet == 2 || nRet == 3) {
|
|
|
+ strncpy(pInfo->szPadDeviceID, (const char*)strDeviceID, sizeof(pInfo->szPadDeviceID) - 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ strncpy(pInfo->szMachineType, (const char*)si.strMachineType, sizeof(pInfo->szMachineType) - 1);
|
|
|
+
|
|
|
+ // 设备版本,低两位为小版本号,高两位为大版本号 Binary 4
|
|
|
+ DWORD ver32 = si.MachineVersion.GetVersion32();
|
|
|
+ for (int i = 0; i < 4; i++) {
|
|
|
+ pInfo->machineVersion[3 - i] = ((BYTE*)&ver32)[i];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 安装版本,其中包含软件框架版本 binary 8
|
|
|
+ __int64 ver64 = si.InstallVersion.GetVersion64();
|
|
|
+ for (int i = 0; i < 8; i++) {
|
|
|
+ pInfo->installVersion[7 - i] = ((BYTE*)&ver64)[i];
|
|
|
+ }
|
|
|
+#ifdef RVC_OS_WIN
|
|
|
+ hostent* ent = gethostbyname(NULL);
|
|
|
+ if (ent && ent->h_addr_list[0] != NULL) {
|
|
|
+ int i = 0;
|
|
|
+ for (; ent->h_addr_list[i] != NULL; ++i) {
|
|
|
+ struct in_addr* in = (struct in_addr*)ent->h_addr_list[i];
|
|
|
+ //99开头行内办公网,10开头行内业务网。规范出自《招商银行总行网络规范汇编(2017年版).pdf》
|
|
|
+ if (in->S_un.S_un_b.s_b1 == 99 || in->S_un.S_un_b.s_b1 == 10)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ent->h_addr_list[i] == NULL)
|
|
|
+ i = 0;
|
|
|
+
|
|
|
+ auto in = (struct in_addr*)ent->h_addr_list[i];
|
|
|
+
|
|
|
+ pInfo->ip[0] = in->S_un.S_un_b.s_b1;
|
|
|
+ pInfo->ip[1] = in->S_un.S_un_b.s_b2;
|
|
|
+ pInfo->ip[2] = in->S_un.S_un_b.s_b3;
|
|
|
+ pInfo->ip[3] = in->S_un.S_un_b.s_b4;
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ip:%d.%d.%d.%d", pInfo->ip[0], pInfo->ip[1], pInfo->ip[2], pInfo->ip[3]);
|
|
|
+ }
|
|
|
#else
|
|
|
- strcpy(pBuf, strResult.second.c_str());
|
|
|
- len = strResult.second.size();
|
|
|
-#endif // RVC_OS_WIN
|
|
|
+ char ip[32] = { 0 };
|
|
|
+ if (getIPFromLinux(ip)) DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Get IP From Linux Error ex.");
|
|
|
+ else {
|
|
|
+ if (ip2byte(ip, pInfo->ip)) DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Ip 2 Byte Error");
|
|
|
+ else {
|
|
|
+ for (int i = 0; i < 4; i++) {
|
|
|
+ DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("ip[%d]=%d", i, (int)pInfo->ip[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif //#ifdef RVC_OS_WIN
|
|
|
+ strncpy(pInfo->szSites, si.strSite, sizeof(pInfo->szSites) - 1);
|
|
|
+
|
|
|
+ si.EnrolGPS.GetBinaryLongitude(&pInfo->currentGPS[0]);
|
|
|
+ si.EnrolGPS.GetBinaryLatitude(&pInfo->currentGPS[4]);
|
|
|
+
|
|
|
+ CSimpleStringA ts;
|
|
|
+ DWORD rc = m_pEntity->GetFunction()->GetSysVar("TerminalStage", ts);
|
|
|
+ if (rc != Error_Succeed)
|
|
|
+ {
|
|
|
+ string outStr = GetOutPutStr("%s%08X%s%s", "GetSysVar", rc, "TerminalStage", ts.GetData());
|
|
|
+ doWarnMsg(ERR_ACCESSAUTH_GET_SYS_VAR, outStr.c_str());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(outStr.c_str());
|
|
|
+ return ERR_ACCESSAUTH_GET_SYS_VAR;
|
|
|
+ }
|
|
|
+ assert(ts.GetLength() >= 1);
|
|
|
+ pInfo->chTerminalState = ts[0];
|
|
|
+
|
|
|
+ CSimpleStringA rs;
|
|
|
+ rc = m_pEntity->GetFunction()->GetSysVar("RunState", rs);
|
|
|
+ if (rc != Error_Succeed)
|
|
|
+ {
|
|
|
+ string outStr = GetOutPutStr("%s%08X%s%s", "GetSysVar", rc, "RunState", rs.GetData());
|
|
|
+ doWarnMsg(ERR_ACCESSAUTH_GET_SYS_VAR, outStr.c_str());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(outStr.c_str());
|
|
|
+ return ERR_ACCESSAUTH_GET_SYS_VAR;
|
|
|
+ }
|
|
|
+ assert(rs.GetLength() >= 1);
|
|
|
+ pInfo->chRunState = rs[0];
|
|
|
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("HardWareInfo: %s", pBuf);
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("HardWareInfo size: %d", len);
|
|
|
|
|
|
CBlob raw;
|
|
|
- raw.Refer(pBuf, len);
|
|
|
- rc = pEntity->EncryptDataWithKey(raw, encInfo, key);
|
|
|
+ auto pEntity = ((CAccessAuthEntity*)m_pEntity);
|
|
|
+ // 使用会话密钥加密
|
|
|
+ raw.Refer(pBuf, sizeof(RequestTokenInfo) + 4);
|
|
|
+ rc = pEntity->EncryptDataWithSessionKey(raw, encInfo);
|
|
|
|
|
|
if (rc != Error_Succeed)
|
|
|
{
|
|
@@ -920,14 +1052,26 @@ DWORD CAccessAuthFSM::GetTokenReq(CAccessAuthGetTokenReq* getTokenReq)
|
|
|
CSystemStaticInfo si;
|
|
|
pEntity->GetFunction()->GetSystemStaticInfo(si);
|
|
|
|
|
|
- getTokenReq->terminalVersion = si.InstallVersion.ToString();
|
|
|
- getTokenReq->terminalNo = si.strTerminalID.GetData();
|
|
|
+ getTokenReq->installVersion = si.InstallVersion.ToString();
|
|
|
+
|
|
|
+ BYTE fingerPrint[32] = { 0 };
|
|
|
+ int nBufLen = sizeof(fingerPrint);
|
|
|
+ if (!pEntity->GetTerminalFingerPrint(fingerPrint, nBufLen))
|
|
|
+ {
|
|
|
+ doWarnMsg(ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
|
|
|
+ GetOutPutStr("%s%s", "GetTerminalFingerPrint", "False").c_str());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5203")
|
|
|
+ (GetOutPutStr("%s%s", "GetTerminalFingerPrint", "False").c_str());
|
|
|
+ return ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT;
|
|
|
+ }
|
|
|
+ char tmp[256] = { 0 };
|
|
|
+ char* fingerPrintHex = Str2Hex((char*)fingerPrint, 64);
|
|
|
+ memcpy(tmp, fingerPrintHex, 64);
|
|
|
+ getTokenReq->terminalCharacter = tmp;
|
|
|
+ delete fingerPrintHex;
|
|
|
|
|
|
CBlob encInfo;
|
|
|
- // 使用会话密钥加密
|
|
|
- char sessionKey[KEY_SIZE] = { 0 };
|
|
|
- memcpy(sessionKey, pEntity->m_AuthSessionKey, KEY_SIZE);
|
|
|
- if ((rc = GetEncTerminalInfoWithKey(encInfo, (BYTE*)sessionKey)) != Error_Succeed)
|
|
|
+ if ((rc = GetEncTerminalInfo(encInfo)) != Error_Succeed)
|
|
|
{
|
|
|
DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetEncTerminalInfo failed:%d", rc);
|
|
|
return rc;
|
|
@@ -935,14 +1079,23 @@ DWORD CAccessAuthFSM::GetTokenReq(CAccessAuthGetTokenReq* getTokenReq)
|
|
|
char* pTmp = Str2Hex((char*)encInfo.m_pData, encInfo.m_iLength);
|
|
|
getTokenReq->encTerminalInfo = pTmp;
|
|
|
delete pTmp;
|
|
|
-
|
|
|
+ getTokenReq->terminalNo = si.strTerminalID.GetData();
|
|
|
string tmpStr = "";
|
|
|
- if ((rc = GetTmk(tmpStr)) != Error_Succeed)
|
|
|
+ if ((rc = GetTmk(tmpStr)) != Error_Succeed) return rc;
|
|
|
+ getTokenReq->sessionTempPubKey = tmpStr;
|
|
|
+
|
|
|
+ CSimpleStringA strPinPadID = "", strDeviceID = "";
|
|
|
+ bool isPinPadMac = false, bPinPadOnline = false;
|
|
|
+ int nRet = ((CAccessAuthEntity*)m_pEntity)->GetPinPadIDAndDeviceID(strPinPadID, strDeviceID, isPinPadMac, bPinPadOnline);
|
|
|
+ getTokenReq->pinPadID = strPinPadID.GetData();
|
|
|
+ if (pEntity->HasPinPad())
|
|
|
{
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetTmk failed:%d", rc);
|
|
|
- return rc;
|
|
|
+ getTokenReq->existPinPad = "1";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ getTokenReq->existPinPad = "0";
|
|
|
}
|
|
|
- getTokenReq->sessionTempPubKey = tmpStr;
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
@@ -950,9 +1103,9 @@ void CAccessAuthFSM::UpdateWK()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
auto pEntity = ((CAccessAuthEntity*)m_pEntity);
|
|
|
- CSimpleStringA strPinPadModel = "";
|
|
|
- bool bPinPadOnline = false;
|
|
|
- pEntity->GetPinPadModel(strPinPadModel, bPinPadOnline);
|
|
|
+ CSimpleStringA strPinPadID = "", strDeviceID = "";
|
|
|
+ bool isPinPadMac = false, bPinPadOnline = false;
|
|
|
+ pEntity->GetPinPadIDAndDeviceID(strPinPadID, strDeviceID, isPinPadMac, bPinPadOnline);
|
|
|
if (bPinPadOnline) {
|
|
|
CSmartPointer<UpdateWKTask> updateWKTask = new UpdateWKTask(this, pEntity);
|
|
|
GetEntityBase()->GetFunction()->PostThreadPoolTask(updateWKTask.GetRawPointer());
|
|
@@ -1014,328 +1167,3 @@ void CAccessAuthFSM::GetNetMsg(SpReqAnsContext<AccessAuthService_GetNetMsg_Req,
|
|
|
|
|
|
ctx->Answer(Error_Succeed);
|
|
|
}
|
|
|
-
|
|
|
-CSimpleStringA CAccessAuthFSM::GetOsVersion()
|
|
|
-{
|
|
|
- std::map<std::string, std::string> errInfo;
|
|
|
- CSimpleStringA errMsg;
|
|
|
- errInfo["errcode"] = "RTA5219";
|
|
|
- errInfo["msg"] = "调用系统api获取操作系统版本失败";
|
|
|
-
|
|
|
-#if defined(RVC_OS_WIN)
|
|
|
- CSimpleStringA runInfoPath;
|
|
|
- ErrorCodeEnum eErr = GetEntityBase()->GetFunction()->GetPath("runinfo", runInfoPath);
|
|
|
- if (eErr != Error_Succeed) {
|
|
|
- DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("GetPath runinfo error=%s.", SpStrError(eErr));
|
|
|
- errInfo["getLastErr"] = GetLastError();
|
|
|
- errMsg = generateJsonStr(errInfo).second.c_str();
|
|
|
- return errMsg;
|
|
|
- }
|
|
|
- runInfoPath += "\\runcfg\\osverion";
|
|
|
- ifstream is;
|
|
|
- is.open(runInfoPath.GetData(), ios::binary);
|
|
|
- if (!is.is_open())
|
|
|
- {
|
|
|
- DWORD dwErr = GetLastError();
|
|
|
- DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("open runcfg\\osverion file failed. [%d]", dwErr);
|
|
|
- errInfo["getLastErr"] = dwErr;
|
|
|
- errMsg = generateJsonStr(errInfo).second.c_str();
|
|
|
- return errMsg;
|
|
|
- }
|
|
|
- string line;
|
|
|
- while (!is.eof()) {
|
|
|
- getline(is, line);
|
|
|
- int start = line.find("版本");
|
|
|
- if (start != string::npos)
|
|
|
- //return CSimpleStringA(line.substr(start + 5, line.length() - start - 7).c_str());
|
|
|
- return CSimpleStringA(line.c_str());
|
|
|
- else
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- errInfo["getLastErr"] = GetLastError();
|
|
|
- errMsg = generateJsonStr(errInfo).second.c_str();
|
|
|
- return errMsg;
|
|
|
-#else
|
|
|
- std::map<std::string, std::string> osInfo;
|
|
|
- const char filePath[] = "/etc/os-version";
|
|
|
- char tmp[33];
|
|
|
- memset(tmp, 0, 33);
|
|
|
- inifile_read_str_s("Version", "SystemName", "unknown", tmp, 32, filePath);
|
|
|
- osInfo["SystemName"] = tmp;
|
|
|
- memset(tmp, 0, 33);
|
|
|
- inifile_read_str_s("Version", "ProductType", "unknown", tmp, 32, filePath);
|
|
|
- osInfo["ProductType"] = tmp;
|
|
|
- memset(tmp, 0, 33);
|
|
|
- inifile_read_str_s("Version", "MajorVersion", "unknown", tmp, 32, filePath);
|
|
|
- osInfo["MajorVersion"] = tmp;
|
|
|
- memset(tmp, 0, 33);
|
|
|
- inifile_read_str_s("Version", "MinorVersion", "unknown", tmp, 32, filePath);
|
|
|
- osInfo["MinorVersion"] = tmp;
|
|
|
- memset(tmp, 0, 33);
|
|
|
- inifile_read_str_s("Version", "OsBuild", "unknown", tmp, 32, filePath);
|
|
|
- osInfo["OsBuild"] = tmp;
|
|
|
- return generateJsonStr(osInfo).second.c_str();
|
|
|
-#endif
|
|
|
-}
|
|
|
-
|
|
|
-void CAccessAuthFSM::GetIPandMac(CSimpleStringA& ip, CSimpleStringA& mac)
|
|
|
-{
|
|
|
- CAutoArray<SP::Module::Net::NetworkAdapterItem> netList;
|
|
|
- ErrorCodeEnum rc = SP::Module::Net::GetINETMacAddresses(netList);
|
|
|
- std::map<std::string, std::string> errInfo;
|
|
|
- if (rc != Error_Succeed)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Get sys netinfo failed!. rc=%d.", rc);
|
|
|
- errInfo["errcode"] = "RTA5216";
|
|
|
- errInfo["msg"] = "调用系统api获取ip失败";
|
|
|
- errInfo["getLastErr"] = GetLastError();
|
|
|
- ip = generateJsonStr(errInfo).second.c_str();
|
|
|
-
|
|
|
- errInfo["errcode"] = "RTA5217";
|
|
|
- errInfo["msg"] = "调用系统api获取mac地址失败";
|
|
|
- errInfo["getLastErr"] = GetLastError();
|
|
|
- mac = generateJsonStr(errInfo).second.c_str();
|
|
|
-
|
|
|
- auto pEntity = (CAccessAuthEntity*)m_pEntity;
|
|
|
- pEntity->SetAuthErrMsg("获取本地ip和mac失败");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- CSimpleStringA csMac(""), csIP(""), csDNS("");
|
|
|
- for (int i = 0; i < netList.GetCount(); i++) {
|
|
|
- if (!csMac.IsNullOrEmpty()) {
|
|
|
- csMac += ";";
|
|
|
- }
|
|
|
- csMac += netList[i].mac.c_str();
|
|
|
- }
|
|
|
- mac = csMac;
|
|
|
-
|
|
|
- for (int i = 0; i < netList.GetCount(); i++) {
|
|
|
- if (!csIP.IsNullOrEmpty()) {
|
|
|
- csIP += ";";
|
|
|
- }
|
|
|
- csIP += netList[i].ip.c_str();
|
|
|
- }
|
|
|
- ip = csIP;
|
|
|
-
|
|
|
- return;
|
|
|
-}
|
|
|
-
|
|
|
-void CAccessAuthFSM::GetHardWareInfo(CSimpleStringA & cpu, CSimpleStringA & mainBoard, CSimpleStringA & disk)
|
|
|
-{
|
|
|
- auto pEntity = (CAccessAuthEntity*)m_pEntity;
|
|
|
- std::map<std::string, std::string> errInfo;
|
|
|
-
|
|
|
- //oilyang@20231008 to get system info from runcfg first
|
|
|
- //no matter calculating from runcfg succeed or not,we also get system info from system api for update runcfg
|
|
|
- bool bGetFromRunCfg = false;
|
|
|
- CSimpleString csInfo, strErrMsg, strRet;
|
|
|
- CSmartPointer<IConfigInfo> pConfigRun;
|
|
|
- ErrorCodeEnum eErr = GetEntityBase()->GetFunction()->OpenConfig(Config_Run, pConfigRun);
|
|
|
- if (eErr == Error_Succeed && pConfigRun->ReadConfigValue("system", "info", csInfo) == Error_Succeed && !csInfo.IsNullOrEmpty()) {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("read device info from runcfg: [%s]", csInfo.GetData());
|
|
|
- CAutoArray<CSimpleStringA> sysInfo = csInfo.Split('|');
|
|
|
- if (sysInfo.GetCount() == 3)
|
|
|
- {
|
|
|
- cpu = sysInfo[0];
|
|
|
- mainBoard = sysInfo[1];
|
|
|
- disk = sysInfo[2];
|
|
|
- bGetFromRunCfg = true;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetTermSysInfo, OpenConfig Config_Run error=%d.", eErr);
|
|
|
-
|
|
|
-#ifdef RVC_OS_LINUX
|
|
|
- char szTmp[1024] = {};
|
|
|
- string strTmp;
|
|
|
- int nTmpBufLen = 1024;
|
|
|
- CSmartPointer<IEntityFunction> spFunction = GetEntityBase()->GetFunction();
|
|
|
-
|
|
|
- CSimpleStringA runInfoPath;
|
|
|
- auto rc = GetEntityBase()->GetFunction()->GetPath("runinfo", runInfoPath);
|
|
|
- if (rc != Error_Succeed) {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetPath runinfo error=%d.", rc);
|
|
|
- return;
|
|
|
- }
|
|
|
- runInfoPath += SPLIT_SLASH_STR "runcfg";
|
|
|
-
|
|
|
- //CPU
|
|
|
- if (!get_cpu_id_by_system(strTmp, runInfoPath.GetData()))
|
|
|
- {
|
|
|
- if (!bGetFromRunCfg)
|
|
|
- {
|
|
|
- errInfo["errcode"] = "RTA5213";
|
|
|
- errInfo["msg"] = "调用系统api获取CPU序号失败";
|
|
|
- errInfo["getLastErr"] = GetLastError();
|
|
|
- cpu = generateJsonStr(errInfo).second.c_str();
|
|
|
- }
|
|
|
-
|
|
|
- strErrMsg = CSimpleStringA::Format("查询CPU ID失败,请重启机器并重新初始化");
|
|
|
- pEntity->SetAuthErrMsg((const char*)strErrMsg);
|
|
|
-
|
|
|
- doWarnMsg(ERROR_ACCESSAUTH_GETCPUID,
|
|
|
- GetOutPutStr("%s%s", "Processor", "False").c_str());
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5213")
|
|
|
- (GetOutPutStr("%s%s", "Processor", "False").c_str());
|
|
|
- return;
|
|
|
- }
|
|
|
- cpu = strTmp.c_str();
|
|
|
- strRet = strTmp.c_str();
|
|
|
- strTmp.clear();
|
|
|
-
|
|
|
- //主板
|
|
|
- if (!get_board_serial_by_system(strTmp, runInfoPath.GetData()))
|
|
|
- {
|
|
|
- if (!bGetFromRunCfg)
|
|
|
- {
|
|
|
- errInfo["errcode"] = "RTA5214";
|
|
|
- errInfo["msg"] = "调用系统api获取主板ID号失败";
|
|
|
- errInfo["getLastErr"] = GetLastError();
|
|
|
- mainBoard = generateJsonStr(errInfo).second.c_str();
|
|
|
- }
|
|
|
- strErrMsg = CSimpleStringA::Format("查询主板序列号失败, 请重启机器并重新初始化");
|
|
|
- pEntity->SetAuthErrMsg((const char*)strErrMsg);
|
|
|
-
|
|
|
- doWarnMsg(ERROR_ACCESSAUTH_GETBASEBOARDSN,
|
|
|
- GetOutPutStr("%s%s", "BaseBoard", "False").c_str());
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5214")
|
|
|
- (GetOutPutStr("%s%s", "BaseBoard", "False").c_str());
|
|
|
- return;
|
|
|
- }
|
|
|
- mainBoard = strTmp.c_str();
|
|
|
- strRet += "|";
|
|
|
- strRet += strTmp.c_str();
|
|
|
-
|
|
|
- //硬盘
|
|
|
- vector<string> diskArr;
|
|
|
- int errCode = 0;
|
|
|
- if (!get_disk_serial_by_system(diskArr, errCode, runInfoPath.GetData()))
|
|
|
- {
|
|
|
- if (!bGetFromRunCfg)
|
|
|
- {
|
|
|
- errInfo["errcode"] = "RTA5215";
|
|
|
- errInfo["msg"] = "调用系统api获取硬盘ID号失败";
|
|
|
- errInfo["getLastErr"] = GetLastError();
|
|
|
- disk = generateJsonStr(errInfo).second.c_str();
|
|
|
- }
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get_disk_serial_by_system errCode:%d", errCode);
|
|
|
- strErrMsg = CSimpleStringA::Format("查询磁盘序列号失败, 请重启机器并重新初始化");
|
|
|
- pEntity->SetAuthErrMsg((const char*)strErrMsg);
|
|
|
-
|
|
|
- doWarnMsg(ERROR_ACCESSAUTH_DISKDRIVESN,
|
|
|
- GetOutPutStr("%s%s", "DiskDrive", "False").c_str());
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5215")
|
|
|
- (GetOutPutStr("%s%s", "DiskDrive", "False").c_str());
|
|
|
- return;
|
|
|
- }
|
|
|
- strRet += "|";
|
|
|
- strTmp = "";
|
|
|
- vector<string>::iterator it = diskArr.begin();
|
|
|
- while (it != diskArr.end()) {
|
|
|
- strTmp += *it;
|
|
|
- it++;
|
|
|
- }
|
|
|
- strRet += strTmp.c_str();
|
|
|
- disk = strTmp.c_str();
|
|
|
-#else
|
|
|
- ULONGLONG ullStart = GetTickCount64();
|
|
|
- char szTmp[1024] = {};
|
|
|
- int nTmpBufLen = 1024;
|
|
|
- CSmartPointer<IEntityFunction> spFunction = GetEntityBase()->GetFunction();
|
|
|
- if (!QueryWMIDevice(Processor, "ProcessorId", szTmp, &nTmpBufLen))
|
|
|
- {
|
|
|
- if (!bGetFromRunCfg)
|
|
|
- {
|
|
|
- errInfo["errcode"] = "RTA5213";
|
|
|
- errInfo["msg"] = "调用系统api获取CPU序号失败";
|
|
|
- errInfo["getLastErr"] = GetLastError();
|
|
|
- cpu = generateJsonStr(errInfo).second.c_str();
|
|
|
- }
|
|
|
- strErrMsg = CSimpleStringA::Format("查询 cpu id 失败: %d, 请尝试重启应用", GetLastError());
|
|
|
- pEntity->SetAuthErrMsg((const char*)strErrMsg);
|
|
|
-
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
|
|
|
- GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "Processor", GetLastError()).c_str());
|
|
|
-
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5203")
|
|
|
- (GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "Processor", GetLastError()).c_str());
|
|
|
- return;
|
|
|
- }
|
|
|
- strRet = szTmp;
|
|
|
- cpu = szTmp;
|
|
|
-
|
|
|
- nTmpBufLen = 1024;
|
|
|
- memset(szTmp, 0, sizeof(szTmp));
|
|
|
- if (!QueryWMIDevice(BaseBoard, "SerialNumber", szTmp, &nTmpBufLen))
|
|
|
- {
|
|
|
- if (!bGetFromRunCfg)
|
|
|
- {
|
|
|
- errInfo["errcode"] = "RTA5214";
|
|
|
- errInfo["msg"] = "调用系统api获取主板ID号失败";
|
|
|
- errInfo["getLastErr"] = GetLastError();
|
|
|
- mainBoard = generateJsonStr(errInfo).second.c_str();
|
|
|
- }
|
|
|
- strErrMsg = CSimpleStringA::Format("查询 baseboard sn 失败: %d, 请尝试重启应用", GetLastError());
|
|
|
- pEntity->SetAuthErrMsg((const char*)strErrMsg);
|
|
|
-
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
|
|
|
- GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "BaseBoard", GetLastError()).c_str());
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5203")
|
|
|
- (GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "BaseBoard", GetLastError()).c_str());
|
|
|
-
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- strRet += "|";
|
|
|
- strRet += szTmp;
|
|
|
- mainBoard = szTmp;
|
|
|
-
|
|
|
- nTmpBufLen = 1024;
|
|
|
- memset(szTmp, 0, sizeof(szTmp));
|
|
|
- if (!QueryWMIDevice(DiskDrive, "SerialNumber", szTmp, &nTmpBufLen))
|
|
|
- {
|
|
|
- if (!bGetFromRunCfg)
|
|
|
- {
|
|
|
- errInfo["errcode"] = "RTA5215";
|
|
|
- errInfo["msg"] = "调用系统api获取硬盘ID号失败";
|
|
|
- errInfo["getLastErr"] = GetLastError();
|
|
|
- disk = generateJsonStr(errInfo).second.c_str();
|
|
|
- }
|
|
|
- strErrMsg = CSimpleStringA::Format("查询 harddisk sn 失败: %d, 请尝试重启应用", GetLastError());
|
|
|
- pEntity->SetAuthErrMsg((const char*)strErrMsg);
|
|
|
-
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
|
|
|
- GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "DiskDrive", GetLastError()).c_str());
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "DiskDrive", GetLastError()).c_str());
|
|
|
-
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- strRet += "|";
|
|
|
- strRet += szTmp;
|
|
|
- disk = szTmp;
|
|
|
-
|
|
|
- ULONGLONG ullEnd = GetTickCount64();
|
|
|
- if (ullEnd - ullStart > 5000)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5201")
|
|
|
- ("获取系统信息耗时过长:%d秒", (ullEnd - ullStart) / 1000);
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, AccessAuthorization_UserErrorCode_GetTermCostTooLong,
|
|
|
- CSimpleStringA::Format("获取系统信息耗时过长:%d秒", (ullEnd - ullStart) / 1000));
|
|
|
- }
|
|
|
-#endif // RVC_OS_LINUX
|
|
|
-
|
|
|
- if (!bGetFromRunCfg || csInfo.Compare(strRet) != 0)
|
|
|
- {
|
|
|
- eErr = pConfigRun->WriteConfigValue("system", "info", strRet.GetData());
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("device info changed,before[%s],current[%s],write to runcfg:%d"
|
|
|
- , csInfo.GetData(), strRet.GetData(), eErr);
|
|
|
- }
|
|
|
- else
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("device info: [%s]", strRet.GetData());
|
|
|
-
|
|
|
- return;
|
|
|
-
|
|
|
-}
|