mod_UpgradeMgr.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. #ifndef RVC_MOD_UPGRADEMGR_H_
  2. #define RVC_MOD_UPGRADEMGR_H_
  3. #include "SpBase.h"
  4. #include "SimpleString.h"
  5. #include "UpgradeManager_server_g.h"
  6. #include "Download_msg_g.h"
  7. #include "UpgradeRun_msg_g.h"
  8. #include "UpgradeMgrFSM.h"
  9. #include "SpTest.h"
  10. #include "modVer.h"
  11. using namespace UpgradeManager;
  12. // 升级管理 UpgradeManager 0x506
  13. class CUpgradeMgrEntity : public CEntityBase, public ISysVarListener, public IBroadcastListener
  14. {
  15. public:
  16. CUpgradeMgrEntity(){
  17. m_IsSM3listSucc=0;
  18. m_beginSM3HashTime=0;
  19. m_strSM3Hash="";
  20. }
  21. virtual ~CUpgradeMgrEntity() {}
  22. virtual const char *GetEntityName() const { return "UpgradeManager"; }
  23. virtual bool IsService()const{return true;}
  24. const char* GetEntityVersion() const override
  25. {
  26. return MODULE_VERSION_FULL;
  27. }
  28. ON_ENTITYT_TEST()
  29. virtual void OnStarted();
  30. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext);
  31. virtual CServerSessionBase *OnNewSession(const char* /*pszRemoteEntityName*/, const char * /*pszParam*/);
  32. virtual void OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName);
  33. void OnDownloadEvent(const char *pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, Download::DownloadResult &evt);
  34. void OnUpgradeCheckEvent(const char *pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, UpgradeRun::UpgradeCheckEvent &evt);
  35. void OnUpgradeDoneEvent(const char *pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, UpgradeRun::UpgradeDoneEvent &evt);
  36. static char GetInstallStateVal(const InstallStateEnum enumVal);
  37. ErrorCodeEnum RegistLocalPack(const CSimpleStringA &strPackFile);
  38. DWORD RegistManualPack(const CSimpleStringA &strPackFile);
  39. DWORD GetManualPacks(CSimpleStringA &strManualPacks);
  40. ErrorCodeEnum DownloadPack(const CSimpleStringA &strPackFile);
  41. ErrorCodeEnum CancelDownloadPack(const CSimpleStringA &strPackFile);
  42. ErrorCodeEnum PushUpdateTask(const CSimpleStringA &strPackName, const int nPackType);
  43. //ErrorCodeEnum PushUpdateTask(const CSimpleStringA &strPackName);
  44. ErrorCodeEnum CancelUpdate(const CSimpleStringA &strPackName);
  45. ErrorCodeEnum RollbackUpdate(const CSimpleStringA &strVersion);
  46. ErrorCodeEnum SwitchUpgrade(const CSimpleStringA &strPack);
  47. ErrorCodeEnum GetUpgradeState(bool &bInstalling, CSimpleStringA &strPackFile, CSimpleStringA &strExecID,
  48. char &nInstallState, bool &bSysInstall, bool &bLightPack, CSimpleStringA &strNewVersion);
  49. ErrorCodeEnum SyncTime();
  50. ErrorCodeEnum UpdatePackFailInfo(CSimpleStringA strVersion);
  51. ErrorCodeEnum MD5File(CSimpleStringA strToSignFilePath, CSimpleStringA &strMD5);
  52. ErrorCodeEnum MD5Data(CSimpleStringA strData, CSimpleStringA &strMD5);
  53. ErrorCodeEnum MD5Folder(CSimpleStringA strFolderPath, bool isDepDir=false);
  54. ErrorCodeEnum GetMD5List(CSimpleStringA &strMD5List);
  55. //新国密SM3函数,isSub表示是否截取新国密中间一段密文
  56. ErrorCodeEnum SM3FileToStr(CSimpleStringA strFilePath, CSimpleStringA &strSM3,bool isSub);
  57. ErrorCodeEnum SM3DataToStr(CSimpleStringA strData, CSimpleStringA &strSM3,bool isSub);
  58. ErrorCodeEnum SM3_Str(CSimpleStringA &strSM3,BYTE * SM3Byte,bool isSub);
  59. ErrorCodeEnum StopMediaPlay();
  60. #ifdef RVC_OS_WIN
  61. SP_BEGIN_MSG_DISPATCH_MAP(CUpgradeMgrEntity)
  62. SP_BEGIN_ENTITY_MSG("Download")
  63. SP_MSG_HANDLE_NS(Download, DownloadResult, OnDownloadEvent)
  64. SP_END_ENTITY_MSG()
  65. SP_BEGIN_ENTITY_MSG("UpgradeRun")
  66. SP_MSG_HANDLE_NS(UpgradeRun, UpgradeCheckEvent, OnUpgradeCheckEvent)
  67. SP_MSG_HANDLE_NS(UpgradeRun, UpgradeDoneEvent, OnUpgradeDoneEvent)
  68. SP_END_ENTITY_MSG()
  69. SP_END_MSG_DISPATCH_MAP()
  70. #else
  71. virtual void OnBroadcastEvent(CUUID SubID, const char* pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, CAutoBuffer Buffer)
  72. {
  73. if (!pszEntityName)
  74. {
  75. LOG_TRACE("pszEntityName cannot empty!");
  76. }
  77. else if (_stricmp("Download", pszEntityName) == 0)
  78. {
  79. switch (dwMessageId) {
  80. case eMsg_DownloadResult:
  81. if (eMsgSig_DownloadResult == dwMessageSignature) {
  82. Download::DownloadResult t;
  83. ErrorCodeEnum Error = SpBuffer2Object(Buffer, t);
  84. if (Error == Error_Succeed)
  85. OnDownloadEvent(pszEntityName, dwMessageId, dwMessageSignature, t);
  86. }
  87. else {
  88. LOG_TRACE("DownloadResult signature mismatched!");
  89. }
  90. break;
  91. default:
  92. LOG_TRACE("msg id %d ignored!", dwMessageId);
  93. break;
  94. }
  95. }
  96. else if (_stricmp("UpgradeRun", pszEntityName) == 0)
  97. {
  98. switch (dwMessageId) {
  99. case eMsg_UpgradeCheckEvent:
  100. if (eMsgSig_UpgradeCheckEvent == dwMessageSignature) {
  101. UpgradeRun::UpgradeCheckEvent t;
  102. ErrorCodeEnum Error = SpBuffer2Object(Buffer, t);
  103. if (Error == Error_Succeed)
  104. OnUpgradeCheckEvent(pszEntityName, dwMessageId, dwMessageSignature, t);
  105. }
  106. else {
  107. LOG_TRACE("UpgradeCheckEvent signature mismatched!" );
  108. }
  109. break;
  110. case eMsg_UpgradeDoneEvent:
  111. if (eMsgSig_UpgradeDoneEvent == dwMessageSignature) {
  112. UpgradeRun::UpgradeDoneEvent t;
  113. ErrorCodeEnum Error = SpBuffer2Object(Buffer, t);
  114. if (Error == Error_Succeed)
  115. OnUpgradeDoneEvent(pszEntityName, dwMessageId, dwMessageSignature, t);
  116. }
  117. else {
  118. LOG_TRACE("UpgradeDoneEvent signature mismatched!");
  119. }
  120. break;
  121. default:
  122. LOG_TRACE("msg id %d ignored!", dwMessageId);
  123. break;
  124. }
  125. }
  126. else
  127. {
  128. LOG_TRACE("ignore pszEntityName");
  129. }
  130. }
  131. #endif
  132. public:
  133. CUpgradeMgrFSM m_fsm;
  134. map<CSimpleStringA, CSimpleStringA> m_FileHashMap; // 版本文件hash值集合
  135. CSimpleStringA m_strMD5List;
  136. CSimpleStringA m_strSM3Hash;//SM3 32位hash
  137. int m_IsSM3listSucc;//获取SM3哈希list是否成功,0:还未计算完毕,1:表示成功 ,-1表示计算失败
  138. DWORD m_beginSM3HashTime;//开始计算sm3hahs时间
  139. };
  140. class CUpgradeMgrSession : public UpgradeMgrService_ServerSessionBase
  141. {
  142. public:
  143. CUpgradeMgrSession(CUpgradeMgrEntity *pEntity) : m_pEntity(pEntity) {}
  144. virtual ~CUpgradeMgrSession() {}
  145. virtual void Handle_RegistLocalPack(SpReqAnsContext<UpgradeMgrService_RegistLocalPack_Req, UpgradeMgrService_RegistLocalPack_Ans>::Pointer ctx)
  146. {
  147. ErrorCodeEnum rc = m_pEntity->RegistLocalPack(ctx->Req.strPackFile);
  148. ctx->Answer(rc);
  149. }
  150. virtual void Handle_RegistManualPack(SpReqAnsContext<UpgradeMgrService_RegistManualPack_Req, UpgradeMgrService_RegistManualPack_Ans>::Pointer ctx)
  151. {
  152. LOG_FUNCTION();
  153. DWORD dwRet = 0;
  154. CSimpleStringA strErrmsg;
  155. dwRet = m_pEntity->RegistManualPack(ctx->Req.strPackFile);
  156. if (ERROR_SUCCESS != dwRet)
  157. {
  158. switch (dwRet)
  159. {
  160. case NOT_MANUALPACK_ERR:
  161. strErrmsg = "升级包类型不是手动安装,请确认!";
  162. break;
  163. case IS_UPDATEING_ERR:
  164. strErrmsg = "正在升级,请稍后!";
  165. break;
  166. default:
  167. strErrmsg = "未知的手动升级错误,请联系维护人员!";
  168. break;
  169. }
  170. }
  171. else
  172. {
  173. Dbg("推送手动升级任务:[%s]成功", ctx->Req.strPackFile);
  174. }
  175. ctx->Ans.Errcode = dwRet;
  176. ctx->Ans.ErrMsg = strErrmsg;
  177. ctx->Answer(Error_Succeed);
  178. //ctx->Answer(Error_Succeed, dwRet);
  179. }
  180. virtual void Handle_CancelUpdate(SpReqAnsContext<UpgradeMgrService_CancelUpdate_Req, UpgradeMgrService_CancelUpdate_Ans>::Pointer ctx)
  181. {
  182. ErrorCodeEnum rc = m_pEntity->CancelUpdate(ctx->Req.strPackFile);
  183. ctx->Answer(rc);
  184. }
  185. virtual void Handle_RollbackUpdate(SpReqAnsContext<UpgradeMgrService_RollbackUpdate_Req, UpgradeMgrService_RollbackUpdate_Ans>::Pointer ctx)
  186. {
  187. auto rc = m_pEntity->RollbackUpdate(ctx->Req.strVersion);
  188. ctx->Answer(rc);
  189. }
  190. virtual void Handle_GetUpgradeState(SpReqAnsContext<UpgradeMgrService_GetUpgradeState_Req, UpgradeMgrService_GetUpgradeState_Ans>::Pointer ctx)
  191. {
  192. auto rc = m_pEntity->GetUpgradeState(ctx->Ans.bInstalling, ctx->Ans.strPackFile, ctx->Ans.strExecID,
  193. ctx->Ans.cInstallState, ctx->Ans.bSysInstall, ctx->Ans.bLightPack, ctx->Ans.strNewVersion);
  194. ctx->Answer(rc);
  195. }
  196. virtual void Handle_SwitchUpgrade(SpReqAnsContext<UpgradeMgrService_SwitchUpgrade_Req, UpgradeMgrService_SwitchUpgrade_Ans>::Pointer ctx)
  197. {
  198. auto rc = m_pEntity->SwitchUpgrade(ctx->Req.strPackFile);
  199. ctx->Answer(rc);
  200. }
  201. virtual void Handle_GetManualPacks(SpReqAnsContext<UpgradeMgrService_GetManualPacks_Req, UpgradeMgrService_GetManualPacks_Ans>::Pointer ctx)
  202. {
  203. LOG_FUNCTION();
  204. DWORD dwRet = 0;
  205. CSimpleStringA strErrmsg;
  206. CSimpleStringA strPackList;
  207. dwRet = m_pEntity->GetManualPacks(strPackList);
  208. if (ERROR_SUCCESS == dwRet)
  209. {
  210. ctx->Ans.strPackFileList = strPackList;
  211. Dbg("获取手动升级包列表成功:[%s]", strPackList);
  212. }
  213. else
  214. {
  215. Dbg("不存在手动安装的升级包");
  216. ctx->Ans.strPackFileList = "";
  217. switch (dwRet)
  218. {
  219. case NO_EXIST_MANUAL_PACK_ERR:
  220. strErrmsg = "不存在手动升级任务,请确认!";
  221. break;
  222. default:
  223. strErrmsg = "未知的获取手动升级任务错误,请联系维护人员!";
  224. break;
  225. }
  226. }
  227. ctx->Ans.Errcode = dwRet;
  228. ctx->Ans.ErrMsg = strErrmsg;
  229. //ctx->Answer(Error_Succeed, dwRet);
  230. ctx->Answer(Error_Succeed);
  231. }
  232. private:
  233. CUpgradeMgrEntity *m_pEntity;
  234. };
  235. #endif //RVC_MOD_UPGRADEMGR_H_