mod_centersetting.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. #include "stdafx.h"
  2. #include "SpBase.h"
  3. #include "Event.h"
  4. #include "mod_centersetting.h"
  5. #include <regex>
  6. #include "fileutil.h"
  7. #include "array.h"
  8. using namespace std;
  9. CServerSessionBase* CCenterSettingEntity::OnNewSession(const char* /*pszRemoteEntityName*/, const char* /*pszClass*/)
  10. {
  11. return new CCenterSettingService(this);
  12. }
  13. void CCenterSettingEntity::OnStarted()
  14. {
  15. GetFunction()->GetPath("CenterSetting", m_strFilePath);
  16. GetFunction()->OpenConfig(Config_CenterSetting, m_pCenterConfig);
  17. GetFunction()->GetPath("RunInfo", m_strBakPath);
  18. #ifdef RVC_OS_WIN
  19. m_strBakPath += "\\runcfg\\CenterSetting.ini";
  20. #else
  21. m_strBakPath += SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR "CenterSetting.ini";
  22. #endif
  23. m_pMicroServiceHelper = new CenterSettingsMicroServiceHelper(this);
  24. if(!m_pCenterConfig->storageInMem())
  25. {
  26. m_isUseMemCfg = false;
  27. BeginDownloadCenterSetting();
  28. }
  29. else
  30. {
  31. m_isUseMemCfg = true;
  32. }
  33. }
  34. void CCenterSettingEntity::OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer<ITransactionContext> pTransactionContext)
  35. {
  36. pTransactionContext->SendAnswer(Error_Succeed);
  37. }
  38. ErrorCodeEnum CCenterSettingEntity::BeginDownloadCenterSetting(bool bByHand, const string& url)
  39. {
  40. LOG_FUNCTION();
  41. #ifdef _MSC_VER
  42. EnterCriticalSection(&m_lock);
  43. #else
  44. std::unique_lock<std::mutex> lock1(m_lock);
  45. #endif
  46. if(!url.empty())
  47. {
  48. DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("update centersettings url...");
  49. m_pMicroServiceHelper->UpdateUrl(url);
  50. }
  51. #ifdef RVC_OS_WIN
  52. int rc = m_pMicroServiceHelper->GetCenterSetting();
  53. #else
  54. int rc = m_pMicroServiceHelper->GetCenterSetting(bByHand);
  55. #endif
  56. if(EXIST == rc)
  57. {
  58. }
  59. else if(SUCC == rc)
  60. {
  61. LogWarn(Severity_Low, Error_Succeed, EVENT_MOD_CENTERSETTING_UPDATE_CENTER,
  62. CSimpleStringA::Format("下载集中配置成功:%s", m_pMicroServiceHelper->GetCurUrl().c_str()));
  63. LogEvent(Severity_Low, EVENT_MOD_CENTERSETTING_UPDATE_CENTER, "Update Centersetting.");
  64. if (bByHand)
  65. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR040210101")("手工下载集中配置成功");
  66. else
  67. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402101Z01")("自动下载集中配置成功");
  68. }
  69. else
  70. {
  71. LogWarn(Severity_High, Error_Unexpect, ERR_MOD_CENTERSETTING_CONNECT_FAILED,
  72. CSimpleStringA::Format("下载集中配置失败:%s", m_pMicroServiceHelper->GetErrMsg()));
  73. if (!bByHand)
  74. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402101Z01").setResultCode("RTA1104")("集中配置下载失败");
  75. }
  76. if(m_spDownloadCall != NULL)
  77. {
  78. m_spDownloadCall->Ans.downloadStat = rc;
  79. m_spDownloadCall->Ans.retCenterConfigUrl = m_pMicroServiceHelper->GetCurUrl().c_str();
  80. if(rc == AllAddressNull)
  81. {
  82. m_spDownloadCall->Ans.strErrMsg = "所有地址都为空,请检查终端版本";
  83. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1101")("所有集中配置下载地址都为空");
  84. }
  85. else if(rc == AccessServiceFail)
  86. {
  87. m_spDownloadCall->Ans.strErrMsg = "网络异常,请检查网络连接情况";
  88. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1102")("网络异常,请检查网络连接情况");
  89. }
  90. else if(rc == CalcSM3Fail || rc == CheckSM3Fail)
  91. {
  92. m_spDownloadCall->Ans.strErrMsg = "集中配置内容校验失败,请重试";
  93. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1103")("集中配置内容校验失败");
  94. }
  95. else if(rc == MANUAL)
  96. {
  97. m_spDownloadCall->Ans.strErrMsg = "集中配置下载失败";
  98. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1104")("集中配置下载失败");
  99. }
  100. else if(rc == EXIST)
  101. {
  102. m_spDownloadCall->Ans.strErrMsg = "集中配置已是最新版本";
  103. }
  104. CSimpleStringA hostUrl;
  105. m_pCenterConfig->ReadConfigValue("AccessAuthorization", "HostInitUrl", hostUrl);
  106. m_spDownloadCall->Ans.HostUrl = hostUrl;
  107. m_spDownloadCall->Answer(Error_Succeed);
  108. m_spDownloadCall.Clear();
  109. }
  110. #ifdef _MSC_VER
  111. LeaveCriticalSection(&m_lock);
  112. #endif
  113. return Error_Succeed;
  114. }
  115. ErrorCodeEnum CCenterSettingEntity::DownloadCenterSetting(SpReqAnsContext<CenterSettingService_Downloadv2_Req, CenterSettingService_Downloadv2_Ans>::Pointer sp)
  116. {
  117. if (m_spDownloadCall != NULL)
  118. {
  119. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DownloadCenterSetting")
  120. ("last download call not complet");
  121. sp->Answer(Error_Duplication);
  122. return Error_Duplication;
  123. }
  124. m_spDownloadCall = sp;
  125. ErrorCodeEnum error = BeginDownloadCenterSetting(true, sp->Req.reqCenterConfigUrl.GetData());
  126. if (error != Error_Succeed) {
  127. m_spDownloadCall = nullptr;
  128. if (sp != NULL) {
  129. sp->Answer(Error_Succeed);
  130. }
  131. return error;
  132. }
  133. return Error_Succeed;
  134. }
  135. DWORD getCenterCfgThread(LPVOID param)
  136. {
  137. CCenterSettingEntity* req = (CCenterSettingEntity*)param;
  138. bool isUpdate = false, isReset = false;
  139. CSimpleString version;
  140. if(false == req->GetFunction()->HasPrivilege())
  141. {
  142. LogWarn(Severity_High, Error_Unexpect, ERR_MOD_CENTERSETTING_CONNECT_FAILED,
  143. CSimpleStringA::Format("下载集中配置失败:%s do not has privilege", __FUNCTION__));
  144. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402101Z01").setResultCode("RTA1104")("集中配置下载失败");
  145. return -1;
  146. }
  147. auto ret = req->GetFunction()->GetPrivilegeFunction()->TryUpdateCenterCfg(isUpdate, isReset, version);
  148. if (ret != ErrorCodeEnum::Error_Succeed)
  149. {
  150. LogWarn(Severity_High, Error_Unexpect, ERR_MOD_CENTERSETTING_CONNECT_FAILED,
  151. CSimpleStringA::Format("下载集中配置失败:%d", ret));
  152. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402101Z01").setResultCode("RTA1104")("集中配置下载失败");
  153. return -1;
  154. }
  155. if (!isUpdate)
  156. {
  157. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("Centersetting not changed from spshell");
  158. return -1;
  159. }
  160. LogWarn(Severity_Low, Error_Succeed, EVENT_MOD_CENTERSETTING_UPDATE_CENTER,
  161. CSimpleStringA::Format("下载集中配置成功,版本号变更成:%s", version.GetData()));
  162. LogEvent(Severity_Low, EVENT_MOD_CENTERSETTING_UPDATE_CENTER, "Update Centersetting.");
  163. if (isReset)
  164. LogEvent(Severity_Middle, EVENT_MOD_CENTERSETTING_CRITICAL_UPDATE, "SpShell:Update centersetting with critical items.");
  165. return 0;
  166. }
  167. ErrorCodeEnum CCenterSettingEntity::GetAccessUrl(CSimpleStringA& url) //初始化地址
  168. {
  169. CSimpleStringA hostInitUrl;
  170. m_pCenterConfig->ReadConfigValue("AccessAuthorization", "HostInitUrl", hostInitUrl);
  171. if(hostInitUrl.IsNullOrEmpty())
  172. url = "初始化地址为空";
  173. else
  174. url = hostInitUrl;
  175. return Error_Succeed;
  176. }
  177. ErrorCodeEnum CCenterSettingEntity::GetCertainAceessUrl(CSimpleStringA& accessName, CSimpleStringA& url) //准入地址
  178. {
  179. LOG_FUNCTION();
  180. CSimpleStringA tUrl;
  181. m_pCenterConfig->ReadConfigValue("AccessAuthorization", accessName.GetData(), tUrl);
  182. if (tUrl.IsNullOrEmpty())
  183. url = "地址为空";
  184. else
  185. url = tUrl;
  186. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("准入地址 = %s", url.GetData());
  187. return Error_Succeed;
  188. }
  189. SP_BEGIN_ENTITY_MAP()
  190. SP_ENTITY(CCenterSettingEntity)
  191. SP_END_ENTITY_MAP()