mod_IDCertificate.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #ifndef MOD_IDCERTIFICATE_H
  2. #define MOD_IDCERTIFICATE_H
  3. #ifdef RVC_OS_LINUX
  4. #include "SpTest.h"
  5. #endif
  6. #include "modVer.h"
  7. #include "IDCertFSM.h"
  8. #include "IDCertificate_server_g.h"
  9. #include "IDCertificate_UserErrorCode.h"
  10. class CIDCertEntity;
  11. class IDCertServerSession : public IDCertificate::IDCertService_ServerSessionBase
  12. {
  13. public:
  14. IDCertServerSession(CIDCertEntity* pEntity) : m_pEntity(pEntity){}
  15. virtual ~IDCertServerSession(){}
  16. virtual void Handle_CancelRead(SpOnewayCallContext<IDCert_CancelRead_Info>::Pointer ctx);
  17. virtual void Handle_GetDevInfo(SpReqAnsContext<IDCert_GetDevInfo_Req, IDCert_GetDevInfo_Ans>::Pointer ctx);
  18. virtual void Handle_ReadWaitMore(SpOnewayCallContext<IDCert_ReadWaitMore_Info>::Pointer ctx);
  19. virtual void Handle_Exit(SpOnewayCallContext<IDCert_Exit_Info>::Pointer ctx);
  20. virtual void Handle_Eject(SpReqAnsContext<IDCert_Eject_Req, IDCert_Eject_Ans>::Pointer ctx);
  21. virtual void Handle_ReadAndScan(SpReqAnsContext<IDCert_ReadAndScan_Req, IDCert_ReadAndScan_Ans>::Pointer ctx);
  22. virtual void Handle_ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCert_ReadAndScanUTF8_Ans>::Pointer ctx); //ex1
  23. private:
  24. CIDCertEntity* m_pEntity;
  25. };
  26. #ifdef RVC_OS_WIN
  27. class CIDCertEntity : public CDevAdptEntityBase, public ISysVarListener
  28. #else
  29. class CIDCertEntity : public CDevAdptEntityBase
  30. #endif
  31. {
  32. public:
  33. CIDCertEntity(){}
  34. virtual ~CIDCertEntity(){}
  35. virtual const char *GetEntityName() const { return "IDCertificate"; }
  36. const char* GetEntityVersion() const { return MODULE_VERSION_FULL; }
  37. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext)
  38. {
  39. LOG_FUNCTION();
  40. ErrorCodeEnum rt = m_fsm.Init(this);
  41. #ifdef RVC_OS_WIN
  42. GetFunction()->RegistSysVarEvent("FWBReConn", this);
  43. #endif
  44. pTransactionContext->SendAnswer(rt);
  45. }
  46. virtual void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext)
  47. {
  48. pTransactionContext->SendAnswer(Error_Succeed);
  49. }
  50. virtual void OnPreContinue(CSmartPointer<ITransactionContext> pTransactionContext)
  51. {
  52. pTransactionContext->SendAnswer(Error_Succeed);
  53. }
  54. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
  55. {
  56. m_fsm.OnExit();
  57. pTransactionContext->SendAnswer(Error_Succeed);
  58. }
  59. virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext)
  60. {
  61. m_fsm.SelfTest(eTestType,pTransactionContext);
  62. }
  63. virtual CServerSessionBase* OnNewSession(const char*,const char*)
  64. {
  65. return new IDCertServerSession(this);
  66. }
  67. void CancelRead(SpOnewayCallContext<IDCert_CancelRead_Info>::Pointer ctx)
  68. {
  69. CancelReadEvent* e = new CancelReadEvent();
  70. m_fsm.PostEventFIFO(e);
  71. }
  72. void ReadWaitMore(SpOnewayCallContext<IDCert_ReadWaitMore_Info>::Pointer ctx)
  73. {
  74. if (m_fsm.GetReadFlag())
  75. m_fsm.SetReadMore();
  76. }
  77. void Exit(SpOnewayCallContext<IDCert_Exit_Info>::Pointer ctx)
  78. {
  79. FSMEvent* evt = new FSMEvent(USER_EVT_EXIT);
  80. m_fsm.PostEventFIFO(evt);
  81. }
  82. void Eject(SpReqAnsContext<IDCert_Eject_Req, IDCert_Eject_Ans>::Pointer ctx)
  83. {
  84. EjectEvent* e = new EjectEvent();
  85. e->ctx = ctx;
  86. m_fsm.PostEventFIFO(e);
  87. }
  88. void ReadAndScan(SpReqAnsContext<IDCert_ReadAndScan_Req, IDCert_ReadAndScan_Ans>::Pointer ctx)
  89. {
  90. #ifdef RVC_OS_LINUX
  91. ReadAndScanEvent* e = new ReadAndScanEvent();
  92. e->ctx = ctx;
  93. m_fsm.PostEventFIFO(e);
  94. #else //windows
  95. if (!m_fsm.GetDevInitFlag())
  96. {
  97. if (m_fsm.IsRVCPAD())
  98. {
  99. ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_FWB_NotConnected);
  100. LogWarn(Severity_Middle, Error_DevNotAvailable, IDCertificate_UserErrorCode_FWB_NotConnected, "fwb not connected.");
  101. }
  102. else
  103. {
  104. ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed);
  105. LogWarn(Severity_Middle, Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed, "Open Dev failed.");
  106. }
  107. return;
  108. }
  109. ReadAndScanEvent* e = new ReadAndScanEvent();
  110. e->ctx = ctx;
  111. m_fsm.PostEventFIFO(e);
  112. #endif // RVC_OS_LINUX
  113. }
  114. void ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCert_ReadAndScanUTF8_Ans>::Pointer ctx) //ex2
  115. {
  116. #ifdef RVC_OS_LINUX
  117. ReadAndScanUTF8Event* e = new ReadAndScanUTF8Event();
  118. e->ctx = ctx;
  119. m_fsm.PostEventFIFO(e);
  120. #else
  121. if (!m_fsm.GetDevInitFlag())
  122. {
  123. if (m_fsm.IsRVCPAD())
  124. {
  125. ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_FWB_NotConnected);
  126. LogWarn(Severity_Middle, Error_DevNotAvailable, IDCertificate_UserErrorCode_FWB_NotConnected, "fwb not connected.");
  127. }
  128. else
  129. {
  130. ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed);
  131. LogWarn(Severity_Middle, Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed, "Open Dev failed.");
  132. }
  133. return;
  134. }
  135. ReadAndScanUTF8Event* e = new ReadAndScanUTF8Event();
  136. e->ctx = ctx;
  137. m_fsm.PostEventFIFO(e);
  138. #endif
  139. }
  140. void GetDevInfo(SpReqAnsContext<IDCert_GetDevInfo_Req, IDCert_GetDevInfo_Ans>::Pointer ctx)
  141. {
  142. #ifdef RVC_OS_WIN
  143. if (!m_fsm.GetDevInitFlag())
  144. {
  145. if (m_fsm.IsRVCPAD())
  146. ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_FWB_NotConnected);
  147. else
  148. ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed);
  149. return;
  150. }
  151. #endif
  152. DevCategoryInfo devCatInfo;
  153. CSimpleStringA devType = "";
  154. m_fsm.GetDevCatInfo(devCatInfo, devType);
  155. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevInfo")
  156. ("devType:%s", (const char*)devType);
  157. ctx->Ans.model = devCatInfo.szModel;
  158. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevInfo")
  159. ("szModel:%s", (const char*)devCatInfo.szModel);
  160. ctx->Ans.type = devCatInfo.szType;
  161. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevInfo")
  162. ("szType:%s", (const char*)devCatInfo.szType);
  163. ctx->Ans.type += ((devType == "4") ? "#IG" : "#");//如果版本号为4,说明是嵌入式多合一(目前也有可能是新大机20190910@zjw),郭丹再判断机型是PAD,说明是PAD+嵌入式多合一,则读完证后不调用吐卡操作
  164. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevInfo")
  165. ("%s", (const char*)ctx->Ans.type);
  166. if (ctx->Ans.model.GetLength() < 256)
  167. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevInfo")
  168. ("%s", (const char*)ctx->Ans.model);
  169. if (m_fsm.GetDevInitFlag())
  170. {
  171. ctx->Ans.state = DEVICE_STATUS_NORMAL;
  172. }
  173. else
  174. {
  175. ctx->Ans.state = DEVICE_STATUS_NOT_READY;
  176. }
  177. ctx->Answer(Error_Succeed);
  178. }
  179. virtual bool IsService()const{return true;}
  180. virtual bool IsMultiThread()const{return false;}
  181. #ifdef RVC_OS_WIN
  182. virtual void OnSysVarEvent(const char* pszKey,
  183. const char* pszValue, const char* pszOldValue, const char* pszEntityName);
  184. #endif
  185. private:
  186. CIDCertFSM m_fsm;
  187. };
  188. #endif // MOD_IDCERTIFICATE_H