AccessAuthFSM.h 17 KB

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