ConsoleFSM.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613
  1. #pragma once
  2. #include "SpBase.h"
  3. #include "SpFSM.h"
  4. #include "USBKeyAPI.h"
  5. #include "VerifyCertificate.h"
  6. //#include "libsharememory.h"
  7. #include "SpSecureClient.h"
  8. #include "MaintainWatcher_msg_g.h"
  9. #include "..\mod_cardissuer\CardIssuer_client_g.h"
  10. #include "..\mod_DeviceControl\DeviceControl_client_g.h"
  11. #include "MaintainWatcherErrorCode.h"
  12. using namespace CardIssuer;
  13. using namespace DeviceControl;
  14. #define USER_EVT_JMP_VERIFYPWD EVT_USER+1
  15. #define USER_EVT_JMP_VERIFYTASK EVT_USER+2
  16. #define USER_EVT_JMP_RELEASE EVT_USER+3
  17. #define USER_EVT_CERT_ANS EVT_USER+4
  18. #define USER_EVT_DISCONNECT EVT_USER+5
  19. #define USER_EVT_TASK_ANS EVT_USER+6
  20. #define USER_EVT_USBKEYINFO_ANS EVT_USER+7
  21. #define USER_EVT_JMP_UKEYINSERT EVT_USER+8
  22. #define USER_EVT_JMP_UKEYPULLOUT EVT_USER+9
  23. #define USER_EVT_JMP_PWDSUCCESS EVT_USER+10
  24. #define USER_EVT_JMP_PWDERR EVT_USER+11
  25. #define SHARE_MEM_NAME "VerifyResult"
  26. #define ROOT_CERT_PATH ".\\cfg\\certs\\RootCert.pem"
  27. #define CA_CERT_PATH ".\\cfg\\certs\\CaCert.pem"
  28. #define USER_CERT_PATH ".\\cfg\\certs\\userCert.pem"
  29. #define CERT_DIR ".\\cfg\\certs"
  30. //用户类型
  31. #define USER_TYPE_MAINTAIN 00 //维护用户
  32. #define USER_TYPE_MATERIAL_MANAGER 01 //物料管理用户
  33. #define USER_TYPE_CUSTOMER_MANAGER 02 //客户经理
  34. #define USER_TYPE_AGENT3 03 //Agent3用户
  35. #define USER_TYPE_FINANCING_MANAGER 04 //理财经理
  36. //机型
  37. #define MACHINETYPE_STAND2S "RVC.Stand2S" //站立式双屏
  38. #define MACHINETYPE_STAND1S "RVC.Stand1S" //站立式单屏
  39. #define MACHINETYPE_WALL "RVC.Wall" //挂墙式
  40. #define MACHINETYPE_EMBED2S "RVC.Embed2S" //嵌墙式双屏
  41. #define MACHINETYPE_EMBED1S "RVC.Embed1S" //嵌墙式单屏
  42. #define MACHINETYPE_PAD "RVC.PAD" //携带式移动终端
  43. //场所
  44. #define SIT_LIB "cmb.LIB" //银行大堂内
  45. #define SIT_SSB "cmb.SSB" //自助营业网点
  46. #define SIT_FLB "cmb.FLB" //离行机器,银行业务为主界面,如企业,商场
  47. #define SIT_LSS "cmb.LSS" //面向生活销售机,一般部署在小区,面向销售广告
  48. #define SIT_SMM "cmb.SMM" //商场销售门户,放置在商场,多商户门户
  49. // [StructName("RvcCertReq")]
  50. struct CertReq
  51. {
  52. char CertVersion[8];
  53. };
  54. // [StructName("RvcCertAns")]
  55. struct CertAns
  56. {
  57. char RootCert[4096];
  58. char CaCert[4096];
  59. };
  60. #pragma pack(1)
  61. typedef struct // 45
  62. {
  63. char state;
  64. }CertBlackListReq;
  65. typedef struct
  66. {
  67. char ukeyID[20];
  68. }CertBlackListRet;
  69. #pragma pack()
  70. struct CertAnsEvent : public FSMEvent
  71. {
  72. CertAnsEvent(BYTE *pBuf, int nLen) : FSMEvent(USER_EVT_CERT_ANS)
  73. {
  74. memcpy(&m_reply, pBuf, sizeof(CertAns));
  75. }
  76. virtual ~CertAnsEvent() {}
  77. CertAns m_reply;
  78. };
  79. struct TaskReq
  80. {
  81. char TaskID[16];
  82. };
  83. struct TaskAns
  84. {
  85. char TaskStatus[1];
  86. };
  87. struct TaskAnsEvent : public FSMEvent
  88. {
  89. TaskAnsEvent(BYTE *pBuf, int nLen) : FSMEvent(USER_EVT_TASK_ANS)
  90. {
  91. memcpy(&m_reply, pBuf, sizeof(TaskAns));
  92. }
  93. virtual ~TaskAnsEvent() {}
  94. TaskAns m_reply;
  95. };
  96. struct USBKeyInfoReq
  97. {
  98. char USBKeyID[16];
  99. };
  100. struct USBKeyInfoAns
  101. {
  102. char USBKeyInitTime[20];
  103. };
  104. struct USBKeyInfoAnsEvent : public FSMEvent
  105. {
  106. USBKeyInfoAnsEvent(BYTE *pBuf, int nLen) : FSMEvent(USER_EVT_USBKEYINFO_ANS)
  107. {
  108. memcpy(&m_reply, pBuf, sizeof(USBKeyInfoAns));
  109. }
  110. virtual ~USBKeyInfoAnsEvent() {}
  111. USBKeyInfoAns m_reply;
  112. };
  113. class CAConnection;
  114. class ConsoleFSM : public FSMImpl<ConsoleFSM>, public IFSMStateHooker
  115. {
  116. public:
  117. enum {s0,s1,s2,s3,s4,s5};
  118. BEGIN_FSM_STATE(ConsoleFSM)
  119. FSM_STATE_ENTRY(s0,"Starting",s0_on_entry,s0_on_exit,s0_on_event)
  120. FSM_STATE_ENTRY(s1, "Ukey Insert", s1_on_entry, s1_on_exit, s1_on_event)
  121. FSM_STATE_ENTRY(s2, "Ukey pullout", s2_on_entry, s2_on_exit, s2_on_event)
  122. FSM_STATE_ENTRY(s3, "Verify", s3_on_entry, s3_on_exit, s3_on_event)
  123. FSM_STATE_ENTRY(s4, "Realse", s4_on_entry, s4_on_exit, s4_on_event)
  124. END_FSM_STATE()
  125. BEGIN_FSM_RULE(ConsoleFSM,s0)
  126. FSM_RULE_ENTRY_ANY(s0, s1, USER_EVT_JMP_UKEYINSERT)
  127. FSM_RULE_ENTRY_ANY(s0, s2, USER_EVT_JMP_UKEYPULLOUT)
  128. FSM_RULE_ENTRY_ANY(s1, s2, USER_EVT_JMP_UKEYPULLOUT)
  129. FSM_RULE_ENTRY_ANY(s1, s3, USER_EVT_JMP_VERIFYPWD)
  130. FSM_RULE_ENTRY_ANY(s1, s4, USER_EVT_JMP_RELEASE)
  131. FSM_RULE_ENTRY_ANY(s2, s4, USER_EVT_JMP_RELEASE)
  132. FSM_RULE_ENTRY_ANY(s3, s2, USER_EVT_JMP_UKEYPULLOUT)
  133. FSM_RULE_ENTRY_ANY(s3, s4, USER_EVT_JMP_RELEASE)
  134. FSM_RULE_ENTRY_ANY(s4, s0, EVT_TIMER)
  135. FSM_RULE_ENTRY_ANY(s4, s2, USER_EVT_JMP_UKEYPULLOUT)
  136. END_FSM_RULE()
  137. ConsoleFSM();
  138. ~ConsoleFSM();
  139. virtual void OnStateTrans(int iSrcState, int iDstState);
  140. virtual void OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName);
  141. virtual ErrorCodeEnum OnInit();
  142. virtual ErrorCodeEnum OnExit();
  143. void s0_on_entry();
  144. void s0_on_exit();
  145. unsigned int s0_on_event(FSMEvent* event);
  146. void s1_on_entry();
  147. void s1_on_exit();
  148. unsigned int s1_on_event(FSMEvent* event);
  149. void s2_on_entry();
  150. void s2_on_exit();
  151. unsigned int s2_on_event(FSMEvent* event);
  152. void s3_on_entry();
  153. void s3_on_exit();
  154. unsigned int s3_on_event(FSMEvent* event);
  155. void s4_on_entry();
  156. void s4_on_exit();
  157. unsigned int s4_on_event(FSMEvent* event);
  158. //DWORD VerifyUser();
  159. DWORD VerifyUser(const char* pcPIN);
  160. DWORD VerifyOther();
  161. void DownloadCerts();
  162. void DownloadCertBlackList();
  163. BOOL GetTaskStatus(const char* pTaskID);
  164. BOOL VerifyTaskStatus(const char* pTaskID);
  165. DWORD VerifyTerminalInfo();
  166. DWORD VerifyTerminalNo();
  167. DWORD VerifyCardIssuerSN();
  168. DWORD CheckCertVaildity();
  169. BOOL CheckUSBKeyLife(const char* pUSBKeyID);
  170. BOOL GetUserInfo();
  171. ErrorCodeEnum SetRunConfig();
  172. ErrorCodeEnum LoadRunConfig();
  173. ErrorCodeEnum LoadCenterConfig();
  174. BOOL GetMenuStatus();
  175. BOOL GetIssuerNum();
  176. ErrorCodeEnum OpenGpio(BOOL bOpen);
  177. BOOL SetRecommender();
  178. void CloseConnection();
  179. CSmartPointer<IEntityFunction> GetFunction();
  180. void GetEkeyStatus(int &);
  181. int m_nSRState; //是否进入录音录像业务状态值,0:在业务状态;1:正在录音录像
  182. CSimpleStringA m_strPwd; //界面输入的电子钥匙密码
  183. DWORD m_errcode;
  184. string m_strTerminalId; //终端号
  185. string m_strKeyHID; //电子钥匙ID
  186. string m_strUserID; //用户ID
  187. string m_strNowTime; //当前时间
  188. BOOL m_bAns;//是否收到分行服务的回复,0:未收到;1:收到
  189. BOOL m_bInputpwdDlg;//是否已经弹出输入密码对话框
  190. BOOL m_bVerifyPwd;//是否验证完密码
  191. CSimpleStringA m_strMachineType, m_strSite;
  192. typedef struct TaskRecord
  193. {
  194. string strWarningId;
  195. char startTime[20];
  196. char endTime[20];
  197. }*PTaskRecord;
  198. typedef struct EventInfo
  199. {
  200. BOOL bOpenRVC;
  201. BOOL bLocalMaintance;
  202. USBKEY_HANDLE hHandle;
  203. }*PEventInfo;
  204. char m_TaskStatus[1]; //'O',打开;'D',已下载;'C',已关闭;
  205. char m_USBKeyInitTime[20];
  206. private:
  207. //读配置文件
  208. ErrorCodeEnum LoadServerConfig();
  209. ErrorCodeEnum LoadRootConfig();
  210. int m_nUkeyStatus;
  211. int m_nCheckTerminalNo; //物料类型电子钥匙是否校验任务标志,0:不校验;1:校验
  212. int m_nCheckMaintainTask; //维护类型的电子钥匙是否校验任务标志,0:不校验;1:校验
  213. int m_nVerifyBlackList; //是否校验电子钥匙黑名单,0:不校验;1:校验
  214. CSimpleStringA m_StringVerifyKey,m_StringConsoleName;
  215. CSimpleStringA m_strUIstate;
  216. BOOL m_bMenu; //是否在首页状态 0:不在;1:在
  217. ErrorCodeEnum AsyncStartEntity(const char *entity_name, const char *cmdline, void *pData);
  218. ErrorCodeEnum AsyncStopEntity(const char *entity_name, void *pData);
  219. //USBKEY_INFO g_USBKeyInfo; //Ukey信息
  220. USBKEY_HANDLE m_Handle; //Ukey句柄
  221. //string m_strTerminalId; //终端号
  222. //string m_strKeyHID; //电子钥匙ID
  223. //string m_strUserID; //用户ID
  224. string m_strUserType; //用户类型
  225. char m_StartTime[20]; //操作起始时间
  226. char m_EndTime[20]; //操作结束时间
  227. TaskRecord* m_TaskRecords[128]; //任务记录信息数组
  228. unsigned int m_RecordNum; //当前终端号对应的任务记录数
  229. CSimpleStringA m_CardIssuerSN;//当前连接的卡机号
  230. PEventInfo m_EventInfo; //用户界面信息
  231. LPVOID m_lpMem; //共享内存指针
  232. BOOL m_bHaveFindUkey;//识别到Ukey
  233. BOOL m_bVerifySuccess;//用户验证成功
  234. CRITICAL_SECTION cs;
  235. CAConnection *m_pConnection;
  236. CardIssuerService_ClientBase *m_pCardIssuerService;
  237. DeviceControlService_ClientBase *m_pDeviceControlService;
  238. private:
  239. };
  240. void Black_init(unsigned char *s, unsigned char *key, unsigned long Len);
  241. void Black_crypt(unsigned char*s, unsigned char*Data, unsigned long Len);
  242. void certBlackCrypt(char *dstStr, char *srcStr);
  243. BOOL checkDirExist(TCHAR *filePath);
  244. BOOL checkFileExist(TCHAR *filePath, BOOL isCreate);
  245. BOOL IsCertInBlack(char *certNo);
  246. class CAConnection : public SpSecureClient
  247. {
  248. public:
  249. CAConnection(CEntityBase *pEntity, ConsoleFSM *pFSM) : SpSecureClient(pEntity), m_pFSM(pFSM) {}
  250. virtual ~CAConnection() {}
  251. void SendVersionReq()
  252. {
  253. CertReq req = {0};
  254. ////检测本地是否存在根证书和分行证书
  255. //FILE* fp = fopen("RootCert.pem", "r");
  256. //if (NULL != fp)
  257. //{
  258. // //有则获取证书版本
  259. //}
  260. //else
  261. //{
  262. // //没有则发生默认版本,下载证书
  263. // memcpy(req.CertVersion, "10000000", 8);
  264. //}
  265. memcpy(req.CertVersion, "10000000", 8);
  266. CSmartPointer<IPackage> pkt = CreateNewPackage("CertReq");
  267. pkt->AddStruct("CertReq", false, false, (LPBYTE)&req, sizeof(CertReq));
  268. SendPackage(pkt);
  269. }
  270. void SendCertBlackListReq()
  271. {
  272. CertBlackListReq req;
  273. memset(&req, 0, sizeof(CertBlackListReq));
  274. req.state = 'L';//get black list
  275. CSmartPointer<IPackage> package = CreateNewPackage("CertBla");
  276. package->AddStruct("CertBlackListReq", true, false, (BYTE*)&req, sizeof(req));
  277. SendPackage(package);
  278. }
  279. void SendTaskReq(const char* pTaskID)
  280. {
  281. TaskReq req = {0};
  282. memcpy(req.TaskID, pTaskID, 16);
  283. CSmartPointer<IPackage> pkt = CreateNewPackage("TaskReq");
  284. pkt->AddStruct("TaskReq", false, false, (LPBYTE)&req, sizeof(TaskReq));
  285. if (SendPackage(pkt) == "")
  286. {
  287. Dbg("SendPackage failed, send Task req failed");
  288. return;
  289. }
  290. else
  291. {
  292. Dbg("send get task req success");
  293. }
  294. pkt = ReceivePackage(5);
  295. if (pkt == NULL)
  296. {
  297. Dbg("ReceivePackage failed, don't revceive TaskReq ans");
  298. return;
  299. }
  300. int nLen = pkt->GetStructLen("TaskAns");
  301. if (nLen > 0)
  302. {
  303. BYTE *pBuf = new BYTE[nLen];
  304. memset(pBuf, 0, nLen);
  305. int nArrayNum = 0;
  306. if (pkt->GetStructData("TaskAns", pBuf, &nLen, &nArrayNum))
  307. {
  308. Dbg("recieve task ans success");
  309. FSMEvent *evt = new TaskAnsEvent(pBuf, nLen);
  310. TaskAnsEvent *ans = (TaskAnsEvent *)evt;
  311. if (ans->m_reply.TaskStatus == NULL)
  312. {
  313. Dbg("Don't get <TaskID=%s> status!",pTaskID);
  314. }
  315. else
  316. {
  317. Dbg("get <TaskID=%s> status <%c>!",pTaskID,ans->m_reply.TaskStatus[0]);
  318. memcpy(m_pFSM->m_TaskStatus, ans->m_reply.TaskStatus, 1);
  319. }
  320. delete evt;
  321. }
  322. else
  323. {
  324. Dbg("create invalid TaskAns packet!");
  325. OnDisconnect();
  326. }
  327. delete pBuf;
  328. }
  329. else
  330. {
  331. Dbg("don't recieve TaskAns packet!");
  332. //OnDisconnect();
  333. }
  334. }
  335. void SendUSBKeyInfoReq(const char* pUSBKeyID)
  336. {
  337. USBKeyInfoReq req = {0};
  338. memcpy(req.USBKeyID, pUSBKeyID, 16);
  339. CSmartPointer<IPackage> pkt = CreateNewPackage("USBKeyInfoReq");
  340. pkt->AddStruct("USBKeyInfoReq", false, false, (LPBYTE)&req, sizeof(USBKeyInfoReq));
  341. if (SendPackage(pkt) == "")
  342. {
  343. Dbg("SendPackage failed, send USBKeyInfo req failed");
  344. return;
  345. }
  346. else
  347. {
  348. Dbg("send USBKeyInfo req success");
  349. }
  350. pkt = ReceivePackage(5);
  351. if (pkt == NULL)
  352. {
  353. Dbg("ReceivePackage failed, don't revceive USBKeyInfo ans");
  354. return;
  355. }
  356. int nLen = pkt->GetStructLen("USBKeyInfoAns");
  357. if (nLen > 0)
  358. {
  359. BYTE *pBuf = new BYTE[nLen];
  360. memset(pBuf, 0, nLen);
  361. int nArrayNum = 0;
  362. if (pkt->GetStructData("USBKeyInfoAns", pBuf, &nLen, &nArrayNum))
  363. {
  364. Dbg("recieve USBKeyInfo ans success");
  365. FSMEvent *evt = new USBKeyInfoAnsEvent(pBuf, nLen);
  366. USBKeyInfoAnsEvent *ans = (USBKeyInfoAnsEvent *)evt;
  367. if (ans->m_reply.USBKeyInitTime == NULL)
  368. {
  369. Dbg("Don't get <TaskID=%s> info!",pUSBKeyID);
  370. }
  371. else
  372. {
  373. Dbg("get <USBKeyID=%s> info <%s>!",pUSBKeyID,ans->m_reply.USBKeyInitTime);
  374. memcpy(m_pFSM->m_USBKeyInitTime, ans->m_reply.USBKeyInitTime, 20);
  375. }
  376. delete evt;
  377. }
  378. else
  379. {
  380. Dbg("create invalid TaskAns packet!");
  381. //OnDisconnect();
  382. }
  383. delete pBuf;
  384. }
  385. else
  386. {
  387. Dbg("don't recieve TaskAns packet!");
  388. //OnDisconnect();
  389. }
  390. }
  391. protected:
  392. virtual void OnPkgAnswer(const CSmartPointer<IPackage> &pRecvPkg)
  393. {
  394. Dbg("start OnReceivePackage!");
  395. string serviceCode = pRecvPkg->GetServiceCode();
  396. if (serviceCode == "CertReq")
  397. {
  398. int nLen = pRecvPkg->GetStructLen("CertAns");
  399. if (nLen > 0)
  400. {
  401. BYTE *pBuf = new BYTE[nLen];
  402. memset(pBuf, 0, nLen);
  403. int nArrayNum = 0;
  404. if (pRecvPkg->GetStructData("CertAns", pBuf, &nLen, &nArrayNum))
  405. {
  406. FSMEvent *evt = new CertAnsEvent(pBuf, nLen);
  407. CertAnsEvent *ans = (CertAnsEvent *)evt;
  408. if (ans->m_reply.RootCert == NULL
  409. || ans->m_reply.CaCert == NULL)
  410. {
  411. Dbg("Don't update ca cert!");
  412. }
  413. else
  414. {
  415. Dbg("Update ca cert!");
  416. //保存证书到指定目录
  417. FILE* fp = fopen(ROOT_CERT_PATH, "w");
  418. fwrite(ans->m_reply.RootCert, 1, strlen(ans->m_reply.RootCert), fp);
  419. fclose(fp);
  420. fp = fopen(CA_CERT_PATH, "w");
  421. fwrite(ans->m_reply.CaCert, 1, strlen(ans->m_reply.CaCert), fp);
  422. fclose(fp);
  423. }
  424. delete evt;
  425. }
  426. else
  427. {
  428. Dbg("create invalid cert RvcCertAns packet!");
  429. //OnDisconnect();
  430. }
  431. delete pBuf;
  432. }
  433. }
  434. else if (serviceCode == "CertBla")
  435. {
  436. HandleCertBlackListRet(pRecvPkg);
  437. }
  438. else
  439. {
  440. Dbg("unknown service code!");
  441. //OnDisconnect();
  442. }
  443. };
  444. void HandleCertBlackListRet(const CSmartPointer<IPackage> &pRecvPkg)
  445. {
  446. DWORD dwSysCode, dwUserCode;
  447. string strErrMsg;
  448. m_pFSM->m_bAns = TRUE;//告诉状态机收到回复
  449. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
  450. {
  451. cout << "error in package: " << strErrMsg.c_str() << " [" << dwSysCode << "]" << endl;
  452. }
  453. else
  454. {
  455. int nLen = pRecvPkg->GetStructLen("CertBlackListRet");
  456. if (nLen <= 0)
  457. {
  458. Dbg("not find struct [CertBlackListRet] in package");
  459. }
  460. else
  461. {
  462. //Save File
  463. char activePath1[1024], activePath2[1024], realActivePath[1024], dirPath[1024], blackListPath[1024];
  464. sprintf(activePath1, "D:\\Run\\version\\active.txt");
  465. sprintf(activePath2, "C:\\Run\\version\\active.txt");
  466. if (checkFileExist(activePath1, FALSE))
  467. {
  468. memcpy(realActivePath, activePath1, strlen(activePath1) + 1);
  469. sprintf(dirPath, "D:\\Run\\version");
  470. }
  471. else if (checkFileExist(activePath2, FALSE))
  472. {
  473. memcpy(realActivePath, activePath2, strlen(activePath2) + 1);
  474. sprintf(dirPath, "C:\\Run\\version");
  475. }
  476. else
  477. return;
  478. //read version
  479. char buffer[255];
  480. ifstream iniFile(realActivePath);
  481. iniFile.getline(buffer, 100);
  482. iniFile.close();
  483. sprintf(blackListPath, "%s\\%s\\cfg\\certs", dirPath, buffer);
  484. //certs文件夹,需要判断该文件夹是否存在,不存在则创建该文件夹
  485. if (!checkDirExist(blackListPath))
  486. return;
  487. sprintf(blackListPath, "%s\\CertBlackList.txt", blackListPath);
  488. //CertBlackList.txt文件,不存在则创建
  489. if (!checkFileExist(blackListPath, TRUE))
  490. return;
  491. ofstream blackFile(blackListPath);
  492. if (blackFile.is_open())
  493. {
  494. blackFile << "";
  495. blackFile.close();
  496. }
  497. else
  498. return;
  499. BYTE *pBuf = new BYTE[nLen];
  500. memset(pBuf, 0, nLen);
  501. int nArrayNum = 0;
  502. if (!pRecvPkg->GetStructData("CertBlackListRet", pBuf, &nLen, &nArrayNum))
  503. {
  504. Dbg("get struct [CertBlackListRet] data fail");
  505. }
  506. else
  507. {
  508. CertBlackListRet *pReq = (CertBlackListRet*)pBuf;
  509. ofstream blackFile(blackListPath);
  510. for (int i = 0; i < nArrayNum; i++)
  511. {
  512. char dstID[300];
  513. cout << (char *)pReq[i].ukeyID << endl;
  514. certBlackCrypt(dstID, pReq[i].ukeyID);
  515. blackFile << dstID << endl;
  516. }
  517. blackFile.close();
  518. }
  519. delete[] pBuf;
  520. }
  521. }
  522. }
  523. /*virtual void OnDisconnect()
  524. {
  525. m_pFSM->PostEventFIFO(new FSMEvent(USER_EVT_DISCONNECT));
  526. }*/
  527. virtual void OnReceivePackage(IPackage *pRecvPkg)
  528. {
  529. }
  530. private:
  531. ConsoleFSM *m_pFSM;
  532. };