AccessAuthFSM.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. #pragma once
  2. #include "SpBase.h"
  3. #include "SpFSM.h"
  4. #include "Blob.h"
  5. #include "EventCode.h"
  6. #include "AccessAuthConn.h"
  7. #include "IHttpFunc.h"
  8. #include "json/json.h"
  9. #ifdef RVC_OS_WIN
  10. ///*TODO: (80374374@11/27/2023)*/
  11. typedef CAutoArray<CSimpleStringA> NetworkAddressesList;
  12. #define MACSESION 6
  13. #else
  14. #include <mutex>
  15. #include "publicFunExport.h"
  16. #include <winpr/sysinfo.h>
  17. static void GetLocalTimeRVC(SYSTEMTIME& stTime)
  18. {
  19. GetLocalTime(&stTime);
  20. }
  21. #endif // RVC_OS_WIN
  22. #define ACS_SUCCESS "0"
  23. #define REFLECTION(var) #var
  24. #define JUAGEHTTPS(ret) (ret.m_sysCode == 200 || ret.m_sysCode == 201)
  25. #ifdef RVC_OS_WIN
  26. typedef struct CSessionkeySynReq : CHTTPReq {
  27. string terminalNo;
  28. long curTime;
  29. string ToJson() {
  30. Json::Value value;
  31. value[REFLECTION(terminalNo)] = terminalNo;
  32. value[REFLECTION(curTime)] = curTime;
  33. Json::FastWriter writer;
  34. string strData = writer.write(value);
  35. /*DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CSessionkeySynReq")
  36. ("req=%s at CSessionkeySynReq", strData.c_str());*/
  37. return strData;
  38. }
  39. } CSessionkeySynReq;
  40. typedef struct CSessionkeySynRet : CHTTPRet {
  41. struct data {
  42. long timeDiff;
  43. string sessionKey;
  44. } data;
  45. bool Parse(string strData) {
  46. /*DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CSessionkeySynRet")
  47. ("ret=%s at CSessionkeySynRet", strData.c_str());*/
  48. Json::Value root;
  49. Json::Reader reader;
  50. reader.parse(strData, root, false);
  51. data.timeDiff = root["data"][REFLECTION(timeDiff)].asInt();
  52. data.sessionKey = root["data"][REFLECTION(sessionKey)].asString();
  53. return true;
  54. }
  55. } CSessionkeySynRet;
  56. typedef struct CAccessAuthUpdateWKReq : CHTTPReq {
  57. string terminalNo;
  58. string encRandom;
  59. string tpkKeyCheck; //tpk密钥校验值
  60. string edkKeyCheck; //edk密钥校验值
  61. string keyIndex; //密钥序号
  62. string ToJson() {
  63. Json::Value value;
  64. value[REFLECTION(terminalNo)] = terminalNo;
  65. value[REFLECTION(encRandom)] = encRandom;
  66. value[REFLECTION(tpkKeyCheck)] = tpkKeyCheck;
  67. value[REFLECTION(edkKeyCheck)] = edkKeyCheck;
  68. value[REFLECTION(keyIndex)] = keyIndex;
  69. Json::FastWriter writer;
  70. string strData = writer.write(value);
  71. /*DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CAccessAuthUpdateWKReq")
  72. ("req=%s at CAccessAuthUpdateWKReq", strData.c_str());*/
  73. return strData;
  74. }
  75. } CAccessAuthUpdateWKReq;
  76. typedef struct CAccessAuthUpdateWKRet : CHTTPRet {
  77. string tpk;
  78. string edk;
  79. string tpkKeyCheck; //密钥校验值
  80. string edkKeyCheck; //edk密钥校验值
  81. string keyIndex; //密钥序号
  82. bool Parse(string strData) {
  83. Json::Value root;
  84. Json::Reader reader;
  85. reader.parse(strData, root, false);
  86. tpk = root["data"][REFLECTION(tpk)].asString();
  87. edk = root["data"][REFLECTION(edk)].asString();
  88. tpkKeyCheck = root["data"][REFLECTION(tpkKeyCheck)].asString();
  89. edkKeyCheck = root["data"][REFLECTION(edkKeyCheck)].asString();
  90. keyIndex = root["data"][REFLECTION(keyIndex)].asString();
  91. return true;
  92. }
  93. } CAccessAuthUpdateWKRet;
  94. #endif // RVC_OS_WIN
  95. typedef struct CAccessAuthGetTokenReq :public CHTTPReq {
  96. public:
  97. string installVersion;//终端版本(新加字段)
  98. string terminalCharacter;
  99. string terminalNo;
  100. string sessionTempPubKey;
  101. string encTerminalInfo;
  102. string publicKeySM;
  103. string pinPadID;
  104. string existPinPad;
  105. string ToJson() {
  106. #ifdef RVC_OS_WIN
  107. Json::Value value;
  108. value[REFLECTION(installVersion)] = installVersion;
  109. value[REFLECTION(terminalCharacter)] = terminalCharacter;
  110. value[REFLECTION(terminalNo)] = terminalNo;
  111. value[REFLECTION(sessionTempPubKey)] = sessionTempPubKey;
  112. value[REFLECTION(encTerminalInfo)] = encTerminalInfo;
  113. value[REFLECTION(publicKeySM)] = publicKeySM;
  114. value[REFLECTION(pinPadID)] = pinPadID;
  115. value[REFLECTION(existPinPad)] = existPinPad;
  116. Json::FastWriter writer;
  117. string strData = writer.write(value);
  118. /*DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CAccessAuthGetTokenReq")
  119. ("req=%s at CAccessAuthGetTokenReq", strData.c_str());*/
  120. return strData;
  121. #else
  122. RVCJson rvcJson(true);
  123. rvcJson.AddStringToObject(REFLECTION(installVersion), (char*)installVersion.c_str());
  124. rvcJson.AddStringToObject(REFLECTION(terminalCharacter), (char*)terminalCharacter.c_str());
  125. rvcJson.AddStringToObject(REFLECTION(terminalNo), (char*)terminalNo.c_str());
  126. rvcJson.AddStringToObject(REFLECTION(sessionTempPubKey), (char*)sessionTempPubKey.c_str());
  127. rvcJson.AddStringToObject(REFLECTION(encTerminalInfo), (char*)encTerminalInfo.c_str());
  128. rvcJson.AddStringToObject(REFLECTION(publicKeySM), (char*)publicKeySM.c_str());
  129. rvcJson.AddStringToObject(REFLECTION(pinPadID), (char*)pinPadID.c_str());
  130. rvcJson.AddStringToObject(REFLECTION(existPinPad), (char*)existPinPad.c_str());
  131. string ret;
  132. char* tmp = rvcJson.GetJsonStr();
  133. ret.assign(tmp);
  134. delete tmp;
  135. /*DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CAccessAuthGetTokenReq")
  136. ("req=%s at CAccessAuthGetTokenReq", ret.c_str());*/
  137. return ret;
  138. #endif // RVC_OS_WIN
  139. }
  140. }CAccessAuthGetTokenReq;
  141. typedef struct CAccessAuthGetTokenRet : CHTTPRet {
  142. typedef struct AccessToken {
  143. string enToken;
  144. string retHash;
  145. } AccessToken;
  146. typedef struct SharedKey {
  147. string enToken;
  148. string sharedSK;
  149. string retHash;
  150. } ShareKey;
  151. struct data {
  152. AccessToken accessToken;
  153. SharedKey sharedKey;
  154. #ifdef RVC_OS_WIN
  155. int flag; //0:非高故障设备,1:高故障设备
  156. string warnMessage; //告警提示信息
  157. #endif // RVC_OS_WIN
  158. } data;
  159. bool Parse(string strData) {
  160. #ifdef RVC_OS_WIN
  161. Json::Value root;
  162. Json::Reader reader;
  163. reader.parse(strData, root, false);
  164. data.accessToken.enToken = root["data"][REFLECTION(accessToken)][REFLECTION(enToken)].asString();
  165. data.accessToken.retHash = root["data"][REFLECTION(accessToken)][REFLECTION(retHash)].asString();
  166. data.sharedKey.enToken = root["data"][REFLECTION(sharedKey)][REFLECTION(enToken)].asString();
  167. data.sharedKey.sharedSK = root["data"][REFLECTION(sharedKey)][REFLECTION(sharedSK)].asString();
  168. data.sharedKey.retHash = root["data"][REFLECTION(sharedKey)][REFLECTION(retHash)].asString();
  169. data.flag = root["data"][REFLECTION(flag)].asInt();
  170. data.warnMessage = root["data"][REFLECTION(warnMessage)].asString();
  171. return true;
  172. #else
  173. //Dbg("ret=%s at CAccessAuthGetTokenRet", strData.c_str());
  174. if (m_userCode.compare(ACS_SUCCESS)) return true;
  175. RVCJson rvcJson;
  176. rvcJson.SetJson(strData.c_str());
  177. auto dataJson = rvcJson.GetJsonValue(REFLECTION(data));
  178. auto tokenJson = dataJson->GetJsonValue(REFLECTION(accessToken));
  179. data.accessToken.enToken = tokenJson->GetStringValue(REFLECTION(enToken));
  180. data.accessToken.retHash = tokenJson->GetStringValue(REFLECTION(retHash));
  181. tokenJson->Destory();
  182. delete tokenJson;
  183. auto sharedJson = dataJson->GetJsonValue(REFLECTION(sharedKey));
  184. data.sharedKey.enToken = sharedJson->GetStringValue(REFLECTION(enToken));
  185. data.sharedKey.sharedSK = sharedJson->GetStringValue(REFLECTION(sharedSK));
  186. char* tmp = sharedJson->GetStringValue(REFLECTION(retHash));
  187. data.sharedKey.retHash = tmp == NULL ? "" : tmp;
  188. sharedJson->Destory();
  189. delete sharedJson;
  190. dataJson->Destory();
  191. delete dataJson;
  192. rvcJson.Destory();
  193. return true;
  194. #endif // RVC_OS_WIN
  195. }
  196. } CAccessAuthGetTokenRet;
  197. typedef struct CInitlizerMKReq : CHTTPReq {
  198. string enrolAddr;
  199. string enrolGPS;
  200. string installVersion;
  201. string ip;
  202. string machineModel;
  203. string machineType;
  204. string padDeviceID;
  205. string site;
  206. string terminalNo;
  207. string factory;
  208. string modal;
  209. string type;
  210. string version;
  211. string terminalCharacter; //终端特征值(fingerPrint + fingerPrintSM)
  212. string pinPadID;
  213. string publicKey;
  214. string user; //操作人
  215. string password; //密码
  216. string auth;//预留鉴权
  217. int loginWay;//1表示错误页发起,需要传入登录密码;0表示用户桌面发起,不需要传入登录密码
  218. string encRandom; //tmk pk加密的随机密钥
  219. string tpkKeyCheck; //密钥校验值
  220. string edkKeyCheck; //密钥校验值
  221. string keyIndex; //密钥序号
  222. string ToJson() {
  223. #ifdef RVC_OS_WIN
  224. Json::Value value;
  225. value[REFLECTION(enrolAddr)] = enrolAddr;
  226. value[REFLECTION(enrolGPS)] = enrolGPS;
  227. value[REFLECTION(installVersion)] = installVersion;
  228. value[REFLECTION(ip)] = ip;
  229. value[REFLECTION(machineModel)] = machineModel;
  230. value[REFLECTION(machineType)] = machineType;
  231. value[REFLECTION(padDeviceID)] = padDeviceID;
  232. value[REFLECTION(site)] = site;
  233. value[REFLECTION(terminalNo)] = terminalNo;
  234. value[REFLECTION(factory)] = factory;
  235. value[REFLECTION(modal)] = modal;
  236. value[REFLECTION(type)] = type;
  237. value[REFLECTION(version)] = version;
  238. value[REFLECTION(terminalCharacter)] = terminalCharacter;
  239. value[REFLECTION(pinPadID)] = pinPadID;
  240. value[REFLECTION(publicKey)] = publicKey;
  241. value[REFLECTION(user)] = user;
  242. value[REFLECTION(password)] = password;
  243. value[REFLECTION(auth)] = auth;
  244. value[REFLECTION(loginWay)] = loginWay;
  245. value[REFLECTION(encRandom)] = encRandom;
  246. value[REFLECTION(tpkKeyCheck)] = tpkKeyCheck;
  247. value[REFLECTION(edkKeyCheck)] = edkKeyCheck;
  248. value[REFLECTION(keyIndex)] = keyIndex;
  249. Json::FastWriter writer;
  250. string strData = writer.write(value);
  251. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CInitlizerMKReq")("CInitlizerMKReq:%s", strData.c_str());
  252. return strData;
  253. #else
  254. RVCJson rvcJson(true);
  255. rvcJson.AddStringToObject(REFLECTION(enrolAddr), (char*)enrolAddr.c_str());
  256. rvcJson.AddStringToObject(REFLECTION(enrolGPS), (char*)enrolGPS.c_str());
  257. rvcJson.AddStringToObject(REFLECTION(installVersion), (char*)installVersion.c_str());
  258. rvcJson.AddStringToObject(REFLECTION(ip), (char*)ip.c_str());
  259. rvcJson.AddStringToObject(REFLECTION(machineModel), (char*)machineModel.c_str());
  260. rvcJson.AddStringToObject(REFLECTION(machineType), (char*)machineType.c_str());
  261. rvcJson.AddStringToObject(REFLECTION(padDeviceID), (char*)padDeviceID.c_str());
  262. rvcJson.AddStringToObject(REFLECTION(site), (char*)site.c_str());
  263. rvcJson.AddStringToObject(REFLECTION(terminalNo), (char*)terminalNo.c_str());
  264. rvcJson.AddStringToObject(REFLECTION(factory), (char*)factory.c_str());
  265. rvcJson.AddStringToObject(REFLECTION(modal), (char*)modal.c_str());
  266. rvcJson.AddStringToObject(REFLECTION(type), (char*)type.c_str());
  267. rvcJson.AddStringToObject(REFLECTION(version), (char*)version.c_str());
  268. rvcJson.AddStringToObject(REFLECTION(terminalCharacter), (char*)terminalCharacter.c_str());
  269. rvcJson.AddStringToObject(REFLECTION(pinPadID), (char*)pinPadID.c_str());
  270. rvcJson.AddStringToObject(REFLECTION(publicKey), (char*)publicKey.c_str());
  271. rvcJson.AddStringToObject(REFLECTION(user), (char*)user.c_str());
  272. rvcJson.AddStringToObject(REFLECTION(password), (char*)password.c_str());
  273. rvcJson.AddStringToObject(REFLECTION(auth), (char*)auth.c_str());
  274. rvcJson.AddNumberToObject(REFLECTION(loginWay), loginWay);
  275. rvcJson.AddStringToObject(REFLECTION(encRandom), (char*)encRandom.c_str());
  276. rvcJson.AddStringToObject(REFLECTION(tpkKeyCheck), (char*)tpkKeyCheck.c_str());
  277. rvcJson.AddStringToObject(REFLECTION(edkKeyCheck), (char*)edkKeyCheck.c_str());
  278. rvcJson.AddStringToObject(REFLECTION(keyIndex), (char*)keyIndex.c_str());
  279. string ret;
  280. char* tmp = rvcJson.GetJsonStr();
  281. ret.assign(tmp);
  282. delete tmp;
  283. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CInitlizerMKReq")("req=%s at CInitlizerMKReq", ret.c_str());
  284. rvcJson.Destory();
  285. return ret;
  286. #endif // RVC_OS_WIN
  287. }
  288. } CInitlizerMKReq;
  289. typedef struct CInitlizerMKRet : CHTTPRet {
  290. #ifdef RVC_OS_WIN
  291. string tpk;
  292. string edk;
  293. string tpkKeyCheck;
  294. string edkKeyCheck;
  295. string keyIndex;
  296. bool Parse(string strData) {
  297. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CInitlizerMKRet")("ret=%s at CInitlizerMKRet", strData.c_str());
  298. Json::Value root;
  299. Json::Reader reader;
  300. reader.parse(strData, root, false);
  301. tpk = root["data"][REFLECTION(tpk)].asString();
  302. edk = root["data"][REFLECTION(edk)].asString();
  303. tpkKeyCheck = root["data"][REFLECTION(tpkKeyCheck)].asString();
  304. edkKeyCheck = root["data"][REFLECTION(edkKeyCheck)].asString();
  305. keyIndex = root["data"][REFLECTION(keyIndex)].asString();
  306. return true;
  307. }
  308. #else
  309. struct data {
  310. string TMK;
  311. string TPK;
  312. string EDK;
  313. string tpkKeyCheck;
  314. string edkKeyCheck;
  315. string keyIndex;
  316. string reserved;
  317. } data;
  318. bool Parse(string strData) {
  319. //Dbg("ret=%s at CInitlizerMKRet", strData.c_str());
  320. if (m_userCode.compare(ACS_SUCCESS)) return true;
  321. RVCJson rvcJson;
  322. rvcJson.SetJson((char*)strData.c_str());
  323. auto retJson = rvcJson.GetJsonValue(REFLECTION(data));
  324. data.TMK = retJson->GetStringValue(REFLECTION(tmk));
  325. data.TPK = retJson->GetStringValue(REFLECTION(tpk));
  326. data.EDK = retJson->GetStringValue(REFLECTION(edk));
  327. data.tpkKeyCheck = retJson->GetStringValue(REFLECTION(tpkKeyCheck));
  328. data.edkKeyCheck = retJson->GetStringValue(REFLECTION(edkKeyCheck));
  329. data.keyIndex = retJson->GetStringValue(REFLECTION(keyIndex));
  330. rvcJson.Destory();
  331. retJson->Destory();
  332. delete retJson;
  333. return true;
  334. }
  335. #endif // RVC_OS_WIN
  336. } CInitlizerMKRet;
  337. #ifdef RVC_OS_WIN
  338. typedef struct CAccessAuthInitDeviceReq : CHTTPReq {
  339. string cr1;
  340. string cr3;
  341. string r2;
  342. string cDevPubKey;
  343. string vendor;
  344. string terminalNo;
  345. string ToJson() {
  346. Json::Value value;
  347. value[REFLECTION(cr1)] = cr1;
  348. value[REFLECTION(cr3)] = cr3;
  349. value[REFLECTION(r2)] = r2;
  350. value[REFLECTION(cDevPubKey)] = cDevPubKey;
  351. value[REFLECTION(vendor)] = vendor;
  352. value[REFLECTION(terminalNo)] = terminalNo;
  353. Json::FastWriter writer;
  354. string strData = writer.write(value);
  355. //Dbg("CAccessAuthInitDeviceReq:%s", strData.c_str());
  356. return strData;
  357. }
  358. } CAccessAuthInitDeviceReq;
  359. typedef struct CAccessAuthInitDeviceRet : CHTTPRet {
  360. string r3;
  361. string cr2;
  362. string r1;
  363. string devPubKey;
  364. bool Parse(string strData) {
  365. Json::Value root;
  366. Json::Reader reader;
  367. reader.parse(strData, root, false);
  368. r3 = root["data"][REFLECTION(r3)].asString();
  369. cr2 = root["data"][REFLECTION(cr2)].asString();
  370. r1 = root["data"][REFLECTION(r1)].asString();
  371. devPubKey = root["data"][REFLECTION(devPubKey)].asString();
  372. return true;
  373. }
  374. } CAccessAuthInitDeviceRet;
  375. #endif // RVC_OS_WIN
  376. class MyMutex;
  377. class CAccessAuthFSM : public FSMImpl<CAccessAuthFSM>, public IFSMStateHooker
  378. {
  379. public:
  380. CAccessAuthFSM();
  381. virtual ~CAccessAuthFSM();
  382. virtual void OnStateTrans(int iSrcState, int iDstState);
  383. virtual ErrorCodeEnum OnInit();
  384. virtual ErrorCodeEnum OnExit();
  385. enum{s1, s2, s3};
  386. enum
  387. {
  388. Event_StartRegist = EVT_USER+1,
  389. Event_ConnectionOK,
  390. Event_EndSyncTime,
  391. Event_ReqTokenFail,
  392. Event_ReqTokenSucc,
  393. Event_ReqTokenCancel,
  394. Event_AccessAuthSucc
  395. };
  396. BEGIN_FSM_STATE(CAccessAuthFSM)
  397. FSM_STATE_ENTRY(s1, "Isolate",s1_on_entry,s1_on_exit,s1_on_event)
  398. FSM_STATE_ENTRY(s2, "Checking",s2_on_entry,s2_on_exit,s2_on_event)
  399. FSM_STATE_ENTRY(s3, "Authorized", s3_on_entry, s3_on_exit, s3_on_event)
  400. END_FSM_STATE()
  401. BEGIN_FSM_RULE(CAccessAuthFSM,s1)
  402. FSM_RULE_ENTRY_ANY(s1, s2, Event_StartRegist)
  403. FSM_RULE_ENTRY_ANY(s1, s3, Event_AccessAuthSucc)
  404. FSM_RULE_ENTRY_ANY(s2, s1, Event_ReqTokenCancel)
  405. FSM_RULE_ENTRY_ANY(s2, s3, Event_AccessAuthSucc)
  406. END_FSM_RULE()
  407. void s1_on_entry();
  408. void s1_on_exit();
  409. unsigned int s1_on_event(FSMEvent* event);
  410. void s2_on_entry();
  411. void s2_on_exit();
  412. unsigned int s2_on_event(FSMEvent* event);
  413. void s3_on_entry();
  414. void s3_on_exit() {
  415. LOG_FUNCTION();
  416. }
  417. unsigned int s3_on_event(FSMEvent* event);
  418. public:
  419. static void HttpsLogCallBack(const char* logtxt);
  420. CSimpleStringA GetmAccessAuthHost() { return m_accessAuthHost; }
  421. bool DecryptWithSessionKey(BYTE* encText, int encTextLen, BYTE* decTest, int& decTestLen);
  422. //oilyang@20210813 add bNeedEvent.
  423. //no need to throw event defaultly except the KEY error to call for Close Page
  424. void doWarnMsg(int errReason, std::string errMsg, bool bNeedEvent = false, string varMsg = "");
  425. DWORD HandleTimeSyn(long nTimeDiff, BYTE* nSessionKey);
  426. DWORD HandleGetToken(BYTE* token, BYTE* sharedKey, BYTE* token2, BYTE* retHash);
  427. DWORD GetEncTerminalInfo(CBlob& encInfo);
  428. DWORD GetTmk(string& tmk);
  429. DWORD GetTokenReq(CAccessAuthGetTokenReq* getTokenReq);
  430. void UpdateWK();
  431. DWORD InitDevice(SpReqAnsContext<AccessAuthService_InitDev_Req, AccessAuthService_InitDev_Ans>::Pointer &ctx);
  432. template<class T>
  433. void AuthLogWarn(const T& ret, const string& url, const string& method, bool bNeedEvent = true);
  434. void GetNetMsg(SpReqAnsContext<AccessAuthService_GetNetMsg_Req, AccessAuthService_GetNetMsg_Ans>::Pointer& ctx);
  435. CSimpleStringA GetEntryPermitSysVar();
  436. ErrorCodeEnum SetEntryPermitSysVar(const CSimpleStringA& newVal);
  437. ErrorCodeEnum LoadCenterConfig();
  438. bool containsChinese(const std::string& str);
  439. CSimpleStringA GetOsVersion();
  440. void GetIPandMac(CSimpleStringA& ip, CSimpleStringA& mac);
  441. void GetHardWareInfo(CSimpleStringA& cpu, CSimpleStringA& mainBoard, CSimpleStringA& disk);
  442. private:
  443. void GetDiffSyncTimeFromCenterSettings();
  444. private:
  445. int m_nAccessFailedCount;
  446. CSimpleStringA m_accessAuthHost, m_initDeviceHost;
  447. int m_torelateDiffSyncTimeSecs;
  448. int m_finishAccess;
  449. #ifdef RVC_OS_LINUX
  450. int m_nCheckMD5;
  451. #endif // RVC_OS_LINUX
  452. };