소스 검색

#IQRV #comment [CenterSetting] 支持集中配置下载,但是哈希值被注释

gifur 2 년 전
부모
커밋
bf95623e69

+ 3 - 3
Module/include/microservices/api_terminal_center_config.h

@@ -54,9 +54,9 @@ namespace TerminalV3
 {
 struct ModuleConfigItem
 {
-    std::string strModule;
-    std::string strName;
-    std::string strValue;
+    std::string m_moudle;
+    std::string m_name;
+    std::string m_value;
 };
 
 

+ 152 - 280
Module/mod_CenterSetting/CenterSettingConn.cpp

@@ -17,40 +17,8 @@ using std::regex;
 #include "mod_centersetting.h"
 #include "SpUtility.h"
 #include "RVCComm.h"
-
-
-#if defined(RVC_OS_WIN)
 #pragma comment(lib, "crypt32.lib")
-#endif //RVC_OS_WIN
-
-#define WITH_CPPRESTSDK
 
-#ifdef WITH_CPPRESTSDK
-#include "CommEntityRestful.hpp"
-#include "microservices/api_terminal_center_config.h"
-
-struct ModuleConfigItemJson : public MicroServices::API::TerminalV3::ModuleConfigItem
-{
-    JSONCONVERT2OBJECT_MEMEBER_REGISTER(strModule, strName, strValue)
-    JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("moudle", "name", "value")
-};
-
-struct CenterSettingConfigJson
-{
-    bool isUpdate;
-    bool isReset;
-    std::string SM3;
-    std::string versionNo;
-    std::vector<ModuleConfigItemJson> configs;
-    std::string strConfig;
-    JSONCONVERT2OBJECT_MEMEBER_REGISTER(isUpdate, isReset, SM3, versionNo, strConfig)
-    JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("is_update", "is_reset", "sm3", "version_no", "config")
-};
-
-#else
-#define SAFE_DELETE_HTTPCLIENT(obj)	\
-	do{if(obj != NULL) { obj->Destory(); obj = NULL; }}while(false)
-#endif
 
 void convert(string& str)
 {
@@ -87,39 +55,17 @@ void transferblank(string& str)
     }
 }
 
-
-void HttpsLogCallBackTest(const char* logtxt)
-{
-    Dbg("http dbg: %s", logtxt);
-}
-
+#ifndef  WITH_CPPRESTSDK_IN_CENTER
 bool CenterSettingResponse::Parse(string strData)
 {
-    LOG_FUNCTION();
-
     Json::Value root;
     Json::Reader reader;
     Json::Value arrConfig;
 
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Parse:[%d]", strData.length());
-
-    if (!reader.parse(strData, root, false)) {
-        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("parse json string failed: ");
-        return false;
-    }
-
-    struct CommResponseJson : public MicroServices::API::CommResponse
-    {
-        JSONCONVERT2OBJECT_MEMEBER_REGISTER(success, errorCode, returnCode, errorMsg, message)
-            JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("success", "code", "return_code", "error_msg", "message")
-    } reponseStatus;
+    reader.parse(strData, root, false);
 
-    if (!Json2Object(reponseStatus, root)) {
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Json2Object failed");
-        return false;
-    }
+    m_success = root["success"].asBool();
 
-    m_success = reponseStatus.success;
     if (m_success) {
         m_message = root["message"].asString();
         m_is_update = root["data"]["is_update"].asBool();
@@ -146,19 +92,17 @@ bool CenterSettingResponse::Parse(string strData)
 
             }
         }
-
     }
     return true;
 }
+#endif
 
 bool AddVersionResponse::Parse(string strData)
 {
     Json::Value root;
     Json::Reader reader;
     reader.parse(strData, root, false);
-
     m_success = root["success"].asBool();
-
     return m_success;
 }
 
@@ -183,120 +127,6 @@ int CenterSettingsMicroServiceHelper::GetCenterSetting()
         return AllAddressNull;
     }
 
-#ifdef WITH_CPPRESTSDK
-
-    int res = UNknown;
-
-    struct GetCenterSettingsReqJson
-    {
-        GetCenterSettingsReqJson() :terminalNo(""), strVersion(""), lastUpdateTime("") {}
-        std::string terminalNo;
-        std::string strVersion;
-        std::string lastUpdateTime;
-        std::vector<ModuleConfigItemJson> configs;
-        JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminalNo, strVersion, configs, lastUpdateTime)
-        JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("terminal_no", "version", "config", "update_time")
-    } getCenterSettingsReqJson;
-
-    HttpClientResponseResult result;
-
-
-    getCenterSettingsReqJson.terminalNo = m_terminalInfo.strTerminalID;
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("m_strFilePath:%s", m_strFilePath.GetData());
-    if (!ExistsFile(m_strFilePath)) {
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("!ExistsFile(m_strFilePath)");
-    } else {
-        getCenterSettingsReqJson.strVersion = m_strVersion.GetData();
-        ///**TODO(Gifur@9/7/2023):  */
-        getCenterSettingsReqJson.configs;
-    }
-    getCenterSettingsReqJson.lastUpdateTime = GetUpdateTime();
-
-    HttpClientRequestConfig config(HttpRequestMethod::POST);
-    if (!m_strUrl.IsNullOrEmpty()) {
-        config.SetUri(m_strUrl.GetData());
-        config.AppendQuery("update_time", getCenterSettingsReqJson.lastUpdateTime);
-        config.AppendQuery("terminal_no", getCenterSettingsReqJson.terminalNo);
-        config.AppendQuery("version", getCenterSettingsReqJson.strVersion);
-    }
-    SP::Module::Restful::FulfillRequestJsonBody(&config, getCenterSettingsReqJson);
-    int timout(0);
-    GetTimeoutValue(timout);
-    if(timout > 0) config.SetTimeout(timout);
-
-    /** 有什么作用? [Gifur@202397]*/
-    if (m_isFirst) m_isFirst = false;
-
-    RestfulClient client = RestfulClient::getInstance();
-    config.PreDo();
-    client.Do(&config, &result);
-    if (result.ResponseOK()) {
-        SP::Module::Restful::CommResponseJson responseStatus;
-        SP::Module::Restful::GetStatusFromDebranchResponse(result.content, responseStatus);
-        if (!responseStatus.IsOperatedOK()) {
-            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(result.content.c_str());
-            DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)(responseStatus.WhatError().c_str());
-        } else {
-            CenterSettingConfigJson getCenterSettingsAns;
-            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s", result.content.substr(0, 1000).c_str());
-            if (!SP::Module::Restful::ExtractDataFromDebranchResponse(result.content, getCenterSettingsAns)) {
-                DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("parse json data node failed: ");
-            } else {
-                if (!getCenterSettingsAns.isUpdate) {
-                    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("Centersetting not changed.");
-                    m_strErrMsg = "集中配置已是最新版本";
-                    res = EXIST;
-                } else {
-
-                    SP::Utility::replaceInPlace(getCenterSettingsAns.strConfig, "\\\"", "\"");
-                    if (!Json2Object(getCenterSettingsAns.configs, getCenterSettingsAns.strConfig)) {
-                        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("parse config content failed!");
-
-                    } else {
-
-                        do {
-                            bool fErrOccur(false), fHasContent(false);
-                            CSimpleStringA newPath = m_strBakPath + ".new";
-                            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("write to %s..", newPath);
-                            for (auto it = getCenterSettingsAns.configs.cbegin(); it != getCenterSettingsAns.configs.cend(); ++it) {
-                                DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("write %s:%s:%s...", it->strModule.c_str(), it->strName.c_str(), it->strValue.c_str());
-                                if (inifile_write_str(newPath.GetData(), it->strModule.c_str(), it->strName.c_str(), it->strValue.c_str()) == -1) {
-                                    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("WriteToConfig")
-                                        ("write %s:%s:%s fail", it->strModule.c_str(), it->strName.c_str(), it->strValue.c_str());
-                                    m_strErrMsg = "集中配置写入失败";
-                                    LogWarn(Severity_Middle, Error_Unexpect, ERR_MOD_CENTERSETTING_WRITE_FAILED,
-                                            CSimpleStringA::Format("集中配置写入失败:%s:%s:%s", it->strModule.c_str(), it->strName.c_str(), it->strValue.c_str()));
-                                    fErrOccur = true;
-                                    break;
-                                } else if (!fHasContent) {
-                                    fHasContent = true;
-                                }
-                            }
-
-                            if (fHasContent && !fErrOccur) {
-                                DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("WriteToConfig")("集中配置写入成功");
-                                fileutil_copy_file(m_strFilePath, newPath);
-                                fileutil_delete_file(newPath);
-                                res = SUCC;
-                            } else {
-                                res = UNknown;
-                            }
-
-                        } while (false);
-                    }
-                }
-            }
-        }
-    } else {
-        m_strErrMsg = result.WhatError();
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Do failed: %s", m_strErrMsg.c_str());
-        res = AccessServiceFail;
-    }
-
-    return res;
-
-#else
-
     CenterSettingReq req;
     CenterSettingResponse res;
     req.m_terminal_no = m_terminalInfo.strTerminalID.GetData();
@@ -310,7 +140,7 @@ int CenterSettingsMicroServiceHelper::GetCenterSetting()
         req.m_version = m_strVersion.GetData();
         req.m_config = GetLocalConfig();
     }
-
+    /** 有什么作用? [Gifur@202397]*/
     if (m_isFirst) m_isFirst = false;
     DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_strVersion:%s", m_strVersion.GetData());
     req.m_update_time = GetUpdateTime();
@@ -323,21 +153,15 @@ int CenterSettingsMicroServiceHelper::GetCenterSetting()
         req.m_url = m_strUrl;
         m_strCurUrl = req.m_url;
         req.m_url += "?update_time=" + req.m_update_time + "&terminal_no=" + req.m_terminal_no + "&version=" + req.m_version;
-        ret1 = OnRequest(req, res, m_strErrMsg);
-        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("ret111:%d", ret1);
+        ret1 = GetCenterSettingsFromHttp(req, m_strErrMsg);
+    } else {
+        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("集中配置文件中地址为空,使用默认地址");
     }
 
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%d", __LINE__);
-
-    if (SUCC != ret1) {
-
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ret1 is not succ: %d", ret1);
-
-        if (m_strUrl.IsNullOrEmpty())
-            DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("集中配置文件中地址为空,使用默认地址");
+    if (SUCC != ret1 && ret1 != EXIST) {
 
         if (m_urlsFromShell.size() <= 0) {
-            DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("shell.ini 中找不到集中配置地址");
+            DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("shell.ini中找不到集中配置地址");
             return ret1;
         }
 
@@ -345,45 +169,13 @@ int CenterSettingsMicroServiceHelper::GetCenterSetting()
             req.m_url = m_urlsFromShell[i].GetData();
             m_strCurUrl = m_urlsFromShell[i].GetData();
             req.m_url += "?update_time=" + req.m_update_time + "&terminal_no=" + req.m_terminal_no + "&version=" + req.m_version;
-            string err_str;
-            ret2 = OnRequest(req, res, err_str);
-            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("ret2:%d", ret2);
-            if (ret2 == SUCC)
+            ret1 = GetCenterSettingsFromHttp(req, m_strErrMsg);
+            if (ret1 == SUCC || ret1 == EXIST)
                 break;
         }
     }
 
-    if (SUCC == ret1 || SUCC == ret2) {
-
-        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%d", __LINE__);
-
-        if (!res.m_is_update) {
-            DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("Centersetting not changed.");
-            m_strErrMsg = "集中配置已是最新版本";
-            return EXIST;
-        }
-
-        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%d", __LINE__);
-
-        if (WriteToConfig(res)) {
-            m_strVersion = res.m_version_no.c_str();
-            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("WriteToConfig m_strVersion:%s", m_strVersion.GetData());
-            m_pEntity->GetFunction()->OpenConfig(Config_CenterSetting, m_pCenterConfig, true);
-            m_pRunConfig->WriteConfigValue("CenterSetting", "version", m_strVersion);
-            UpdateVersion();
-            if (res.m_is_reset) {
-                LogEvent(Severity_Middle, EVENT_MOD_CENTERSETTING_CRITICAL_UPDATE, "Update centersetting with critical items.");
-            }
-            return SUCC;
-        }
-    }
-
-
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%d", __LINE__);
-
     return ret1;
-
-#endif //WITH_CPPRESTSDK
 }
 
 void CenterSettingsMicroServiceHelper::InitCenterSettingInfo()
@@ -393,7 +185,11 @@ void CenterSettingsMicroServiceHelper::InitCenterSettingInfo()
 
     m_pCenterConfig->ReadConfigValue("CenterSetting", "LastUpdateTime", m_strLastTime);
     m_pRunConfig->ReadConfigValue("CenterSetting", "version", m_strVersion);
-
+    if (!m_strVersion.IsNullOrEmpty()) {
+        std::string tmp = m_strVersion.GetData();
+        transferblank(tmp);
+        m_strVersion = tmp.c_str();
+    }
     //从集中配置和shell.ini获取url
     m_pCenterConfig->ReadConfigValue("CenterSetting", "CenterConfigUrlNew", m_strUrl);
     if (m_strUrl.IsNullOrEmpty()) {
@@ -440,18 +236,15 @@ void CenterSettingsMicroServiceHelper::InitCenterSettingInfo()
     m_strBakPath += SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR "CenterSetting.ini";
 }
 
-bool CenterSettingsMicroServiceHelper::WriteToConfig(CenterSettingResponse& sResponse)
+bool CenterSettingsMicroServiceHelper::WriteToConfig(const CenterSettingResponse& sResponse)
 {
-    LOG_FUNCTION();
-
     CSimpleStringA newPath = m_strBakPath + ".new";
 
     DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("config size: %d", sResponse.m_config.size());
-    for (int i = 0; i < sResponse.m_config.size(); i++) {
-        auto item = sResponse.m_config[i];
-        string module = item.m_moudle;
-        string name = item.m_name;
-        string value = item.m_value;
+    for(auto it=sResponse.m_config.cbegin(); it != sResponse.m_config.cend(); ++it) {
+        string module = it->m_moudle;
+        string name = it->m_name;
+        string value = it->m_value;
 
         DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("write %s:%s:%s...", module.c_str(), name.c_str(), value.c_str());
 
@@ -556,7 +349,7 @@ string CenterSettingsMicroServiceHelper::GetUpdateTime()
     CSimpleStringA strUpdateTime;
 
     /** 配置后置后本地没有这个实体文件,都被框架放到运行时了,所以需要处理这个逻辑 [Gifur@202397]*/
-    if (ExistsFile(m_strFilePath.GetData())) {
+    if (ExistsFileA(m_strFilePath)) {
         SYSTEMTIME st = GetModifyTime(m_strFilePath.GetData());
         strUpdateTime = CSimpleStringA::Format("%d-%02d-%02d-%02d:%02d:%02d",
                                                st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
@@ -579,66 +372,145 @@ void CenterSettingsMicroServiceHelper::GetTimeoutValue(int& timeout)
         timeout = timeoutFromConfig;
 }
 
-int CenterSettingsMicroServiceHelper::OnRequest(CenterSettingReq& req, CenterSettingResponse& res, string& errMsg)
+int CenterSettingsMicroServiceHelper::GetCenterSettingsFromHttp(CenterSettingReq& req, string& errMsg)
 {
     LOG_FUNCTION();
+    CenterSettingResponse res;
+
+#ifdef WITH_CPPRESTSDK_IN_CENTER
+    HttpClientResponseResult result;
+    RestfulClient client = RestfulClient::getInstance();
+    HttpClientRequestConfig config(HttpRequestMethod::POST);
+    config.SetUri(req.m_url);
+    //config.AppendQuery("update_time", req.m_update_time);
+    //config.AppendQuery("terminal_no", req.m_terminal_no);
+    //config.AppendQuery("version", req.m_version);
+    if (req.m_timeOut > 0) config.SetTimeout(req.m_timeOut);
+    SP::Module::Restful::FulfillRequestJsonBody(&config, req);
+
+    config.PreDo();
+    client.Do(&config, &result);
+    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("return do");
+    if (!result.ResponseOK()) {
+        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Do failed: %s", result.WhatError().c_str());
+        errMsg = result.WhatError();
+        return AccessServiceFail;
+    }
+    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%d", __LINE__);
+    SP::Module::Restful::CommResponseJson responseStatus;
+    SP::Module::Restful::GetStatusFromDebranchResponse(result.content, responseStatus);
+    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%d", __LINE__);
+    if (!responseStatus.IsOperatedOK()) {
+        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(result.content.c_str());
+        errMsg = responseStatus.WhatError().c_str();
+        return MANUAL;
+    }
 
-    //req.m_url = "http://99.12.23.16:8081/api/terminal/center/config/v3?update_time=2022-08-08%2010:24:40&terminal_no=7555985008&version=";
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s", req.m_url.c_str());
+    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s", result.content.length() > 1000 ? result.content.substr(0, 1000).c_str() : result.content.c_str());
+    if (!SP::Module::Restful::ExtractDataFromDebranchResponse(result.content, res)) {
+        DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("parse json data node failed: ");
+        errMsg = "解析集中配置返回的信息失败";
+        return UNknown;
+    }
+    transferblank(res.m_version_no);
+    /** 当时粤超开发Windows版本时,要求服务端将数组转化为字符串传送,这边信创为了兼容,需要重新转为数组处理(信创是支持JSON数组) [Gifur@202398]*/
+    string strConfig = res.m_strConfig;
+
+    SP::Utility::replaceInPlace(res.m_strConfig, "\\\"", "\"");
+    if (!Json2Object(res.m_config, res.m_strConfig)) {
+        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("parse config content failed!");
+        errMsg = "解析集中配置返回的配置信息失败";
+        return UNknown;
+    }
 
-    IHttpFunc* client;
-    client = create_http(HttpsLogCallBackTest);
+#else
+
+    bool ret = m_pHttpFunc->Post(req, res);
+    if (!ret || !res.m_success) {
+        errMsg = res.m_errMsg;
+        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSettingsFromHttp")("访问失败:%s", res.m_errMsg.c_str());
+        if (res.m_sysCode == 28 || res.m_sysCode == 7)
+            return AccessServiceFail;
+        return MANUAL;
+    }
 
-    bool ret = client->Post(req, res);
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("ret %d, succ: %d, update: %d", ret ? 1 : 0, res.m_success ? 1 : 0, res.m_is_update ? 1 : 0);
-    if (ret && res.m_success) {
-        if (!res.m_is_update) {
-            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("no need to update.");
-            client->Destory();
-            return SUCC;
-        }
 #if defined(_MSC_VER)
-        SP::Module::Util::ConvertGBKToUtf8(res.m_strConfig);
-        string strConfig = res.m_strConfig;
+    SP::Module::Util::ConvertGBKToUtf8(res.m_strConfig);
+    string strConfig = res.m_strConfig;
 #else
-        string strConfig = SP::Utility::GBK2UTF8(res.m_strConfig);
+    string strConfig = SP::Utility::GBK2UTF8(res.m_strConfig);
 #endif //_MSC_VER
-        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("config:%d", strConfig.length());
-
-        BYTE sm3[32] = {};
-        if (strConfig.length() > 2) {
-            if (!SM3Hash((BYTE*)(strConfig.c_str()), strConfig.length(), sm3)) {
-                errMsg = "计算SM3失败";
-                DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("OnRequest")("计算SM3失败(%s)", req.m_url.c_str());
-                client->Destory();
-                return CalcSM3Fail;
-            } else {
-                int sm3len = sizeof(sm3);
-                DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("smlen:%d", sm3len);
-                char* strsm3 = SP::Module::Util::ConvertBytesToHexStr(sm3, 32);
-                if (0 != strcmp(strsm3, res.m_sm3.c_str())) {
-                    errMsg = "SM3校验失败";
-                    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("OnRequest")("SM3校验失败(%s)", req.m_url.c_str());
-                    delete[] strsm3;
-                    client->Destory();
-                    return CheckSM3Fail;
-                }
-                m_strVersion = res.m_version_no.c_str();
-                delete[] strsm3;
-                DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%d", __LINE__);
-                client->Destory();
-                
-                return SUCC;
+
+#endif //WITH_CPPRESTSDK_IN_CENTER
+
+    if (!res.m_is_update) {
+        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("Centersetting not changed.");
+        errMsg = "集中配置已是最新版本";
+        return EXIST;
+    }
+
+    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("config length:%d", strConfig.length());
+
+    BYTE sm3[32] = {};
+    if (strConfig.length() > 2) {
+        //if (!SM3Hash((BYTE*)(strConfig.c_str()), strConfig.length(), sm3)) {
+        //    errMsg = "计算SM3失败";
+        //    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSettingsFromHttp")("计算SM3失败(%s)", req.m_url.c_str());
+        //    return CalcSM3Fail;
+        //} else {
+        //    int sm3len = sizeof(sm3);
+        //    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("sm3:%s", res.m_sm3.c_str());
+        //    char* strsm3 = SP::Module::Util::ConvertBytesToHexStr(sm3, 32);
+        //    if (0 != strcmp(strsm3, res.m_sm3.c_str())) {
+        //        errMsg = "SM3校验失败";
+        //        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSettingsFromHttp")("SM3校验失败(%s)", req.m_url.c_str());
+        //        delete[] strsm3;
+        //        return CheckSM3Fail;
+        //    }
+        //    m_strVersion = res.m_version_no.c_str();
+        //    delete[] strsm3;
+        //}
+
+        //do {
+        //    bool fErrOccur(false), fHasContent(false);
+        //    CSimpleStringA newPath = m_strBakPath + ".new";
+        //    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("write to %s..", newPath.GetData());
+        //    for (auto it = res.m_config.cbegin(); it != res.m_config.cend(); ++it) {
+        //        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("write %s:%s:%s...", it->m_moudle.c_str(), it->m_name.c_str(), it->m_value.c_str());
+        //        if (inifile_write_str(newPath.GetData(), it->m_moudle.c_str(), it->m_name.c_str(), it->m_value.c_str()) == -1) {
+        //            DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("WriteToConfig")
+        //                ("write %s:%s:%s fail", it->m_moudle.c_str(), it->m_name.c_str(), it->m_value.c_str());
+        //            m_strErrMsg = "集中配置写入失败";
+        //            LogWarn(Severity_Middle, Error_Unexpect, ERR_MOD_CENTERSETTING_WRITE_FAILED,
+        //                    CSimpleStringA::Format("集中配置写入失败:%s:%s:%s", it->m_moudle.c_str(), it->m_name.c_str(), it->m_value.c_str()));
+        //            fErrOccur = true;
+        //            break;
+        //        } else if (!fHasContent) {
+        //            fHasContent = true;
+        //        }
+        //    }
+
+        //    if (fHasContent && !fErrOccur) {
+        //        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("WriteToConfig")("集中配置写入成功");
+        //        fileutil_copy_file(m_strFilePath, newPath);
+        //        fileutil_delete_file(newPath);
+        //    } else {
+        //    }
+
+        //} while (false);
+
+
+        if (WriteToConfig(res)) {
+            m_strVersion = res.m_version_no.c_str();
+            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("WriteToConfig m_strVersion:%s", m_strVersion.GetData());
+            m_pEntity->GetFunction()->OpenConfig(Config_CenterSetting, m_pCenterConfig, true);
+            m_pRunConfig->WriteConfigValue("CenterSetting", "version", m_strVersion);
+            UpdateVersion();
+            if (res.m_is_reset) {
+                LogEvent(Severity_Middle, EVENT_MOD_CENTERSETTING_CRITICAL_UPDATE, "Update centersetting with critical items.");
             }
+            return SUCC;
         }
-    } else {
-        client->Destory();
-        errMsg = res.m_errMsg;
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("OnRequest")("访问失败:%s", res.m_errMsg.c_str());
-        if (res.m_sysCode == 28 || res.m_sysCode == 7)
-            return AccessServiceFail;
-        return MANUAL;
     }
-    client->Destory();
     return UNknown;
 }

+ 53 - 3
Module/mod_CenterSetting/CenterSettingConn.h

@@ -10,6 +10,49 @@
 #include <vector>
 #include <string>
 
+#if defined(RVC_OS_LINUX)
+//#define WITH_CPPRESTSDK_IN_CENTER
+#endif //RVC_OS_LINUX
+
+#ifdef WITH_CPPRESTSDK_IN_CENTER
+#include "CommEntityRestful.hpp"
+#include "microservices/api_terminal_center_config.h"
+
+struct ModuleConfigItemJson : public MicroServices::API::TerminalV3::ModuleConfigItem
+{
+    JSONCONVERT2OBJECT_MEMEBER_REGISTER(m_moudle, m_name, m_value)
+        JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("moudle", "name", "value")
+};
+
+struct CenterSettingReq
+{
+    CenterSettingReq() :m_terminal_no(""), m_version(""), m_update_time(""),m_url(""),m_timeOut(0) {}
+    std::string m_terminal_no;
+    std::string m_version;
+    std::string m_update_time;
+    /** 兼容用途 [Gifur@202398]*/
+    std::string m_url;
+    int m_timeOut;
+    std::string m_config;
+    std::vector<ModuleConfigItemJson> configs;
+    JSONCONVERT2OBJECT_MEMEBER_REGISTER(m_terminal_no, m_version, configs, m_update_time)
+        JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("terminal_no", "version", "config", "update_time")
+};
+
+struct CenterSettingResponse
+{
+    bool m_is_update;
+    bool m_is_reset;
+    std::string m_sm3;
+    std::string m_version_no;
+    std::vector<ModuleConfigItemJson> m_config;
+    std::string m_strConfig;
+    JSONCONVERT2OBJECT_MEMEBER_REGISTER(m_is_update, m_is_reset, m_sm3, m_version_no, m_strConfig)
+        JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("is_update", "is_reset", "sm3", "version_no", "config")
+};
+
+#else
+
 struct CenterSettingReq : CHTTPReq
 {
     CenterSettingReq()
@@ -31,7 +74,7 @@ struct CenterSettingReq : CHTTPReq
                                                            m_terminal_no.c_str(), m_version.c_str(), m_update_time.c_str(), m_config.c_str());
         return reqcontent.GetData();
     }
-};
+    };
 
 struct ConfigItem
 {
@@ -56,6 +99,13 @@ struct CenterSettingResponse : CHTTPRet
     virtual bool Parse(string strData);
 };
 
+#define SAFE_DELETE_HTTPCLIENT(obj)	\
+	do{if(obj != NULL) { obj->Destory(); obj = NULL; }}while(false)
+
+#endif
+
+
+
 struct AddVersionReq : CHTTPReq
 {
     AddVersionReq() {}
@@ -93,11 +143,11 @@ public:
     const char* GetErrMsg() { return m_strErrMsg.c_str(); }
     void GetTimeoutValue(int& timeout);
     void InitCenterSettingInfo();
-    bool WriteToConfig(CenterSettingResponse& sResponse);
+    bool WriteToConfig(const CenterSettingResponse& sResponse);
     void UpdateVersion();
     void UpdateUrl(const string& url) { m_strUrl = url.c_str(); };
 
-    int OnRequest(CenterSettingReq& req, CenterSettingResponse& res, string& errMsg);  //轮询域名下载集中配置
+    int GetCenterSettingsFromHttp(CenterSettingReq& req, string& errMsg);  //轮询域名下载集中配置
     string GetCurUrl() { return m_strCurUrl; }
 
 private:

+ 0 - 3
Module/mod_CenterSetting/mod_centersetting.h

@@ -59,9 +59,6 @@ private:
 	CSmartPointer<IConfigInfo> m_pCenterConfig;
 
 	CSimpleStringA m_strBakPath;
-#ifdef DEBUG
-
-#endif // DEBUG
 
 #ifdef _MSC_VER
 	CRITICAL_SECTION m_lock;