AccessAuthFSM.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  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. #ifdef RVC_OS_WIN
  9. #include "AccessAuthErrorCode.h"
  10. #include "json.h"
  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. Dbg("leave CAccessAuthGetTokenRet.");
  194. return true;
  195. #endif // RVC_OS_WIN
  196. }
  197. } CAccessAuthGetTokenRet;
  198. typedef struct CInitlizerMKReq : CHTTPReq {
  199. string enrolAddr;
  200. string enrolGPS;
  201. string installVersion;
  202. string ip;
  203. string machineModel;
  204. string machineType;
  205. string padDeviceID;
  206. string site;
  207. string terminalNo;
  208. string factory;
  209. string modal;
  210. string type;
  211. string version;
  212. string terminalCharacter; //终端特征值(fingerPrint + fingerPrintSM)
  213. string pinPadID;
  214. string publicKey;
  215. string user; //操作人
  216. string password; //密码
  217. string auth;//预留鉴权
  218. int loginWay;//1表示错误页发起,需要传入登录密码;0表示用户桌面发起,不需要传入登录密码
  219. string encRandom; //tmk pk加密的随机密钥
  220. string tpkKeyCheck; //密钥校验值
  221. string edkKeyCheck; //密钥校验值
  222. string keyIndex; //密钥序号
  223. string ToJson() {
  224. #ifdef RVC_OS_WIN
  225. Json::Value value;
  226. value[REFLECTION(enrolAddr)] = enrolAddr;
  227. value[REFLECTION(enrolGPS)] = enrolGPS;
  228. value[REFLECTION(installVersion)] = installVersion;
  229. value[REFLECTION(ip)] = ip;
  230. value[REFLECTION(machineModel)] = machineModel;
  231. value[REFLECTION(machineType)] = machineType;
  232. value[REFLECTION(padDeviceID)] = padDeviceID;
  233. value[REFLECTION(site)] = site;
  234. value[REFLECTION(terminalNo)] = terminalNo;
  235. value[REFLECTION(factory)] = factory;
  236. value[REFLECTION(modal)] = modal;
  237. value[REFLECTION(type)] = type;
  238. value[REFLECTION(version)] = version;
  239. value[REFLECTION(terminalCharacter)] = terminalCharacter;
  240. value[REFLECTION(pinPadID)] = pinPadID;
  241. value[REFLECTION(publicKey)] = publicKey;
  242. value[REFLECTION(user)] = user;
  243. value[REFLECTION(password)] = password;
  244. value[REFLECTION(auth)] = auth;
  245. value[REFLECTION(loginWay)] = loginWay;
  246. value[REFLECTION(encRandom)] = encRandom;
  247. value[REFLECTION(tpkKeyCheck)] = tpkKeyCheck;
  248. value[REFLECTION(edkKeyCheck)] = edkKeyCheck;
  249. value[REFLECTION(keyIndex)] = keyIndex;
  250. Json::FastWriter writer;
  251. string strData = writer.write(value);
  252. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CInitlizerMKReq")("CInitlizerMKReq:%s", strData.c_str());
  253. return strData;
  254. #else
  255. RVCJson rvcJson(true);
  256. rvcJson.AddStringToObject(REFLECTION(enrolAddr), (char*)enrolAddr.c_str());
  257. rvcJson.AddStringToObject(REFLECTION(enrolGPS), (char*)enrolGPS.c_str());
  258. rvcJson.AddStringToObject(REFLECTION(installVersion), (char*)installVersion.c_str());
  259. rvcJson.AddStringToObject(REFLECTION(ip), (char*)ip.c_str());
  260. rvcJson.AddStringToObject(REFLECTION(machineModel), (char*)machineModel.c_str());
  261. rvcJson.AddStringToObject(REFLECTION(machineType), (char*)machineType.c_str());
  262. rvcJson.AddStringToObject(REFLECTION(padDeviceID), (char*)padDeviceID.c_str());
  263. rvcJson.AddStringToObject(REFLECTION(site), (char*)site.c_str());
  264. rvcJson.AddStringToObject(REFLECTION(terminalNo), (char*)terminalNo.c_str());
  265. rvcJson.AddStringToObject(REFLECTION(factory), (char*)factory.c_str());
  266. rvcJson.AddStringToObject(REFLECTION(modal), (char*)modal.c_str());
  267. rvcJson.AddStringToObject(REFLECTION(type), (char*)type.c_str());
  268. rvcJson.AddStringToObject(REFLECTION(version), (char*)version.c_str());
  269. rvcJson.AddStringToObject(REFLECTION(terminalCharacter), (char*)terminalCharacter.c_str());
  270. rvcJson.AddStringToObject(REFLECTION(pinPadID), (char*)pinPadID.c_str());
  271. rvcJson.AddStringToObject(REFLECTION(publicKey), (char*)publicKey.c_str());
  272. rvcJson.AddStringToObject(REFLECTION(user), (char*)user.c_str());
  273. rvcJson.AddStringToObject(REFLECTION(password), (char*)password.c_str());
  274. rvcJson.AddStringToObject(REFLECTION(auth), (char*)auth.c_str());
  275. rvcJson.AddNumberToObject(REFLECTION(loginWay), loginWay);
  276. rvcJson.AddStringToObject(REFLECTION(encRandom), (char*)encRandom.c_str());
  277. rvcJson.AddStringToObject(REFLECTION(tpkKeyCheck), (char*)tpkKeyCheck.c_str());
  278. rvcJson.AddStringToObject(REFLECTION(edkKeyCheck), (char*)edkKeyCheck.c_str());
  279. rvcJson.AddStringToObject(REFLECTION(keyIndex), (char*)keyIndex.c_str());
  280. string ret;
  281. char* tmp = rvcJson.GetJsonStr();
  282. ret.assign(tmp);
  283. delete tmp;
  284. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CInitlizerMKReq")("req=%s at CInitlizerMKReq", ret.c_str());
  285. rvcJson.Destory();
  286. return ret;
  287. #endif // RVC_OS_WIN
  288. }
  289. } CInitlizerMKReq;
  290. typedef struct CInitlizerMKRet : CHTTPRet {
  291. #ifdef RVC_OS_WIN
  292. string tpk;
  293. string edk;
  294. string tpkKeyCheck;
  295. string edkKeyCheck;
  296. string keyIndex;
  297. bool Parse(string strData) {
  298. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CInitlizerMKRet")("ret=%s at CInitlizerMKRet", strData.c_str());
  299. Json::Value root;
  300. Json::Reader reader;
  301. reader.parse(strData, root, false);
  302. tpk = root["data"][REFLECTION(tpk)].asString();
  303. edk = root["data"][REFLECTION(edk)].asString();
  304. tpkKeyCheck = root["data"][REFLECTION(tpkKeyCheck)].asString();
  305. edkKeyCheck = root["data"][REFLECTION(edkKeyCheck)].asString();
  306. keyIndex = root["data"][REFLECTION(keyIndex)].asString();
  307. return true;
  308. }
  309. #else
  310. struct data {
  311. string TMK;
  312. string TPK;
  313. string EDK;
  314. string tpkKeyCheck;
  315. string edkKeyCheck;
  316. string keyIndex;
  317. string reserved;
  318. } data;
  319. bool Parse(string strData) {
  320. Dbg("ret=%s at CInitlizerMKRet", strData.c_str());
  321. if (m_userCode.compare(ACS_SUCCESS)) return true;
  322. RVCJson rvcJson;
  323. rvcJson.SetJson((char*)strData.c_str());
  324. auto retJson = rvcJson.GetJsonValue(REFLECTION(data));
  325. data.TMK = retJson->GetStringValue(REFLECTION(tmk));
  326. data.TPK = retJson->GetStringValue(REFLECTION(tpk));
  327. data.EDK = retJson->GetStringValue(REFLECTION(edk));
  328. data.tpkKeyCheck = retJson->GetStringValue(REFLECTION(tpkKeyCheck));
  329. data.edkKeyCheck = retJson->GetStringValue(REFLECTION(edkKeyCheck));
  330. data.keyIndex = retJson->GetStringValue(REFLECTION(keyIndex));
  331. rvcJson.Destory();
  332. retJson->Destory();
  333. delete retJson;
  334. return true;
  335. }
  336. #endif // RVC_OS_WIN
  337. } CInitlizerMKRet;
  338. #ifdef RVC_OS_WIN
  339. typedef struct CAccessAuthInitDeviceReq : CHTTPReq {
  340. string cr1;
  341. string cr3;
  342. string r2;
  343. string cDevPubKey;
  344. string vendor;
  345. string terminalNo;
  346. string ToJson() {
  347. Json::Value value;
  348. value[REFLECTION(cr1)] = cr1;
  349. value[REFLECTION(cr3)] = cr3;
  350. value[REFLECTION(r2)] = r2;
  351. value[REFLECTION(cDevPubKey)] = cDevPubKey;
  352. value[REFLECTION(vendor)] = vendor;
  353. value[REFLECTION(terminalNo)] = terminalNo;
  354. Json::FastWriter writer;
  355. string strData = writer.write(value);
  356. Dbg("CAccessAuthInitDeviceReq:%s", strData.c_str());
  357. return strData;
  358. }
  359. } CAccessAuthInitDeviceReq;
  360. typedef struct CAccessAuthInitDeviceRet : CHTTPRet {
  361. string r3;
  362. string cr2;
  363. string r1;
  364. string devPubKey;
  365. bool Parse(string strData) {
  366. Json::Value root;
  367. Json::Reader reader;
  368. reader.parse(strData, root, false);
  369. r3 = root["data"][REFLECTION(r3)].asString();
  370. cr2 = root["data"][REFLECTION(cr2)].asString();
  371. r1 = root["data"][REFLECTION(r1)].asString();
  372. devPubKey = root["data"][REFLECTION(devPubKey)].asString();
  373. return true;
  374. }
  375. } CAccessAuthInitDeviceRet;
  376. #endif // RVC_OS_WIN
  377. class MyMutex;
  378. class CAccessAuthFSM : public FSMImpl<CAccessAuthFSM>, public IFSMStateHooker
  379. {
  380. public:
  381. CAccessAuthFSM();
  382. virtual ~CAccessAuthFSM();
  383. virtual void OnStateTrans(int iSrcState, int iDstState);
  384. virtual ErrorCodeEnum OnInit();
  385. virtual ErrorCodeEnum OnExit();
  386. enum{s1, s2, s3};
  387. enum
  388. {
  389. Event_StartRegist = EVT_USER+1,
  390. Event_ConnectionOK,
  391. Event_EndSyncTime,
  392. Event_ReqTokenFail,
  393. Event_ReqTokenSucc,
  394. Event_ReqTokenCancel,
  395. Event_AccessAuthSucc
  396. };
  397. BEGIN_FSM_STATE(CAccessAuthFSM)
  398. FSM_STATE_ENTRY(s1, "Isolate",s1_on_entry,s1_on_exit,s1_on_event)
  399. FSM_STATE_ENTRY(s2, "Checking",s2_on_entry,s2_on_exit,s2_on_event)
  400. FSM_STATE_ENTRY(s3, "Authorized", s3_on_entry, s3_on_exit, s3_on_event)
  401. END_FSM_STATE()
  402. BEGIN_FSM_RULE(CAccessAuthFSM,s1)
  403. FSM_RULE_ENTRY_ANY(s1, s2, Event_StartRegist)
  404. FSM_RULE_ENTRY_ANY(s1, s3, Event_AccessAuthSucc)
  405. FSM_RULE_ENTRY_ANY(s2, s1, Event_ReqTokenCancel)
  406. FSM_RULE_ENTRY_ANY(s2, s3, Event_AccessAuthSucc)
  407. END_FSM_RULE()
  408. void s1_on_entry();
  409. void s1_on_exit();
  410. unsigned int s1_on_event(FSMEvent* event);
  411. void s2_on_entry();
  412. void s2_on_exit();
  413. unsigned int s2_on_event(FSMEvent* event);
  414. void s3_on_entry();
  415. void s3_on_exit() {
  416. LOG_FUNCTION();
  417. }
  418. unsigned int s3_on_event(FSMEvent* event);
  419. public:
  420. static void HttpsLogCallBack(const char* logtxt);
  421. CSimpleStringA GetmAccessAuthHost() { return m_accessAuthHost; }
  422. CSimpleStringA GetmInitDeviceHost() { return m_initDeviceHost; }
  423. bool DecryptWithSessionKey(BYTE* encText, int encTextLen, BYTE* decTest, int& decTestLen);
  424. //oilyang@20210813 add bNeedEvent.
  425. //no need to throw event defaultly except the KEY error to call for Close Page
  426. void doWarnMsg(int errReason, std::string errMsg, bool bNeedEvent = false, string varMsg = "");
  427. int RtsMapToUserCode(const char* pRtsCode, DWORD dwDefaultUserCode = ERR_ACCESSAUTH_UNKOWN);
  428. int RtsMapToUserCodeBakup(const char* pRtsCode, DWORD dwDefaultUserCode = ERR_ACCESSAUTH_UNKOWN);
  429. DWORD HandleTimeSyn(long nTimeDiff, BYTE* nSessionKey);
  430. DWORD HandleGetToken(BYTE* token, BYTE* sharedKey, BYTE* token2, BYTE* retHash);
  431. DWORD GetEncTerminalInfo(CBlob& encInfo);
  432. DWORD GetTmk(string& tmk);
  433. DWORD GetTokenReq(CAccessAuthGetTokenReq* getTokenReq);
  434. DWORD GetAllDevices(CEntityBase* pEntity, CAutoArray<CSimpleStringA>& devs);
  435. void UpdateWK();
  436. DWORD InitDevice(SpReqAnsContext<AccessAuthService_InitDev_Req, AccessAuthService_InitDev_Ans>::Pointer &ctx);
  437. template<class T>
  438. void AuthLogWarn(const T& ret, const string& url, const string& method, bool bNeedEvent = true);
  439. void GetNetMsg(SpReqAnsContext<AccessAuthService_GetNetMsg_Req, AccessAuthService_GetNetMsg_Ans>::Pointer& ctx);
  440. #ifdef RVC_OS_WIN
  441. DWORD GetDeviceInfo(CEntityBase* pCallerEntity, const CSimpleStringA& devDeviceName,
  442. CSimpleStringA& strModel, CSimpleStringA& strVendor, CSimpleStringA& strVersion);
  443. int IsInternetEnv();
  444. #endif // RVC_OS_WIN
  445. CSimpleStringA GetEntryPermitSysVar();
  446. ErrorCodeEnum SetEntryPermitSysVar(const CSimpleStringA& newVal);
  447. ErrorCodeEnum LoadCenterConfig();
  448. ErrorCodeEnum GetIntFromCS(const char* pcSection, const char* pcKey, int& retInt);
  449. ErrorCodeEnum GetStrFromCS(const char* pcSection, const char* pcKey, CSimpleStringA& retStr);
  450. void SetNetworkCheckingState(bool busing = true)
  451. {
  452. m_fNetworkChecking = busing;
  453. }
  454. BOOL IsCenterSettingFilesExist();
  455. void SetDevPubKey(CSimpleStringA csDevPubKey) { m_strDevPubKey = csDevPubKey; }
  456. CSimpleStringA GetDevPubKey() { return m_strDevPubKey; }
  457. #ifdef RVC_OS_LINUX
  458. bool m_bAccessACS;
  459. CSimpleStringA GetmTerminalList() { return m_terminalList; }
  460. #endif // RVC_OS_LINUX
  461. private:
  462. void GetDiffSyncTimeFromCenterSettings();
  463. public:
  464. SpReqAnsContext<AccessAuthService_InitDev_Req, AccessAuthService_InitDev_Ans>::Pointer m_ctxInitDev;
  465. private:
  466. int m_nAccessFailedCount;
  467. CSimpleStringA m_accessAuthHost, m_initDeviceHost;
  468. bool m_fNetworkChecking;
  469. int m_torelateDiffSyncTimeSecs;
  470. int m_finishAccess;
  471. CSimpleStringA m_strNetworkCheckUrl;
  472. //DNS Settings
  473. CSimpleStringA m_strDefaultDNS;
  474. CSimpleStringA m_strBackupDNS;
  475. CSimpleStringA m_strDevPubKey;
  476. bool isServeEvent;
  477. #ifdef RVC_OS_LINUX
  478. CSimpleStringA m_terminalList;
  479. int m_nCheckMD5;
  480. #endif // RVC_OS_LINUX
  481. };