Browse Source

Merge branch 'master' into feature_WarnCode_20220221

gifur 3 years ago
parent
commit
80232dcaf2
35 changed files with 1774 additions and 841 deletions
  1. 1 1
      CMakeLists.txt
  2. 18 0
      ChangeLog.in
  3. 7 1
      DevAdapter/CMakeLists.txt
  4. 15 0
      Module/CMakeLists.txt
  5. 65 0
      Module/include/CommEntityRestful.hpp
  6. 12 0
      Module/include/CommEntityUtil.hpp
  7. 11 11
      Module/include/EventCode.h
  8. 36 5
      Module/include/microservices/api_comm.h
  9. 76 65
      Module/mod_CenterSetting/CenterSettingConn.cpp
  10. 0 4
      Module/mod_CenterSetting/CenterSettingConn.h
  11. 1 5
      Module/mod_Initializer/InitializerFSM.h
  12. 288 255
      Module/mod_Initializer/mod_Initializer.cpp
  13. 1 3
      Module/mod_ResourceWatcher/CMakeLists.txt
  14. 25 5
      Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp
  15. 12 0
      Module/mod_ResourceWatcher/ResourceWatcherFSM.h
  16. 3 29
      Module/mod_UpgradeMgr/UpgradeTaskFSM.cpp
  17. 103 46
      Module/mod_UpgradeMgr/mod_UpgradeMgr.cpp
  18. 5 2
      Module/mod_accessauth/AccessAuthConn.cpp
  19. 677 260
      Module/mod_accessauth/AccessAuthFSM.cpp
  20. 1 6
      Module/mod_accessauth/AccessAuthFSM.h
  21. 3 2
      Module/mod_accessauth/mod_AccessAuth.cpp
  22. 38 29
      Module/mod_chromium/CModTools.cpp
  23. 3 1
      Module/mod_chromium/CModTools.h
  24. 9 13
      Module/mod_chromium/mod_chromium.cpp
  25. 0 22
      Module/mod_healthmanager/HealthManagerFSM.cpp
  26. 15 20
      Module/mod_healthmanager/mod_healthmanager.cpp
  27. 3 2
      Module/mod_sipphone/mod_sipphone.cpp
  28. 2 0
      Module/mod_upload/UploadFSM.cpp
  29. 1 0
      Other/libRestfulFunc/CMakeLists.txt
  30. 25 2
      Other/libRestfulFunc/JsonConvertHelper.hpp
  31. 115 13
      Other/libRestfulFunc/RestfulFunc.h
  32. 135 37
      Other/libRestfulFunc/RestfulFuncImpl.cpp
  33. 26 0
      Other/libRestfulFunc/RestfulUtilty.hpp
  34. 41 1
      Other/libRestfulFunc/test/testNormlReqAns.cpp
  35. 1 1
      addin/cmake/DependencyConanFiles.cmake

+ 1 - 1
CMakeLists.txt

@@ -92,7 +92,7 @@ endif($ENV{PIPELINE_BUILD_ID})
 # stable Îȶ¨°æ±¾
 
 #Set the project version
-set(RAW_VERSION_STRING "0.2.2-beta1")
+set(RAW_VERSION_STRING "0.2.4-beta1")
 string(STRIP ${RAW_VERSION_STRING} RAW_VERSION_STRING)
 
 set(VERSION_REGEX "^.?([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*)")

+ 18 - 0
ChangeLog.in

@@ -2,6 +2,24 @@
 
 *Last Built Day: @BUILD_DATE_STRING@*
 
+## V0.2.4
+
+* [ResourceWatcher][BugFix] 添加屏幕分辨率的告警上传,后后续排查搜狗输入法位置显示异常的问题做参考
+* [AccessAuth] 微服务访问报域名解析失败时添加Dig诊断
+
+
+## V0.2.3
+
+* [BugFix] 使用CPPRestSDK库替换初始化/准入/集中配置/升级(灰度部分)的Http调用请求
+* [ResourceWatcher] 添加屏幕分辨率的告警上传,后后续排查搜狗输入法位置显示异常的问题做参考
+* [BugFix] [ResourceWatcher] 修复获取D2000芯片类型告警数据不全的问题
+* [BugFix][Chromium] 修复错误页重启时间错误的提示
+* [BugFix][Chromium] 调整AD页的打开顺序,修复错误页出现在副屏的问题
+* [BugFix][AccessAuth] 同步EventCode,处理准入报错(TimeSynTask)时不会重启的问题
+* [BugFix][SipPhone] 实体Lost时最后一条告警被冲的问题修复
+* [Feature] sogouime/2.6.1.1539 搜狗输入法版本更新
+
+
 ## V0.2.2
 
 * [BugFix][AccessAuth]准入走总行调用分行句柄异常Lost

+ 7 - 1
DevAdapter/CMakeLists.txt

@@ -168,7 +168,13 @@ if(RVC_INTEGRATE_BUILD)
         message(STATUS "after file: ${RVC_DEP_BIN_FILES}")
         foreach(bin_file ${RVC_DEP_BIN_FILES})
             if(IS_DIRECTORY ${bin_file})
-                install(DIRECTORY "${bin_file}" DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
+                string(REGEX MATCH ".*/grg$" GRG_LIB_DIR_NAME "${bin_file}")
+                string(LENGTH "${GRG_LIB_DIR_NAME}" GRG_LIB_DIR_NAME_length)
+			    if(NOT ${GRG_LIB_DIR_NAME_length})
+				    install(DIRECTORY "${bin_file}" DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
+                else()
+                    message(STATUS "skip install dir: ${bin_file}")
+			    endif(NOT ${GRG_LIB_DIR_NAME_length})
             else()
                 install(PROGRAMS ${bin_file} DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters)
             endif()

+ 15 - 0
Module/CMakeLists.txt

@@ -6,6 +6,9 @@ macro(define_module _module_name)
 	string(TOUPPER "${MODULE_NAME}" MODULE_PREFIX)
 endmacro(define_module)
 
+# 使用 libRestfulFunc替换框架的Http组件
+set(REPLACE_HTTPCLIENT_WITH_CPPRESTSDK TRUE)
+
 if(RVC_DEBUG_MODE)
     set(RVCCOMM_LIB RVCCommD)
     set(SPBASE_LIB spbased)
@@ -99,6 +102,18 @@ macro(add_module_libraries _module_prefix _module_name _module_version)
         target_compile_definitions(${_module_name} PRIVATE "WITH_BUILD_MODULE_TEST")
 	    target_include_directories(${_module_name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
     endif(BUILD_MOUDLE_TEST)
+
+    if(REPLACE_HTTPCLIENT_WITH_CPPRESTSDK)
+        target_compile_definitions(${_module_name} PRIVATE "WITH_CPPRESTSDK")
+	    target_include_directories(${_module_name} PRIVATE 
+            ${CONAN_INCLUDE_DIRS_JSONCPP}
+            ${RVC_OTHER_DEPENDENIES_DIR}/libRestfulFunc)
+        target_link_directories(${MODULE_NAME} PRIVATE
+        	${CONAN_LIB_DIRS_JSONCPP}
+        )
+        target_link_libraries(${_module_name} RestfulFunc ${CONAN_PKG_LIBS_JSONCPP})
+    endif(REPLACE_HTTPCLIENT_WITH_CPPRESTSDK)
+
     configure_file("${MODULE_BASE_DIR}/include/modVer.h.in" "${CMAKE_CURRENT_BINARY_DIR}/modVer.h")
     target_include_directories(${_module_name} PRIVATE 
         ${CMAKE_CURRENT_BINARY_DIR}

+ 65 - 0
Module/include/CommEntityRestful.hpp

@@ -0,0 +1,65 @@
+#ifndef RVC_MOD_COMM_ENTITY_RESTFUL_HPP_
+#define RVC_MOD_COMM_ENTITY_RESTFUL_HPP_
+
+#include "RestfulFunc.h"
+#include "JsonConvertHelper.hpp"
+#include "microservices/api_comm.h"
+
+namespace SP
+{
+namespace Module
+{
+
+namespace Restful
+{
+
+/*errorCode 对应原有 Http 组件的 m_userCode;message 对应 m_errMsg*/
+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")
+};
+
+//{ "code":"10000", "data" : true, "message" : "请求成功", "request" : "https://rvcgray.paasst.cmbchina.cn/api/gray/way?null", "success" : true }
+struct GrayResponseJson : public MicroServices::API::GrayResponseJson
+{
+    JSONCONVERT2OBJECT_MEMEBER_REGISTER(success, errorCode, message, graySwitch)
+    JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("success", "code", "message", "data")
+};
+
+static bool GetStatusFromDebranchResponse(const std::string& content, CommResponseJson& responseStatus)
+{
+    Json::Value rawRoot;
+    return (!GetJsonRootObject(rawRoot, content)) ? false : Json2Object(responseStatus, rawRoot);
+}
+
+static bool GetGrayInfoFromDebranchResponse(const std::string& content, GrayResponseJson& responseStatus)
+{
+    Json::Value rawRoot;
+    return (!GetJsonRootObject(rawRoot, content)) ? false : Json2Object(responseStatus, rawRoot);
+}
+
+template <typename T>
+static bool ExtractDataFromDebranchResponse(const std::string& content, T& outDataStruct)
+{
+    Json::Value rawRoot;
+    return (!GetJsonRootObject(rawRoot, content)) ? false : Json2Object(outDataStruct, rawRoot["data"]);
+}
+
+template <typename T>
+static bool FulfillRequestJsonBody(HttpClientRequestConfig* pConfig, const T& dataStruct)
+{
+    std::string jsonValue;
+    if (Object2Json(jsonValue, dataStruct)) {
+        pConfig->SetJsonBody(jsonValue);
+        return true;
+    }
+    return false;
+}
+
+} //Restful
+
+} //Module
+} //SP
+
+#endif //RVC_MOD_COMM_ENTITY_RESTFUL_HPP_

+ 12 - 0
Module/include/CommEntityUtil.hpp

@@ -539,6 +539,18 @@ static ErrorCodeEnum GetINETMacAddresses(NetworkAddressesList& macList, NetworkA
 
 }
 
+static std::string GetWWWInfoThroughDig(const std::string& wwwUrl)
+{
+    std::string succStr, errStr;
+    std::string runStr("dig ");
+    runStr += wwwUrl;
+    if (SP::Module::Util::ShellExecute(runStr, succStr, errStr)) {
+        return succStr;
+    } else {
+        return std::string("ShellExecute(") + wwwUrl +  ") failed";
+    }
+}
+
 }//Net
 
 } // mod

+ 11 - 11
Module/include/EventCode.h

@@ -205,6 +205,7 @@ static const char* Device_Type_Table[] = {
 #define ERROR_ACCESSAUTH_GETSM3HASH                  0x5028002f  //获取SM3 Hash值错误
 #define ERROR_ACCESSAUTH_CREATESM2KEYPAIR            0x50280030  //创建SM2密钥对失败
 #define ERROR_ACCESSAUTH_CONNECT_ACS				 0x50280031  //连接ACS服务失败
+#define ERROR_ACCESSAUTH_ACS_DIGINFO				 0x50280032  //连接ACS服务失败 -- 获取域名解析信息
 
 #define ERR_ACCESSAUTH_GET_SYSTEM_STATIC_INFO        0x50210001  //获取系统静态信息错误
 #define ERR_ACCESSAUTH_SETTIMEZONE                   0x50210002  //设置时区错误
@@ -325,16 +326,10 @@ ERR_ACCESSAUTH_TERMINAL_PENALTY_OUT, \
 ERR_ACCESSAUTH_DEVICES_MODEL_NO_MATCH, \
 ERR_ACCESSAUTH_INVALID_SERVER_CODE, \
 ERR_ACCESSAUTH_GET_DEVICE_PRIVATE_KEY, \
-ERR_ACCESSAUTH_DECRYPT_R1, \
-ERR_ACCESSAUTH_DECRYPT_R3, \
-ERR_ACCESSAUTH_DECRYPT_DEVICE_PUB_KEY, \
-ERR_ACCESSAUTH_INCRYPT_R2, \
-ERR_ACCESSAUTH_UNKOWN}
+ERR_ACCESSAUTH_DECRYPT_DEVICE_PUB_KEY}
 
 //ACCESSAUTH_ERRARR, 重试,不重启
-#define ERRARR_ACCESSAUTH_RETRY_NORESTART	{ERR_ACCESSAUTH_CONNECT_SERVER, \
-ERR_ACCESSAUTH_TIMEOUT, \
-ERR_ACCESSAUTH_LOCK_SEND_PKG, \
+#define ERRARR_ACCESSAUTH_RETRY_NORESTART	{ERR_ACCESSAUTH_LOCK_SEND_PKG, \
 ERR_ACCESSAUTH_UPDATE_EXTEND, \
 ERR_ACCESSAUTH_UPDATE_STAGE, \
 ERR_ACCESSAUTH_UPDATE_DEVICES, \
@@ -345,9 +340,10 @@ ERR_ACCESSAUTH_GET_DEVICES, \
 ERR_ACCESSAUTH_UPDATE_KMC_DES_TMK, \
 ERR_ACCESSAUTH_UPDATE_KMC_SM_TMK, \
 ERR_ACCESSAUTH_EXCEPTION, \
-ERR_ACCESSAUTH_READ_PRIVATE_KEY}
+ERR_ACCESSAUTH_READ_PRIVATE_KEY, \
+ERR_ACCESSAUTH_UNKOWN}
 
-//ACCESSAUTH_ERRARR, 重试,重启
+//ACCESSAUTH_ERRARR, 重试,重启,准入实体自己用,Chromium 实体不用
 #define ACCESSAUTH_ERR_RETRY_RESTART	{ERR_ACCESSAUTH_GET_SYSTEM_STATIC_INFO, \
 ERR_ACCESSAUTH_SETTIMEZONE, \
 ERR_ACCESSAUTH_HEX_TO_BYTE, \
@@ -387,7 +383,10 @@ ERR_ACCESSAUTH_GET_TERMINAL_PUBKEY, \
 ERR_ACCESSAUTH_GET_SPSHELL_HASH, \
 ERR_ACCESSAUTH_TOKEN_HASH, \
 ERR_ACCESSAUTH_GET_HASH, \
-ERR_ACCESSAUTH_SHA1_HASH}
+ERR_ACCESSAUTH_SHA1_HASH,\
+ERR_ACCESSAUTH_TIMEOUT,\
+ERR_ACCESSAUTH_CONNECT_SERVER,\
+ERROR_ACCESSAUTH_CONNECT_ACS}
 
 
 /*----End--AccessAuth------------------------------------*/
@@ -871,6 +870,7 @@ ERR_ACCESSAUTH_SHA1_HASH}
 #define LOG_ERR_SET_DNS_FAILED		0x50A00032
 #define LOG_WARN_DELETE_DNS_CUST	0x50A00033
 #define LOG_ERR_DELETE_DNS_FAILED	0x50A00034
+#define LOG_INFO_MONITOR_SETTINGS	0x50A00035
 
 #define LOG_WARN_VER_DELETE	0x50A00040
 

+ 36 - 5
Module/include/microservices/api_comm.h

@@ -33,19 +33,50 @@ struct CommResponse
     std::string errorMsg;
     std::string message;
 
-    bool IsReqBusinessSucc() const
+    virtual bool IsOperatedOK() const
     {
-        return (returnCode == "SUC0000");
+        return (returnCode == "SUC0000" || errorCode == "0"/*ACS_SUCCESS*/);
     }
 
-    bool IsPadded() const
+    virtual bool IsNotEmpty() const
     {
         return (!errorCode.empty() || !returnCode.empty() || !errorMsg.empty() || !message.empty());
     }
 
-    std::string WhatError() const
+    virtual std::string WhatError() const
     {
-        return (std::string("[") + returnCode + "] " + errorMsg);
+        std::string result("");
+
+        if (!returnCode.empty()) {
+            result += "[";
+            result += returnCode;
+            result += "]";
+        }
+        if (!errorCode.empty()) {
+            result += "[";
+            result += errorCode;
+            result += "]";
+        }
+        if (!message.empty()) {
+            result += " ";
+            result += message;
+        }
+        if (!errorMsg.empty()) {
+            result += " ";
+            result += errorMsg;
+        }
+
+        return result;
+    }
+};
+
+struct GrayResponseJson : public CommResponse
+{
+    bool graySwitch;
+
+    virtual bool IsOperatedOK() const
+    {
+        return (errorCode == "10000");
     }
 };
 

+ 76 - 65
Module/mod_CenterSetting/CenterSettingConn.cpp

@@ -14,6 +14,13 @@ using std::regex;
 #pragma comment(lib, "crypt32.lib")
 #endif //RVC_OS_WIN
 
+#ifdef WITH_CPPRESTSDK
+#include "CommEntityRestful.hpp"
+#else
+#define SAFE_DELETE_HTTPCLIENT(obj)	\
+	do{if(obj != NULL) { obj->Destory(); obj = NULL; }}while(false)
+#endif
+
 bool CenterSettingResponse::Parse(string strData)
 {
 		bSuccess = false;
@@ -37,7 +44,7 @@ bool CenterSettingResponse::Parse(string strData)
 			return false;
 		}
 
-        if (!reponseStatus.IsReqBusinessSucc()) {
+        if (!reponseStatus.IsOperatedOK()) {
 			errInfo = reponseStatus.WhatError();
             return false;
         }
@@ -64,22 +71,6 @@ CenterSettingsMicroServiceHelper::CenterSettingsMicroServiceHelper(CEntityBase*
 	InitCenterSettingsInfoFromConfig();
 }
 
-
-bool CenterSettingsMicroServiceHelper::InTerminalList()
-{
-    auto arrTerminalList = m_strTerminalList.Split('|');
-    Dbg("m_strTerminalList:%s", (const char*)m_strTerminalList);
-
-    for (int i = 0; i < arrTerminalList.GetCount(); ++i) {
-        if (mTerminalInfo.strTerminalID == arrTerminalList[i]) {
-            Dbg("In terminalList.");
-            return true;
-        }
-    }
-    Dbg("Not in terminalList.");
-    return false;
-}
-
 void CenterSettingsMicroServiceHelper::InitCenterSettingsInfoFromConfig()
 {
     LOG_FUNCTION();
@@ -93,61 +84,79 @@ void CenterSettingsMicroServiceHelper::InitCenterSettingsInfoFromConfig()
     centerConfig->ReadConfigValue("CenterSetting", "TerminalList", m_strTerminalList);
 }
 
-bool CenterSettingsMicroServiceHelper::IsModeActive()
-{
-    Dbg("m_strMode:%s", (const char*)m_strMode);
-    return (!m_strMode.IsNullOrEmpty() && m_strMode == "1");
-}
-
-ErrorCodeEnum CenterSettingsMicroServiceHelper::GrayLaunch(BOOL& grayLaunch)
+ErrorCodeEnum CenterSettingsMicroServiceHelper::GetCenterSetting(CSimpleStringA& strErrMsg)
 {
     LOG_FUNCTION();
 
-    grayLaunch = m_bGrayLaunch = false;
-
-    if (!m_strGrayLaunchUrl.IsNullOrEmpty()) {
-
-        IHttpFunc* pHttpFunc = create_http(HTTPLogCallback);
-        GrayLaunchReq req;
-		req.m_url = m_strGrayLaunchUrl.GetData();
-        Dbg("request url: %s", req.m_url.c_str());
-		req.m_terminal_no = mTerminalInfo.strTerminalID;
-		req.m_branch_no = m_strCallRouteBranchNo;
-		req.m_modular = "centersetting";
-
-        GrayLaunchResponse response;
-        const bool ret = pHttpFunc->Get(req, response);
-        pHttpFunc->Destory();
-        if (ret) {
-            grayLaunch = response.m_result;
-            m_bGrayLaunch = grayLaunch;
-            return Error_Succeed;
+#ifdef WITH_CPPRESTSDK
+    struct GetCenterSettingsReqJson
+    {
+        std::string terminalNo;
+		std::string lastUpdateTimie;
+        JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminalNo, lastUpdateTimie)
+		JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("terminal_no", "last_update_time")
+    } getCenterSettingsReqJson;
+
+        HttpClientResponseResult result;
+        HttpClientRequestConfig config(HttpRequestMethod::POST, m_strCenterSettingUrl.GetData());
+
+        getCenterSettingsReqJson.lastUpdateTimie = m_strLastTime;
+		getCenterSettingsReqJson.terminalNo = mTerminalInfo.strTerminalID;
+        SP::Module::Restful::FulfillRequestJsonBody(&config, getCenterSettingsReqJson);
+
+        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()) {
+				strErrMsg = responseStatus.WhatError().c_str();
+			} else {
+				CenterSettingFileJson getCenterSettingsAns;
+				if (!SP::Module::Restful::ExtractDataFromDebranchResponse(result.content, getCenterSettingsAns)) {
+					strErrMsg = "parse json data node failed: ";
+				} else {
+					getCenterSettingsAns.biz.mapSiteName = "LAN";
+					getCenterSettingsAns.dmz.mapSiteName = "DMZ";
+
+                    if ((mTerminalInfo.strSite.Compare("cmb.LIB", true) == 0 && getCenterSettingsAns.biz.lastUpdateTime == getCenterSettingsReqJson.lastUpdateTimie)
+                        || (mTerminalInfo.strSite.Compare("cmb.FLB", true) == 0 && getCenterSettingsAns.dmz.lastUpdateTime == getCenterSettingsReqJson.lastUpdateTimie)) {//行内
+                        Dbg("Centersetting not changed.");
+                        return Error_Succeed;
+                    }
+
+                    CenterSettingConfigJson& cur = getCenterSettingsAns.dmz;
+                    if (mTerminalInfo.strSite.Compare("cmb.LIB", true) == 0) {
+                        cur = getCenterSettingsAns.biz;
+                    }
+                    Dbg("local last update time(%s) vs server last update time(%s)", cur.lastUpdateTime.c_str(), getCenterSettingsReqJson.lastUpdateTimie.c_str());
+                    SyncConfigAndRenameCenterFile(cur);
+                    LogEvent(Severity_Middle, EVENT_MOD_CENTERSETTING_UPDATE,
+                             CSimpleString::Format("Update CenterSetting.%s.ini.", cur.mapSiteName.c_str()));
+
+                    return Error_Succeed;
+				}
+			}
         } else {
-            return Error_Unexpect;
+			strErrMsg = result.WhatError().c_str();
         }
-    }
-
-    return Error_InvalidState;
-}
-
+#else
 
-ErrorCodeEnum CenterSettingsMicroServiceHelper::GetCenterSetting(CSimpleStringA& strErrMsg)
-{
-    LOG_FUNCTION();
     CenterSettingReq req;
-	req.m_url = m_strCenterSettingUrl;
-	req.m_last_update_time = m_strLastTime;
-	req.m_terminal_no = mTerminalInfo.strTerminalID;
+    req.m_url = m_strCenterSettingUrl;
+    req.m_last_update_time = m_strLastTime;
+    req.m_terminal_no = mTerminalInfo.strTerminalID;
 
     Dbg("request url: %s", req.m_url.c_str());
 
     CenterSettingResponse response;
-	IHttpFunc* pHttpFunc = create_http(HTTPLogCallback);
+    IHttpFunc* pHttpFunc = create_http(HTTPLogCallback);
     bool ret = pHttpFunc->Post(req, response);
-	pHttpFunc->Destory();
+    pHttpFunc->Destory();
 
-	if (ret) {
-		if (response.bSuccess) {
+    if (ret) {
+        if (response.bSuccess) {
             if ((mTerminalInfo.strSite.Compare("cmb.LIB", true) == 0 && response.centerSyncInfo.biz.lastUpdateTime == req.m_last_update_time)
                 || (mTerminalInfo.strSite.Compare("cmb.FLB", true) == 0 && response.centerSyncInfo.dmz.lastUpdateTime == req.m_last_update_time)) {//行内
                 Dbg("Centersetting not changed.");
@@ -164,12 +173,14 @@ ErrorCodeEnum CenterSettingsMicroServiceHelper::GetCenterSetting(CSimpleStringA&
                      CSimpleString::Format("Update CenterSetting.%s.ini.", cur.mapSiteName.c_str()));
 
             return Error_Succeed;
-		} else {
-			strErrMsg = response.errInfo.c_str();
-		}
-	} else {
-		strErrMsg = CSimpleStringA::Format("post [%s] failed!", req.m_url.c_str());
-	}
+        } else {
+            strErrMsg = response.errInfo.c_str();
+        }
+    } else {
+        strErrMsg = CSimpleStringA::Format("post [%s] failed!", req.m_url.c_str());
+    }
+
+#endif //WITH_CPPRESTSDK
 
     return Error_Unexpect;
 }

+ 0 - 4
Module/mod_CenterSetting/CenterSettingConn.h

@@ -121,9 +121,6 @@ struct CenterSettingsMicroServiceHelper
 {
 	CenterSettingsMicroServiceHelper(CEntityBase* pEntity);
 
-    bool InTerminalList();
-	bool IsModeActive();
-
 	bool IsConfigureValid() {
 		return (!m_strCenterSettingUrl.IsNullOrEmpty());
 	}
@@ -132,7 +129,6 @@ struct CenterSettingsMicroServiceHelper
 		InitCenterSettingsInfoFromConfig();
 	}
 
-	ErrorCodeEnum GrayLaunch(BOOL& grayLaunch);
 	ErrorCodeEnum GetCenterSetting(CSimpleStringA& strErrMsg);
 
 	void SetServicesUrl(const CSimpleStringA& value) { m_strCenterSettingUrl = value; }

+ 1 - 5
Module/mod_Initializer/InitializerFSM.h

@@ -214,11 +214,7 @@ typedef struct CInitlizerMKReq : CHTTPReq {
 		rvcJson.AddItemToObject("MKD_REQ4", tokenJson[3]);
 		rvcJson.AddItemToObject("MKD_REQ5", tokenJson[4]);
 		rvcJson.AddItemToObject("MKD_SMR2", tokenJson[5]);
-		//for (int i = 0; i < 6; i++) {
-		//	string strTmp = int2str(i);
-		//	strTmp = "TOKEN_R" + strTmp;
-		//	rvcJson.AddItemToObject(strTmp.c_str(), tokenJson[i]);
-		//}
+
 		char* tmp = rvcJson.GetJsonStr();
 		string ret(tmp);
 		delete tmp;

+ 288 - 255
Module/mod_Initializer/mod_Initializer.cpp

@@ -28,8 +28,12 @@ using namespace MaintainWatcher;
 #define BUF_SIZE 256
 #define KEY_SIZE 16
 
+#ifdef WITH_CPPRESTSDK
+#include "CommEntityRestful.hpp"
+#else
 #define SAFE_DELETE_HTTPCLIENT(obj)	\
 	do{if(obj != NULL) { obj->Destory(); obj = NULL; }}while(false)
+#endif
 
 
 void CInitializerSession::Handle_Initialize(SpOnewayCallContext<InitializerService_Initialize_Info>::Pointer ctx)
@@ -69,55 +73,7 @@ void CInitializerSession::Handle_InitializeForBlueTooth(SpReqAnsContext<Initiali
 	ctx->Ans.Errcode = m_pEntity->m_eErrNum;
 	ctx->Ans.ErrMsg = m_pEntity->m_strLastErrMsg;
 }
-struct GateReqTask :public ITaskSp {
-	CInitializerFSM* m_fsm;
-	CInitializerEntity* m_entity;
-	GateReqTask(CInitializerFSM* fsm, CInitializerEntity* entity) :m_fsm(fsm), m_entity(entity) {}
-	void Process() {
-		CSmartPointer<IEntityFunction> spFunction = m_entity->GetFunction();
-		CSmartPointer<IConfigInfo> spConfig;
-		ErrorCodeEnum eErr = spFunction->OpenConfig(Config_CenterSetting, spConfig);
-		CSimpleStringA branchNo = "",grayUrl = "";
-		if (Error_Succeed == eErr)
-		{
-			spConfig->ReadConfigValue("Common", "GrayLaunchUrl", grayUrl);
-			spConfig->ReadConfigValue("Initializer", "SubBankNo", branchNo);
-		}
-		if (grayUrl.IsNullOrEmpty())
-		{
-			LogWarn(Severity_Middle, Error_Unexpect, Initializer_UserErrorCode_GateUrl_NULL, "灰度Url为空");
-			return;
-		}
-		CSystemStaticInfo si;
-		m_entity->GetFunction()->GetSystemStaticInfo(si);
 
-		IHttpFunc* client;
-		client = create_http(m_fsm->HttpsLogCallBack);
-
-		CInitlizerGateReq gateReq(si.strTerminalID.GetData(), branchNo.GetData(), m_entity->GetEntityName());
-		CInitlizerGateRet gateRet;
-		gateReq.m_url = grayUrl;
-		//oiltest
-		gateReq.m_printDbg = true;
-
-		bool ret = client->Post(gateReq, gateRet);
-		if (!ret)
-		{
-			//doWarnMsg(ERROR_ACCESSAUTH_CONNECT_ACS, GetOutPutStr("%s%d%s", "访问灰度控制失败"
-			//	, gateRet.m_sysCode, gateRet.m_userCode.c_str()), true);
-			gateRet.bACS = false;
-		}
-
-		SAFE_DELETE_HTTPCLIENT(client);
-
-		Dbg("m_bACS=%d", gateRet.bACS);
-		m_entity->m_bACS = gateRet.bACS;
-		if (m_entity->m_bACS)
-			LogWarn(Severity_Middle, Error_Unexpect, Initializer_UserErrorCode_Init_ACS, "灰度提示走总行");
-		else
-			LogWarn(Severity_Middle, Error_Unexpect, Initializer_UserErrorCode_Init_Branch, "灰度提示走分行");
-	}
-};
 void CInitializerEntity::OnStarted()
 { 
 	LOG_FUNCTION();
@@ -135,8 +91,9 @@ void CInitializerEntity::OnStarted()
 	m_bHasCkCode = false;
 
 	m_FSM.Init(this);
-	CSmartPointer<GateReqTask> gateReqTask = new GateReqTask(&this->m_FSM,this);
-	GetFunction()->PostThreadPoolTask(gateReqTask.GetRawPointer());
+	m_bACS = true;
+	///**TODO(Gifur@3/24/2022): 需要同步改初始化页面,安装时重启初始化实体的事后操作也可以裁剪掉 */
+	LogWarn(Severity_Middle, Error_Unexpect, Initializer_UserErrorCode_Init_ACS, "强制走总行");
 }
 
 void CInitializerEntity::OnPaused() 
@@ -1980,32 +1937,83 @@ struct InitializerLoginTask : ITaskSp {
 				return;
 			}
 		}
-		IHttpFunc* client;
-		Dbg("create_http");
-		client = create_http(m_fsm->HttpsLogCallBack);
-		CInitlizerLoginReq initLoginReq;
-		CInitlizerLoginRet initLoginRet;
-		CSystemStaticInfo si;
-		m_entity->GetFunction()->GetSystemStaticInfo(si);
-		initLoginReq.terminalNo = si.strTerminalID;
-		
-		initLoginReq.user = m_entity->m_strUserID;
-		initLoginReq.password = m_entity->m_strPassword;
-		initLoginReq.m_url = m_entity->GetInitUrl();
-		initLoginReq.m_url += "/api/user/login";
-		bool ret = client->Post(initLoginReq, initLoginRet);
-
-		Dbg("code=%d", initLoginRet.m_sysCode);
-		if (ret)
-		{
-			Dbg("login Connect Success.");
-			m_entity->EndLoginACS(Error_Succeed, "");
-		}
-		else {
-			Dbg("GetTokenTask Connect Failed:%s", initLoginRet.m_errMsg.c_str());
-			m_entity->EndLoginACS(Error_Unexpect, initLoginRet.m_errMsg.c_str());
-		}
-		SAFE_DELETE_HTTPCLIENT(client);
+
+#ifdef WITH_CPPRESTSDK
+        struct InstanceReqJson
+        {
+            string terminalNo;
+            string branchNo;
+            string user;
+            string password;
+
+            JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminalNo, branchNo, user, password)
+        } instanceReq;
+
+        struct InstanceAnsJson
+        {
+            int lockState;
+            JSONCONVERT2OBJECT_MEMEBER_REGISTER(lockState)
+        } instanceAns;
+
+        CSystemStaticInfo si;
+        m_entity->GetFunction()->GetSystemStaticInfo(si);
+		instanceReq.terminalNo = si.strTerminalID;
+		instanceReq.user = m_entity->m_strUserID;
+		instanceReq.password = m_entity->m_strPassword;
+		instanceReq.branchNo = "";
+
+        HttpClientResponseResult result;
+        HttpClientRequestConfig config(HttpRequestMethod::POST, m_entity->GetInitUrl().GetData());
+        config.SetChildUri("/api/user/login");
+        SP::Module::Restful::FulfillRequestJsonBody(&config, instanceReq);
+
+        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()) {
+				Dbg(responseStatus.errorMsg.c_str());
+				m_entity->EndLoginACS(Error_Unexpect, responseStatus.errorMsg.c_str());
+			} else {
+                Dbg("login Connect Success.");
+                m_entity->EndLoginACS(Error_Succeed, "");
+			}
+        } else {
+			m_entity->EndLoginACS(Error_Unexpect, result.WhatError().c_str());
+        }
+
+#else
+
+        IHttpFunc* client;
+        Dbg("create_http");
+        client = create_http(m_fsm->HttpsLogCallBack);
+        CInitlizerLoginReq initLoginReq;
+        CInitlizerLoginRet initLoginRet;
+        CSystemStaticInfo si;
+        m_entity->GetFunction()->GetSystemStaticInfo(si);
+        initLoginReq.terminalNo = si.strTerminalID;
+
+        initLoginReq.user = m_entity->m_strUserID;
+        initLoginReq.password = m_entity->m_strPassword;
+        initLoginReq.m_url = m_entity->GetInitUrl();
+        initLoginReq.m_url += "/api/user/login";
+        bool ret = client->Post(initLoginReq, initLoginRet);
+
+        Dbg("code=%d", initLoginRet.m_sysCode);
+        if (ret) {
+            Dbg("login Connect Success.");
+            m_entity->EndLoginACS(Error_Succeed, "");
+        } else {
+            Dbg("GetTokenTask Connect Failed:%s", initLoginRet.m_errMsg.c_str());
+            m_entity->EndLoginACS(Error_Unexpect, initLoginRet.m_errMsg.c_str());
+        }
+        SAFE_DELETE_HTTPCLIENT(client);
+
+#endif //WITH_CPPRESTSDK
+
+
 	}
 };
 struct InitializerInitMKTask : ITaskSp {
@@ -2015,87 +2023,215 @@ struct InitializerInitMKTask : ITaskSp {
 
 	void Process()
 	{
-		//if (m_fsm->GetmAccessAuthHost().IsNullOrEmpty())
-		//{
-		//	LogWarn(Severity_Middle, Error_Unexpect, AccessAuthorization_UserErrorCode_AccessAuth_NULL, "准入Url为空");
-		//	return;
-		//}
 		CSystemStaticInfo si;
 		m_fsm->GetEntityBase()->GetFunction()->GetSystemStaticInfo(si);
-		IHttpFunc* client;
-		client = create_http(m_fsm->HttpsLogCallBack);
 		CInitlizerMKReq initMKReq(1);//oiltest dev module count
-		initMKReq.m_bTransCode = false;
-		CInitlizerMKRet initMKRet;
 		m_entity->SendInitMKReqACS(initMKReq);
-		initMKReq.m_url = m_entity->GetInitUrl();
-		initMKReq.m_url += "/api/initmk";
-		bool ret = client->Post(initMKReq, initMKRet);
 
-		Dbg("code=%d", initMKRet.m_sysCode);
-		if (ret)
-		{
+#ifdef WITH_CPPRESTSDK
+
+        struct MKD_NEW1JSON
+        {
+            string enrolAddr;
+            string enrolGPS;
+            string installVersion;
+            string ip;
+            string machineModel;
+            string machineType;
+            string padDeviceID;
+            string site;
+            string terminalNo;
+
+            JSONCONVERT2OBJECT_MEMEBER_REGISTER(enrolAddr, enrolGPS, installVersion, ip, machineModel, machineType, padDeviceID, site, terminalNo)
+
+        };
+
+        struct MKD_REQ2JSON
+        {
+            string branchNo;
+            string kmcData;
+            string subBankNo;
+
+			JSONCONVERT2OBJECT_MEMEBER_REGISTER(branchNo, kmcData, subBankNo)
+
+        };
+
+        struct MKD_REQ3JSON
+        {
+            string factory;
+            string modal;
+            string type;
+            string version;
+
+			JSONCONVERT2OBJECT_MEMEBER_REGISTER(factory, modal, type, version)
+
+        };
+
+        struct MKD_REQ4JSON
+        {
+            string fingerPrint;
+            string fingerPrintSM;
+            string pinPadID;
+            string publicKey;
+            string reserverd;
+
+			JSONCONVERT2OBJECT_MEMEBER_REGISTER(fingerPrint, fingerPrintSM, pinPadID, publicKey, reserverd)
+
+        };
+
+        struct MKD_REQ5JSON
+        {
+            int isFirstSM;
+            int isSM;
+
+			JSONCONVERT2OBJECT_MEMEBER_REGISTER(isFirstSM, isSM)
+        };
+
+        struct MKD_SMR2JSON
+        {
+            string branchNo;
+            string kmcData;
+            string subBankNo;
+
+            JSONCONVERT2OBJECT_MEMEBER_REGISTER(branchNo, kmcData, subBankNo)
+
+        };
+
+        struct InstanceReqJson
+        {
+			MKD_NEW1JSON MKD_NEW1;
+			MKD_REQ2JSON MKD_REQ2;
+			std::vector<MKD_REQ3JSON> MKD_REQ3;
+			MKD_REQ4JSON MKD_REQ4;
+			MKD_REQ5JSON MKD_REQ5;
+			MKD_SMR2JSON MKD_SMR2;
+
+            JSONCONVERT2OBJECT_MEMEBER_REGISTER(MKD_NEW1, MKD_REQ2, MKD_REQ3, MKD_REQ4, MKD_REQ5, MKD_SMR2)
+
+        } instanceReq;
+
+		instanceReq.MKD_NEW1.enrolAddr = initMKReq.MKD_NEW1.enrolAddr;
+        instanceReq.MKD_NEW1.enrolGPS = initMKReq.MKD_NEW1.enrolGPS;
+        instanceReq.MKD_NEW1.installVersion = initMKReq.MKD_NEW1.installVersion;
+        instanceReq.MKD_NEW1.ip = initMKReq.MKD_NEW1.ip;
+        instanceReq.MKD_NEW1.machineModel = initMKReq.MKD_NEW1.machineModel;
+        instanceReq.MKD_NEW1.machineType = initMKReq.MKD_NEW1.machineType;
+        instanceReq.MKD_NEW1.padDeviceID = initMKReq.MKD_NEW1.padDeviceID;
+        instanceReq.MKD_NEW1.site = initMKReq.MKD_NEW1.site;
+        instanceReq.MKD_NEW1.terminalNo = initMKReq.MKD_NEW1.terminalNo;
+
+        instanceReq.MKD_REQ2.branchNo = initMKReq.MKD_REQ2.branchNo;
+        instanceReq.MKD_REQ2.kmcData = initMKReq.MKD_REQ2.kmcData;
+        instanceReq.MKD_REQ2.subBankNo = initMKReq.MKD_REQ2.subBankNo;
+
+		for (int i = 0; i < initMKReq.iReq3Count; ++i) {
+			MKD_REQ3JSON item;
+			item.type = initMKReq.MKD_REQ3[i]->type;
+            item.modal = initMKReq.MKD_REQ3[i]->modal;
+            item.factory = initMKReq.MKD_REQ3[i]->factory;
+            item.version = initMKReq.MKD_REQ3[i]->version;
+
+			instanceReq.MKD_REQ3.push_back(item);
+		}
+
+        instanceReq.MKD_REQ4.fingerPrint = initMKReq.MKD_REQ4.fingerPrint;
+        instanceReq.MKD_REQ4.fingerPrintSM = initMKReq.MKD_REQ4.fingerPrintSM;
+        instanceReq.MKD_REQ4.pinPadID = initMKReq.MKD_REQ4.pinPadID;
+        instanceReq.MKD_REQ4.publicKey = initMKReq.MKD_REQ4.publicKey;
+        instanceReq.MKD_REQ4.reserverd = initMKReq.MKD_REQ4.reserverd;
+
+		instanceReq.MKD_REQ5.isFirstSM = initMKReq.MKD_REQ5.isFirstSM;
+        instanceReq.MKD_REQ5.isSM = initMKReq.MKD_REQ5.isSM;
+
+        instanceReq.MKD_SMR2.branchNo = initMKReq.MKD_SMR2.branchNo;
+        instanceReq.MKD_SMR2.subBankNo = initMKReq.MKD_SMR2.subBankNo;
+        instanceReq.MKD_SMR2.kmcData = initMKReq.MKD_SMR2.kmcData;
+
+        struct InstanceAnsJson
+        {
+            string TMK;
+            string TPK;
+            string EDK;
+            string index;
+            string reserved;
+            JSONCONVERT2OBJECT_MEMEBER_REGISTER(TMK, TPK, EDK, index)
+			JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("tmk", "tpk", "edk", "index")
+
+
+        } instanceAns;
+
+        HttpClientResponseResult result;
+        HttpClientRequestConfig config(HttpRequestMethod::POST, m_entity->GetInitUrl().GetData());
+        config.SetChildUri("/api/initmk");
+        SP::Module::Restful::FulfillRequestJsonBody(&config, instanceReq);
+
+        RestfulClient client = RestfulClient::getInstance();
+        config.PreDo();
+        client.Do(&config, &result);
+        if (result.ResponseOK()) {
+
 			Dbg("InitializerInitMKTask Connect Success.");
-			if (initMKRet.m_userCode.compare(ACS_SUCCESS)) {
-                Dbg("update wk failed: %s", initMKRet.m_errMsg.c_str());
-				std::string errStr("#ACS#");
-				errStr += initMKRet.m_errMsg;
-				m_entity->EndInitMK(ERR_INITIALIZER_INIT_EXCEPTION, errStr.c_str());
-				SAFE_DELETE_HTTPCLIENT(client);
-				return;
-			}
-			if (m_entity->HasPinPad())
-			{
-				if (m_entity->LoadKeysToPinPadACS(initMKRet.data.TMK, initMKRet.data.TPK, initMKRet.data.EDK, initMKRet.data.index) == Error_Succeed)
+            SP::Module::Restful::CommResponseJson responseStatus;
+            SP::Module::Restful::GetStatusFromDebranchResponse(result.content, responseStatus);
+            if (!responseStatus.IsOperatedOK()) {
+				Dbg("update wk failed: %s", responseStatus.errorMsg.c_str());
+				m_entity->EndInitMK(ERR_INITIALIZER_INIT_EXCEPTION, responseStatus.errorMsg.c_str());
+			} else {
+                if (m_entity->HasPinPad()) {
+                    const bool testResult = SP::Module::Restful::ExtractDataFromDebranchResponse(result.content, instanceAns);
+					Dbg("ExtractDataFromDebranchResponse returned: %d", testResult);
+					if (m_entity->LoadKeysToPinPadACS(instanceAns.TMK, instanceAns.TPK, instanceAns.EDK, instanceAns.index) == Error_Succeed) {
+						m_entity->EndInitMK(Error_Succeed, "");
+					}
+					else {
+                        m_entity->EndInitMK(ERR_INITIALIZER_INIT_EXCEPTION, "加载秘钥到密码键盘失败");//,待完善细化错误码oiltest
+					}
+				} else {
 					m_entity->EndInitMK(Error_Succeed, "");
-				else
-					m_entity->EndInitMK(ERR_INITIALIZER_INIT_EXCEPTION, "加载秘钥到密码键盘失败");//,待完善细化错误码oiltest
-			}else
-				m_entity->EndInitMK(Error_Succeed, "");
-			//int len = 0;
-			//char* tmp = MyBase64::Hex2Str(updateWKRet.data.TMK.c_str(), len);
-			//int textLen = 2 * len;
-			//BYTE* text = new BYTE[textLen];
-			//memset(text, 0, textLen);
-			//if (!m_fsm->DecryptWithSessionKey((BYTE*)tmp, len, text, textLen)) {
-			//	delete[] tmp;
-			//	delete[] text;
-			//	goto UpdateWKRetError;
-			//}
-			//updateWKRet.data.TMK.assign((char*)text);
-			//delete[] text;
-			//delete tmp;
-
-			//Dbg("tmk=%s %d", updateWKRet.data.TMK.c_str(), updateWKRet.data.TMK.size());
-			//Dbg("tpk=%s %d", updateWKRet.data.TPK.c_str(), updateWKRet.data.TPK.size());
-			//Dbg("edk=%s %d", updateWKRet.data.EDK.c_str(), updateWKRet.data.EDK.size());
-			//Dbg("index=%s %d", updateWKRet.data.index.c_str(), updateWKRet.data.index.size());
-
-			//DWORD rc = m_entity->LoadKeysToPinPadNew(updateWKRet.data.TMK, updateWKRet.data.TPK,
-			//	updateWKRet.data.EDK, updateWKRet.data.index);
-			//if (rc == Error_Succeed) {
-			//	Dbg("UpdateWKTask LoadKeysToPinPadNew Success");
-			//	FSMEvent* pEvent = new FSMEvent(CAccessAuthFSM::Event_UpdateWKSucc);
-			//	m_fsm->PostEventFIFO(pEvent);
-			//	if (client) client->Destory();
-			//	return;
-			//}
-			//else {
-			//	Dbg("UpdateWKTask LoadKeysToPinPadNew error = %08X", rc);
-
-			//}
-		}
-		else {
-			//m_fsm->doWarnMsg(ERROR_ACCESSAUTH_CONNECT_ACS,
-			//	GetOutPutStr("%s%d", "连接总行ACS准入服务失败(StageReport).", updateWKRet.m_sysCode).c_str(), true);
-			Dbg("UpdateWKTask Connect Failed.");
-		}
-		//UpdateWKRetError:
-		//	FSMEvent* pEvent = new FSMEvent(CAccessAuthFSM::Event_UpdateWKFail);
-		//	m_fsm->PostEventFIFO(pEvent);
-		SAFE_DELETE_HTTPCLIENT(client);
+				}
+			}
+        } else {
+            Dbg("post wk failed: %s", result.WhatError().c_str());
+            m_entity->EndInitMK(ERR_INITIALIZER_INIT_EXCEPTION, result.WhatError().c_str());
+        }
+
+#else
+
+        IHttpFunc* client;
+        client = create_http(m_fsm->HttpsLogCallBack);
+        initMKReq.m_bTransCode = false;
+        CInitlizerMKRet initMKRet;
+        initMKReq.m_url = m_entity->GetInitUrl();
+        initMKReq.m_url += "/api/initmk";
+        bool ret = client->Post(initMKReq, initMKRet);
+        Dbg("code=%d", initMKRet.m_sysCode);
+        if (ret) {
+            Dbg("InitializerInitMKTask Connect Success.");
+            if (initMKRet.m_userCode.compare(ACS_SUCCESS)) {
+                Dbg("update wk failed: %s", initMKRet.m_errMsg.c_str());
+                std::string errStr("#ACS#");
+                errStr += initMKRet.m_errMsg;
+                m_entity->EndInitMK(ERR_INITIALIZER_INIT_EXCEPTION, errStr.c_str());
+                SAFE_DELETE_HTTPCLIENT(client);
+                return;
+            }
+            if (m_entity->HasPinPad()) {
+                if (m_entity->LoadKeysToPinPadACS(initMKRet.data.TMK, initMKRet.data.TPK, initMKRet.data.EDK, initMKRet.data.index) == Error_Succeed)
+                    m_entity->EndInitMK(Error_Succeed, "");
+                else
+                    m_entity->EndInitMK(ERR_INITIALIZER_INIT_EXCEPTION, "加载秘钥到密码键盘失败");//,待完善细化错误码oiltest
+            } else
+                m_entity->EndInitMK(Error_Succeed, "");
+        } else {
+            Dbg("UpdateWKTask Connect Failed.");
+        }
+        SAFE_DELETE_HTTPCLIENT(client);
+
+#endif //WITH_CPPRESTSDK
+		
 	}
 };
+
 void CInitializerEntity::BeginLoginACS(const char* pszAuthServer)
 {
 	LOG_FUNCTION();
@@ -2223,7 +2359,6 @@ bool CInitializerEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 			LogWarn(Severity_Middle, (ErrorCodeEnum)rc, ERR_INITIALIZER_READ_WRITE_FILE,
 				GetOutPutStr("%s%08X%s%s", "OpenConfig", rc, "File", "Config_CenterSetting").c_str());
 			rc = ERR_INITIALIZER_READ_WRITE_FILE;
-			//pEntity->m_strLastErrMsg = CSimpleStringA::Format("打开集中配置失败,请先下载集中配置!");
 			return rc;
 		}
 
@@ -2236,8 +2371,6 @@ bool CInitializerEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 		{
 			LogWarn(Severity_Low, (ErrorCodeEnum)rc, ERR_INITIALIZER_READ_WRITE_FILE,
 				GetOutPutStr("%s%08X%s%s", "ReadConfigValue", rc, "File", "SubBankNo & BranchNo").c_str());
-
-			//pEntity->m_strLastErrMsg = CSimpleStringA::Format("集中配置Initializer节点下没有找到SubBankNo和BranchNo配置项,请联系分行技术部!");
 			rc = ERR_INITIALIZER_READ_WRITE_FILE;
 			return rc;
 		}
@@ -2256,22 +2389,6 @@ bool CInitializerEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 				// support des key
 				initMKReq.MKD_REQ2.branchNo = strSubBankNo;
 				initMKReq.MKD_REQ2.subBankNo = strBranchNo;
-				//CBlob blob;
-				//blob.Refer(pReq2->kmcData, 600);
-
-				//rc = CreateInitMKData(blob, false);
-				//if (rc != Error_Succeed)
-				//{
-				//	LogWarn(Severity_Middle, (ErrorCodeEnum)rc, ERR_INITIALIZER_CREATE_INIT_MK,
-				//		GetOutPutStr("%s%d", "CreateInitTMK", rc).c_str());
-				//	rc = ERR_INITIALIZER_CREATE_INIT_MK;
-				//	m_strLastErrMsg = CSimpleStringA::Format("调用KMC接口CreateInitTMKReq(0)失败,错误信息[%s],返回值[%d],请联系维护人员!",
-				//		(const char*)pEntity->GetKMCLastErrMsg(), rc);
-				//	return rc;
-				//}
-
-				//// 添加KMC信息
-				//package->AddStruct("MKD_REQ2", false, false, (BYTE*)buf, sizeof(MKDownloadReq2) + blob.m_iLength);
 			}
 
 			if (nCapability == 2 || nCapability == 3)
@@ -2279,29 +2396,6 @@ bool CInitializerEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 				// support sm key
 				initMKReq.MKD_SMR2.branchNo = strSubBankNo;
 				initMKReq.MKD_SMR2.subBankNo = strBranchNo;
-
-				//char buf[632];
-				//memset(buf, 0, 632);
-				//SMMKDownloadReq2* pReq2 = (SMMKDownloadReq2*)buf;
-				//strncpy(pReq2->szSubBankNo, (const char*)strSubBankNo, sizeof(pReq2->szSubBankNo) - 1);
-				//strncpy(pReq2->szBranchNo, (const char*)strBranchNo, sizeof(pReq2->szBranchNo) - 1);
-
-				//CBlob blob;
-				//blob.Refer(pReq2->kmcData, 600);
-
-				//rc = CreateInitMKData(blob, true);
-				//if (rc != Error_Succeed)
-				//{
-				//	LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_CREATE_INIT_MK,
-				//		GetOutPutStr("%s%d", "CreateInitTMK", rc).c_str());
-				//	rc = ERR_INITIALIZER_CREATE_INIT_MK;
-				//	m_strLastErrMsg = CSimpleStringA::Format("调用KMC接口CreateInitTMKReq(0)失败,错误信息[%s],返回值[%d],请联系维护人员",
-				//		(const char*)GetKMCLastErrMsg(), rc);
-				//	return rc;
-				//}
-
-				//// 添加KMC信息
-				//package->AddStruct("MKD_SMR2", false, false, (BYTE*)buf, sizeof(SMMKDownloadReq2) + blob.m_iLength);
 			}
 		}
 	}
@@ -2313,32 +2407,19 @@ bool CInitializerEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 	CSimpleStringA strPinPadID = "", strDeviceID = "";
 	int nRet = GetPinPadIDAndDeviceID(strPinPadID, strDeviceID);
 	Dbg("GetPinPadIDAndDeviceID ret: %d, PinPadID: %s, DeviceID: %s", nRet, (const char*)strPinPadID, (const char*)strDeviceID);
-	/*
-	std::regex pattern(".+-[Ff][Ww][Bb]-.+");
-	if (std::regex_match(strDeviceID.GetData(), pattern))
-	{
-		strDeviceID = "";
-		strPinPadID = "";
-	}
-	Dbg("GetPinPadIDAndDeviceID ret: %d, PinPadID: %s, DeviceID: %s", nRet, (const char*)strPinPadID, (const char*)strDeviceID);
-	*/
 	// 从系统获取设备信息和硬件信息	
 	// 变长结构初始化
 	char buf2[512];
 	memset(buf2, 0, 512);
 
-	//MKDownloadNew1* pReq1 = (MKDownloadNew1*)buf2;
 	CSystemStaticInfo si;
 	pFunc->GetSystemStaticInfo(si);
-	//strncpy(pReq1->szTerminalNo, (const char*)si.strTerminalID, sizeof(pReq1->szTerminalNo) - 1);
 	initMKReq.MKD_NEW1.terminalNo = si.strTerminalID;
 	initMKReq.MKD_NEW1.installVersion = si.InstallVersion.ToString();
-	if (nRet == 2 || nRet == 3)
-		//strncpy(pReq1->szPadDeviceID, (const char*)strDeviceID, sizeof(pReq1->szPadDeviceID) - 1);
+	if (nRet == 2 || nRet == 3) {
 		initMKReq.MKD_NEW1.padDeviceID = strDeviceID;
+	}
 
-	//strncpy(pReq1->szMachineType, (const char*)si.strMachineType, sizeof(pReq1->szMachineType) - 1);
-	//strncpy(pReq1->szSite, (const char*)si.strSite, sizeof(pReq1->szSite) - 1);
 	initMKReq.MKD_NEW1.machineType = si.strMachineType;
 	initMKReq.MKD_NEW1.site = si.strSite;
 	BYTE xIP[64] = {};
@@ -2362,10 +2443,6 @@ bool CInitializerEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 		sprintf(xIP, "%d.%d.%d.%d", in->S_un.S_un_b.s_b1, in->S_un.S_un_b.s_b2, in->S_un.S_un_b.s_b3, in->S_un.S_un_b.s_b4);
 		initMKReq.MKD_NEW1.ip = xIP;
 		Dbg("ip:%s",xIP);
-		//pReq1->ip[0] = in->S_un.S_un_b.s_b1;
-		//pReq1->ip[1] = in->S_un.S_un_b.s_b2;
-		//pReq1->ip[2] = in->S_un.S_un_b.s_b3;
-		//pReq1->ip[3] = in->S_un.S_un_b.s_b4;
 	}
 #else
 	char ip[32] = { 0 };
@@ -2383,40 +2460,10 @@ bool CInitializerEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 		}
 	}
 #endif //RVC_OS_WIN
-	//BYTE xGps[4];
-	//si.EnrolGPS.GetBinaryLongitude(&pReq1->enrolGPS[0]);
-	//si.EnrolGPS.GetBinaryLatitude(&pReq1->enrolGPS[4]);
-	//Dbg("GPS=%s", (char*)&pReq1->enrolGPS);
+
 	initMKReq.MKD_NEW1.enrolGPS = "00000A4500000A4E";//oiltmp
 	initMKReq.MKD_NEW1.enrolAddr = si.strEnrolAddr;
-	//strcpy(pReq1->szEnrolAddr, (const char*)si.strEnrolAddr);
-
-	//int nStructLen = sizeof(MKDownloadNew1) + strlen(pReq1->szEnrolAddr);		// 变长结构长度计算
-	//package->AddStruct("MKD_NEW1", false, false, (BYTE*)buf2, nStructLen);
-
-	// 获取硬件信息
-	//int nDevEntityCount = 0;
-	//BYTE* pDevInfo = NULL;
-	//if ((rc = GetModalInfo(&pDevInfo, nDevEntityCount)) != Error_Succeed) return rc;
-	//else if (pDevInfo == NULL) {
-	//	Dbg("pDexInfo is NULL.");
-	//}
-	//else {
-	//	Dbg("GetModalInfo succ.");
-	//}
-	//if (nDevEntityCount > 0 && pDevInfo != NULL) {
-	//	RequestTokenReq2* R2Array = (RequestTokenReq2*)pDevInfo;
-	//	for (int i = 0; i < nDevEntityCount; i++) {
-	//		Dbg("szFactory=%s", R2Array->szFactory);
-	//		getTokenReq->TOKEN_R2[i]->factory = R2Array->szFactory;
-	//		getTokenReq->TOKEN_R2[i]->modal = R2Array->szModal;
-	//		getTokenReq->TOKEN_R2[i]->type = R2Array->szType;
-	//		getTokenReq->TOKEN_R2[i]->versoin = (char*)R2Array->version;
-	//		R2Array++;
-	//	}
-	//	delete pDevInfo;
-	//}
-	//oiltest
+
 	initMKReq.MKD_REQ3[0]->modal = "";
 	initMKReq.MKD_REQ3[0]->factory = "";
 	initMKReq.MKD_REQ3[0]->type = "";
@@ -2429,8 +2476,6 @@ bool CInitializerEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 			GetOutPutStr("%s%s", "GetTerminalFingerPrint", "False").c_str());
 		return ERR_INITIALIZER_GET_TERMINAL_FINGERPRINT;
 	}
-	//memcpy(req4.FingerPrint, fingerPrint, 16);
-	//memcpy(req4.FingerPrintSM, fingerPrint + 16, 16);
 	string xFingerPrint = ConvertBytesToHexStr(fingerPrint, nBufLen);
 	initMKReq.MKD_REQ4.fingerPrint = xFingerPrint.substr(0,32);
 	initMKReq.MKD_REQ4.fingerPrintSM = xFingerPrint.substr(32, 64);
@@ -2451,17 +2496,11 @@ bool CInitializerEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 		//strncpy(req4.PinPadID, (const char*)strPinPadID, sizeof(req4.PinPadID) - 1);
 		initMKReq.MKD_REQ4.pinPadID = strPinPadID;
 
-	//package->AddStruct("MKD_REQ4", false, false, (BYTE*)&req4, sizeof(req4));
-
 	//国密改造
-	//MKDownloadReq5 req5 = {};
 	initMKReq.MKD_REQ5.isFirstSM = GetOrSetIsFirstSM(0);
 	initMKReq.MKD_REQ5.isSM = 1;
-	//package->AddStruct("MKD_REQ5", false, false, (BYTE*)&req5, sizeof(req5));
 	Dbg("rinitMKReq.MKD_REQ5.isFirstSM=%d", initMKReq.MKD_REQ5.isFirstSM);
-	Dbg("send MK init request now");
 	return true;
-	//return SendPackage(package) != "" ? Error_Succeed : ERR_INITIALIZER_INIT_MK_SEND_PKG;
 }
 int HexBuf2StrBuf(PBYTE hexBuf, char** strBuf, DWORD len)
 {
@@ -2534,16 +2573,10 @@ ErrorCodeEnum CInitializerEntity::LoadKeysToPinPadACS(string TMK, string TPK, st
 	char* pxx = new char[1024];
 	memset(pxx, 0, 1024);
 	HexBuf2StrBuf((BYTE*)pDecryptPrivateKey, &pxx, decryprtLen);
-	//char* pEncodeTMK = MyBase64::Str2Hex(TMK.c_str(), TMK.size());
 	PBYTE pBt = new BYTE[512];
 	memset(pBt, 0, 512);
 	StrBuf2HexBuf(TMK.c_str(), &pBt);
 
-	//if (DecWithSM2PriKey(pBt, 258 / 2, (BYTE*)pPlainTMK, &plainKeyLen, (BYTE*)pDecryptPrivateKey, decryprtLen))
-	//	Dbg("ok");
-	//else
-	//	Dbg("not ok");
-	//return Error_Unexpect;
 	if (!DecWithSM2PriKey(pBt, TMK.size()/2, (BYTE*)pPlainTMK, &plainKeyLen, (BYTE*)pDecryptPrivateKey, decryprtLen)) {
 		Dbg("使用私钥解密TMK失败!");
 		return Error_Unexpect;

+ 1 - 3
Module/mod_ResourceWatcher/CMakeLists.txt

@@ -48,9 +48,7 @@ else()
     set(${MODULE_PREFIX}_LIBS ${MODULE_BASE_LIBS} libpublicFun RestfulFunc ${CONAN_LIBS_SOGOULIB})
 endif(MSVC)
 
-target_link_libraries(${MODULE_NAME} PRIVATE 
-    ${${MODULE_PREFIX}_LIBS} 
-)  
+target_link_libraries(${MODULE_NAME}  ${${MODULE_PREFIX}_LIBS})  
 
 target_include_directories(${MODULE_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
     ${MODULE_BASE_DIR}/mod_cardswiper

+ 25 - 5
Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp

@@ -185,6 +185,7 @@ unsigned int ResourceWatcherFSM::s0_on_event(FSMEvent* e)
     case USER_EVT_RUN:
     {
         if (m_IsPadDevice) {
+
             GetCardSwiperTask* task = new GetCardSwiperTask(this);
             GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
         }
@@ -574,6 +575,8 @@ void ResourceWatcherFSM::AfterInit()
         } else {
             RecoverDDEClipboardEnable();
         }
+
+        GetEntityBase()->GetFunction()->PostThreadPoolTask(new UploadMonitorInfoTask(this));
     }
 #endif //_MSC_VER
 }
@@ -3921,6 +3924,19 @@ BOOL ResourceWatcherFSM::SetDefaultAudioDevice()
 
 #endif //RVC_OS_WIN
 
+
+void ResourceWatcherFSM::UploadMonitorSettings()
+{
+    std::string sucContent, failedContent;
+    CSimpleStringA strCmd("xrandr | grep \" connected\" | sed -e \"s/\([A-Z0-9]\+\) connected.*/\1/\"");
+    bool ret = SP::Module::Util::ShellExecute(strCmd.GetData(), sucContent, failedContent);
+    Dbg("{%s}:{%s}{%s}", strCmd.GetData(), sucContent.c_str(), failedContent.c_str());
+    std::string msg = SP::Utility::ToTrim(sucContent);
+    SP::Utility::replaceInPlace(msg, "\n", "|");
+    LogWarn(Severity_Middle, Error_Debug, LOG_INFO_MONITOR_SETTINGS, msg.c_str());
+}
+
+
 BOOL ResourceWatcherFSM::DetectIsFirstRunAtBoot()
 {
     CSystemRunInfo runInfo = { 0 };
@@ -3995,12 +4011,16 @@ void ResourceWatcherFSM::UploadSysVersionInfo(UINT & ver)
 
     do {
         std::string sucContent, failedContent;
-        std::string cmd("cat /proc/cpuinfo |grep \"model name\" | awk 'NR==1{print $4}'");
+        std::string cmd("cat /proc/cpuinfo |grep \"model name\" | awk 'NR==1'");
         bool ret = SP::Module::Util::ShellExecute(cmd, sucContent, failedContent);
         Dbg("{%s}:{%s}{%s}", cmd.c_str(), sucContent.c_str(), failedContent.c_str());
-        std::size_t found = sucContent.rfind("\n");
-        if (found != std::string::npos) {
-            sucContent.replace(found, strlen("\n"), "");
+        //std::size_t found = sucContent.rfind("\n");
+        //if (found != std::string::npos) {
+        //    sucContent.replace(found, strlen("\n"), "");
+        //}
+        auto elems = SP::Utility::Split(sucContent, ':');
+        if (elems.size() > 1) {
+            sucContent = SP::Utility::ToTrim(elems[1]);
         }
         srcData.insert(std::make_pair("cpu-type", sucContent));
     } while (false);
@@ -4834,7 +4854,7 @@ void ResourceWatcherFSM::ConfirmDNSConfigHasSet()
     spConfig->ReadConfigValue("DNSTest", "dns1", dns1);
     spConfig->ReadConfigValue("DNSTest", "dns2", dns2);
     Dbg("test enviromemt");
-#endif // DEBUG
+#endif // UNDER_PRODUCT_ENV
 
 #else
     dns1 = m_strDefaultDns;

+ 12 - 0
Module/mod_ResourceWatcher/ResourceWatcherFSM.h

@@ -255,6 +255,8 @@ public:
         return m_bIsConfigMode;
     }
 
+    void UploadMonitorSettings();
+
 private:
 
 	void readVideoStoreData();
@@ -632,6 +634,16 @@ struct ClearVersionTask : public ITaskSp
 	}
 };
 
+struct UploadMonitorInfoTask : public ITaskSp
+{
+    ResourceWatcherFSM* m_pFSM;
+	UploadMonitorInfoTask(ResourceWatcherFSM* pFSM) : m_pFSM(pFSM) {}
+    void Process()
+    {
+        m_pFSM->UploadMonitorSettings();
+    }
+};
+
 struct ClearAd0Task : public ITaskSp
 {
 	ResourceWatcherFSM* m_pFSM;

+ 3 - 29
Module/mod_UpgradeMgr/UpgradeTaskFSM.cpp

@@ -21,7 +21,8 @@
 #include "XUnZipZilb.h"
 #endif
 
-
+#define SAFE_DELETE_HTTPCLIENT(obj)	\
+	do{if(obj != NULL) { obj->Destory(); obj = NULL; }}while(false)
 
 namespace Task
 {
@@ -98,7 +99,7 @@ namespace Task
 			if(!m_fsm->m_isSM3HashSucc){
 				return false;
 			}
-
+			
 			IHttpFunc* client;
 			client = create_http(m_fsm->HttpsLogCallBack);
 			//发送hash
@@ -141,7 +142,6 @@ namespace Task
 			}
 
 			if(!client->Post(qTempReq, qTempRet)){
-				//Dbg("SendSM3Task http req fail,url=%s",qTempReq.m_url.c_str());
 				LogWarn(Severity_Middle, Error_Exception, ERR_TASK_SEND_SM3_HASH_FAIL,CSimpleStringA::Format("SendSM3Task http req fail,url=%s, err=%s",qTempReq.m_url.c_str(),qTempRet.m_errMsg.c_str()).GetData());
 				return false;//失败
 			}
@@ -341,7 +341,6 @@ namespace Task
 			Dbg("UpdateTaskStatus req=%s",qTempReq.m_reqStr.c_str());
 
 			if(!client->Post(qTempReq, qTempRet)){
-				//Dbg("UpdateTaskStatus http req fail ,upgradeTaskId=%s, url=%s",m_fsm->m_currentTask.upgradeTaskId.GetData(),qTempReq.m_url.c_str());
 				LogWarn(Severity_Middle, Error_Exception, ERR_TASK_UPDATE_TASK_STATUS_FAIL,CSimpleStringA::Format("UpdateTaskStatus http req fail, upgradeTaskId=%s, url=%s, err=%s",m_fsm->m_currentTask.upgradeTaskId.GetData(),qTempReq.m_url.c_str(),qTempRet.m_errMsg.c_str()).GetData());
 				return false;//失败
 			}
@@ -408,27 +407,6 @@ namespace Task
 				isSendSucc = false;
 			}
 
-			//联调使用????
-			//isSendSucc = true;
-			//isTask_valid = true;
-
-			//m_fsm->m_currentTask.download_url = "https://127.0.0.1/api";
-			//m_fsm->m_currentTask.pack_hash = "123456789abcdefg";
-			//m_fsm->m_currentTask.pack_length = 1000;
-			//m_fsm->m_currentTask.pack_version = "";
-			//m_fsm->m_currentTask.reboot_type = "1";
-			//m_fsm->m_currentTask.stop_media_play = true;
-
-			//CUpgradeTaskFSM::CInstallStep* iStep= new CUpgradeTaskFSM::CInstallStep();
-			//iStep->stepSeq = 1;
-			//iStep->cmdType = "Run";
-			//iStep->cmdFail = "0";
-			//iStep->srcPathType = "";
-			//iStep->srcPath = "";
-			//iStep->dstPathType ="4";
-			//iStep->dstPath ="test.bat";
-			//m_fsm->m_currentTask.install_step.push(iStep);//加入队尾
-
 			client->Destory();
 			m_fsm->PostEventFIFO(new CUpgradeTaskFSM::QueryCurrTaskEvent(isSendSucc,isTask_valid));//返回处理结果
 		}
@@ -487,7 +465,6 @@ namespace Task
 			}
 
 			if(!client->Post(qTempReq, qTempRet)){
-				//Dbg("QueryCurrTask http req fail,url=%s",qTempReq.m_url.c_str());
 				LogWarn(Severity_Middle, Error_Exception, ERR_TASK_QUERY_CURR_TASK_FAIL,CSimpleStringA::Format("QueryCurrTask http req fail,url=%s, err=%s",qTempReq.m_url.c_str(),qTempRet.m_errMsg.c_str()).GetData());
 				return false;//失败
 			}
@@ -804,7 +781,6 @@ namespace Task
 			}
 
 			if(!client->Post(qTempReq, qTempRet)){
-				//Dbg("QueryNewTask http req fail,url=%s",qTempReq.m_url.c_str());
 				LogWarn(Severity_Middle, Error_Exception, ERR_TASK_QUERY_NEW_TASK_FAIL,CSimpleStringA::Format("QueryNewTask http req fail,url=%s, err=%s",qTempReq.m_url.c_str(),qTempRet.m_errMsg.c_str()).GetData());
 				return false;//失败
 			}
@@ -1094,7 +1070,6 @@ namespace Task
 			}
 
 			if(!client->Post(qTempReq, qTempRet)){
-				//Dbg("QueryTaskStatus http req fail,url=%s",qTempReq.m_url.c_str());
 				LogWarn(Severity_Middle, Error_Exception, ERR_TASK_QUERY_TASK_STATUS_FAIL,CSimpleStringA::Format("QueryTaskStatus http req fail,upgradeTaskId=%s, url=%s, err=%s",m_fsm->m_currentTask.upgradeTaskId.GetData(), qTempReq.m_url.c_str(), qTempRet.m_errMsg.c_str()).GetData());
 				return false;//失败
 			}
@@ -1349,7 +1324,6 @@ namespace Task
 			int time_out = DOWNLOAD_TIMEOUT;
 			
 			if(!client->DownloadFileBlock(downloadUrl.GetData(),jsonReq.c_str(),respContent,httpCode,responseHeaders,time_out)){
-				//Dbg("DownloadPackTask http req fail");
 				LogWarn(Severity_Middle, Error_Exception, ERR_TASK_DOWNLOAD_PACK_FAIL,CSimpleStringA::Format("DownloadPackTask http req fail,url=%s",downloadUrl.GetData()).GetData());
 				return false;//失败
 			}

+ 103 - 46
Module/mod_UpgradeMgr/mod_UpgradeMgr.cpp

@@ -32,6 +32,13 @@ using namespace AccessAuthorization;
 #include "json/json.h"
 #endif
 
+#ifdef WITH_CPPRESTSDK
+#include "CommEntityRestful.hpp"
+#else
+#define SAFE_DELETE_HTTPCLIENT(obj)	\
+	do{if(obj != NULL) { obj->Destory(); obj = NULL; }}while(false)
+#endif
+
 namespace Task
 {
 	//查询灰度控制
@@ -115,13 +122,10 @@ namespace Task
 			if(Mgr->m_CenterModel==0){
 				Mgr->bNewUpgradeMgr = false;//旧模式
 			}else if(Mgr->m_CenterModel==1){
-				//混合模式
-				//访问灰度控制
-				IHttpFunc* client;
-				client = create_http(Mgr->HttpsLogCallBack);
+				
 
 				bool isNewUpgradeMgr=false;//是否是新模式
-				if(QueryUpgradeControl(client,isNewUpgradeMgr)){
+				if(QueryUpgradeControl(isNewUpgradeMgr)){
 					if(isNewUpgradeMgr){
 						Mgr->bNewUpgradeMgr = true;//新模式
 					}else{
@@ -130,7 +134,6 @@ namespace Task
 				}else{
 					Mgr->bNewUpgradeMgr = false;//默认是旧模式,启动旧状态机	
 				}
-				client->Destory();
 			}else if(Mgr->m_CenterModel==2){
 				//新模式
 				Mgr->bNewUpgradeMgr = true;
@@ -192,7 +195,12 @@ namespace Task
 			
 		}
 
-		bool QueryUpgradeControl(IHttpFunc* client,bool &isNewUpgradeMgr){
+		bool QueryUpgradeControl(bool &isNewUpgradeMgr)
+		{
+			//混合模式
+				//访问灰度控制
+
+
 			QueryUpgradeControlTaskReq qTempReq;
 			QueryUpgradeControlTaskRet qTempRet;
 
@@ -204,46 +212,95 @@ namespace Task
 				return false;
 			}
 
-			Json::Value rootReq;
-			Json::FastWriter writer;
-			rootReq["terminal_no"] = info.strTerminalID.GetData();
-			rootReq["modular"] = "UpgradeManager";//写死模块名
-
-			string jsonReq = writer.write(rootReq);
-			qTempReq.m_reqStr = jsonReq;//请求参数
-			//qTempReq.m_printDbg = true;
-			qTempReq.m_url=Mgr->m_grayLaunchUrl.GetData();//访问地址
-
-			if(!client->Post(qTempReq, qTempRet)){
-				LogWarn(Severity_Middle, Error_Exception, ERR_TASK_QUERY_UPGRADE_MODE, CSimpleStringA::Format("QueryUpgradeControl http req fail,url=%s",Mgr->m_grayLaunchUrl.GetData()).GetData());
-				return false;//失败
-			}
-			//解析报文
-			//Dbg("qTempRet=%s",qTempRet.m_retStr.c_str());
-			Json::Reader reader;
-			Json::Value rootRet;
-			if (!reader.parse(qTempRet.m_retStr, rootRet, false))
-			{
-				LogWarn(Severity_Middle, Error_Exception, ERR_TASK_QUERY_UPGRADE_MODE, CSimpleStringA::Format("QueryUpgradeControl parse resp is fail,url=%s",Mgr->m_grayLaunchUrl.GetData()).GetData());
-				return false;//失败
-			}
+#ifdef WITH_CPPRESTSDK
+            struct InstanceReqJson
+            {
+                std::string terminal_no;
+				std::string modular;
+                JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminal_no, modular)
+            } instanceReq;
+
+			instanceReq.terminal_no = info.strTerminalID.GetData();
+			instanceReq.modular = "UpgradeManager";
+
+            HttpClientResponseResult result;
+            HttpClientRequestConfig config(HttpRequestMethod::POST, Mgr->m_grayLaunchUrl.GetData());
+            SP::Module::Restful::FulfillRequestJsonBody(&config, instanceReq);
+
+            RestfulClient client = RestfulClient::getInstance();
+            config.PreDo();
+            client.Do(&config, &result);
+            if (result.ResponseOK()) {
+
+                SP::Module::Restful::GrayResponseJson grayResponse;
+                SP::Module::Restful::GetGrayInfoFromDebranchResponse(result.content, grayResponse);
+
+                if (!grayResponse.IsOperatedOK()) {
+                    Dbg("gray: %s,%s", grayResponse.errorMsg.c_str(), result.content.c_str());
+                    LogWarn(Severity_Middle, Error_Exception, ERR_TASK_QUERY_UPGRADE_MODE, CSimpleStringA::Format("QueryUpgradeControl http response fail,url=%s, %s"
+                                                                                                                  , Mgr->m_grayLaunchUrl.GetData(), grayResponse.errorMsg.c_str()));
+					return false;
+                } else {
+					isNewUpgradeMgr = grayResponse.graySwitch;
+                    Dbg("isNewUpgradeMgr:%d", isNewUpgradeMgr);
+					return true;
+                }
+            } else {
+                LogWarn(Severity_Middle, Error_Exception, ERR_TASK_QUERY_UPGRADE_MODE, CSimpleStringA::Format("QueryUpgradeControl http req fail,url=%s, %s"
+                                                                                                              , Mgr->m_grayLaunchUrl.GetData(), result.WhatError().c_str()));
+                return false;
+            }
+#else
+            Json::Value rootReq;
+            Json::FastWriter writer;
+            rootReq["terminal_no"] = info.strTerminalID.GetData();
+            rootReq["modular"] = "UpgradeManager";//写死模块名
+
+            string jsonReq = writer.write(rootReq);
+            qTempReq.m_reqStr = jsonReq;//请求参数
+            //qTempReq.m_printDbg = true;
+            qTempReq.m_url = Mgr->m_grayLaunchUrl.GetData();//访问地址
+
+            IHttpFunc* client;
+            client = create_http(Mgr->HttpsLogCallBack);
+
+            if (!client->Post(qTempReq, qTempRet)) {
+                LogWarn(Severity_Middle, Error_Exception, ERR_TASK_QUERY_UPGRADE_MODE, CSimpleStringA::Format("QueryUpgradeControl http req fail,url=%s", Mgr->m_grayLaunchUrl.GetData()).GetData());
+                SAFE_DELETE_HTTPCLIENT(client);
+                return false;//失败
+            }
+
+            //解析报文
+            //Dbg("qTempRet=%s",qTempRet.m_retStr.c_str());
+            Json::Reader reader;
+            Json::Value rootRet;
+            if (!reader.parse(qTempRet.m_retStr, rootRet, false)) {
+                LogWarn(Severity_Middle, Error_Exception, ERR_TASK_QUERY_UPGRADE_MODE, CSimpleStringA::Format("QueryUpgradeControl parse resp is fail,url=%s", Mgr->m_grayLaunchUrl.GetData()).GetData());
+                SAFE_DELETE_HTTPCLIENT(client);
+                return false;//失败
+            }
+
+            bool isSucc = rootRet["success"].asBool();
+            if (isSucc) {
+                if (rootRet.isMember("data")) {
+                    if (rootRet["data"].asBool()) {
+                        isNewUpgradeMgr = true;
+                    } else {
+                        isNewUpgradeMgr = false;
+                    }
+                    SAFE_DELETE_HTTPCLIENT(client);
+                    return true;//查询成功
+                } else {
+                    SAFE_DELETE_HTTPCLIENT(client);
+                    return false;//查询失败
+                }
+            } else {
+                Dbg("QueryUpgradeControl [success] is false");
+                SAFE_DELETE_HTTPCLIENT(client);
+                return false;//查询失败
+            }
+#endif
 
-			bool isSucc = rootRet["success"].asBool();
-			if(isSucc){
-				if(rootRet.isMember("data")){
-					if(rootRet["data"].asBool()){
-						isNewUpgradeMgr = true;
-					}else{
-						isNewUpgradeMgr = false;
-					}
-					return true;//查询成功
-				}else{
-					return false;//查询失败
-				}
-			}else{
-				Dbg("QueryUpgradeControl [success] is false");
-				return false;//查询失败
-			}
 		}
 
 		ErrorCodeEnum loadCenterSetting(){

+ 5 - 2
Module/mod_accessauth/AccessAuthConn.cpp

@@ -1388,8 +1388,11 @@ DWORD CAccessAuthConn::HandleTimeSyn(int nTimeDiff,BYTE nAuthVersion,BYTE* nSess
 
 	// 检查准入请求版本 //会话密钥缓存
 	Dbg("auth version: %d", nAuthVersion);
-	if (((CAccessAuthEntity*)m_pEntity)->SaveAuthVerAndKey(nAuthVersion, nSessionKey)) return Error_Succeed;
-	return Error_Unexpect;
+	if (((CAccessAuthEntity*)m_pEntity)->SaveAuthVerAndKey(nAuthVersion, nSessionKey)) {
+		return Error_Succeed;
+	} else {
+        return Error_Unexpect;
+	}
 }
 DWORD CAccessAuthConn::HandleLockState(int nState)
 {

File diff suppressed because it is too large
+ 677 - 260
Module/mod_accessauth/AccessAuthFSM.cpp


+ 1 - 6
Module/mod_accessauth/AccessAuthFSM.h

@@ -574,10 +574,7 @@ public:
 	static void HttpsLogCallBack(const char *logtxt);
 	bool m_bAccessACS;
 	CAccessAuthConn* m_pConnection;
-	/** 该函数不再调用,信创版本直接走总行微服务 [Gifur@2022217]*/
-	bool ACSAccessControl();
-	CSimpleStringA GetmGateHost(){ return m_gateHost; }
-	CSimpleStringA GetmAccessAuthHost() { return m_accessAuthHost; }
+	CSimpleStringA GetmAccessAuthHost();
 	CSimpleStringA GetmInitDeviceHost() { return m_initDeviceHost; }
 	CSimpleStringA GetmTerminalList() { return m_terminalList; }
 	int GetmnExitReason() { return m_nExitReason; }
@@ -601,7 +598,6 @@ private:
 
 	int m_nExitReason;
 	int m_nExitWay;
-	CSimpleStringA m_gateHost;
 	CSimpleStringA m_accessAuthHost;
 	CSimpleStringA m_initDeviceHost;
 	CSimpleStringA m_terminalList;
@@ -611,7 +607,6 @@ private:
 	ErrorCodeEnum GetIntFromCS(const char* pcSection, const char* pcKey,  int &retInt);
 	ErrorCodeEnum GetStrFromCS(const char* pcSection, const char* pcKey,  CSimpleStringA& retStr);
 
-	vector<string> GetSplitByChar(const char* content, int len, char spl);
 	int m_nCheckMD5;
 	//oilyang@20210813 实际上上次关门页改造应该把这个去掉,已经有了(不)重试(不)重启的模式组合
 	int m_nAccessFailedCount;

+ 3 - 2
Module/mod_accessauth/mod_AccessAuth.cpp

@@ -670,8 +670,10 @@ int Char2Int(char * ch) {
 bool CAccessAuthEntity::SaveAuthVerAndKey(int nAuthVer, BYTE *pKey)
 {
 	LOG_FUNCTION();
+
 	m_nAuthVersion = nAuthVer;
 	memset(m_AuthSessionKey, 0, 140);
+
 	if (m_nAuthVersion == 2)
 	{
 		CSimpleString runInfoPath;
@@ -683,6 +685,7 @@ bool CAccessAuthEntity::SaveAuthVerAndKey(int nAuthVer, BYTE *pKey)
 		
 		char privateKey[BUF_SIZE] = { 0 };
         runInfoPath += SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR "Initializer.ini";
+
 #ifdef RVC_OS_WIN
 		GetPrivateProfileString("TerminalPD", "PrivateKey", "", privateKey, BUF_SIZE, runInfoPath.GetData());
 #else
@@ -691,8 +694,6 @@ bool CAccessAuthEntity::SaveAuthVerAndKey(int nAuthVer, BYTE *pKey)
 		strcpy(privateKey, tmp);
 		delete tmp;
 #endif // RVC_OS_WIN
-
-		
 		
 		if (strlen(privateKey) <= 0) {
 			printPasswdError();

+ 38 - 29
Module/mod_chromium/CModTools.cpp

@@ -196,17 +196,6 @@ namespace Chromium {
 
 		switch (errType)
 		{
-			/* 不应该有
-		case ERR_PAGE_REASON::CardStoreIsBusy:
-			errPagePath.Append(CSimpleStringA("?reason=") + errType._to_string() + "&errmsg=卡库正在使用中");
-			setLimitReason(errType._to_string());
-			break;
-		case ERR_PAGE_REASON::MachineTypeError:
-			errPagePath.Append(CSimpleStringA("?reason=") + errType._to_string() + "&errmsg=双屏版只检测到单屏");
-			setLimitReason("breakdown");
-			break;
-		case ERR_PAGE_REASON::CameraConfig:
-			*/
 		case ERR_PAGE_REASON::breakdown:
 		{
 			CSimpleStringA m_sAuthErrMsg, ts;
@@ -219,8 +208,9 @@ namespace Chromium {
 			else
 				errPagePath.Append(CSimpleStringA("?reason=")).Append(errType._to_string()).Append("&errmsg=").Append(m_sAuthErrMsg);
 
-			if (findRestartCode(usercode))
-				errPagePath.Append("&reboottime=").Append(GetSpShellBootTime().c_str());
+			if (findRestartCode(usercode)) {
+				errPagePath.Append("&reboottime=").Append(GetSpShellNextRebootTime().c_str());
+			}
 			errPagePath.Append(CSimpleStringA("&showlimit=")).Append(std::to_string((unsigned long long)1).c_str());
 			if (m_withMin)
 			{
@@ -314,13 +304,15 @@ namespace Chromium {
 	std::string formatTime(SYSTEMTIME time)
 	{
 		char tBuf[1024] = "";
-		sprintf(tBuf, "%04u-%02u-%02u %02u:%02u:%02u:%03u", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond, time.wMilliseconds);
+        //sprintf(tBuf, "%04u-%02u-%02u %02u:%02u:%02u:%03u", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond, time.wMilliseconds);
+		sprintf(tBuf, "%04u-%02u-%02u %02u:%02u:%02u", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond);
 		return tBuf;
 	}
 
-	std::string CModTools::GetSpShellBootTime()
+	std::string CModTools::GetSpShellNextRebootTime()
 	{
 		static std::string shellBootTime;
+
 		if (0 == shellBootTime.length())
 		{
 			CAutoArray<CSimpleStringA> t_names;
@@ -329,9 +321,14 @@ namespace Chromium {
 			this->m_pEntity->GetFunction()->GetAllEntityStartInfo(t_names, t_Idx, t_Infos);
 
 			for (int i = 0; i < t_Infos.GetCount(); i++) {
-				if (0 == t_Idx[i])//shell
-				{
-					shellBootTime = formatTime(t_Infos[i].startTime);
+                //if (0 == t_Idx[i])//shell
+				if (t_names[i].Compare("HealthManager") == 0) {
+					SYSTEMTIME startTime = t_Infos[i].startTime;
+					CSmallDateTime dateTime;
+					dateTime.FromSystemTime(startTime);
+					/** 十分钟后重启 [Gifur@2022324]*/
+					CSmallDateTime dateNewTime((DWORD)dateTime + 10 * 60);
+					shellBootTime = dateNewTime.ToTimeString().GetData();
 					break;
 				}
 			}
@@ -691,7 +688,8 @@ namespace Chromium {
 		return generateCefclientCmd(true, extendUrl);
 	}
 
-	std::pair<bool, std::string> CModTools::openAdPage() {
+	std::pair<bool, std::string> CModTools::openAdPage()
+	{
 		static bool adOpen = false;
 		if (adOpen)//only open ad in first time
 			return std::make_pair(false, "open AdPage failed! Already exist.");
@@ -708,10 +706,11 @@ namespace Chromium {
 				adOpen = true;
 				return std::make_pair(true, "");
 			}
-
 		}
-		else
+		else {
 			return std::make_pair(false, "StartChromiumBrowser Ad url err!");
+		}
+			
 	}
 
 
@@ -780,15 +779,15 @@ namespace Chromium {
 		else
 		{
 			//open err page
-			
-			if (notifyExist)
-				return std::make_pair(Error_Unexpect, 0);
-
-			if (ERR_PAGE_REASON::breakdown == reason._to_integral() && breakdownExist)
-				return std::make_pair(Error_Unexpect, 0);//只打开一个breakdown页面,后续通过cefclient改动,避免打开同种页面
+			if (notifyExist) {
+                return std::make_pair(Error_Duplication, 0);
+			}
+			//只打开一个breakdown页面,后续通过cefclient改动,避免打开同种页面
+			if (ERR_PAGE_REASON::breakdown == reason._to_integral() && breakdownExist) {
+                return std::make_pair(Error_Duplication, 0);
+			}
 
 			auto errPageUrl = GenerateErrPage(reason, normalParam, exParam);
-
 			if (!errPageUrl.first)
 			{
 				DbgEx("errPage get url failed!");
@@ -988,8 +987,11 @@ namespace Chromium {
 	}
 
 	bool CModTools::findRestartCode(DWORD userCode) {
+
+        /** 救赎之道,就在其外 [Gifur@2022324]*/
 		DWORD authArr_noretry_norestart[] = ERRARR_ACCESSAUTH_NORETRY_NORESTART;
 		DWORD authArr_retry_norestart[] = ERRARR_ACCESSAUTH_RETRY_NORESTART;
+
 		std::vector<DWORD> norestartArr;
 #if (defined _WIN32 || defined _WIN64)
 		for each (auto i in authArr_noretry_norestart)
@@ -997,6 +999,7 @@ namespace Chromium {
 		for (auto i : authArr_noretry_norestart)
 #endif
 			norestartArr.push_back(i);
+
 #if (defined _WIN32 || defined _WIN64)
 		for each (auto i in authArr_retry_norestart)
 #else	
@@ -1004,6 +1007,8 @@ namespace Chromium {
 #endif
 			norestartArr.push_back(i);
 
+//////////////////////////////////////////////////////////////////////////
+
 #if (defined _WIN32 || defined _WIN64)
 		for each (auto i in norestartArr)
 #else	
@@ -1014,6 +1019,7 @@ namespace Chromium {
 				return false;
 			}
 		}
+
 		return true;
 	}
 
@@ -1129,6 +1135,7 @@ namespace Chromium {
         if (SP::Module::Util::ShellExecute(runStr, succStr, errStr)) {
 			if (succStr.empty()) {
 				if (ExistsFileA(execute_oldbrowser_path.c_str())) {
+					Dbg("%s exists!", execute_oldbrowser_path.c_str());
 					result = 1;
 				} else {
 					Dbg("%s not exists!", execute_oldbrowser_path.c_str());
@@ -1136,7 +1143,9 @@ namespace Chromium {
 			} else {
 				Dbg("new browser version: %s", succStr.c_str());
 				additional = succStr;
-				if (!ExistsFileA(execute_newbrowser_path.c_str())) { Dbg("%s not exists!", execute_newbrowser_path.c_str()); }
+				if (!ExistsFileA(execute_newbrowser_path.c_str())) {
+					Dbg("%s not exists!", execute_newbrowser_path.c_str()); 
+				}
 				result = 2;
 			}
 		} else {

+ 3 - 1
Module/mod_chromium/CModTools.h

@@ -86,7 +86,9 @@ namespace Chromium {
 		std::pair<ErrorCodeEnum, int> openCefByFreerdp(std::string cmdline, bool isGuard = false);
 		void openCefByFreerdpGuardian(std::string cmdline);
 		std::pair<bool, std::string> openAdPage();
-		std::string GetSpShellBootTime();
+
+		/** 应该跟健康约定了,准入不过,通过监护进程触发框架重启,这里默认框架启动时间再加上10分钟 [Gifur@2022324]*/
+		std::string GetSpShellNextRebootTime();
 		bool isOutsidePad();
 		void setLimitReason(const char* reason);
 		int StandardToStamp(const char* str_time, bool dateOnly);

+ 9 - 13
Module/mod_chromium/mod_chromium.cpp

@@ -349,13 +349,10 @@ namespace Chromium {
 
 	bool CChromiumEntity::OnPreStart_openWeb(CAutoArray<CSimpleStringA>& strArgs, CSmartPointer<ITransactionContext>& pTransactionContext)
 	{
-		//generateBussinessLimitTimer();
-		if (m_runAd) openAdPage();
 		if (m_runExtend) openExtendPage();
 
 		if (m_runMain)
 		{
-			//openMainPage(); return true;
 			CSimpleStringA t_EntryPermit, t_terminalState;
 			GetFunction()->GetSysVar("EntryPermit", t_EntryPermit);
 			GetFunction()->GetSysVar("TerminalStage", t_terminalState);
@@ -372,10 +369,10 @@ namespace Chromium {
 						std::tuple <std::string, std::string>(m_sysInfo.strTerminalID.GetData(), generateTimeStr()));
 					DbgEx("access failed, open page breakdown %s, %d", Error_Succeed == openRet.first ? "success" : "fail", openRet.second);
 				}
-			}
-			else
+			} else {
+				if (m_runAd) openAdPage();
 				openMainPage();
-
+			}
 		}
 
 		return true;
@@ -388,8 +385,10 @@ namespace Chromium {
 #else
 		CSystemRunInfo sysruninfo;
 		GetFunction()->GetSystemRunInfo(sysruninfo);
-		if (!(sysruninfo.dwBootOption & SystemBootOptionEnum::BootOption_Test))
-			generateCefclientTimer();//非--test时,才会打开浏览器
+
+		if (!(sysruninfo.dwBootOption & SystemBootOptionEnum::BootOption_Test)) {
+            generateCefclientTimer();//非--test时,才会打开浏览器
+		}
 #endif
 	}
 
@@ -443,6 +442,7 @@ namespace Chromium {
 				GetFunction()->UnregistSysVarEvent("UIState");
 			}
 		}
+		/** 该事件有变化才会触发错误页 [Gifur@2022324]*/
 		else if (0 == CSimpleStringA("TerminalStage").Compare(pszKey, true))
 		{
 			if (0 == CSimpleStringA("A").Compare(pszValue, true))
@@ -450,8 +450,8 @@ namespace Chromium {
 				if(CModTools::get_mutable_instance().IsConfigWork())//url正常时才关闭
 				{
 					CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::breakdown);
+					if (m_runAd) openAdPage();
 					openMainPage();
-					//DbgEx("UnregistSysVarEvent TerminalStage %s", Error_Succeed == GetFunction()->UnregistSysVarEvent("TerminalStage") ? "success" : "fail");
 				}				
 			}
 			else if (0 == CSimpleStringA("X").Compare(pszValue, true))
@@ -558,7 +558,6 @@ namespace Chromium {
 				auto notifyPool = m_pWsServer->getNotifyPool();
 				if (notifyPool.size() > 0)
 				{
-
 					for (auto it : notifyPool)
 					{
 						DbgEx("Log_Notify err, notifyPool to %d, %d", it.first, it.second);
@@ -570,12 +569,9 @@ namespace Chromium {
 					auto openRet = CModTools::get_mutable_instance().StartChromiumBrowser(ERR_PAGE_REASON::ErrNotify, { m_sysInfo.strTerminalID.GetData(), generateTimeStr() }, { notifyReason, notifymsg, notiryRebootTime, dwSysError, dwUserCode });
 					DbgEx("Log_Notify err, open page %s, %d", Error_Succeed == openRet.first ? "success" : "fail", openRet.second);
 				}
-
-
 			}
 			catch (std::exception& e) {
 				DbgEx("Log_Notify err, %s", e.what());
-
 			}
 			return;
 	}

+ 0 - 22
Module/mod_healthmanager/HealthManagerFSM.cpp

@@ -1556,32 +1556,13 @@ REGIST:		eErrCode = m_pACClient->Regist();
 					{
 						while(1)
 						{
-							//oilyang@20210823 as have retry logic,no need to 
-							//DWORD dwEnd = GetTickCount();
-							//DWORD dwElapse = dwEnd - dwStart;
-							//if (dwElapse > m_AccessAuthTimeout)
-							//{
-							//	Dbg("after x minute");
-							//	StartPinPadEntity();
-							//	//auth failed,rollback to C
-							//	eErrCode = GetEntityBase()->GetFunction()->SetSysVar("TerminalStage", "C");
-							//	Dbg("auth fail,set TerminalStage C 1");
-							//	if (eErr != Error_Succeed)
-							//		Dbg("set TerminalStage C failed(%d).", eErr);
-							//	m_bFirstAccessAuth = false;
-							//	m_bInAccessAuthDoWork = false;
-							//	return 1;
-							//}
 							Sleep(1000);
 							if (!m_bAccessAuth && !m_bACFailed)
 								continue;
-							// && registCount < m_AccessAuthTries
 							if (m_bACFailed)
 							{
 								LogWarn(Severity_Low,Error_Unexpect,LOG_WARN_HEALTH_ACCESSAUTH_FAILED,"AccessAuth failed.");
 								m_bACFailed = false;
-								//Sleep(1000);
-								//goto REGIST;
 							}
 							Dbg("regist try %d times",registCount);
 							StartPinPadEntity();
@@ -1723,9 +1704,6 @@ void CHealthManagerFSM::ToReAccessAuth(bool bEver)
 	if (m_bFirstAccessAuth)
 		return;
 	ToCallAccessAuthDoWork();
-	//SetAccessAuth(false);
-	//AccessAuthTask *pTask = new AccessAuthTask(this);
-	//GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
 }
 
 ErrorCodeEnum CHealthManagerFSM::AsyncStartEntity(const char *entity_name, const char *cmdline, void *pData)

+ 15 - 20
Module/mod_healthmanager/mod_healthmanager.cpp

@@ -2092,17 +2092,6 @@ void CHealthManagerEntity::OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nL
 		m_eRebootWay = RebootWay_Power;
 		m_bWaitRestartPC = true;
 		break;
-		//commented the following 4 event oilyang 20140616
-		//case ERROR_MOD_MEDIACONTROLLER_ENVCAMERA_BUG://environment camera error
-		//case EVENT_MOD_FACE_ENVCAM_ERROR:
-		//	Dbg("Environment camera restart");
-		//	RestartModule("MediaController");
-		//	break;
-		//case ERROR_MOD_MEDIACONTROLLER_OPECAMERA_BUG://operation camera error
-		//case EVENT_MOD_FACE_OPECAM_ERROR:
-		//	Dbg("Operation camera restart");
-		//	RestartModule("MediaController");
-		//	break;
 	case EVENT_ACCESSAUTH_SUCCEED:
 		Dbg("access auth succeed.");
 		m_fsm.SetAccessAuth();
@@ -2810,8 +2799,9 @@ void CHealthManagerEntity::DeployTerminal(SpReqAnsContext<HealthManagerService_D
 				config.SetChildUri(URLPATH_REGISTER_FULL_LIST);
 				config.AppendQuery("terminalNo", terminalNo.GetData());
 				RestfulClient client = RestfulClient::getInstance();
-				client.Do(config, result);
-				if (result.ConsiderAsSucc()) {
+				config.PreDo();
+				client.Do(&config, &result);
+				if (result.ResponseOK()) {
 					struct CommResponseJson : public MicroServices::API::CommResponse {
                         JSONCONVERT2OBJECT_MEMEBER_REGISTER(success, errorCode, returnCode, errorMsg, message)
 					};
@@ -2833,7 +2823,7 @@ void CHealthManagerEntity::DeployTerminal(SpReqAnsContext<HealthManagerService_D
                             Dbg("%d", __LINE__);
                             break;
                         }
-                        if (!reponseStatus.IsReqBusinessSucc()) {
+                        if (!reponseStatus.IsOperatedOK()) {
                             Dbg("%d", __LINE__);
                             break;
                         }
@@ -2871,10 +2861,11 @@ void CHealthManagerEntity::DeployTerminal(SpReqAnsContext<HealthManagerService_D
                             Json::Value rawRoot2;
                             config.SetChildUri(URLPATH_MANUFACTURE_GET_ALL);
                             config.ResetQuery();
-                            client.Do(config, result2);
+                            config.PreDo();
+                            client.Do(&config, &result2);
 							bool fetchManufactureDone(false);
-                            if (result2.ConsiderAsSucc() && GetJsonRootObject(rawRoot2, result2.content)
-                                && Json2Object(reponseStatus2, rawRoot2) && reponseStatus2.IsReqBusinessSucc()) {
+                            if (result2.ResponseOK() && GetJsonRootObject(rawRoot2, result2.content)
+                                && Json2Object(reponseStatus2, rawRoot2) && reponseStatus2.IsOperatedOK()) {
                                 struct ManufactureInfoJson : public MicroServices::API::Manufacture::ManufactureInfo {
                                     JSONCONVERT2OBJECT_MEMEBER_REGISTER(manufacturerId, manufacturerName)
                                 };
@@ -2895,7 +2886,7 @@ void CHealthManagerEntity::DeployTerminal(SpReqAnsContext<HealthManagerService_D
                             }
 
                             if (!fetchManufactureDone) {
-                                if (reponseStatus2.IsPadded() && !reponseStatus2.IsReqBusinessSucc()) {
+                                if (reponseStatus2.IsNotEmpty() && !reponseStatus2.IsOperatedOK()) {
                                     Dbg("请求失败:%s", reponseStatus2.WhatError().c_str());
                                 } else {
                                     Dbg("解析返回内容失败:%s", result2.content.c_str());
@@ -2937,7 +2928,11 @@ void CHealthManagerEntity::DeployTerminal(SpReqAnsContext<HealthManagerService_D
 									//let it empty.
 								} else {
 									if (!matchInfo.IsNullOrEmpty()) { matchInfo += ";"; }
-									matchInfo += CSimpleStringA::Format("设备厂商不匹配:[%s]vs[%s]", strVendorName.GetData(), terminalRegistInfo.manufacturerName.c_str());
+									if (strZhCNVendorName.IsNullOrEmpty()) {
+                                        matchInfo += CSimpleStringA::Format("设备厂商不匹配:[%s]vs[%s]", strVendorName.GetData(), terminalRegistInfo.manufacturerName.c_str());
+									} else {
+                                        matchInfo += CSimpleStringA::Format("设备厂商不匹配:[%s]vs[%s]", strZhCNVendorName.GetData(), terminalRegistInfo.manufacturerName.c_str());
+									}
 									bMatched = false;
 								}
 							}
@@ -2963,7 +2958,7 @@ void CHealthManagerEntity::DeployTerminal(SpReqAnsContext<HealthManagerService_D
                             }
 						}
 					} else {
-						if (reponseStatus.IsPadded() && !reponseStatus.IsReqBusinessSucc()) {
+						if (reponseStatus.IsNotEmpty() && !reponseStatus.IsOperatedOK()) {
                             tmpResult = Error_DataCheck;
                             tmpMsg = CSimpleStringA::Format("请求失败:%s", reponseStatus.WhatError().c_str());
                             Dbg(tmpMsg);

+ 3 - 2
Module/mod_sipphone/mod_sipphone.cpp

@@ -516,11 +516,12 @@ void CSIPEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITr
 { 
 	ErrorCodeEnum Error = __OnStart(Error_Succeed);
 	pTransactionContext->SendAnswer(Error);
-	LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_ENTITY_STARTED, "sipphone entity started.");
 }
 
 void CSIPEntity::OnStarted() 
 { 
+    LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_ENTITY_STARTED, "sipphone entity started.");
+
 	ErrorCodeEnum Error = Error_Succeed;
 	m_pSelfcheckClient = new SelfChekerClient(this);
 	Error = m_pSelfcheckClient->Connect();
@@ -646,7 +647,7 @@ ErrorCodeEnum CSIPEntity::__OnStart(ErrorCodeEnum preOperationError)
 	if (Error != 0) 
 	{
 		LOG_TRACE("get local ip failed!");
-		CSimpleStringA strErrMsg = "获取 IP 地址失败,请检查本地网络是否连接!";
+		CSimpleStringA strErrMsg = "获取本地 IP 地址失败,请检查本地网络是否连接!";
 		LogWarn(Severity_Middle, Error_NetBroken, 0, strErrMsg);
 		return Error;
 	}

+ 2 - 0
Module/mod_upload/UploadFSM.cpp

@@ -393,6 +393,8 @@ namespace Task
 #endif
 			string jsonReq = writer.write(rootReq);
 
+			Dbg("uploadFileImpl:%s,%s", httpUrl.c_str(), jsonReq.c_str());
+
 			qTempReq.url = httpUrl;
 			qTempReq.paramContent = jsonReq;
 			qTempReq.fileName = m_fsm->m_currUploadFile->fileName;

+ 1 - 0
Other/libRestfulFunc/CMakeLists.txt

@@ -8,6 +8,7 @@ set(${MODULE_PREFIX}_SRCS
     PingImpl.cpp
     JsonConvertHelper.hpp
     SocketConnectImpl.cpp
+    RestfulUtilty.hpp
 )
 
 add_library(${MODULE_NAME} SHARED ${${MODULE_PREFIX}_SRCS})

+ 25 - 2
Other/libRestfulFunc/JsonConvertHelper.hpp

@@ -20,8 +20,18 @@ bool OBJECTCONVERT2JSON_MEMEBER_REGISTER_RESERVERD_IMPLE(Json::Value& jsonTypeVa
         names = Member2KeyParseWithStr(#__VA_ARGS__); \
     }   \
     return ParseJson(names, 0, jsonTypeValue, __VA_ARGS__); \
-}   \
-
+}   
+/*
+std::string GetOutputString() const\
+{   \
+    std::ostringstream str; \
+    std::vector<std::string> names = Member2KeyParseWithStr(#__VA_ARGS__);  \
+    for(auto it=names.begin(); it!=names.end(); ++it) { if(it != names.begin()) { str << " | "; } str << *it; }  \
+    if (names.size() > 0) { str << "\r\n"; }    \
+    DbgPrint(str, __VA_ARGS__); \
+    return str.str();   \
+}
+*/
 
 #define JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER(...)  \
 std::vector<std::string> JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER_RESERVERD_IMPLE() const \
@@ -387,6 +397,19 @@ bool Object2Json(std::string& jsonTypeStr, const T& obj)
     return result;
 }
 
+template<typename T>
+std::ostringstream& DbgPrint(std::ostringstream& os, T& t)
+{
+    return os << t;
+}
+
+template<typename T, typename... Args>
+std::ostringstream& DbgPrint(std::ostringstream& os, T& t, Args&... rest)
+{
+    os << t << ", ";
+    return DbgPrint(os, rest...);
+}
+
 #define __func_1(func,member)   func(member);
 #define __func_2(func,member,...) __func_1(func,member)  __func_1(func,__VA_ARGS__)
 #define __func_3(func,member,...) __func_1(func,member)  __func_2(func,__VA_ARGS__)

+ 115 - 13
Other/libRestfulFunc/RestfulFunc.h

@@ -20,8 +20,11 @@
 #endif
 #endif
 
+#include <iostream>
 #include <string>
 #include <map>
+#include <vector>
+#include <sstream>
 
 /*
 * > 0 : 网站返回的错误码,比如 200,404 等
@@ -52,7 +55,9 @@ enum HttpRequestMethod
     TRCE,
     CONNECT,
     MERGE,
-    PATCH
+    PATCH,
+    UPLOAD,
+    DOWNLOAD
 };
 
 enum HttpStatusCode : int
@@ -79,6 +84,32 @@ enum HttpStatusCode : int
     ServiceUnavailable = 503
 };
 
+
+struct HttpClientResponseResult
+{
+    int statusCode;
+    std::string content;
+
+    HttpClientResponseResult() :statusCode(HttpStatusCode::NotFound), content("") {}
+
+    /**  子类继承实现 */
+    virtual bool ResponseOK() const
+    {
+        return (statusCode == HttpStatusCode::OK);
+    }
+
+    virtual std::string WhatError() const
+    {
+        if (statusCode <= 0) {
+            return content;
+        } else {
+            std::ostringstream oss;
+            oss << "statusCode: "  << statusCode;
+            return oss.str();
+        }
+    }
+};
+
 struct HttpClientRequestConfig
 {
     /*!
@@ -89,53 +120,124 @@ struct HttpClientRequestConfig
      */
     HttpClientRequestConfig(const std::string& uri) 
         :mMethod(HttpRequestMethod::GET), mUri(uri), mToValidCert(false)
+        , mBodyContent(""), mContentType(""), mHeaderAcceptType("application/json"), mTimeoutSecs(0)
     {
     }
     HttpClientRequestConfig(HttpRequestMethod method)
-        : mMethod(method), mToValidCert(false)
+        : mMethod(method), mToValidCert(false), mBodyContent(""), mHeaderAcceptType("application/json")
+        , mContentType(""), mTimeoutSecs(0)
     {
     }
     HttpClientRequestConfig(HttpRequestMethod method, const std::string& uri) 
-        :mMethod(method), mUri(uri), mToValidCert(false)
+        :mMethod(method), mUri(uri), mToValidCert(false), mBodyContent("")
+        , mContentType(""), mHeaderAcceptType("application/json"), mTimeoutSecs(0)
     {
     }
 
     void SetRequestType(HttpRequestMethod method) { mMethod = method; }
+    HttpRequestMethod GetRequestType() const { return mMethod; }
+
     // uri: 必须以 "http://" 或 "https://" 开头
     void SetUri(const std::string& uri) { mUri = uri; }
     void SetChildUri(const std::string& subUri) { mSubUri = subUri; }
     void AppendQuery(const std::string& name, const std::string& value) {
         mQueryPairs[name] = value;
     }
-    void ResetQuery() { mQueryPairs.clear(); }
 
     std::string GetBaseUri() const { return mUri; }
     std::string GetSubUri() const { return mSubUri; }
-    const std::map<std::string, std::string>& GetQueryPairs() const { return mQueryPairs; }
     std::string GetRequestUri() const { return mUri + mSubUri; }
 
-    HttpRequestMethod GetType() const { return mMethod; }
+    void ResetQuery() { mQueryPairs.clear(); }
+    const std::map<std::string, std::string>& GetQueryPairs() const { return mQueryPairs; }
+
+    std::string GetAcceptType() const { return mHeaderAcceptType; }
+    void SetAcceptType(const std::string& value) {
+        mHeaderAcceptType = value;
+    }
 
     bool NeedValidCert() const { return mToValidCert; }
 
+    void SetJsonBody(const std::string& value) {
+        SetBodyContent(value, "application/json");
+    }
+
+    void SetBodyContent(const std::string& value, const std::string& type) {
+        mBodyContent = value;
+        mContentType = type;
+    }
+    virtual std::string GetBodyContent() const { return mBodyContent; }
+    virtual std::string GetContentType() const { return mContentType; }
+
+    void SetTimeout(uint32_t timeoutSecs) { mTimeoutSecs = timeoutSecs; }
+    uint32_t GetTimeout() const { return mTimeoutSecs; }
+
+    virtual void PreDo() {}
+    virtual void PostDo() {}
+
 private:
 
     HttpRequestMethod mMethod;
     std::string mUri;
     std::string mSubUri;
+    std::string mBodyContent;
+    std::string mContentType;
+    std::string mHeaderAcceptType;
 
     std::map<std::string, std::string> mQueryPairs;
 
     bool mToValidCert;
+    uint32_t mTimeoutSecs;
 };
 
-struct HttpClientResponseResult
+struct HttpClientPostTypeRequest : public HttpClientRequestConfig
 {
-    int statusCode;
-    std::string content;
-    /**  子类继承实现 */
-    virtual bool ConsiderAsSucc() const {
-        return (statusCode == HttpStatusCode::OK);
+    HttpClientPostTypeRequest(const std::string& uri)
+        :HttpClientRequestConfig(HttpRequestMethod::POST, uri) {}
+};
+
+struct HttpClientUploadRequest : public HttpClientRequestConfig
+{
+    HttpClientUploadRequest(const std::string& uri)
+        :HttpClientRequestConfig(HttpRequestMethod::DOWNLOAD, uri)
+    {
+    }
+
+    void ClearPararm() { mParams.clear(); }
+    void AddParams(const std::string& name, const std::string& value)
+    {
+        mParams.push_back(std::move(std::pair<std::string, std::string>(name, value)));
+    }
+    void SetDefaultParam(const std::string& value)
+    {
+        AddParams("params", value);
+    }
+
+    void ClearFiles() { mFiles.clear(); }
+    void AddFiles(const std::string& filePath)
+    {
+        mFiles.push_back(std::move(std::pair<std::string, std::string>("file_content", filePath)));
+    }
+
+    virtual void PreDo() 
+    {
+        auto p = BuildBodyContent();
+        std::cout << p.second << std::endl;
+        SetBodyContent(p.second, std::string("multipart/form-data; boundary=") + p.first);
+    }
+
+    std::pair<std::string, std::string> BuildBodyContent() const;
+
+private:
+    std::vector<std::pair<std::string, std::string> > mParams;
+    std::vector<std::pair<std::string, std::string> > mFiles;
+};
+
+struct HttpClientDownloadRequest : public HttpClientRequestConfig
+{
+    HttpClientDownloadRequest(const std::string& uri) 
+        :HttpClientRequestConfig(HttpRequestMethod::DOWNLOAD, uri) {
+        SetAcceptType("*/*");
     }
 };
 
@@ -147,7 +249,7 @@ public:
     static RestfulClient& getInstance(); // Singleton
     ~RestfulClient();
 
-    void Do(const HttpClientRequestConfig& requestConfig, HttpClientResponseResult& result);
+    void Do(const HttpClientRequestConfig* const pRequestConfig, HttpClientResponseResult* pResponse) const;
 
 private:
     RestfulClient();

+ 135 - 37
Other/libRestfulFunc/RestfulFuncImpl.cpp

@@ -57,62 +57,160 @@ namespace
         case PATCH:
             return http::methods::PATCH;
             break;
+        case UPLOAD:
+            return http::methods::POST;
+            break;
+        case DOWNLOAD:
+            return http::methods::POST;
+            break;
         default:
             break;
         }
 
         return http::methods::GET;
     }
+
+    void GetFileNameAndType(const std::string& absoluteFilePath, std::string& fileName, std::string& contentType)
+    {
+        size_t pos = absoluteFilePath.find_last_of("/\\");
+        fileName = absoluteFilePath.substr(pos + 1);
+        contentType = "application/octet-stream";
+        pos = fileName.find_last_of(".");
+        if (pos != std::string::npos) {
+            std::string ext = fileName.substr(pos + 1);
+            std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower);
+            if (ext == "jpg" || ext == "jpeg") {
+                contentType = "image/jpeg";
+            } else if (ext == "txt" /*|| ext == "log"*/) {
+                contentType = "text/plain";
+            } 
+        }
+    }
 }
 
-void RestfulClient::Do(const HttpClientRequestConfig& requestConfig, HttpClientResponseResult& result)
+void RestfulClient::Do(const HttpClientRequestConfig* const pRequestConfig, HttpClientResponseResult* pResponse) const
 {
     http_client_config config;
-    config.set_validate_certificates(requestConfig.NeedValidCert());
+    config.set_validate_certificates(pRequestConfig->NeedValidCert());
+    const uint32_t timeoutVal = pRequestConfig->GetTimeout();
+    if (timeoutVal != 0) {
+        config.set_timeout(utility::seconds(timeoutVal));
+    }
 
-    web::http::client::http_client client(requestConfig.GetBaseUri(), config);
+    web::http::client::http_client client(pRequestConfig->GetBaseUri(), config);
+    http_request request(MappingHttpRequestMethod(pRequestConfig->GetRequestType()));
+    uri_builder urib(pRequestConfig->GetSubUri());
 
-    http_request request(MappingHttpRequestMethod(requestConfig.GetType()));
-    uri_builder urib(requestConfig.GetSubUri());
-    if (requestConfig.GetQueryPairs().size() > 0) {
-        const auto& queries = requestConfig.GetQueryPairs();
+    if (pRequestConfig->GetQueryPairs().size() > 0) {
+        const auto& queries = pRequestConfig->GetQueryPairs();
         for (auto it = queries.cbegin(); it != queries.cend(); ++it) {
             urib.append_query(it->first, it->second);
         }
     }
     request.set_request_uri(urib.to_string());
+    request.headers().add(header_names::accept, pRequestConfig->GetAcceptType());
+    request.set_body(pRequestConfig->GetBodyContent(), pRequestConfig->GetContentType());
+
+    if (pRequestConfig->GetRequestType() == HttpRequestMethod::DOWNLOAD) {
+        pplx::task<void> requestTask = client.request(request)
+            .then([pResponse](http_response response) ->pplx::task<std::string> {
+            pResponse->statusCode = response.status_code();
+            if (pResponse->ResponseOK()) {
+                return response.extract_string();
+            } else {
+                std::cout << "response status result: " << response.status_code() << std::endl;
+                return pplx::task_from_result(std::string());
+            }
+                  })
+            .then([pResponse](pplx::task<std::string> vt) {
+                      try {
+                          pResponse->content = vt.get();
+                      } catch (const http_exception& ex) {
+                          pResponse->statusCode = -1;
+                          pResponse->content = ex.what();
+                      }
+                  });
+
+                  try {
+                      requestTask.wait();
+                  } catch (const std::exception& ex) {
+                      pResponse->statusCode = -1;
+                      pResponse->content = ex.what();
+                  }
+
+    } else {
+        pplx::task<void> requestTask = client.request(request)
+            .then([pResponse](http_response response) ->pplx::task<json::value> {
+            pResponse->statusCode = response.status_code();
+            if (pResponse->ResponseOK()) {
+                return response.extract_json();
+            } else {
+                std::cout << "response status result: " << response.status_code() << std::endl;
+                return pplx::task_from_result(json::value());
+            }
+                  })
+            .then([pResponse](pplx::task<json::value> vt) {
+                      try {
+
+                          json::value const& v = vt.get();
+                          pResponse->content = v.to_string();
+
+                      } catch (const http_exception& ex) {
+                          pResponse->statusCode = -1;
+                          pResponse->content = ex.what();
+                      }
+                  });
+
+                  try {
+                      requestTask.wait();
+                  } catch (const std::exception& ex) {
+                      pResponse->statusCode = -1;
+                      pResponse->content = ex.what();
+                  }
+    }
+}
 
-    request.headers().add(header_names::accept, "application/json");
 
-    pplx::task<void> requestTask = client.request(request)
-     .then([&result](http_response response) ->pplx::task<json::value> {
-        result.statusCode = response.status_code();
-        if (result.ConsiderAsSucc()) {
-            return response.extract_json();
-        } else {
-            std::cout << "response status rsult: " << response.status_code() << std::endl;
-            return pplx::task_from_result(json::value());
-        }
-     })
-    .then([&result](pplx::task<json::value> vt) {
-        try {
+std::pair<std::string, std::string> HttpClientUploadRequest::BuildBodyContent() const
+{
+    std::stringstream data;
 
-            json::value const& v = vt.get();
-            result.content = v.to_string();
+    std::string boundary{};
+    for (int i = 0; i < 50; i++) {
+        boundary += (rand() % 26) + 'A';
+    }
 
-        } catch (const http_exception& ex) {
-            result.statusCode = -1;
-            result.content = ex.what();
-        }
-    });
-
-     try
-     {
-         requestTask.wait();
-     }
-     catch (const std::exception& ex)
-     {
-         result.statusCode = -1;
-         result.content = ex.what();
-     }
+    for (auto& param : mParams) {
+        data << "\r\n--";
+        data << boundary;
+        data << "\r\nContent-Disposition: form-data; name=\"";
+        data << param.first;
+        data << "\"\r\n\r\n";
+        data << param.second;
+    }
+
+    for (auto& file : mFiles) {
+        std::string inputFileName;
+        std::string contentType;
+        GetFileNameAndType(file.second, inputFileName, contentType);
+        std::ifstream inputFile;
+        inputFile.open(file.second, std::ios::binary | std::ios::in);
+        std::string inputFileContent = std::string((std::istreambuf_iterator<char>(inputFile)), (std::istreambuf_iterator<char>()));
+        data << "\r\n--";
+        data << boundary;
+        data << "\r\nContent-Disposition: form-data; name=\"";
+        data << file.first;
+        data << "\"; filename=\"";
+        data << inputFileName;
+        data << "\"\r\nContent-Type: ";
+        data << contentType;
+        data << "\r\n\r\n";
+        data << inputFileContent;
+    }
+
+    data << "\r\n--";
+    data << boundary;
+    data << "--\r\n";
+
+    return { boundary, data.str() };
 }

+ 26 - 0
Other/libRestfulFunc/RestfulUtilty.hpp

@@ -0,0 +1,26 @@
+#ifndef _SP_UTILITY_RESTFUL_HELPER_
+#define _SP_UTILITY_RESTFUL_HELPER_
+
+#include <iostream> 
+#include <string>
+
+using namespace std;
+
+namespace Restful
+{
+
+namespace Utility
+{
+
+static void SplitFilePath(const std::string& absoluteFilePath, std::string& fileName, std::string& fileSuffix)
+{
+    //TODO:
+    string::size_type pos = absoluteFilePath.find_last_of("/\\") + 1;
+    fileName = path.substr(pos, absoluteFilePath.length() - pos);
+
+    fileSuffix = absoluteFilePath.substr(absoluteFilePath.find_last_of('.') + 1);
+}
+}
+
+
+#endif //_SP_UTILITY_RESTFUL_HELPER_

+ 41 - 1
Other/libRestfulFunc/test/testNormlReqAns.cpp

@@ -8,10 +8,50 @@ TEST_CASE("test api manage", "[restful]")
     HttpClientResponseResult result;
     config.SetChildUri("/api/manage/regist/7555980103");
     RestfulClient client = RestfulClient::getInstance();
-    client.Do(config, result);
+    client.Do(&config, &result);
     std::cout << result.content << std::endl;
     REQUIRE(!result.content.empty());
 }
 
+TEST_CASE("test  api stage get api", "[restful]")
+{
+    HttpClientRequestConfig config("https://rvcterminal.paasst.cmbchina.cn");
+    HttpClientResponseResult result;
+    config.SetChildUri("/api/stage");
+    config.AppendQuery("terminalNo", "7555980001");
+    RestfulClient client = RestfulClient::getInstance();
+    client.Do(&config, &result);
+    std::cout << result.content << std::endl;
+    REQUIRE(!result.content.empty());
+}
+
+TEST_CASE("test  api stage post api", "[restful]")
+{
+    HttpClientRequestConfig config("https://rvcterminal.paasst.cmbchina.cn");
+    config.SetRequestType(HttpRequestMethod::POST);
+    config.SetChildUri("/api/stage");
+    config.SetJsonBody("{\"terminalNo\":\"7555980001\", \"errEntityList\":\"566666\"}");
+    RestfulClient client = RestfulClient::getInstance();
+    HttpClientResponseResult result;
+    client.Do(&config, &result);
+    std::cout << result.content << std::endl;
+    REQUIRE(!result.content.empty());
+}
+
+TEST_CASE("test  api stage upload api", "[restful]")
+{
+    HttpClientUploadRequest config("http://55.6.78.29:8080");
+    config.SetChildUri("/api/upload/file");
+    config.SetDefaultParam("{\"branch_no\":\"755\",\"file_head_custom\":\"\",\"file_name\":\"20220301.log\",\"file_path\":\"/home/rvc/dbg/mod_initiativetransfer/20220301.log\",\"file_type\":\"O\",\"first_file_length\":\"105116\",\"last_file_length\":\"\",\"plan_id\":\"dbg\",\"system_type\":\"L\",\"terminal_no\":\"7555980012\",\"upload_length\":\"0\"}");
+    config.AddFiles("/home/rvc/dbg/mod_initiativetransfer/20220301.log");
+    RestfulClient client = RestfulClient::getInstance();
+    HttpClientResponseResult result;
+    config.PreDo();
+    client.Do(&config, &result);
+    std::cout << result.content << std::endl;
+    REQUIRE(!result.content.empty());
+}
+
+
 
 

+ 1 - 1
addin/cmake/DependencyConanFiles.cmake

@@ -85,7 +85,7 @@ else()
 	endif(PACK_AS_DEB_PKG)
 		
 	if(WITH_ADDITIONAL_RES)
-		list(APPEND CONAN_CURPLATFORM_LIB_NAMES  sogouime/2.6.0.9987@LR04.02_MediaRes/testing)
+		list(APPEND CONAN_CURPLATFORM_LIB_NAMES  sogouime/2.6.1.1539@LR04.02_MediaRes/testing)
 		list(APPEND CONAN_CURPLATFORM_LIB_NAMES HYQiHeiTTF/2021.1021.01@LR04.02_MediaRes/stable)
 		if(NOT PACK_AS_DEB_PKG)
 			list(APPEND CONAN_CURPLATFORM_LIB_NAMES UOSBrowser/5.3.52-1@LR04.02_RuntimeLib/testing)

Some files were not shown because too many files changed in this diff