浏览代码

Merge branch 'ST2' into T25UP341_base_ST2

80274480 1 月之前
父节点
当前提交
eed39e5d2d
共有 100 个文件被更改,包括 2034 次插入4128 次删除
  1. 23 2
      CMakeLists.txt
  2. 11 0
      CMakeSettings.json
  3. 8 14
      DevAdapter/include/CardAssist.cpp
  4. 0 1
      DevAdapter/liblog4vendor/test/test4log.cpp
  5. 0 1
      DevAdapter/self/dep/liblog4vendor/test4log/test4log.cpp
  6. 1 3
      Framework/Common/SpBase.h
  7. 4 0
      Framework/Common/SpSecureClient.h
  8. 26 38
      Framework/Common/SpUtility.h
  9. 40 42
      Framework/RvcLogSdk/CMakeLists.txt
  10. 1 1
      Framework/RvcLogSdk/log_util.cpp
  11. 3 1
      Framework/libtoolkit/CMakeLists.txt
  12. 37 0
      Framework/libtoolkit/fileutil.c
  13. 3 0
      Framework/libtoolkit/fileutil.h
  14. 7 5
      Framework/libtoolkit/log_periodic.c
  15. 0 6
      Framework/libtoolkit/log_single.c
  16. 103 2
      Framework/libtoolkit/osutil.c
  17. 13 0
      Framework/libtoolkit/osutil.h
  18. 1 0
      Framework/libtoolkit/process_monitor.h
  19. 3 3
      Framework/libtoolkit/shm_mem.c
  20. 2 2
      Framework/libtoolkit/sockutil.c
  21. 143 3
      Framework/libtoolkit/strutil.c
  22. 16 5
      Framework/libtoolkit/strutil.h
  23. 0 1
      Framework/libtoolkit/win/bus_daemon.c
  24. 0 2
      Framework/libtoolkit/win/ioqueue.c
  25. 7 5
      Framework/spbase/CMakeLists.txt
  26. 4 3
      Framework/spbase/CodeSignVerify.cpp
  27. 1 31
      Framework/spbase/SpBase.cpp
  28. 1 10
      Framework/spbase/SpEntity.cpp
  29. 0 10
      Framework/spbase/SpEntityPrivilege.cpp
  30. 0 1
      Framework/spbase/SpMisc.cpp
  31. 84 2
      Framework/spbase/SpSecureClient.cpp
  32. 8 47
      Framework/spbase/sp_cfg.cpp
  33. 3 7
      Framework/spbase/sp_dir.c
  34. 1 15
      Framework/spbase/sp_logwithlink.cpp
  35. 1 1
      Framework/spbase/sp_mod.c
  36. 1 1
      Framework/spbase/sp_pst.h
  37. 1 7
      Framework/spbase/sp_sps.c
  38. 1 0
      Framework/spbase/sp_sps.h
  39. 1 1
      Framework/spbase/sp_var.c
  40. 0 15
      Framework/spshell/log.cpp
  41. 1 44
      Framework/spshell/spshell.cpp
  42. 0 8
      Framework/spshell/svc.cpp
  43. 2 0
      Framework/winpr/include/winpr/crt.h
  44. 2 0
      Framework/winpr/include/winpr/sysinfo.h
  45. 30 0
      Framework/winpr/libwinpr/crt/conversion.c
  46. 2 1
      Framework/winpr/libwinpr/error/error.c
  47. 108 154
      Module/include/CommEntityUtil.hpp
  48. 50 113
      Module/mod_CardIssuerStand/CardIssuerStand.xml
  49. 195 468
      Module/mod_CardIssuerStand/CardIssuerStandFSM.cpp
  50. 133 391
      Module/mod_CardIssuerStand/CardIssuerStandFSM.h
  51. 15 147
      Module/mod_CardIssuerStand/CardIssuerStand_UserErrorCode.h
  52. 0 161
      Module/mod_CardIssuerStand/CardIssuerStand_client_g.h
  53. 7 111
      Module/mod_CardIssuerStand/CardIssuerStand_def_g.h
  54. 0 108
      Module/mod_CardIssuerStand/CardIssuerStand_server_g.h
  55. 3 16
      Module/mod_CardIssuerStand/mod_cardissuerStand.cpp
  56. 16 41
      Module/mod_CardIssuerStand/mod_cardissuerStand.h
  57. 15 105
      Module/mod_CardReadAdapter/CardReadAdapterFSM.cpp
  58. 1 1
      Module/mod_CardReadAdapter/CardReadAdapterFSM.h
  59. 56 63
      Module/mod_ContactlessCard/ContactlessFSM.cpp
  60. 3 4
      Module/mod_ContactlessCard/mod_ContactlessCard.h
  61. 0 43
      Module/mod_CustMngrAuth/CustMngrAuthFSM.cpp
  62. 24 102
      Module/mod_FingerPrint/FingerPrintFSM.cpp
  63. 3 4
      Module/mod_FingerPrint/mod_FingerPrint.h
  64. 42 14
      Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp
  65. 2 57
      Module/mod_ResourceWatcher/mod_ResourceWatcher.cpp
  66. 0 1
      Module/mod_ResourceWatcher/mod_ResourceWatcher.h
  67. 10 90
      Module/mod_SalesRecorder/mod_SalesRecorder.cpp
  68. 0 8
      Module/mod_SalesRecorder/mod_SalesRecorder.h
  69. 0 1
      Module/mod_ScannerSet/ScannerSetFSM.cpp
  70. 55 216
      Module/mod_UpgradeMgr/UpgradeTaskFSM.cpp
  71. 169 169
      Module/mod_UpgradeMgr/UpgradeTaskFSM.h
  72. 4 41
      Module/mod_UpgradeMgr/mod_UpgradeMgr.cpp
  73. 25 35
      Module/mod_accessauth/AccessAuthFSM.cpp
  74. 1 21
      Module/mod_accessauth/AccessAuthFSM.h
  75. 0 48
      Module/mod_accessauth/MyBase64.cpp
  76. 0 2
      Module/mod_accessauth/MyBase64.h
  77. 0 49
      Module/mod_accessauth/comm.cpp
  78. 0 4
      Module/mod_accessauth/comm.h
  79. 32 71
      Module/mod_accessauth/mod_AccessAuth.cpp
  80. 7 35
      Module/mod_alarm/mod_alarm.cpp
  81. 2 17
      Module/mod_assistantchannel/chan_protocol.h
  82. 1 13
      Module/mod_assistantchannel/mod_assistantchannel.cpp
  83. 172 230
      Module/mod_cardissuerstore/CardIssuerStoreFSM.cpp
  84. 1 1
      Module/mod_chromium/CModTools.cpp
  85. 0 39
      Module/mod_chromium/CWSCodec.cpp
  86. 2 20
      Module/mod_chromium/mod_chromium.cpp
  87. 1 2
      Module/mod_counterconnector/CMakeLists.txt
  88. 5 64
      Module/mod_counterconnector/ConnectorFSM.cpp
  89. 1 26
      Module/mod_counterconnector/ConnectorFSM.h
  90. 1 1
      Module/mod_counterconnector/callroute_nodelist.cpp
  91. 1 1
      Module/mod_counterconnector/http_callrouter.cpp
  92. 0 150
      Module/mod_counterconnector/strutil.cpp
  93. 0 18
      Module/mod_counterconnector/strutil.h
  94. 3 11
      Module/mod_facetracking/mod_facetracking.cpp
  95. 2 4
      Module/mod_guiconsole/guiconsole_define.cpp
  96. 3 2
      Module/mod_guiconsole/mod_guiconsole.cpp
  97. 7 25
      Module/mod_healthmanager/HealthManagerFSM.cpp
  98. 45 76
      Module/mod_healthmanager/mod_healthmanager.cpp
  99. 0 17
      Module/mod_healthmanager/mod_healthmanager.h
  100. 215 176
      Module/mod_heartbeat/HeartBeatFSM.cpp

+ 23 - 2
CMakeLists.txt

@@ -26,8 +26,11 @@ project(RvcTerminalApp)
 set(CMAKE_CXX_STANDARD 11)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
+# Have cmake create a compile database
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+
 #  Include extend cmake scripts
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/addin/cmake/ )
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/addin/cmake/)
 
 include(CheckStructHasMember)
 include(CheckIncludeFiles)
@@ -59,6 +62,12 @@ if ($ENV{BUILD_NUMBER})
 else()
 	rvc_record_build_number()
 endif()
+message(STATUS "CMake version: ${CMAKE_VERSION}")
+
+# find the cppcheck binary
+# set(CPPCHECK_ROOT_DIR "D:\\OpenSources\\cppcheck-2.18.0\\out\\build\\x64-Debug\\bin\\Debug")
+# include(CppCheckAnalysis)
+
 set(DEVOPS_ON FALSE)
 set(FORMAT_WITH_SUFFIX TRUE)
 set(DEVOPS_ON_CMAKE_ST FALSE)
@@ -267,7 +276,19 @@ if(${CMAKE_GENERATOR} MATCHES "Visual Studio*")
 		message(STATUS "set win32 platform default ${CMAKE_SYSTEM_PROCESSOR}")
 		set(CMAKE_GENERATOR_PLATFORM "${CMAKE_SYSTEM_PROCESSOR}")
 	endif()
-
+elseif(${CMAKE_GENERATOR} MATCHES "Ninja")
+	if(NOT DEFINED CMAKE_CONFIGURATION_TYPES)
+		set(CMAKE_CONFIGURATION_TYPES "Debug")
+	endif()
+	if(CMAKE_CONFIGURATION_TYPES STREQUAL Release)
+		set(BUILD_TYPE_NAME "Release")
+	elseif(CMAKE_CONFIGURATION_TYPES STREQUAL Debug)
+		message(STATUS "debug type")
+		set(BUILD_TYPE_NAME "Debug")
+	else()
+		message(STATUS "Unknown config type: ${CMAKE_CONFIGURATION_TYPES}")
+		set(BUILD_TYPE_NAME "Default")
+	endif()
 elseif(${CMAKE_GENERATOR} MATCHES "Unix*")
 	if(NOT DEFINED CMAKE_BUILD_TYPE)
 		set(CMAKE_BUILD_TYPE "Debug")

+ 11 - 0
CMakeSettings.json

@@ -69,6 +69,17 @@
       "remoteCopyBuildOutput": false,
       "remoteCopySourcesMethod": "rsync",
       "addressSanitizerRuntimeFlags": "detect_leaks=0"
+    },
+    {
+      "name": "x86-ReleaseWithNinja",
+      "generator": "Ninja",
+      "configurationType": "Release",
+      "buildRoot": "${projectDir}\\out\\build\\${name}",
+      "installRoot": "${projectDir}\\out\\install\\${name}",
+      "cmakeCommandArgs": "",
+      "buildCommandArgs": "",
+      "ctestCommandArgs": "",
+      "inheritEnvironments": [ "msvc_x86" ]
     }
   ]
 }

+ 8 - 14
DevAdapter/include/CardAssist.cpp

@@ -787,8 +787,8 @@ ErrorCodeEnum CCardProcess::BuildSupportedAppList(CardReadType eType,DeviceBaseC
 			if (recvBuf[lenRecv-2] == 0x6a && recvBuf[lenRecv-1] == 0x81)
 			{
 				//6A81 - 卡片被锁或命令不支持;
-				//以上情况中止交易oiltmp
-				LogWarn(Severity_Middle, Error_Unexpect, errICCommand, "<BuildSupportedAppList>, Build from PSE return 6a81,to term trans.");
+				//以上情况中止交易
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Build from PSE return 6a81,to term trans.");
 				return Error_DevMedia;
 				//return Error_Interact;//20220526@zjw 这里暂时按照需要循环重试来返回。这里实际应该是卡片数据问题,但部分厂商处理有问题,导致卡片时正常的,但快速拿走时,导致这里的数据异常
 			}
@@ -798,8 +798,7 @@ ErrorCodeEnum CCardProcess::BuildSupportedAppList(CardReadType eType,DeviceBaseC
 				//——情形 1:PSE 未找到,即卡片不支持目录选择方法; 
 				//——情形 2:P2 设为读取具有相同 AID 前缀的其它应用时卡片中已没有其它应用。 
 				//6283 - 选择文件无效。
-				errMsg = CSimpleStringA::Format("<BuildSupportedAppList>, Build from PSE failed. recv data:%x,%x", recvBuf[lenRecv-2], recvBuf[lenRecv-1]);
-				LogWarn(Severity_Middle, Error_Unexpect, errICCommand, errMsg.GetData());
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Build from PSE failed. recv data:%x,%x", recvBuf[lenRecv - 2], recvBuf[lenRecv - 1]);
 
 				delete[] recvBuf;
 				return BuildAppListByAIDs(eType,pCardX,vAIDFromTerm);			
@@ -1261,8 +1260,7 @@ ErrorCodeEnum CCardProcess::AppSelected(CardReadType eType,DeviceBaseClass *pCar
 				errICCommand = ContactlessCard_UserErrorCode_ICCommand_RecvData_Invalid;
 				break;
 			}
-			errMsg = CSimpleStringA::Format("<AppSelected>, app selected failed. end data not 9000:%x,%x",recvBuf[lenRecv-2],recvBuf[lenRecv-1]);
-			LogWarn(Severity_Middle, Error_Unexpect, errICCommand, errMsg.GetData());
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("app selected failed. end data not 9000:%x,%x", recvBuf[lenRecv - 2], recvBuf[lenRecv - 1]);
 			return Error_DevCommFailed;
 			//return Error_Interact;//这里暂时按照需要循环重试来返回。这里实际应该是卡片数据问题,但部分厂商处理有问题,导致卡片时正常的,但快速拿走时,导致这里的数据异常
 		}
@@ -2727,10 +2725,8 @@ int CCardProcess::GetICDataFromCard(CardReadType eType,DeviceBaseClass *pCardX,
 	{
 		int aidLen = StrBuf2HexBuf(pAIDs[index].GetData(),&aidData.aid);
 		aidData.len = aidLen;
-		char* aidTest = new char[128];
-		int aidStrLen = HexBuf2StrBuf(aidData.aid,&aidTest,5);
-		//DbgInfo(CSimpleStringA::Format("<GetICDataFromCard>, aid[%s][%s]",pAIDs[index].GetData(),aidTest));
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("<GetICDataFromCard>, aid[%s][%s]", pAIDs[index].GetData(), aidTest);
+
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("<GetICDataFromCard>, aid[%s]", pAIDs[index].GetData());
 		vector<AIDData> vAIDs;
 		vAIDs.push_back(aidData);
 
@@ -2765,8 +2761,7 @@ int CCardProcess::GetICDataFromCard(CardReadType eType,DeviceBaseClass *pCardX,
 		if (eErr != Error_Succeed)
 		{
 			QueryLastErr(eType, errMsg);
-			errMsg = CSimpleStringA::Format("GetICDataFromCard::BuildSupportedAppList failed(%d):%s.", eErr, errMsg.GetData());
-			LogWarn(Severity_Middle, Error_Unexpect, errBuildAppList, errMsg.GetData());
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("BuildSupportedAppList failed(%d):%s.", eErr, errMsg.GetData());
 			if(eErr == Error_Interact)
 				return -2;
 			else
@@ -2779,8 +2774,7 @@ int CCardProcess::GetICDataFromCard(CardReadType eType,DeviceBaseClass *pCardX,
 		else
 		{
 			QueryLastErr(eType, errMsg);
-			errMsg = CSimpleStringA::Format("GetICDataFromCard::AppSelected failed(%d):%s.", eErr, errMsg.GetData());
-			LogWarn(Severity_Middle, Error_Unexpect, errBuildAppList, errMsg.GetData());
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("AppSelected failed(%d):%s.", eErr, errMsg.GetData());
 			if(eErr == Error_Interact)
 				return -2;
 			else

+ 0 - 1
DevAdapter/liblog4vendor/test/test4log.cpp

@@ -181,7 +181,6 @@ void thread1(int param)
 		} else if(nLevel == 5) {
 			LOG4VTM(TRACE,("this is a TRACE log, times: ") << count);
 		}
-		//Sleep(nInterval);
 	} while (++count < times);
 }
 

+ 0 - 1
DevAdapter/self/dep/liblog4vendor/test4log/test4log.cpp

@@ -153,7 +153,6 @@ UINT WINAPI thread1(LPVOID param)
 		} else if(nLevel == 5) {
 			LOG4VTM(TRACE,_T("this is a TRACE log, times: ") << count);
 		}
-		//Sleep(nInterval);
 	} while (++count < times);
 
 	return 0;

+ 1 - 3
Framework/Common/SpBase.h

@@ -72,8 +72,7 @@ enum LogTypeEnum
 	Log_Warning=2,					// Warning
 	Log_Error=3,						// Error notify
 	Log_Debug=4,						// debug alert ec.Assert
-	Log_Fatal = 5,                     // Fatal notify
-	Log_Notify = 6                     //User notify
+	Log_Fatal = 5                     // Fatal notify
 };
 
 /** define the framework internal behavior log */
@@ -1668,7 +1667,6 @@ SPBASE_API void LogFatal(const SeverityLevelEnum eLevel, ErrorCodeEnum dwSysErro
 SPBASE_API void LogAssert(const char *pszMessage,const char *pszSourceFile,const int nLine);
 SPBASE_API void LogTrace(const char *pszMessage,const char *pszSourceFile,const int nLine);
 
-SPBASE_API void LogNotify(const NotifyLevelEnum eLevel, ErrorCodeEnum dwSysErrorCode, DWORD dwUserErrorCode, const char* pszMessage);
 SPBASE_API void LogEvent(const SeverityLevelEnum eLevel, DWORD dwUserEventCode, const char* pszMessage, const linkContext& t_context);
 SPBASE_API void LogError(const SeverityLevelEnum eLevel, ErrorCodeEnum dwSysErrorCode, DWORD dwUserErrorCode, const char* pszMessage, const linkContext& t_context);
 SPBASE_API void LogWarn(const SeverityLevelEnum eLevel, ErrorCodeEnum dwSysErrorCode, DWORD dwUserErrorCode, const char* pszMessage, const linkContext& t_context);

+ 4 - 0
Framework/Common/SpSecureClient.h

@@ -39,6 +39,8 @@ public:
 
 	// 使用集中配置项连接
 	bool ConnectFromCentralSetting();
+
+	bool ConnectFromAddress(CSimpleStringA mainServ, CAutoArray<CSimpleStringA> backupServArr, CSimpleStringA& connectedServ);
 	
 	bool IsConnectionOK();
 	bool IsSecureConn();	
@@ -83,6 +85,8 @@ private:
 	bool Connect_Single(ENTITY_CONNECT_INFO *connectInfo, int option);
 	//支持双活
 	bool Connect_Dual(ENTITY_CONNECT_INFO *connectInfo, int option);
+	
+	bool Connect_Standby(CSimpleStringA mainServ, CAutoArray<CSimpleStringA> backupServArr, int option, CSimpleStringA &connectedServ);
 	void OnReConnect();
 	void DbgWithLink_DualActive(const char* formatStr, ...);
 protected:

+ 26 - 38
Framework/Common/SpUtility.h

@@ -40,14 +40,6 @@ namespace SP {
 
 	namespace Utility {
 
-		inline static int hex2int(const char c)
-		{
-			if (c >= '0' && c <= '9') return (c - '0');
-			if (c >= 'A' && c <= 'F') return (c - 'A' + 10);
-			if (c >= 'a' && c <= 'f') return (c - 'a' + 10);
-			return 0xFF;
-		}
-
 		inline bool IsStartWith(std::string const& s, std::string const& prefix)
 		{
 			return s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin());
@@ -126,36 +118,6 @@ namespace SP {
 			return replaced;
 		}
 
-		/** remembe to delete[] return value if not null*/
-		inline static char* HexStr2Bytes(const std::string& str)
-        {
-            const int sz = str.length();
-            char* ret = new char[sz / 2 + 1];
-            if (ret == NULL) {
-                return NULL;
-            }
-            for (int i = 0; i < sz; i += 2) {
-                ret[i / 2] = (char)(((hex2int(str[i])) << 4) | hex2int(str[i + 1]));
-            }
-			ret[sz / 2] = 0x00;
-            return ret;
-        }
-
-		inline static std::string Bytes2HexStr(char* bytes, std::size_t byteLen)
-        {
-            std::string str("");
-            const std::string conv("0123456789ABCDEF");
-            for (std::size_t i = 0; i < byteLen; ++i) {
-                int b = 0x0F & (bytes[i] >> 4);
-                str.push_back(conv[b]);
-                //str.append(1, conv[b]);
-                b = 0x0F & (bytes[i]);
-                str.push_back(conv[b]);
-                //str.append(1, conv[b]);
-            }
-            return str;
-        }
-
 		template<typename T>
 		std::string fpToString(T value, int precision) {
 			std::ostringstream oss;
@@ -188,6 +150,32 @@ namespace SP {
             return strs;
         }
 
+		/** TODO: Migrate from  LocalMediaplyer::AdvManage, which is functionally similar as the above one [Gifur@2025822]
+		两者实现还有些不一样,参考find_first_of的用法,分隔符号更多是separator的其中之一个字符就生效
+		*/
+		inline static void split2(const std::string& src, const std::string& separator, std::vector<std::string>& dest)
+		{
+			std::string str = src;
+			std::string substring;
+			std::string::size_type start = 0, index;
+
+			do
+			{
+				index = str.find_first_of(separator, start);
+				if (index != std::string::npos)
+				{
+					substring = str.substr(start, index - start);
+					dest.push_back(substring);
+					start = str.find_first_not_of(separator, index);
+					if (start == std::string::npos) return;
+				}
+			} while (index != std::string::npos);
+
+			//the last token
+			substring = str.substr(start);
+			dest.push_back(substring);
+		}
+
 		inline std::string ExtractClassName(std::string const& className) 
 		{
 			std::string strClassName = className;

+ 40 - 42
Framework/RvcLogSdk/CMakeLists.txt

@@ -9,39 +9,39 @@ list(APPEND SQLITE3_SRCS ${CMAKE_SOURCE_DIR}/ThirdParty/Include/uuid4/uuid4.cpp)
 add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS} ${SQLITE3_SRCS})
 
 if(MSVC)
-target_include_directories(${MODULE_NAME} PRIVATE
-    ${CMAKE_CURRENT_SOURCE_DIR}
-    ${CMAKE_CURRENT_SOURCE_DIR}/sqlite3
-    ${CONAN_INCLUDE_DIRS_LIBKYSM}
-    ${CONAN_INCLUDE_DIRS_JSONCPP}
-    ${RVCFRAMEWORK_SOURCES_DIR}/RvcRestfulSdk
-    ${CMAKE_SOURCE_DIR}/ThirdParty/Include/CJson
-    ${CMAKE_SOURCE_DIR}/ThirdParty/Include/uuid4
-    ${CONAN_INCLUDE_DIRS_ZLIB}
-    ${CONAN_INCLUDE_DIRS_OPENSSL}
-)
-target_link_directories(${MODULE_NAME} PRIVATE 
-    ${CONAN_LIB_DIRS_LIBKYSM} 
-    ${CONAN_LIB_DIRS_JSONCPP}
-    ${CONAN_LIB_DIRS_ZLIB}
-    ${CONAN_LIB_DIRS_OPENSSL} 
-)
+    target_include_directories(${MODULE_NAME} PRIVATE
+        ${CMAKE_CURRENT_SOURCE_DIR}
+        ${CMAKE_CURRENT_SOURCE_DIR}/sqlite3
+        ${CONAN_INCLUDE_DIRS_LIBKYSM}
+        ${CONAN_INCLUDE_DIRS_JSONCPP}
+        ${RVCFRAMEWORK_SOURCES_DIR}/RvcRestfulSdk
+        ${CMAKE_SOURCE_DIR}/ThirdParty/Include/CJson
+        ${CMAKE_SOURCE_DIR}/ThirdParty/Include/uuid4
+        ${CONAN_INCLUDE_DIRS_ZLIB}
+        ${CONAN_INCLUDE_DIRS_OPENSSL}
+    )
+    target_link_directories(${MODULE_NAME} PRIVATE 
+        ${CONAN_LIB_DIRS_LIBKYSM} 
+        ${CONAN_LIB_DIRS_JSONCPP}
+        ${CONAN_LIB_DIRS_ZLIB}
+        ${CONAN_LIB_DIRS_OPENSSL} 
+    )
 else()
-target_include_directories(${MODULE_NAME} PRIVATE
-    ${CMAKE_CURRENT_SOURCE_DIR}
-    ${CMAKE_CURRENT_SOURCE_DIR}/sqlite3
-    ${CONAN_INCLUDE_DIRS_LIBKYSM}
-    ${CONAN_INCLUDE_DIRS_JSONCPP}
-    ${RVCFRAMEWORK_SOURCES_DIR}/RvcRestfulSdk
-    ${CMAKE_SOURCE_DIR}/ThirdParty/Include/CJson
-    ${CMAKE_SOURCE_DIR}/ThirdParty/Include/uuid4
-    ${CONAN_INCLUDE_DIRS_ZLIB}
-)
-target_link_directories(${MODULE_NAME} PRIVATE 
-    ${CONAN_LIB_DIRS_LIBKYSM} 
-    ${CONAN_LIB_DIRS_JSONCPP}
-    ${CONAN_LIB_DIRS_ZLIB}
-)
+    target_include_directories(${MODULE_NAME} PRIVATE
+        ${CMAKE_CURRENT_SOURCE_DIR}
+        ${CMAKE_CURRENT_SOURCE_DIR}/sqlite3
+        ${CONAN_INCLUDE_DIRS_LIBKYSM}
+        ${CONAN_INCLUDE_DIRS_JSONCPP}
+        ${RVCFRAMEWORK_SOURCES_DIR}/RvcRestfulSdk
+        ${CMAKE_SOURCE_DIR}/ThirdParty/Include/CJson
+        ${CMAKE_SOURCE_DIR}/ThirdParty/Include/uuid4
+        ${CONAN_INCLUDE_DIRS_ZLIB}
+    )
+    target_link_directories(${MODULE_NAME} PRIVATE 
+        ${CONAN_LIB_DIRS_LIBKYSM} 
+        ${CONAN_LIB_DIRS_JSONCPP}
+        ${CONAN_LIB_DIRS_ZLIB}
+    )
 endif(MSVC)
 
 target_link_libraries(${MODULE_NAME}
@@ -54,20 +54,18 @@ target_link_libraries(${MODULE_NAME}
 
 message(STATUS "zlib library: ${CONAN_PKG_LIBS_OPENSSL} ${CONAN_PKG_LIBS_ZLIB} ${CONAN_PKG_LIBS_JSONCPP}")
 
-# target_compile_definitions(${MODULE_NAME} PRIVATE "-DCMBSM_LINKED_AS_STATIC_LIBRARY")
-
 if(MSVC)
     install(TARGETS ${MODULE_NAME} 
-    RUNTIME DESTINATION "${RVC_RUNTIME_PATH}" COMPONENT libraries
-    ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
-    LIBRARY DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT libraries
+        RUNTIME DESTINATION "${RVC_RUNTIME_PATH}" COMPONENT libraries
+        ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
+        LIBRARY DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT libraries
     )
 else()
-install(TARGETS ${MODULE_NAME} 
-    RUNTIME DESTINATION "${RVC_RUNTIME_PATH}"
-    ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
-    LIBRARY DESTINATION "${RVC_RUNTIME_PATH}"
-	COMPONENT libraries)
+    install(TARGETS ${MODULE_NAME} 
+        RUNTIME DESTINATION "${RVC_RUNTIME_PATH}"
+        ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
+        LIBRARY DESTINATION "${RVC_RUNTIME_PATH}"
+	    COMPONENT libraries)
 endif(MSVC)
 
 if (WITH_PDB_SAVE AND MSVC AND BUILD_SHARED_LIBS)

+ 1 - 1
Framework/RvcLogSdk/log_util.cpp

@@ -146,7 +146,7 @@ void GetUnitedTimeStr(time_t time, char* szTime)
 	);
 }
 
-//TODO: CrossPlaform  相对独立,不用框架库提供的函数进行IP 获取 [Gifur@2025729]
+//相对独立,不用框架库提供的函数进行IP 获取 [Gifur@2025729]
 int GetLocalIP(char* ip_str)
 {
 	

+ 3 - 1
Framework/libtoolkit/CMakeLists.txt

@@ -62,14 +62,16 @@ if(MSVC)
   target_compile_definitions(${MODULE_NAME} PRIVATE  "-DLIBTOOLKIT_EXPORTS")
   list(APPEND ${MODULE_PREFIX}_LIBS 
     dbghelp 
+    uuid
     ws2_32
     Winmm
+    pdh
     MsWSock # ioqueue
     IPHlpApi
     winpr)
 
 else(MSVC)
-  list(APPEND ${MODULE_PREFIX}_LIBS ${PRIVATE_KEYWORD} winpr ${PRIVATE_KEYWORD} rt)
+  list(APPEND ${MODULE_PREFIX}_LIBS ${PRIVATE_KEYWORD} winpr ${PRIVATE_KEYWORD} rt ${PRIVATE_KEYWORD} uuid)
 endif(MSVC)
 
 set_target_properties(${MODULE_NAME} PROPERTIES DEBUG_POSTFIX "d")

+ 37 - 0
Framework/libtoolkit/fileutil.c

@@ -14,6 +14,7 @@
 #include <sys/types.h>
 #include <dirent.h>
 #include <sys/stat.h>
+#include <fcntl.h>
 #endif
 
 #include "array.h"
@@ -56,6 +57,14 @@ TOOLKIT_API DWORD ReadFileSize(LPCSTR pszFile)
 	return fileSize;
 }
 
+TOOLKIT_API void SureUnixFileAttributeAccessable(LPCSTR pszFile)
+{
+#ifndef _MSC_VER
+	mode_t f_attrib = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH | S_IWOTH;
+	chmod(pszFile, f_attrib);
+#endif
+}
+
 TOOLKIT_API BOOL CreateDirA(LPCSTR lpDirPath, BOOL bRecursive)
 {
 	char* slashPos = NULL;
@@ -210,6 +219,34 @@ TOOLKIT_API BOOL RemoveFileReadOnlyAttributeA(LPCSTR pszFile)
 	return FALSE;
 }
 
+TOOLKIT_API BOOL IsDirectory(LPCSTR pszDir)
+{
+	char szCurPath[MAX_PATH * 2] = { 0 };
+#ifdef _WIN32
+	HANDLE hFile;
+	WIN32_FIND_DATAA FindFileData = { 0 };
+	_snprintf(szCurPath, MAX_PATH * 2, "%s//*", pszDir);
+	hFile = FindFirstFileA(szCurPath, &FindFileData); /**< find first file by given path. */
+	if (hFile == INVALID_HANDLE_VALUE)
+	{
+		return FALSE; /** 如果不能找到第一个文件,那么没有目录 */
+	}
+	else
+	{
+		FindClose(hFile);
+		return TRUE;
+	}
+#else
+	struct stat buf;
+	snprintf(szCurPath, MAX_PATH * 2, "%s//*", pszDir);
+	if (0 == stat(szCurPath, &buf))
+	{
+		return S_ISDIR(buf.st_mode);
+	}
+	return FALSE;
+#endif
+}
+
 // 递归拷贝所有文件及子文件夹
 TOOLKIT_API BOOL CopyDirA(LPCSTR pszSourceDir, LPCSTR pszDestDir)
 {

+ 3 - 0
Framework/libtoolkit/fileutil.h

@@ -29,6 +29,9 @@ TOOLKIT_API DWORD ReadFileSize(LPCSTR pszFile);
 
 TOOLKIT_API BOOL RemoveFileA(LPCSTR pszFile);
 TOOLKIT_API BOOL RemoveFileReadOnlyAttributeA(LPCSTR pszFile);
+TOOLKIT_API void SureUnixFileAttributeAccessable(LPCSTR pszFile);
+
+TOOLKIT_API BOOL IsDirectory(LPCSTR pszDir);
 
 TOOLKIT_API BOOL CopyDirA(LPCSTR pszSourceDir, LPCSTR pszDestDir);
 

+ 7 - 5
Framework/libtoolkit/log_periodic.c

@@ -285,13 +285,15 @@ static int periodicfilefactory_record_log(void *self,
 			plog->first_record = 0;
 		} else {
 			//TODO: CrossPlaform 这个不太好处理,需要直接修改WINPR中的GetCurrentThreadId原始函数,但这个函数有其他引用  [Gifur@202584]
-#if defined(_MSC_VER)
+
             n = sprintf(tmp, LINE_BREAK_STR "[%02d:%02d:%02d.%03d][%5u][%s] ",
-                        st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, GetCurrentThreadId(), log_level2str(level));
+                        st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, 
+#if defined(_MSC_VER)
+				GetCurrentThreadId(), 
 #else
-            n = sprintf(tmp, LINE_BREAK_STR "[%02d:%02d:%02d.%03d][%5u][%s] ",
-                        st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, GetCurrentThreadIdFromSys(), log_level2str(level));
-#endif //_MSC_VER
+				GetCurrentThreadIdFromSys(),
+#endif
+				log_level2str(level));
 		}
 		_fwrite_nolock(tmp, n, 1, plog->fp);
 		_fwrite_nolock(s, sn, 1, plog->fp);

+ 0 - 6
Framework/libtoolkit/log_single.c

@@ -36,7 +36,6 @@ static void singlefilefactory_destroy(void *self)
 
 static void* singlefilefactory_create_log(void *self, const char* inst)
 {
-	singlelogfactory_t *fac = (singlelogfactory_t *)self;
 	singlelog_t *log = MALLOC_T(singlelog_t);
 	log->base.level = XLOG_LEVEL_ALL;
 	log->base.factory = self;
@@ -55,7 +54,6 @@ static int singlefilefactory_set_log_param(void *self,
 													const char *key, 
 													const char *value)
 {
-	singlelogfactory_t *fac = (singlelogfactory_t *)self;
 	singlelog_t *slog = (singlelog_t*)log;
 	if (_stricmp(key, "file") == 0) {
 		char *p;
@@ -110,7 +108,6 @@ static int singlefilefactory_set_log_param(void *self,
 
 static int singlefilefactory_init_log(void *self, void *log)
 {
-	singlelogfactory_t *fac = (singlelogfactory_t *)self;
 	singlelog_t *slog = (singlelog_t*)log;
 	slog->fp = fopen(slog->file_path, "ab");
 	if (slog->fp) {
@@ -121,7 +118,6 @@ static int singlefilefactory_init_log(void *self, void *log)
 
 static int singlefilefactory_term_log(void *self, void *log)
 {
-	singlelogfactory_t *fac = (singlelogfactory_t *)self;
 	singlelog_t *slog = (singlelog_t*)log;
 	if (slog->fp) {
 		fclose(slog->fp);
@@ -153,14 +149,12 @@ static int singlefilefactory_record_log(void *self,
 										const char *s, 
 										int sn)
 {
-	singlelogfactory_t *fac = (singlelogfactory_t *)self;
 	singlelog_t *slog = (singlelog_t*)log;
 	if (slog->fp) {
 		SYSTEMTIME st;
 		FILETIME utc_ft, local_ft;
 		char tmp[64];
 		int n;
-		DWORD dwBytesWritten = 0;
 
 		if (slog->use_lock) {
 			fastlock_enter(slog->lock);

+ 103 - 2
Framework/libtoolkit/osutil.c

@@ -5,9 +5,14 @@
 #include "toolkit.h"
 
 #ifdef _WIN32
-
+#include <Pdh.h>
 #include <TlHelp32.h>
 
+#define DIV (1024 * 1024)
+#define DAY_DIV (24 * 60 * 60)
+#define HOURS_DIV (60 * 60)
+#define MINUS_DIV (60)
+
 TOOLKIT_API int osutil_detect_unique_app(char** pNames, int nNum, int* alive, alive_process_info* alive_process_arr)
 {
 	HANDLE hSnapshot;
@@ -124,7 +129,6 @@ TOOLKIT_API int osutil_uname(tk_utsname_t* buffer)
 	return TOOLKIT_UNKNOWN;
 }
 
-
 TOOLKIT_API int osutil_is32r64_platform()
 {
 	int isWow64 = -1;
@@ -173,6 +177,7 @@ TOOLKIT_API void osutil_reset_redirect_32sys_in_wow64(ostuile_void_ptr* value)
 #include <winpr/wtypes.h>
 #include <sys/reboot.h>
 #include <sys/utsname.h>
+#include <sys/sysinfo.h>
 
 #define DEFAULT_PROCESS_CMDLINE_SIZE 56
 #define DEFAULT_PROCESS_PATH_SIZE 8192
@@ -534,5 +539,101 @@ TOOLKIT_API int osutil_shutdown_system()
 
 
 
+TOOLKIT_API int osutil_system_boot_time(tk_systime_t* ptr_boot_time)
+{
+	int result = -1;
+	
+#if defined(_MSC_VER)
+	const char* SystemElapsedQuery = "\\System\\System Up Time";
+	PDH_STATUS Status;
+	HQUERY Query = NULL;
+	HCOUNTER hcElapsedTimeCount;
+	/** 杀毒软件会对附件这几个系统调用函数有所监控,导致有时会耗费5s时间 Gifur@20221019]*/
+	Status = PdhOpenQuery(NULL, NULL, &Query);
+	PDH_FMT_COUNTERVALUE counterValue;
+	if (Status != ERROR_SUCCESS) {
+		return result;
+	}
+	Status = PdhAddCounter(Query, SystemElapsedQuery, NULL, &hcElapsedTimeCount);
+	if (Status != ERROR_SUCCESS) {
+		return result;
+	}
+
+	Status = PdhCollectQueryData(Query);
+	if (Status != ERROR_SUCCESS) {
+		goto Cleanup;
+	}
+	Status = PdhGetFormattedCounterValue(hcElapsedTimeCount, PDH_FMT_LARGE, NULL, &counterValue);
+	if (Status == ERROR_SUCCESS) {
+		FILETIME ftCurTime, ftStartTime;
+		GetSystemTimeAsFileTime(&ftCurTime);
+		
+		ULARGE_INTEGER uliCurTime;
+		uliCurTime.HighPart = ftCurTime.dwHighDateTime;
+		uliCurTime.LowPart = ftCurTime.dwLowDateTime;
+		uliCurTime.QuadPart -= counterValue.largeValue * 1e7;
+
+		ftStartTime.dwHighDateTime = uliCurTime.HighPart;
+		ftStartTime.dwLowDateTime = uliCurTime.LowPart;
+
+		SYSTEMTIME stUTC, stLocal;
+
+		FileTimeToSystemTime(&ftStartTime, &stUTC);
+		SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
+
+		ptr_boot_time->year = stLocal.wYear;
+		ptr_boot_time->month = stLocal.wMonth;
+		ptr_boot_time->dayofweek = stLocal.wDayOfWeek;
+		ptr_boot_time->day = stLocal.wDay;
+		ptr_boot_time->hour = stLocal.wHour;
+		ptr_boot_time->minute = stLocal.wMinute;
+		ptr_boot_time->second = stLocal.wSecond;
+		ptr_boot_time->milli_seconds = stLocal.wMilliseconds;
+
+		result = 0;
+	}
+Cleanup:
+	Status = PdhRemoveCounter(hcElapsedTimeCount);
+	if (Query) {
+		PdhCloseQuery(Query);
+	}
+#else
+	DWORD ticks = 0;
+	struct sysinfo info;
+	time_t curTime = 0;
+	time_t bootTime = 0;
+	struct tm* ptm = NULL;
+	if (sysinfo(&info)) {
+		return result;
+	}
+	time(&curTime);
+	if (curTime > info.uptime) {
+		bootTime = curTime - info.uptime;
+	}
+	else
+	{
+		bootTime = info.uptime - curTime;
+	}
+	ptm = localtime(&bootTime);
+	ptr_boot_time->year = (WORD)(ptm->tm_year + 1900);
+	ptr_boot_time->month = (WORD)(ptm->tm_mon + 1);
+	ptr_boot_time->dayofweek = (WORD)ptm->tm_wday;
+	ptr_boot_time->day = (WORD)ptm->tm_mday;
+	ptr_boot_time->hour = (WORD)ptm->tm_hour;
+	ptr_boot_time->minute = (WORD)ptm->tm_min;
+	ptr_boot_time->second = (WORD)ptm->tm_sec;
+
+	struct timespec ts;
+	if (!clock_gettime(CLOCK_MONOTONIC_RAW, &ts)) {//获取毫秒的数据不太准确
+		ticks = (ts.tv_sec * 1000) + (ts.tv_nsec / 1000000);
+	}
+	ptr_boot_time->milli_seconds = (WORD)(ticks % 1000);
+	result = 0;
+
+#endif //_MSC_VER
+
+	return result;
+}
+
 
 

+ 13 - 0
Framework/libtoolkit/osutil.h

@@ -42,6 +42,17 @@ extern "C" {
            to as meaningless in the docs. */
     }tk_utsname_t;
 
+	typedef struct toolkit_systime_s {
+		unsigned short year;
+        unsigned short month;
+        unsigned short dayofweek;
+        unsigned short day;
+        unsigned short hour;
+        unsigned short minute;
+        unsigned short second;
+        unsigned short milli_seconds;
+	} tk_systime_t;
+
 // non-zero: unique
 // zero: has clone
 TOOLKIT_API int osutil_detect_unique_app(char **pNames, int nNum, int* alive, alive_process_info* alive_process_arr);
@@ -52,6 +63,8 @@ TOOLKIT_API void osutil_terminate_related_process(char** process_array, const in
 
 TOOLKIT_API int osutil_uname(tk_utsname_t* buffer);
 
+TOOLKIT_API int osutil_system_boot_time(tk_systime_t* ptr_boot_time);
+
 /*
 * -1:failed
 * 0:no

+ 1 - 0
Framework/libtoolkit/process_monitor.h

@@ -29,6 +29,7 @@ TOOLKIT_API int process_monitor_start(process_monitor_t *monitor);
 TOOLKIT_API int process_monitor_stop(process_monitor_t *monitor);
 TOOLKIT_API int process_monitor_add(process_monitor_t *monitor, tk_process_t* process);
 TOOLKIT_API int process_monitor_remove(process_monitor_t *monitor, tk_process_t* process);
+TOOLKIT_API int process_monitor_destroy(process_monitor_t* monitor);
 
 #ifdef __cplusplus
 } // extern "C" {

+ 3 - 3
Framework/libtoolkit/shm_mem.c

@@ -68,9 +68,6 @@ https://stackoverflow.com/questions/5939578/how-to-choose-a-fixed-address-for-sh
 
 TOOLKIT_API int shm_getmem(int key, void** hint, int newcreate)
 {
-    int fd = -1;
-    int flag = 0;
-
 #ifndef _WIN32
     const size_t region_size = sysconf(_SC_PAGE_SIZE);
     WLog_DBG(TAG, "allocating SHM block, page size: %d", region_size);
@@ -90,6 +87,9 @@ TOOLKIT_API int shm_getmem(int key, void** hint, int newcreate)
 #ifndef USE_ANON_MMAP
 
 #ifdef USE_DEVSHM_MMAP
+	int fd = -1;
+	int flag = 0;
+
     WLog_WARN(TAG, "using /dev/shm memory");
     flag = O_RDWR;
     if (newcreate) {

+ 2 - 2
Framework/libtoolkit/sockutil.c

@@ -36,14 +36,14 @@ static int is_legal_ip(char* content)
 	if (len < strlen("0.0.0.0")) {
 		return -1;
 	}
-	//99¿ªÍ·ÐÐÄÚ°ì¹«Íø£¬10¿ªÍ·ÐÐÄÚÒµÎñÍø¡£¹æ·¶³ö×Ô¡¶ÕÐÉÌÒøÐÐ×ÜÐÐÍøÂç¹æ·¶»ã±à£¨2017Äê°æ£©.pdf¡·
+	//99开头行内办公网,10开头行内业务网。规范出自《招商银行总行网络规范汇编(2017年版).pdf》
 	if (strstr(content, "99.") == content || strstr(content, "10.") == content) {
 		return 1;
 	}
 
 	if (strcmp(content, "127.0.0.1") == 0 /*sipphone*/
 		|| strcmp(content, "2.0.0.1") == 0 /*ConnecotrFSM*/
-		|| strstr(content, "198.168.") == content /*sipphone Ë«Íø¿¨*/
+		|| strstr(content, "198.168.") == content /*sipphone �网�*/
 		) {
 		return -1;
 	}

+ 143 - 3
Framework/libtoolkit/strutil.c

@@ -13,7 +13,13 @@
 
 #include <winpr/wtypes.h>
 #include <winpr/string.h>
+#include <winpr/crt.h>
 #include "dbgutil.h"
+
+#ifndef _MSC_VER 
+#include "uuid/uuid.h"
+#endif //NOT _MSC_VER
+
 #pragma warning(disable : 4311)
 
 TOOLKIT_API const char *memstr(const char *buf, int n, const char *str)
@@ -1893,7 +1899,6 @@ static char *vasnprintf (char *resultbuf, size_t *lengthp, const char *format, v
 		    *p++ = '6';
 		    *p++ = '4';
 		    break;
-		    *p++ = 'l';
 		    /*FALLTHROUGH*/
 		  case TYPE_LONGINT:
 		  case TYPE_ULONGINT:
@@ -2047,8 +2052,6 @@ static char *vasnprintf (char *resultbuf, size_t *lengthp, const char *format, v
 			    {
 			      if (dp->precision_arg_index >= 0)
 				{
-				  int arg;
-				  
 				  if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
 				    abort ();
 				  arg = a.arg[dp->precision_arg_index].a.a_int;
@@ -2400,3 +2403,140 @@ TOOLKIT_API void str_parse_cmdline (char *cmdstart, char **argv, char *args, int
 		*argv++ = NULL;
 	++*numargs;
 }
+
+TOOLKIT_API void str_get_format_uuid(char* strbuffer, size_t ulen)
+{
+#if defined(_MSC_VER)
+	UUID uuid;
+	size_t uuidlen = 0;
+	RPC_CSTR buf;
+	UuidCreate((UUID*)&uuid);
+	UuidToString((UUID*)&uuid, &buf);
+
+	uuidlen = strlen((const char*)buf);
+	if (uuidlen < ulen) {
+		memcpy(strbuffer, (const char*)buf, uuidlen);
+	}
+
+	RpcStringFree(&buf);
+#else
+	uuid_t uuid;
+	uuid_generate(uuid);
+	uuid_unparse(uuid, strbuffer);
+#endif
+
+}
+
+TOOLKIT_API int str_reset_buffer(void* pbuf, int idata, size_t ulen)
+{
+	int ret = -1;
+	if (pbuf) {
+		memset(pbuf, idata, ulen);
+		ret = 0;
+	}
+
+	return ret;
+}
+
+
+TOOLKIT_API int str_rend_string(char* pSrc, int iflag)
+{
+	int ret = -1;
+	if (pSrc) {
+		char* pindex = pSrc;
+		while (*pindex != iflag) {
+			pindex++;
+		};
+		*pindex = '\0';
+		ret = 0;
+	}
+
+	return ret;
+}
+
+TOOLKIT_API int str_fifter_string(char* pbuf, size_t usize, const char* psrc, const char cflag)
+{
+	int ret = -1;
+	int i = 0;
+	int j = 0;
+	size_t ulen = 0;
+	const char* pindex = psrc;
+	if (NULL == psrc) {
+		return ret;
+	}
+
+	ulen = strlen(psrc);
+	for (i = 0; i < ulen && i < usize; i++) {
+		if (pindex[i] != cflag) {
+			pbuf[j++] = pindex[i];
+		}
+	}
+	if (j == ulen - 2) {
+		ret = 0;
+	}
+
+	return ret;
+}
+
+
+TOOLKIT_API int str_get_interger_netaddr(char* strbuf, size_t ubufszie, const char* szip)
+{
+	int ret = -1;
+
+	unsigned long ulip = 0;
+	if (NULL == strbuf || NULL == szip) {
+		return ret;
+	}
+
+	ulip = inet_addr(szip);
+	_ultoa(ulip, strbuf, 10);
+
+	ret = 0;
+	return ret;
+}
+
+TOOLKIT_API int str_convert_interaddr_strip(char* strbuf, size_t ubufszie, const char* szinter_ip)
+{
+	int ret = -1;
+	char* strip = NULL;
+	struct sockaddr_in addr = { 0 };
+	if (!szinter_ip || !strbuf) {
+		return ret;
+	}
+
+	addr.sin_addr.s_addr = strtoul(szinter_ip, NULL, 10);//inet_addr(config->switch_server);
+	strip = inet_ntoa(addr.sin_addr);
+	if (strip) {
+		size_t ulen = strlen(strip);
+		if (ulen < ubufszie) {
+			memcpy(strbuf, strip, ulen);
+			ret = 0;
+		}
+	}
+
+	return ret;
+}
+
+
+TOOLKIT_API int str_connect_strings(char* strbuf, size_t ulen, const char* psrca, const char* pstr, const char* psrcb)
+{
+	int ret = -1;
+	size_t ulena = 0;
+	size_t ulenb = 0;
+	size_t ulenstr = 0;
+
+	if (!psrca || !psrcb || !pstr) {
+		return ret;
+	}
+
+	ulena = strlen(psrca);
+	ulenb = strlen(psrcb);
+	ulenstr = strlen(pstr);
+
+	if (ulen > ulena + ulenb + ulenstr) {
+		snprintf(strbuf, ulen, "%s%s%s", psrca, pstr, psrcb);
+		ret = 0;
+	}
+
+	return ret;
+}

+ 16 - 5
Framework/libtoolkit/strutil.h

@@ -33,7 +33,8 @@ TOOLKIT_API void* memmem(const void* haystack, size_t haystacklen,
 	const void* needle, size_t needlelen);
 
 TOOLKIT_API char* strcasestr(const char* haystack, const char* needle);
-#endif //NOT _WIN32
+
+#endif //_WIN32
 
 
 /**
@@ -110,10 +111,6 @@ TOOLKIT_API char* strdupa(const char* str);
  */
 TOOLKIT_API char *strndup(const char *str, int n);
 
-#else 
-
-#define _strnicmp strncasecmp
-
 #endif //_WIN32
 
 /**
@@ -182,6 +179,20 @@ TOOLKIT_API char *str_xml_escape(const char *src);
 /** parse cmd line */
 TOOLKIT_API void str_parse_cmdline (char *cmdstart,char **argv,char *args,int *numargs,int *numchars);
 
+TOOLKIT_API void str_get_format_uuid(char* strbuffer, size_t ulen);
+
+TOOLKIT_API int str_reset_buffer(void* pbuf, int idata, size_t ulen);
+
+TOOLKIT_API int str_rend_string(char* pSrc, int iflag);
+
+TOOLKIT_API int str_fifter_string(char* pbuf, size_t usize, const char* psrc, const char cflag);
+
+TOOLKIT_API int str_get_interger_netaddr(char* strbuf, size_t ubufszie, const char* szip);
+
+TOOLKIT_API int str_convert_interaddr_strip(char* strbuf, size_t ubufszie, const char* szinter_ip);
+
+TOOLKIT_API int str_connect_strings(char* strbuf, size_t ulen, const char* psrca, const char* psrcb, const char* pstr);
+
 #ifdef __cplusplus
 } // extern "C" {
 #endif

+ 0 - 1
Framework/libtoolkit/win/bus_daemon.c

@@ -980,7 +980,6 @@ TOOLKIT_API int bus_daemon_stop(bus_daemon_t *daemon)
 
 	// close all pending handles
 	{
-		int i;
 		endpt_session_t *pos;
 		for (i = 0; i < daemon->arr_acceptor->nelts; ++i) {
 			daemon_accetpor_t *dacceptor = ARRAY_IDX(daemon->arr_acceptor, i, daemon_accetpor_t*);

+ 0 - 2
Framework/libtoolkit/win/ioqueue.c

@@ -600,7 +600,6 @@ static void dispatch_network(BOOL ret, DWORD dwBytesTransfer, ioqueue_overlapped
 						overlapped->hevt = NULL;
 						overlapped->recved_bytes += dwBytesTransfer;
 						if (err == 0 && overlapped->recved_bytes < overlapped->total_bytes) {
-							BOOL ret;
 							DWORD left = overlapped->total_bytes - overlapped->recved_bytes;
 							inc_pending_io(handle_ctx);
 							overlapped->base.ov.Internal = 0;
@@ -634,7 +633,6 @@ static void dispatch_network(BOOL ret, DWORD dwBytesTransfer, ioqueue_overlapped
 						overlapped->hevt = NULL;
 						overlapped->sended_bytes += dwBytesTransfer;
 						if (err == 0 && overlapped->sended_bytes < overlapped->total_bytes) {
-							BOOL ret;
 							DWORD left = overlapped->total_bytes - overlapped->sended_bytes;
 							inc_pending_io(handle_ctx);
 							overlapped->base.ov.Internal = 0;

+ 7 - 5
Framework/spbase/CMakeLists.txt

@@ -92,6 +92,8 @@ target_link_libraries(${MODULE_NAME}
     ${PRIVATE_KEYWORD} ${OTHER_LIBS}
     )
 
+# target_add_cppcheck(${MODULE_NAME} FORCE_CHECK)
+
 if (BUILD_TESTING)
     add_library(${MODULE_NAME}_a STATIC ${${MODULE_PREFIX}_SRCS})
     target_include_directories(${MODULE_NAME}_a PRIVATE
@@ -117,11 +119,11 @@ if(MSVC)
         LIBRARY DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT libraries
     )
 else()
-install(TARGETS ${MODULE_NAME} 
-    RUNTIME DESTINATION "${RVC_RUNTIME_PATH}"
-    ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
-    LIBRARY DESTINATION "${RVC_RUNTIME_PATH}"
-    COMPONENT libraries)
+    install(TARGETS ${MODULE_NAME} 
+        RUNTIME DESTINATION "${RVC_RUNTIME_PATH}"
+        ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
+        LIBRARY DESTINATION "${RVC_RUNTIME_PATH}"
+        COMPONENT libraries)
 endif(MSVC)
 
 if (WITH_PDB_SAVE AND MSVC AND BUILD_SHARED_LIBS)

+ 4 - 3
Framework/spbase/CodeSignVerify.cpp

@@ -1,5 +1,4 @@
 #include "stdafx.h"
-
 #include <WinVer.h>
 #pragma comment (lib, "Version.lib")
 #include <Wintrust.h.>
@@ -10,6 +9,8 @@
 #include "fileutil.h"
 #include "CodeSignVerify.h"
 
+//TODO: CrossPlaform 该功能目前没有起到作用,即启动时对文件进行签名检查  [Gifur@2025822]
+
 CCodeSignVerify::CCodeSignVerify(DWORD dwCodePage, DWORD dwLangID)
 :m_dwCodePage(dwCodePage), m_dwLangID(dwLangID)
 {
@@ -462,7 +463,7 @@ bool CCodeSignVerify::GetSignCertInfo(HCERTSTORE hStore, PCMSG_SIGNER_INFO pSign
 		}
 
 		// Allocate memory for Issuer name.
-		LPTSTR szName = (LPTSTR)LocalAlloc(LPTR, dwDataLen * sizeof(TCHAR));
+		szName = (LPTSTR)LocalAlloc(LPTR, dwDataLen * sizeof(TCHAR));
 		if (!szName)
 		{
 			SetLastErrMsg("Unable to allocate memory for issuer name");
@@ -646,7 +647,7 @@ bool CCodeSignVerify::GetTimeOfTimeStamp(HCERTSTORE hStore, PCMSG_SIGNER_INFO pS
 
 				// Loop through authenticated attributes and find
 				// szOID_RSA_signingTime OID.
-				for (DWORD n = 0; n < pCounterSignerInfo->AuthAttrs.cAttr; n++)
+				for (n = 0; n < pCounterSignerInfo->AuthAttrs.cAttr; n++)
 				{
 					if (lstrcmpA(szOID_RSA_signingTime,
 						pCounterSignerInfo->AuthAttrs.rgAttr[n].pszObjId) == 0)

+ 1 - 31
Framework/spbase/SpBase.cpp

@@ -35,7 +35,7 @@
 #include "SpSecureClient.h"
 #include "IHttpFunc.h"
 #include <RestfulFunc.h>
-#include<winpr/library.h>
+#include <winpr/library.h>
 #include <winpr/locale.h>
 #include <winpr/exception.h>
 #include "uuid4.h"
@@ -261,36 +261,6 @@ SPBASE_API void LogFatal(const SeverityLevelEnum eLevel, ErrorCodeEnum dwSysErro
 		("Fatal: {%s}(sc=0x%X, uc=0x%X)", pszMessage, dwSysErrorCode, dwUserErrorCode);
 }
 
-SPBASE_API void LogNotify(const NotifyLevelEnum eLevel, ErrorCodeEnum dwSysErrorCode, DWORD dwUserErrorCode, const char* pszMessage)
-{
-	SpModule* pModule = GetSpModule();
-	if (pModule) {
-		const SeverityLevelEnum severityLevel = (SeverityLevelEnum)(int)eLevel;
-		pModule->LogMessage(Log_Notify, severityLevel, dwSysErrorCode, dwUserErrorCode, pszMessage);
-	} else {
-		sp_dbg_info("LogNotify failed!can not find the module");
-	}
-    
-	switch (eLevel) {
-	case Notify_Info:
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setVtmCode(DWORD2Hex(dwUserErrorCode).GetData())
-            ("Notify: {%s}(sc=0x%X, uc=0x%X)", pszMessage, dwSysErrorCode, dwUserErrorCode);
-		break;
-	case Notify_Warn:
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setVtmCode(DWORD2Hex(dwUserErrorCode).GetData())
-            ("Notify: {%s}(sc=0x%X, uc=0x%X)", pszMessage, dwSysErrorCode, dwUserErrorCode);
-		break;
-	case Notify_Error:
-        DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setVtmCode(DWORD2Hex(dwUserErrorCode).GetData())
-            ("Notify: {%s}(sc=0x%X, uc=0x%X)", pszMessage, dwSysErrorCode, dwUserErrorCode);
-		break;
-	default:
-        DbgWithLink(LOG_LEVEL_FATAL, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setVtmCode(DWORD2Hex(dwUserErrorCode).GetData())
-            ("Notify: {%s}(sc=0x%X, uc=0x%X)", pszMessage, dwSysErrorCode, dwUserErrorCode);
-		break;
-	}
-}
-
 SPBASE_API void LogWarn(const SeverityLevelEnum eLevel, ErrorCodeEnum dwSysErrorCode,DWORD dwUserErrorCode, const char *pszMessage)
 {
 	SpModule *pModule = GetSpModule();

+ 1 - 10
Framework/spbase/SpEntity.cpp

@@ -969,9 +969,7 @@ ErrorCodeEnum SpEntity::LogMessage( const LogTypeEnum LogType, const SeverityLev
 
 	/*存储当前实体最新一条错误信息*/
 	if ((LogType == Log_Warning && (Level == Severity_High || Level == Severity_Middle))
-		|| LogType == Log_Error || LogType == Log_Fatal 
-		|| (LogType == Log_Notify && (Level == Severity_High/* || Level == Severity_Middle*/))
-		) {
+		|| LogType == Log_Error || LogType == Log_Fatal) {
 		SetEntityLastError((ErrorCodeEnum)dwSysErrorCode, dwUserErrorCode, pMessage);
 	}
 
@@ -1070,7 +1068,6 @@ ErrorCodeEnum SpEntity::OpenConfig(ConfigTypeEnum eConfigType,CSmartPointer<ICon
 	IConfigInfo* pConfigInfo = NULL;
 	sp_env_t* env = sp_get_env();
 	sp_cfg_t* cfg = env->cfg;
-	sp_cfg_root_ini_t* root_ini = cfg->root_ini;
 	if (ConfigTypeEnum::Config_Root == eConfigType)
 	{
 		if (forceFile || cfg->root_ini->root_config == NULL || strlen(cfg->root_ini->root_config) == 0)
@@ -1103,7 +1100,6 @@ ErrorCodeEnum SpEntity::OpenConfig(ConfigTypeEnum eConfigType,CSmartPointer<ICon
 ErrorCodeEnum SpEntity::SetUserDefineState(DWORD dwState)
 {
 	sp_env_t *env = sp_get_env();
-	sp_mod_mgr_t *mod_mgr = env->mod_mgr;
 	//sp_mod_mgr_lock(mod_mgr);
 	DWORD dwOldState = m_ent->user_state;
 	m_ent->user_state = dwState;
@@ -1119,7 +1115,6 @@ ErrorCodeEnum SpEntity::SetUserDefineState(DWORD dwState)
 DWORD SpEntity::GetUserDefineState()
 {
     sp_env_t* env = sp_get_env();
-    sp_mod_mgr_t* mod_mgr = env->mod_mgr;
     return (DWORD)(m_ent->user_state);
 }
 
@@ -2379,8 +2374,6 @@ ErrorCodeEnum SpEntity::RedirectSubscribBroadcast(CUUID SubID, const char *pszSu
 ErrorCodeEnum SpEntity::AskShell(int call_type, iobuffer_t **req_pkt, iobuffer_t **ans_pkt)
 {
 	ErrorCodeEnum Error;
-	iobuffer_t *r_pkt = NULL;
-
 	if (!req_pkt || !*req_pkt || !ans_pkt)
 		return Error_Param;
 	if (*ans_pkt)
@@ -2412,8 +2405,6 @@ ErrorCodeEnum SpEntity::AskShell(int call_type, iobuffer_t **req_pkt, iobuffer_t
 ErrorCodeEnum SpEntity::AskEntityByRPC(const char *pszEntityName, int call_type, iobuffer_t **req_pkt, iobuffer_t **ans_pkt)
 {
 	ErrorCodeEnum Error;
-	iobuffer_t *r_pkt = NULL;
-
 	if (!req_pkt || !*req_pkt || !ans_pkt)
 		return Error_Param;
 	if (*ans_pkt)

+ 0 - 10
Framework/spbase/SpEntityPrivilege.cpp

@@ -666,7 +666,6 @@ ErrorCodeEnum SpEntityPrivilege::RewriteDepVersion(const CSimpleStringA& strVers
 {
 	ErrorCodeEnum rc(Error_Succeed);
 	auto dir = sp_get_env()->dir;
-	auto cfg = sp_get_env()->cfg;
 	
 	if (dir == NULL)
 		return Error_Null;
@@ -687,19 +686,10 @@ ErrorCodeEnum SpEntityPrivilege::RewriteDepVersion(const CSimpleStringA& strVers
 		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("get dep ver txt failed!");
 		return rc;
 	}
-	else {
-		//TODO: 测试专用,待移除  [Gifur@20241016]
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("path:%s", path);
-	}
-
 	rc = UpdateVerTxt(path, strVersion, true);
 	if (rc == Error_Succeed && bRefresh) {
-		//TODO: 调试专用,后移除  [Gifur@20241015]
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to refresh...");
 		rc = (ErrorCodeEnum)sp_dir_refresh_dep_path(dir);
 		if (rc == Error_Succeed) {
-			//TODO: 调试专用,后移除  [Gifur@20241015]
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to send fresh post");
 			iobuffer_t* pkt = iobuffer_create(-1, -1);
 			rc = PostInfoShell(SHELL_CMD_INFO_REFRESH_ENV, &pkt);
 			if (pkt)

+ 0 - 1
Framework/spbase/SpMisc.cpp

@@ -134,7 +134,6 @@ CUUID CUUID::Create(const CUUID &LastUUID)
 	TOOLKIT_ASSERT(getEntityResource()->m_gAppID != 0);
 #endif //_WIN32
 	CUUID t(0);
-	int repeat = 0;
 #ifdef _WIN32
 	t.m_nAppID = getEntityResource()->m_gAppID;
 #else

+ 84 - 2
Framework/spbase/SpSecureClient.cpp

@@ -300,6 +300,29 @@ bool SpSecureClient::ConnectFromCentralSetting()
 		return Connect_Single(&connectInfo, nOption);
 }
 
+
+
+bool SpSecureClient::ConnectFromAddress(CSimpleStringA mainServ, CAutoArray<CSimpleStringA> backupServArr, CSimpleStringA& connectedServ)
+{
+#ifdef RVC_OS_WIN
+	SetthreadGroup(GetCurrentThreadId(), m_pEntity->GetEntityName());
+#endif // RVC_OS_WIN
+
+	if (IsConnectionOK()) {
+		connectedServ = "";
+		return true;
+	}
+	int nOption = 3;
+	const char* pEntityName = m_pEntity->GetEntityName();
+	CSimpleStringA strVal;
+	if (Error_Succeed == m_pEntity->GetFunction()->GetSysVar("EntryPermit", strVal)) {
+		if (strVal == "L" && stricmp(pEntityName, "AccessAuthorization") != 0)
+			nOption = 2;	// 优先使用缓存密钥
+	}
+	bool connSucc = Connect_Standby(mainServ, backupServArr, nOption, connectedServ);
+	return connSucc;
+}
+
 int SpSecureClient::getCurrentLink()
 {
 	if (!IsConnectionOK())
@@ -439,6 +462,65 @@ bool SpSecureClient::Connect_Dual(ENTITY_CONNECT_INFO *connectInfo, int option)
 
 }
 
+bool SpSecureClient::Connect_Standby(CSimpleStringA mainServ, CAutoArray<CSimpleStringA> backupServArr, int option, CSimpleStringA &connectedServ)
+{
+	const char* pEntityName = m_pEntity->GetEntityName();
+	ENTITY_CONNECT_INFO connectInfo;
+
+	DbgWithLink_DualActive("mod %s using option %d", pEntityName, option);
+
+	ErrorCodeEnum configRc = Error_Bug;
+
+	//主用地址
+	CSimpleStringA strServer1 = "";
+	int nServer1Port = 0;
+	if (mainServ.IsNullOrEmpty())
+	{
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("read Main::Server config fail, %s", pEntityName);	
+	}
+	else {
+		if (Error_Succeed != (configRc = ParseIPAddress(mainServ.GetData(), strServer1, nServer1Port)))
+		{
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("parse Main ip addr fail: %s, %d", mainServ.GetData(), configRc);
+		}
+		else {
+			if (Connect(strServer1, nServer1Port, option)) {
+				connectInfo.setParam(pEntityName, strServer1.GetData(), nServer1Port, "", 0, -1, 0);//主机连接上
+				setConnectInfo(&connectInfo);
+				DbgWithLink_DualActive("Standby Connection: EntityName:%s, server:%s %d, serverBackup:%s %d, DualOpen: %d, currentLink:%d", connectInfo.m_EntityName, connectInfo.m_ServerIP,
+					connectInfo.m_ServerPort, connectInfo.m_Server_BackupIP, connectInfo.m_Server_BackupPort, connectInfo.m_DualActive, connectInfo.m_currentLink);
+				connectedServ = mainServ;
+				return true;
+			}
+		}
+	}
+
+	//备用地址
+	CSimpleStringA strServer2 = "";
+	int nServer2Port = 0;
+	for (int i = 0; i < backupServArr.GetCount(); i++)
+	{
+		CSimpleStringA backupSerStr = backupServArr[i];
+		if (!backupSerStr.IsNullOrEmpty()) {
+			if (Error_Succeed != (configRc = ParseIPAddress(backupSerStr.GetData(), strServer2, nServer2Port)))
+			{
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("parse backup ip addr fail: %s, %d", backupSerStr.GetData(), configRc);
+			}
+			else {
+				if (Connect(strServer2, nServer2Port, option)) {
+					connectInfo.setParam(pEntityName, strServer1.GetData(), nServer1Port, strServer2.GetData(), nServer2Port, -1, 1);//备机连接上
+					setConnectInfo(&connectInfo);
+					DbgWithLink_DualActive("Standby Connection: EntityName:%s, server:%s %d, serverBackup:%s %d, DualOpen: %d, currentLink:%d", connectInfo.m_EntityName, connectInfo.m_ServerIP,
+						connectInfo.m_ServerPort, connectInfo.m_Server_BackupIP, connectInfo.m_Server_BackupPort, connectInfo.m_DualActive, connectInfo.m_currentLink);
+					connectedServ = backupSerStr;
+					return true;
+				}
+			}
+		}
+	}
+	return false;
+}
+
 bool SpSecureClient::IsConnectionOK()
 {
 	return GetFunction()->IsConnectionOK();
@@ -535,7 +617,7 @@ struct OnDisconnectTask : public ITaskSp
 
 		m_pSecureClient->OnDisconnect();
 		m_pSecureClient->DecRefCount();
-		m_pSecureClient->OnReConnect();
+		//m_pSecureClient->OnReConnect();
 	}
 };
 
@@ -596,7 +678,7 @@ bool SpSecureClient::OnAuthRequestSM(CConnAuthSMReq* pReq)
 	strncpy(info.m_arrTerminalNo, (LPCSTR)si.strTerminalID, sizeof(info.m_arrTerminalNo) - 1);
 	strcpy(info.m_arrServiceType, "CMBRVC");
 	{
-		//TODO: CrossPlaform IP [Gifur@2025730]
+		//TODO: CrossPlaform 框架具备统一支持,但不清楚影响范围(继而无法评估测试范围),未敢轻易改动 [Gifur@2025730]
 #ifdef RVC_OS_LINUX
         char buf[512];
         toolkit_interface_address_t* addr;

+ 8 - 47
Framework/spbase/sp_cfg.cpp

@@ -1,7 +1,6 @@
 #include "precompile.h"
 #include "sp_cfg.h"
 #include "sp_def.h"
-//#include "sp_sal.h"
 #include "sp_dir.h"
 
 #include "sp_env.h"
@@ -31,11 +30,11 @@
 
 #include "sp_logwithlink.h"
 #include "RestfulFunc.h"
+
 #if defined(_MSC_VER)
 #include "AutoLock.h"
 #include <memory>
 #include <iostream>
-#include <fstream>
 #include "RVCEventCode.h"
 #include <vsscanf.h>
 #include <ctime>
@@ -43,19 +42,22 @@
 #include <iomanip>
 #include <windows.h>
 #define UPDATE_ROOT_BY_HTTP
+#define MOD_LIB_SUFFIX ".dll"
+#define READ_SHELL_NODE SHELL_ENTITY_HEAD
 #else
 #include "JsonConvertHelper.hpp"
+#define MOD_LIB_SUFFIX ".so"
+#define READ_SHELL_NODE "UOSEntity"
 #endif //_MSC_VER
 #include "sp_checkEntity.h"
 #include <log_producer_config.h>
-
+#define MAX_ENTITY_LEN	33
 
 
 #if defined(_MSC_VER)
 
 std::map<std::string, std::string> g_specialRunInfoArr;
 
-
 class sp_cfg_share
 {
 private:
@@ -92,28 +94,8 @@ LARGE_TIME sp_cfg_getShellFirstStartTime()
     return sp_cfg_share::getInstance()->sp_cfg_getShellFirstStartTime();
 };
 
-
-auto fileExist = [](const char* path) ->bool {
-	fstream f2;
-	f2.open(path);
-	if (!f2)
-	{
-		f2.close();
-		return false;
-	}
-	else
-	{
-		f2.close();
-		return true;
-	}
-};
-
-
-#else
-
-///*TODO(80374374@3/14/2023):  */
-
 #endif //_MSC_VER
+
 ErrorCodeEnum init_shell_byHttp(sp_dir_t* dir, sp_cfg_shell_ini_t* shell, sp_cfg_root_ini_t* root, const sp_cfg_start_args_t* args,
 	const char* shellVarIni, std::map<std::string, std::map<std::string, std::string>> shellConfig);
 
@@ -144,20 +126,9 @@ void shell_getHttpToken(std::string& channelId, std::string& token, std::string&
 		
 }
 
-
-#define MAX_ENTITY_LEN	33
-#ifdef _WIN32
-#define MOD_LIB_SUFFIX ".dll"
-#else
-#define MOD_LIB_SUFFIX ".so"
-#endif //_WIN32
-
 #define T_MALLOC_T(type, shm) \
 	shm ? (type*)shm_malloc(sizeof(type)) : (type*)malloc(sizeof(type))
 
-#define T_MALLOC(size, shm) \
-	shm ? shm_malloc(size) : malloc(size)
-
 #define T_FREE(p, shm) \
 	shm ? shm_free(p) : free(p)
 
@@ -1792,9 +1763,7 @@ static int load_entity_list_byHttp(sp_cfg_shell_ini_t* shell, array_header_t** a
 	for (auto it = startupArr.begin(); it != startupArr.end(); it++)
 	{
 		std::string startupEntity = it->second;
-		sp_cfg_shell_entity_t* ent = find_entity(shell, startupEntity.c_str());
 		char* s = _strdup(startupEntity.c_str());
-		char* cmdline = strchr(s, ' ');
 		if (s) {
 			if (strlen(s)) {
 				int numargs, numchars;
@@ -2048,12 +2017,7 @@ ErrorCodeEnum init_shell_byHttp(sp_dir_t* dir, sp_cfg_shell_ini_t* shell, sp_cfg
 
 	//init entity arr,去除以;开头的实体
 	std::map<std::string, std::string> entityArr = clearUnExistConfig(shellConfig[SHELL_ENTITY_HEAD]);
-	//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef _WIN32
-	CSimpleStringA sectionNameWithType = CSimpleStringA::Format("%s_%s", SHELL_ENTITY_HEAD, root->machine_type);
-#else
-	CSimpleStringA sectionNameWithType = CSimpleStringA::Format("%s_%s", "UOSEntity", root->machine_type);
-#endif
+	CSimpleStringA sectionNameWithType = CSimpleStringA::Format("%s_%s", READ_SHELL_NODE, root->machine_type);
 	if (shellConfig.find(sectionNameWithType.GetData()) != shellConfig.end())	//有带机型的实体
 	{
 		std::map<std::string, std::string> entityTypeArr = clearUnExistConfig(shellConfig[sectionNameWithType.GetData()]);
@@ -2129,7 +2093,6 @@ ErrorCodeEnum init_shell_byHttp(sp_dir_t* dir, sp_cfg_shell_ini_t* shell, sp_cfg
 		char* value;
 		char* name;
 		char* context = NULL;
-		array_header_t* t = NULL;
 
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("override start entity list!");
 
@@ -2449,8 +2412,6 @@ static int generate_install_memory(sp_dir_t* dir, sp_cfg_install_ini_t* inst)
 	ver_info->install_pack = shm_strdup("");
 	SHM_ARRAY_PUSH(inst->arr_version, sp_cfg_version_info_t*) = ver_info;
 
-
-
 	inst->arr_light_pack = T_ARRAY_MAKE(0, sizeof(sp_cfg_version_info_t*), 1);
 	return 0;
 }

+ 3 - 7
Framework/spbase/sp_dir.c

@@ -14,7 +14,7 @@ int sp_dir_create(sp_dir_t **p_dir)
 	dir = shm_malloc(sizeof(sp_dir_t));
 	memset(dir, 0, sizeof(sp_dir_t));
 
-	//TODO(Gifur): duplicate path value set, which would makd memory leak
+	
 	GetModuleFileNameA(NULL, tmp, MAX_PATH);
 	*strrchr(tmp, SPLIT_SLASH) = 0;
 	//C:/Run/version/1.2.3.4/bin
@@ -24,6 +24,8 @@ int sp_dir_create(sp_dir_t **p_dir)
 	dir->base_path = shm_strdup(tmp);
 	*strrchr(tmp, SPLIT_SLASH) = 0;
 	//C:/Run/version
+	// 
+	//TODO(Gifur): duplicate path value set, which would makd memory leak
 	dir->root_ver_path = shm_strdup(tmp);
 	*strrchr(tmp, SPLIT_SLASH) = 0;
 	//C:/Run
@@ -360,13 +362,7 @@ int sp_dir_inner_get_content(const char* file, char* ver)
 		n = fread(szTemp, 1, 256, pFile);
 		fclose(pFile);
 		memset(ver, 0, SP_MAX_VER_LEN);
-		//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(RVC_OS_WIN)
-		strncpy_s(ver, SP_MAX_VER_LEN, szTemp, _TRUNCATE);
-#else
 		strncpy(ver, szTemp, SP_MAX_VER_LEN);
-#endif //RVC_OS_WIN
-		//TODO:   [Gifur@20241014]
 		if (strlen(ver) == 0) {
 			return Error_Null;
 		}

+ 1 - 15
Framework/spbase/sp_logwithlink.cpp

@@ -597,28 +597,14 @@ CSimpleString generateDefaultStoragePath()
 static CSimpleStringA g_entityName = "SpShell";
 
 void logCallback(const char* message) {
-    // 在这里执行您的日志记录逻辑
-    // 在这个示例中,我们简单地将日志消息输出到控制台
     WLog_DBG(TAG, "from rvcLogSDK:%s", message);
 }
 
-std::string toLowerCase(std::string str) {
-    std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c) {
-        return std::tolower(c, std::locale());
-        });
-    return str;
-}
-
 SPBASE_API void* create_log_producer_storage(CSimpleStringA entityName, CSimpleStringA item, CSimpleStringA filePath, CSimpleStringA CmptId, CSimpleString CmptName)
 {
     WLog_DBG(TAG, "create log producer storage for %s, %s, %s", entityName.GetData(), item.GetData(), filePath.GetData());
     log_producer_config* config = create_log_producer_config();
-    //TODO: CrossPlaform  [Gifur@2025730]
-#ifdef _WIN32
-    std::string t_entityName = toLowerCase(entityName.GetData());
-#else
-	const std::string t_entityName = SP::Utility::ToLower(entityName.GetData());
-#endif  
+    const std::string t_entityName = SP::Utility::ToLower(entityName.GetData());
     if (config == NULL) {
         WLog_DBG(TAG, "create_log_producer_config return null!");
         return NULL;

+ 1 - 1
Framework/spbase/sp_mod.c

@@ -872,7 +872,7 @@ static int create_module_process(const char *mod_name, int epid, int range, int
 		return -1;
 	}
 
-	//TODO: CrossPlaform  [Gifur@2025729]
+	//TODO: CrossPlaform 这个等良瑜来处理,目前WIN都是Release版本,不需要再区分  [Gifur@2025729]
 	if (runType == 1)
 		sprintf(app, ".\\bin\\sphost.exe {%s} %d", mutexName, shellId);
 	else

+ 1 - 1
Framework/spbase/sp_pst.h

@@ -2,7 +2,7 @@
 #define SP_PST_H
 
 #pragma once
-//TODO: CrossPlaform 文件移除,没有使用  [Gifur@202584]
+//TODO: CrossPlaform 鏂囦欢绉婚櫎锛屾病鏈変娇鐢�紝寰呰�璁虹‘璁�  [Gifur@202584]
 #ifdef __cplusplus
 extern "C" {
 #endif

+ 1 - 7
Framework/spbase/sp_sps.c

@@ -2,13 +2,12 @@
 #include "sp_sps.h"
 #include "sp_def.h"
 #include "sp_logwithlinkforc.h"
-
 #include "memutil.h"
+#include <winpr/winsock.h>
 
 #define SILVERLIGHT_POLICY_PORT	943
 #define MAX_TIMEOUT 30000
 
-
 static const char *req_policy = "<policy-file-request/>";
 static const int req_policy_len = 22;
 
@@ -57,12 +56,7 @@ static void __on_accept(SOCKET policy_fd)
 	DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "accept from %s:%d", inet_ntoa(from_addr.sin_addr), ntohs(from_addr.sin_port));
 
 	WSAEventSelect(conn_fd, NULL, 0);
-	//TODO: CrossPlaform  [Gifur@2025729]
-#ifdef _WIN32
-	ioctlsocket(conn_fd, FIONBIO, &iMode);
-#else
 	_ioctlsocket(conn_fd, FIONBIO, &iMode);
-#endif //_WIN32
 	opt = TRUE;
 	setsockopt(conn_fd, IPPROTO_TCP, TCP_NODELAY, (char*)&opt, sizeof(opt));
 	opt = TRUE;

+ 1 - 0
Framework/spbase/sp_sps.h

@@ -11,6 +11,7 @@
 
 #pragma once
 
+//TODO: CrossPlaform 评审是否需要移除,目前不走Slierlight这一套,直接用Websocket通讯  [Gifur@2025820]
 #ifdef __cplusplus
 extern "C"
 {

+ 1 - 1
Framework/spbase/sp_var.c

@@ -59,7 +59,7 @@ static char* sp_var_get_own_entity(sp_var_client_t* client, const char* key)
 static int sp_var_can_write(sp_var_client_t *client, const char *key, sp_cfg_shell_sysevent_t **p_sysevent)
 {
 	sp_iom_t *iom = sp_svc_get_iom(client->svc);
-	sp_cfg_t *cfg = sp_get_env()->cfg; //TODO
+	sp_cfg_t *cfg = sp_get_env()->cfg;
 	sp_cfg_shell_sysevent_t *sysevent;
 
 	sysevent = sp_cfg_get_sysevent(cfg, key);

+ 0 - 15
Framework/spshell/log.cpp

@@ -278,21 +278,6 @@ static void on_log(void *inst,
 			notifyType = GUI_DISPLAY_ELEM_LOG_FATAL;
 			msgContent = CSimpleString::Format("[%s] F:{%s}(sc:0x%X, uc:0x%X)", ent->name, msg, log_sys_error, log_usr_error);
 		}
-		else if (log_type == 6) {//Log_Notify
-            notifyType = GUI_DISPLAY_ELEM_NOTIFY_INFO;
-            if (log_severity == 2) {//Notify_Warn
-                notifyType = GUI_DISPLAY_ELEM_NOTIFY_WARN;
-            } else if (log_severity == 3) {
-                notifyType = GUI_DISPLAY_ELEM_NOTIFY_ERROR;
-            }
-#if defined(_MSC_VER)
-			msgContent = CSimpleString::Format("[%s] N:{%s}(sc:0x%X, uc:0x%X)", ent->name, msg, log_sys_error, log_usr_error);
-#else
-			CSimpleStringA strMsg = CSimpleStringA::Format("%s V%d.%d.%d", ent->name, ent->version.major, ent->version.minor, ent->version.revision);
-			strMsg += ":][:"; /** arrange with QtGUIConsole to split entity name and msg content [Gifur@202133]*/
-			msgContent = CSimpleString::Format("%s%s", strMsg.GetData(), msg);
-#endif //_MSC_VER
-		}
 
 		if (notifyType != 0) {
 #if defined(_MSC_VER)

+ 1 - 44
Framework/spshell/spshell.cpp

@@ -146,7 +146,6 @@ static CSimpleStringA CutSpPathFromPathValue(const char* value, const char* pref
         if (!values[i].IsStartWith(prefix) && !IsSpPathType(values[i], "version") &&! IsSpPathType(values[i], "dep")) {
             if (!result.IsNullOrEmpty()) result += ENV_SEP_STR;
             result += values[i];
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("toadd:%s", values[i].GetData());
         }
     }
     //if (!result.IsNullOrEmpty() && path[path.GetLength() - 1] == ENV_SEP_CHAR) {
@@ -359,49 +358,6 @@ static bool  IsProcessRunAsAdmin()
 	return  bAdmin == TRUE;
 }
 
-const char *GetMachineType()
-{
-	auto env = sp_get_env();
-	if (env == NULL)
-	{
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("sp_get_env return null");
-		return NULL;
-	}
-	return env->cfg->root_ini->machine_type;
-}
-
-
-
-#ifdef RVC_OS_WIN
-
-//TODO: CrossPlaform 11111  [Gifur@2025730]
-const char *GetCenterSettingNameBySite(const char *pszSite)
-{
-	///*TODO(80374374@3/23/2023): CenterSettings */
-#if defined(_MSC_VER)
-	return  "CenterSetting.ini";
-#else
-	if (pszSite == NULL || strlen(pszSite) == 0)
-		return "CenterSetting.ini";
-
-	if ((stricmp(pszSite, "CMB.LIB") == 0)
-		|| (stricmp(pszSite, "CMB.SSB") == 0)) {
-		return  "CenterSetting.LAN.ini";
-	} else if ((stricmp(pszSite, "CMB.LSS") == 0)
-		|| (stricmp(pszSite, "CMB.FLB") == 0)
-		|| (stricmp(pszSite, "CMB.OSB") == 0)
-		|| (stricmp(pszSite, "CMB.SMM") == 0)) {
-		return   "CenterSetting.DMZ.ini";
-	} else {
-		return  "CenterSetting.DMZ.ini";
-	}
-#endif //_MSC_VER
-}
-
-
-
-#endif //RVC_OS_WIN
-
 static bool SpTerminateProcess(HANDLE hProc, DWORD dwProcID)
 {
 	if (!TerminateProcess(hProc, -1))
@@ -789,6 +745,7 @@ int main(int argc, char** argv)
 
 
 #if defined(_MSC_VER)
+	//TODO: CrossPlaform 等良瑜确认,应该不再涉及本地集中配置了  [Gifur@2025820]
 	auto centersettingPath = generateCenterSettingPath();
 	load_debugLevelInCentersetting(centersettingPath.c_str());
 	load_specialRunInfoInCentersetting(centersettingPath.c_str());

+ 0 - 8
Framework/spshell/svc.cpp

@@ -618,15 +618,11 @@ void on_fresh_env(sp_rpc_server_t* server, int epid, int svc_id, int call_type,
 		if (!values[i].IsStartWith(strPrefix)) {
 			if (!strNewPath.IsNullOrEmpty()) strNewPath += ENV_SEP_STR;
 			strNewPath += values[i];
-			//TODO: 测试代码,后续移除  [Gifur@20241015]
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("toadd:%s", values[i].GetData());
 		}
 	}
 	if (env->dir->dep_ver_path != NULL) {
 		if (!strNewPath.IsNullOrEmpty()) strNewPath += ENV_SEP_STR;
 		strNewPath += env->dir->dep_ver_path;
-		//TODO: 测试代码,后续移除  [Gifur@20241015]
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("toadd1:%s", env->dir->dep_ver_path);
 	}
 	char vendorName[128];
 	size = 127;
@@ -636,14 +632,10 @@ void on_fresh_env(sp_rpc_server_t* server, int epid, int svc_id, int call_type,
 		CSimpleStringA strSubDep(env->dir->dep_ver_path);
 		strSubDep += SPLIT_SLASH_STR;
 		strSubDep += vendorName;
-		//TODO: 测试代码,后续移除  [Gifur@20241015]
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("toadd1:%s", strSubDep.GetData());
 		if (!strNewPath.IsNullOrEmpty()) strNewPath += ENV_SEP_STR;
 		strNewPath += strSubDep;
 	}
 	toolkit_setenv(name, strNewPath.GetData());
-	//TODO: 测试代码,后续移除  [Gifur@20241015]
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("renew env:%s", strNewPath.GetData());
 }
 
 typedef struct

+ 2 - 0
Framework/winpr/include/winpr/crt.h

@@ -155,6 +155,8 @@ extern "C"
 	WINPR_API errno_t _ltoa_s(long value, char* buffer, size_t sizeInCharacters, int radix);
 	WINPR_API char* _itoa(int value, char* buffer, int radix);
 
+	WINPR_API char* _ultoa(unsigned long value, char* pstring, int radix);
+
 	/* Buffer Manipulation */
 
 	WINPR_API errno_t memmove_s(void* dest, size_t numberOfElements, const void* src, size_t count);

+ 2 - 0
Framework/winpr/include/winpr/sysinfo.h

@@ -187,6 +187,8 @@ extern "C"
 
 	WINPR_API void GetSystemTime(LPSYSTEMTIME lpSystemTime);
 	WINPR_API BOOL SetSystemTime(CONST SYSTEMTIME* lpSystemTime);
+
+	//UNIX: localtime
 	WINPR_API VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);
 	WINPR_API BOOL SetLocalTime(CONST SYSTEMTIME* lpSystemTime);
 

+ 30 - 0
Framework/winpr/libwinpr/crt/conversion.c

@@ -105,4 +105,34 @@ char* _itoa(int value, char* buffer, int radix)
 	return buffer;
 }
 
+char* _ultoa(unsigned long value, char* pstring, int radix)
+{
+	char tmp[33] = { 0 };
+	char* tp = tmp;
+	long i;
+	unsigned long v = value;
+	char* sp;
+
+	if (radix > 36 || radix <= 1 || NULL == pstring) {
+		return 0;
+	}
+
+
+	while (v || tp == tmp) {
+		i = v % radix;
+		v = v / radix;
+		if (i < 10)
+			*tp++ = i + '0';
+		else
+			*tp++ = i + 'a' - 10;
+	}
+
+	sp = pstring;
+
+	while (tp > tmp)
+		*sp++ = *--tp;
+	*sp = 0;
+	return pstring;
+}
+
 #endif

+ 2 - 1
Framework/winpr/libwinpr/error/error.c

@@ -53,7 +53,8 @@ DWORD GetLastError(VOID)
 		}
 		return tmp;
 	}
-	return ERROR_OUTOFMEMORY;
+	//return ERROR_OUTOFMEMORY;
+	return errno;
 }
 
 VOID SetLastError(DWORD dwErrCode)

+ 108 - 154
Module/include/CommEntityUtil.hpp

@@ -10,23 +10,18 @@
 #include <IPTypes.h>
 #include <WinInet.h>
 #include <ShlObj.h>
-#include <Pdh.h>
 
 #pragma comment(lib, "IPHLPAPI.lib")
 #pragma comment(lib, "Wininet.lib")
-#pragma comment(lib, "pdh.lib")
-#define streq stricmp
 
 #else
 #include <linux/ethtool.h>
 #include <linux/sockios.h>
 #include <net/if.h>
 #include <sys/ioctl.h>
-#include <sys/sysinfo.h>
 #include <unistd.h>
 #include <thread>
 #include <chrono>
-#define streq strcasecmp
 
 #endif //_MSC_VER
 
@@ -37,14 +32,11 @@
 #include <iostream>
 #include <sstream>
 #include <map>
+#include <cmath>
 #include "SpBase.h"
 #include "publicFunExport.h"
 
 #define MACSESION 6
-#define DIV (1024 * 1024)
-#define DAY_DIV (24 * 60 * 60)
-#define HOURS_DIV (60 * 60)
-#define MINUS_DIV (60)
 
 typedef unsigned long long ULLINT;
 
@@ -52,146 +44,10 @@ namespace SP
 {
 namespace Module
 {
-
-	namespace System
-	{
-
-		static BOOL GetSystemBootTime(CSmallDateTime& systemBootTime)
-		{
-#if defined(_MSC_VER)
-			const char* SystemElapsedQuery = "\\System\\System Up Time";
-			PDH_STATUS Status;
-			HQUERY Query = NULL;
-			HCOUNTER hcElapsedTimeCount;
-			BOOL fSuc = FALSE;
-			/** 杀毒软件会对附件这几个系统调用函数有所监控,导致有时会耗费5s时间 Gifur@20221019]*/
-			Status = PdhOpenQuery(NULL, NULL, &Query);
-			PDH_FMT_COUNTERVALUE counterValue;
-			if (Status != ERROR_SUCCESS) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("PdhOpenQuery failed with status 0x%x.", Status);
-				goto Cleanup;
-			}
-			Status = PdhAddCounter(Query, SystemElapsedQuery, NULL, &hcElapsedTimeCount);
-			if (Status != ERROR_SUCCESS) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("PdhAddCounter for SystemElapsedQuery failed with status 0x%x.", Status);
-				goto Cleanup;
-			}
-			// 查询性能监视器数据
-			Status = PdhCollectQueryData(Query);
-			if (Status != ERROR_SUCCESS) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("PdhCollectQueryData failed with 0x%x.", Status);
-				goto Cleanup;
-			}
-			Status = PdhGetFormattedCounterValue(hcElapsedTimeCount, PDH_FMT_LARGE, NULL, &counterValue);
-			if (Status == ERROR_SUCCESS) {
-				ULONGLONG ulSinceSeconds = counterValue.largeValue;
-				ULONG days = 0, hours = 0, minutes = 0, seconds = 0;
-				days = ULONG(ulSinceSeconds / DAY_DIV);
-				ulSinceSeconds %= DAY_DIV;
-				hours = ULONG(ulSinceSeconds / HOURS_DIV);
-				ulSinceSeconds %= HOURS_DIV;
-				minutes = ULONG(ulSinceSeconds / MINUS_DIV);
-				ulSinceSeconds %= MINUS_DIV;
-				seconds = ULONG(ulSinceSeconds);
-
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("SystemElapseTime: %uDays-%02u:%02u:%02u", days, hours, minutes, seconds);
-
-				FILETIME ftCurTime, ftStartTime;
-				GetSystemTimeAsFileTime(&ftCurTime);
-				ULARGE_INTEGER uliCurTime;
-				uliCurTime.HighPart = ftCurTime.dwHighDateTime;
-				uliCurTime.LowPart = ftCurTime.dwLowDateTime;
-				uliCurTime.QuadPart -= counterValue.largeValue * 1e7;
-
-				ftStartTime.dwHighDateTime = uliCurTime.HighPart;
-				ftStartTime.dwLowDateTime = uliCurTime.LowPart;
-
-				SYSTEMTIME stUTC, stLocal;
-
-				FileTimeToSystemTime(&ftStartTime, &stUTC);
-				char temp[22];
-				SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
-				sprintf_s(temp, 22, "%d-%02d-%02d %02d:%02d:%02d",
-					stLocal.wYear, stLocal.wMonth, stLocal.wDay, stLocal.wHour, stLocal.wMinute, stLocal.wSecond);
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("OSStartTime: %s", temp);
-				systemBootTime.FromSystemTime(stLocal);
-				fSuc = TRUE;
-			}
-		Cleanup:
-			Status = PdhRemoveCounter(hcElapsedTimeCount);
-			if (Query) {
-				PdhCloseQuery(Query);
-			}
-			return fSuc;
-#else
-			DWORD ticks = 0;
-			SYSTEMTIME systemTime;
-
-			struct sysinfo info;
-			time_t curTime = 0;
-			time_t bootTime = 0;
-			struct tm* ptm = NULL;
-			if (sysinfo(&info)) {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Failed to get sysinfo, errno:%u, reason:%s", errno, strerror(errno));
-				return FALSE;
-			}
-			time(&curTime);
-			if (curTime > info.uptime) {
-				bootTime = curTime - info.uptime;
-			}
-			else
-			{
-				bootTime = info.uptime - curTime;
-			}
-			ptm = localtime(&bootTime);
-			struct timespec ts;
-			if (!clock_gettime(CLOCK_MONOTONIC_RAW, &ts))
-				ticks = (ts.tv_sec * 1000) + (ts.tv_nsec / 1000000);
-
-			systemTime.wYear = (WORD)(ptm->tm_year + 1900);
-			systemTime.wMonth = (WORD)(ptm->tm_mon + 1);
-			systemTime.wDayOfWeek = (WORD)ptm->tm_wday;
-			systemTime.wDay = (WORD)ptm->tm_mday;
-			systemTime.wHour = (WORD)ptm->tm_hour;
-			systemTime.wMinute = (WORD)ptm->tm_min;
-			systemTime.wSecond = (WORD)ptm->tm_sec;
-			systemTime.wMilliseconds = (WORD)(ticks % 1000);
-
-			systemBootTime.FromSystemTime(systemTime);
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("OSStartTime: %s", systemBootTime.ToTimeString().GetData());
-			return TRUE;
-#endif //_MSC_VER
-		}
-	}//system
-
 namespace Comm
 {
-static BOOL IsFirsRunAppAfterSystemBoot(CEntityBase* pEntity, DWORD theReportUserCode = 0)
-{
-	BOOL result(FALSE);
-	CSystemRunInfo runInfo = { 0 };
-	ErrorCodeEnum ec = pEntity->GetFunction()->GetSystemRunInfo(runInfo);
-	if (ec == Error_Succeed) {
-		CBootInfo bootInfo = { 0 };
-		CSmallDateTime dateTime;
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("systemRunInfo time: %s", (LPCTSTR)runInfo.tmStart.ToTimeString());
-		ec = pEntity->GetFunction()->GetRebootInfo(/*runInfo.tmStart*/dateTime, bootInfo);
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("bootInfor time: %s", (LPCTSTR)bootInfo.tmStart.ToTimeString());
-		CSmallDateTime systemBootTime;
-		const BOOL bRet = System::GetSystemBootTime(systemBootTime);
-		if (bRet && systemBootTime > bootInfo.tmStart) {
-			result = TRUE;
-			if (theReportUserCode != 0) {
-				std::map<std::string, std::string> srcData;
-				CSimpleStringA strData = CSimpleStringA::Format("{\"AppLastStartTime\":\"%s\",\"AppStartTime\":\"%s\",\"OSStartTime\":\"%s\"}"
-					, (LPCTSTR)bootInfo.tmStart.ToTimeString(), (LPCTSTR)runInfo.tmStart.ToTimeString(), systemBootTime.ToTimeString().GetData());
-				LogWarn(Severity_Low, Error_Debug, theReportUserCode, strData.GetData());
-			}
-		}
-	}
-	return result;
-}
 
+//TODO: CrossPlaform !!!!UOS的实现与winpr_GetTickCount64是一样的,可以直接替换无影响  [Gifur@2025822]
 inline ULLINT RVCGetTickCount()
 {
 #ifdef RVC_OS_WIN
@@ -199,10 +55,8 @@ inline ULLINT RVCGetTickCount()
 #else
 	struct timespec ts;
 	clock_gettime(CLOCK_MONOTONIC, &ts);
-
 	return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
 #endif // RVC_OS_WIN
-
 }
 
 } // comm
@@ -268,7 +122,7 @@ static char* ConvertBytesToHexStr(BYTE* pBuf, int nLen)
     return pRet;
 }
 
-
+//same as hex2int ??
 static char HexChar2Dec(char c)
 {
 	if ((c >= '0') && (c <= '9'))
@@ -291,6 +145,17 @@ static int Hex2Int(char* s)
 	}
 	return ret;
 }
+*/
+
+inline static int hex2int(const char c)
+{
+	if (c >= '0' && c <= '9') return (c - '0');
+	if (c >= 'A' && c <= 'F') return (c - 'A' + 10);
+	if (c >= 'a' && c <= 'f') return (c - 'a' + 10);
+	return 0xFF;
+}
+
+/*
 
 static void ConvAscii(unsigned char* Hex, char* Ascii, unsigned int len)
 {
@@ -331,6 +196,95 @@ static bool IsNoStr(const char* str)
 	return true;
 }*/
 
+
+inline static int Char2Int(char* ch) {
+	int num = 0;
+	for (int i = 0; i < strlen(ch); i++) {
+		num += ((int)(ch[i] - '0')) * std::pow((float)10, (float)(strlen(ch) - i - 1));
+	}
+	return num;
+}
+
+static unsigned char Ch2Hex(char ch)
+{
+	static const char* hex = "0123456789ABCDEF";
+	for (unsigned char i = 0; i != 16; ++i)
+		if (ch == hex[i])
+			return i;
+	return 0;
+}
+
+/** remembe to delete[] return value if not null*/
+static char* HexStr2Bytes(const std::string& str)
+{
+	const int sz = str.length();
+	char* ret = new char[sz / 2 + 1];
+	if (ret == NULL) {
+		return NULL;
+	}
+	for (int i = 0; i < sz; i += 2) {
+		ret[i / 2] = (char)(((hex2int(str[i])) << 4) | hex2int(str[i + 1]));
+	}
+	ret[sz / 2] = 0x00;
+	return ret;
+}
+
+/*WARNING: need to delete[] the returned value if it's not null*/
+static char* Hex2Str(const char* src, int& dstLen)
+{
+	int i = 0;
+	int cnt = 0;
+	int len = strlen(src);
+	unsigned char* d = new unsigned char[len];
+	memset(d, 0, len);
+	while (*src)
+	{
+		if (i & 1)
+		{
+			d[cnt++] |= Ch2Hex(*src);
+		}
+		else
+		{
+			d[cnt] = Ch2Hex(*src) << 4;
+		}
+		src++;
+		i++;
+	}
+	dstLen = cnt;
+	return (char*)d;
+}
+
+/*WARNING: need to delete[] the returned value if it's not null*/
+static char* Str2Hex(const char* src, int srcLen)
+{
+	string ret;
+	static const char* hex = "0123456789ABCDEF";
+
+	for (int i = 0; i != srcLen; ++i)
+	{
+		ret.push_back(hex[(src[i] >> 4) & 0xf]);
+		ret.push_back(hex[src[i] & 0xf]);
+	}
+	char* tmp = new char[ret.length() + 1];
+	memset(tmp, 0, ret.length() + 1);
+	memcpy(tmp, ret.c_str(), ret.length());
+	return tmp;
+}
+
+/*duplicate with the above one ??*/
+static std::string Bytes2HexStr(char* bytes, std::size_t byteLen)
+{
+	std::string str("");
+	const std::string conv("0123456789ABCDEF");
+	for (std::size_t i = 0; i < byteLen; ++i) {
+		int b = 0x0F & (bytes[i] >> 4);
+		str.push_back(conv[b]);
+		b = 0x0F & (bytes[i]);
+		str.push_back(conv[b]);
+	}
+	return str;
+}
+
 static std::string formatTime(const SYSTEMTIME& time)
 {
     char tBuf[1024] = "";
@@ -338,6 +292,11 @@ static std::string formatTime(const SYSTEMTIME& time)
     return tBuf;
 }
 
+static CSimpleStringA generateConsumeTimeJson(const CSimpleStringA& entityName, const CSimpleStringA& startTime, int cost)
+{
+	return CSimpleStringA::Format("{\"name\":\"%s\",\"time\":\"%s\",\"cost\":%d}", entityName.GetData(), startTime.GetData(), cost);
+}
+
 static bool ShellExecute(const std::string& cmd, std::string& succResult, std::string& errResult)
 {
 	succResult = errResult = "";
@@ -397,11 +356,6 @@ static bool ShellExecute(const std::string& cmd, std::string& succResult, std::s
 #endif //_MSC_VER
 }
 
-static CSimpleStringA generateConsumeTimeJson(const CSimpleStringA& entityName, const CSimpleStringA& startTime, int cost)
-{
-    return CSimpleStringA::Format("{\"name\":\"%s\",\"time\":\"%s\",\"cost\":%d}", entityName.GetData(), startTime.GetData(), cost);
-}
-
 #if defined(_MSC_VER)
 
 static void ConvertUtf82GBK(std::string& str)

+ 50 - 113
Module/mod_CardIssuerStand/CardIssuerStand.xml

@@ -69,15 +69,7 @@
 			</res>			
 		</twoway>
 		<oneway name="Exit" overlap="true" method_id="8">			
-		</oneway>			
-		<twoway name="Issue" overlap="true" method_id="9">
-			<req>
-			</req>
-			<res>
-			</res>			
-		</twoway>				
-		<oneway name="SetIssueFlag" overlap="true" method_id="12">			
-		</oneway>
+		</oneway>				
 		<twoway name="QueryCardInfo" overlap="true" method_id="14">
 			<req>
 			</req>
@@ -87,21 +79,6 @@
 				<param name="reserved2" type="string"/>
 			</res>			
 		</twoway>
-		<twoway name="WriteTrack" overlap="true" method_id="15">
-			<req>
-				<param name="mode" type="int"/>
-				<param name="co" type="int"/>
-				<param name="track1" type="wstring"/>
-				<param name="track2" type="wstring"/>
-				<param name="track3" type="wstring"/>
-				<param name="reserved" type="wstring"/>
-			</req>
-			<res>
-				<param name="result" type="int"/>
-				<param name="reserved1" type="int"/>
-				<param name="reserved2" type="string"/>
-			</res>
-		</twoway>
 		<twoway name="GetMaterialCountEx" overlap="true" method_id="16">
 			<req>
 				<param name="GetHopper" type="array_int"/>
@@ -170,21 +147,6 @@
 				<param name="reserved2" type="array_string"/>					
 			</res>			
 		</twoway>
-		<twoway name="SAMICCommand" overlap="true" method_id="22">
-			<req>
-				<param name="cmdType" type="int"/>
-				<param name="param1" type="array_int"/>
-				<param name="param2" type="array_string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>			
-			</req>
-			<res>
-				<param name="ret1" type="array_int"/>
-				<param name="ret2" type="array_string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>					
-			</res>			
-		</twoway>	
 		<twoway name="PreOnlineOnStore" overlap="true" method_id="27">
 			<req>
 				<param name="account" type="string"/>
@@ -260,8 +222,8 @@
 			</res>			
 		</twoway>
 		<!--查询卡机设备状态接口 -->
-		<!--1、卡库打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2311-->
-		<!--2、卡库正在打开中, errorCode为Error_NotInit(769),rtaCode为RTA2311-->		
+		<!--1、卡机未成功打开, rtaCode为RTA2311-->
+		<!--2、卡库正在打开中, rtaCode为RTA2311-->		
 		<twoway name="GetDevInfo" overlap="true" method_id="65535" jsflag="true">
 			<req>
 			</req>
@@ -269,29 +231,24 @@
 				<param name="type" type="string" />
 				<param name="model" type="string" />
 				<param name="version" type="string" />
-				<!--卡机状态 0设备未打开 1 正常运行 2卡箱未准备好需要维护 3卡机异常不可工作-->
+				<!--卡机状态, JS之后只需要关注:2 卡箱未准备好需要维护-->
 				<param name="state" type="int" />
 			</res>			
 		</twoway>							
 	
 		
 		<!--读卡接口 -->
-		<!--1、卡机打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2311-->
-		<!--2、读卡器无卡, errorCode为Error_Unexpect(2147483646),rtaCode为RTA23CR-->
-		<!--3、查询卡机状态失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2322-->
-		<!--4、发卡时,上电失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA230V-->
-		<!--5、发卡时,上电失败(非接) errorCode为Error_Unexpect(2147483646),rtaCode为RTA2327-->
-		<!--6、上电失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA230M-->
-		<!--7、上电失败(非接) errorCode为Error_Unexpect(2147483646),rtaCode为RTA2326-->
-		<!--8、读卡失败,读取IC数据失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2302-->
-		<!--9、读卡失败,读取IC数据失败(非接) errorCode为Error_Unexpect(2147483646),rtaCode为RTA23C9-->
+		<!--卡机未成功打开, rtaCode为RTA2311-->
+    <!--为了把读卡情况完整的反馈,返回规则如下:-->
+    <!--1、对于单路(只读磁或只读芯)的请求,失败则返回报错-->
+    <!--2、对于双路的请求,一律返回成功,增加magMsg、icMsg字段,分别在对应通路异常时填充“[RTAxxxx]描述信息”-->
+    <!--相关的报错信息如下:发卡时,上电失败,rtaCode为RTA230V;发卡时,上电失败(非接),rtaCode为RTA2327;上电失败,rtaCode为RTA230M;上电失败(非接)),rtaCode为RTA2326;
+				读卡失败,读取IC数据失败,rtaCode为RTA2302;读卡失败,读取IC数据失败(非接),rtaCode为RTA23C9-->
 		<twoway name="ReadJS" overlap="true" method_id="40" jsflag="true">
 			<req>
-        <!--读取模式:1 读磁、2 接触IC优先、3 非接IC优先、4 非接IC、5 读磁+接触IC优先、6 读磁+非接IC优先、7 读磁+非接IC-->
-        <param name="mode" type="int" />
-        <!--Aid列表-->
-				<param name="aid" type="string"/>
-				<!--业务数据-->
+				<!--读取模式:1 读磁、2 读芯,接触优先、3 读芯,非接优先、4 读芯,只走非接、5 读磁读芯,接触优先、6 读磁读芯非接优先、7 读磁读芯,只走非接-->
+				<param name="mode" type="int" />
+				<!--业务数据。aid提供,按照TLV的格式加到businessData,终端应用按照指定的aid进行尝试接触IC读取-->
 				<param name="businessData" type="string"/>
 				<param name="reserved1" type="array_int"/>
 				<param name="reserved2" type="array_string"/>
@@ -299,47 +256,30 @@
 			<res>
 				<!--读磁条结果 0成功 1失败 2未执行-->
 				<param name="magStatus" type="int" />
-				<!--磁道1数据-->
-				<param name="track1" type="string"/>
-				<!--磁道2数据-->
-				<param name="track2" type="string"/>
-				<!--磁道3数据-->
-				<param name="track3" type="string"/>
-				<!--磁道1数据长度-->
-				<param name="track1Size" type="int"/>
-				<!--磁道2数据长度-->
-				<param name="track2Size" type="int"/>
-				<!--磁道3数据长度-->
-				<param name="track3Size" type="int"/>
-				<!--磁道1数据状态 0成功 1无效-->
-				<param name="track1Status" type="int"/>
-				<!--磁道2数据状态 0成功 1无效-->
-				<param name="track2Status" type="int"/>
-				<!--磁道3数据状态 0成功 1无效-->
-				<param name="track3Status" type="int"/>
-				<!--读IC结果 0成功 1失败-->
-				<param name="icState" type="int"/>
-				<!--读IC成功下接触方式 0接触 1非接 2未执行-->
+				<!--磁道数据<json格式>	track1:磁道1	track2:磁道1	track3:磁道3 -->
+				<param name="magData" type="string"/>
+        <!--magStatus非0的情况下,可能会有RTAxxxx的说明 -->
+        <param name="magMsg" type="string"/>
+				<!--读IC结果 0成功 1失败 2未执行-->
+				<param name="icStatus" type="int"/>
+        <!--icStatus非0的情况下,可能会有RTAxxxx的说明 -->
+        <param name="icMsg" type="string"/>
+        <!--读IC成功时,所用的通讯方式 0接触 1非接;不成功,值无意义-->
 				<param name="icMode" type="int"/>
 				<!--IC读取的数据<json格式>
-					ACTION:行为代码
-					ATC_CODE:交易计数器code
-					ARQC_CODE:授权请求code
-					MAC:安全报文鉴别码
-					ARQC_SIZE:授权请求长度
-					ARQC_DATA:授权请求数据
-					T2TRACK2_DATA:磁道2数据
-					EXPIRE_DATE:卡片失效日期
-					IC_TAGS:基础IC数据
+					ACTION:行为代码	ATC_CODE:交易计数器code	ARQC_CODE:授权请求code
+					MAC:安全报文鉴别码	ARQC_SIZE:授权请求长度		ARQC_DATA:授权请求数据
+					IC_TRACK2:等效二磁道2数据(Tag:57)	EXPIRE_DATE:卡片中的应用失效日期(Tag:5F24)	IC_TAGS:基础IC数据
+          ICCardSerial:卡序号(Tag:5F34)
 				-->
-				<param name="result" type="string"/>
+				<param name="pbocData" type="string"/>
 				<param name="reserved1" type="array_int"/>
 				<param name="reserved2" type="array_string"/>
 			</res>
 		</twoway>
 		
 		<!--联机后处理接口-->
-		<!--1、卡机打开失败, errorCode为Error_Unexpect(2147483646),rtaCode为RTA2311-->
+		<!--1、卡机未成功打开, rtaCode为RTA2311-->
 		<twoway name="PostOnlineJS" overlap="true" method_id="41" jsflag="true">
 			<req>
 				<!--联机后处理数据-->
@@ -352,11 +292,10 @@
 		</twoway>
 		
 		<!--吐卡接口-->
-		<!--1、卡机打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2311-->
-		<!--2、卡机吐卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2308-->
-		<!--3、超时未取卡,已吞卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA23CU-->
-		<!--4、超时未取卡,吞卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA23CV-->
-		<!--5、查询卡机状态失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W22-->
+		<!--1、卡机未成功打开, rtaCode为RTA2311-->
+		<!--2、卡机吐卡失败, rtaCode为RTA2308-->
+		<!--3、超时未取卡,已吞卡, rtaCode为RTA23CU-->
+		<!--4、超时未取卡,吞卡失败, rtaCode为RTA23CV-->
 		<twoway name="EjectJS" overlap="true" method_id="42" jsflag="true">
 			<req>
 			</req>
@@ -365,9 +304,8 @@
 		</twoway>
 		
 		<!--吞卡接口-->
-		<!--1、卡机打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2311-->
-		<!--2、吞卡失败, errorCode为Error_Unexpect(2147483646),rtaCode为RTA2307-->
-		<!--3、吞卡时卡机无卡, errorCode为Error_Unexpect(2147483646),rtaCode为RTA23CS-->
+		<!--1、卡机未成功打开, rtaCode为RTA2311-->
+		<!--2、吞卡失败, rtaCode为RTA2307-->
 		<twoway name="CaptureJS" overlap="true" method_id="43" jsflag="true">
 			<req>
 				<!--吞卡原因码-->
@@ -378,8 +316,8 @@
 		</twoway>
 		
 		<!--查询卡机是否有卡接口-->
-		<!--1、卡机打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2311-->
-		<!--2、查询卡机状态失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2322-->
+		<!--1、卡机未成功打开, rtaCode为RTA2311-->
+		<!--2、查询卡机状态失败, rtaCode为RTA2322-->
 		<twoway name="QueryHasCardJS" overlap="true" method_id="44" jsflag="true">
 			<req>
 			</req>
@@ -392,15 +330,15 @@
 		</twoway>		
 		
 		<!--卡箱发卡接口-->
-		<!--1、卡机打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2311-->
-		<!--2、卡箱1未检测到 errorCode为Error_DevMedia(2054),rtaCode为RTA230B-->
-		<!--3、卡箱2未检测到 errorCode为Error_DevMedia(2054),rtaCode为RTA230C-->
-		<!--4、卡箱3未检测到 errorCode为Error_DevMedia(2054),rtaCode为RTA230D-->
-		<!--5、卡箱1未检测到卡片 errorCode为Error_DevNotAvailable(2050),rtaCode为RTA230E-->
-		<!--6、卡箱2未检测到卡片 errorCode为Error_DevNotAvailable(2050),rtaCode为RTA230F-->
-		<!--7、卡箱3未检测到卡片 errorCode为Error_DevNotAvailable(2050),rtaCode为RTA230G-->
-		<!--8、从卡箱移动卡片到读卡器失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2306-->
-		<!--9、发卡箱号参数错误 errorCode为Error_Param(102),rtaCode为RTA23CW-->
+		<!--1、卡机未成功打开, rtaCode为RTA2311-->
+		<!--2、卡箱1未检测到, rtaCode为RTA230B-->
+		<!--3、卡箱2未检测到, rtaCode为RTA230C-->
+		<!--4、卡箱3未检测到, rtaCode为RTA230D-->
+		<!--5、卡箱1未检测到卡片, rtaCode为RTA230E-->
+		<!--6、卡箱2未检测到卡片, rtaCode为RTA230F-->
+		<!--7、卡箱3未检测到卡片, rtaCode为RTA230G-->
+		<!--8、从卡箱移动卡片到读卡器失败, rtaCode为RTA2306-->
+		<!--9、卡箱号不是1-3, rtaCode为RTA23CW-->
 		<twoway name="IssueFromBoxJS" overlap="true" method_id="45" jsflag="true">
 			<req>
 				<!--卡箱号-->
@@ -415,12 +353,11 @@
 		</twoway>	
 		
 		<!--前端插卡接口-->
-		<!--1、卡机打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2311-->
-		<!--2、查询卡机状态失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2322-->
-		<!--3、卡机未插卡时,内部已存在卡片 errorCode为Error_Unexpect(2147483646),rtaCode为RTA23CN-->
-		<!--4、卡机插卡超时 errorCode为Error_TimeOut(1792),rtaCode为RTA23CP-->
-		<!--5、卡机插卡取消 errorCode为Error_Cancel(1026),rtaCode为RTA23CQ-->
-		
+		<!--1、卡机未成功打开, rtaCode为RTA2311-->
+		<!--2、调用卡机API失败, rtaCode为RTA2322/RTA23B5-->
+		<!--3、卡机插卡超时, rtaCode为RTA23CP-->
+		<!--4、卡机插卡取消, rtaCode为RTA23CQ-->
+    <!--5、卡机实体无法处理此命令, rtaCode由实体当前状态决定-->
 		<twoway name="InsertJS" overlap="true" method_id="47" jsflag="true">
 			<req>
 				<param name="reserved1" type="array_int"/>

文件差异内容过多而无法显示
+ 195 - 468
Module/mod_CardIssuerStand/CardIssuerStandFSM.cpp


+ 133 - 391
Module/mod_CardIssuerStand/CardIssuerStandFSM.h

@@ -30,8 +30,6 @@ enum EvtType
 	USER_EVT_ACCEPT,
 	USER_EVT_ACCEPT_CANCEL,
 	USER_EVT_ACCEPTFINISHED,
-	USER_EVT_ISSUE,
-	USER_EVT_ISSUE_FINISHED,
 	USER_EVT_EJECT,
 	USER_EVT_CAPTURE,
 	USER_EVT_EJECTFINISHED,
@@ -67,36 +65,24 @@ enum EvtType
 	USER_EVT_JS_INSERT_FINISHED,
 	USER_EVT_JS_INSERT_CANCEL,
 	USER_EVT_JS_EXIT_MIAN_PAGE,
-	USER_EVT_QUERY_CARD_POS_FINISHED
-};
-enum SAMICCommandType
-{
-	//SAM
-	SAMICCommand_SAM_Select = 0,
-	SAMICCommand_SAM_Active,
-	SAMICCommand_SAM_Deactivate,
-	SAMICCommand_SAM_WarmReset,
-	SAMICCommand_SAM_QueryStatus,
-	SAMICCommand_SAM_Command,
-	//IC
-	SAMICCommand_IC_Active = 100,
-	SAMICCommand_IC_Deactivate,
-	SAMICCommand_IC_WarmReset,
-	SAMICCommand_IC_Command,
-	SAMICCommand_RFIC_Active,
-	SAMICCommand_RFIC_Deactivate,
-	SAMICCommand_RFIC_Command,
+	USER_EVT_CHECK_CARD_FINISHED
 };
 enum ReadMode
 { 
 	//<!--读取模式:1 读磁、2 接触IC优先、3 非接IC优先、4 非接IC、5 读磁+接触IC优先、6 读磁+非接IC优先、7 读磁+非接IC-->
 	ReadMode_MagOnly = 1,
-	ReadMode_ContactICFirst = 2,
-	ReadMode_ContactlessICFirst = 3,
-	ReadMode_ContactlessICOnly = 4,
-	ReadMode_Mag_ContactICFirst = 5,
-	ReadMode_Mag_ContactlessICFirst = 6,
-	ReadMode_Mag_ContactlessICOnly = 7,
+	ReadMode_ICOnly_ContactICFirst = 2,
+	ReadMode_ICOnly_RFFirst = 3,
+	ReadMode_ICOnly_RFOnly = 4,
+	ReadMode_MagIC_ContactICFirst = 5,
+	ReadMode_MagIC_RFFirst = 6,
+	ReadMode_MagIC_RFOnly = 7,
+};
+enum CheckCardCase
+{
+	CheckCard_OnOpen = 0,
+	CheckCard_OnFail,
+	CheckCard_OnMainPage,
 };
 
 typedef int(*lpCMBdecodeMag2)(char* Mag2Data, char * data);
@@ -123,11 +109,6 @@ struct CMBBin
 	bool bIC;//IC:true or mag:false
 	bool bDC;//debit:true,credit:false
 };
-struct SCIRecord
-{
-	CSimpleStringA name;
-	CSimpleStringA remoteMac;
-};
 
 class CardInitFinishedEvent : public FSMEvent
 {
@@ -147,13 +128,6 @@ public:
 	~CardAcceptEvent() {}
 	SpReqAnsContext<CardIssuerStandService_Insert_Req, CardIssuerStandService_Insert_Ans>::Pointer ctx;
 };
-class CardIssueEvent : public FSMEvent
-{
-public:
-	CardIssueEvent() : FSMEvent(USER_EVT_ISSUE) {}
-	~CardIssueEvent() {}
-	SpReqAnsContext<CardIssuerStandService_Issue_Req, CardIssuerStandService_Issue_Ans>::Pointer ctx;
-};
 
 class CancelAcceptEvent : public FSMEvent
 {
@@ -314,185 +288,6 @@ public:
 
 #pragma endregion JS接口 event
 
-
-typedef struct EacQueryByEac_X1 {
-	string xEacNbr;
-	string xCltNbr;
-	string xIacNbr;
-} EacQueryByEac_X1;
-
-typedef struct CQueryCardTypeReq : CHTTPReq {
-	struct HEAD {
-		int xHdrLen;
-		string xIsuCnl;
-		string xRtnCod;
-	}HEAD;
-	struct BODY {
-		EacQueryByEac_X1 x1;
-	}BODY;
-	int X1Count;
-	CQueryCardTypeReq() {
-		X1Count = 1;
-	}
-	string ToJson() {
-		Json::Value allElm,x1Arr;
-		allElm[REFLECTION(HEAD)][REFLECTION(xHdrLen)] = HEAD.xHdrLen;
-		allElm[REFLECTION(HEAD)][REFLECTION(xIsuCnl)] = HEAD.xIsuCnl;
-		allElm[REFLECTION(HEAD)][REFLECTION(xRtnCod)] = HEAD.xRtnCod;
-
-		for (int i = 0; i < X1Count; i++) {
-			Json::Value x1Elm;
-			Json::FastWriter fwX1Elm;//写入对象
-			x1Elm[REFLECTION(xEacNbr)] = BODY.x1.xEacNbr.c_str();
-			x1Elm[REFLECTION(xCltNbr)] = BODY.x1.xCltNbr.c_str();
-			x1Elm[REFLECTION(xIacNbr)] = BODY.x1.xIacNbr.c_str();
-			//string x1JsonStr = fwX1Elm.write(x1Elm);
-			x1Arr[i] = x1Elm;
-		}
-		allElm[REFLECTION(BODY)][REFLECTION(EacQueryByEac_X1)] = x1Arr;
-
-		Json::FastWriter writer;
-		string ret = writer.write(allElm);
-
-
-		return ret;
-	}
-} CQueryCardTypeReq;
-typedef struct EacQueryByEac_Z1 {
-	string zEacNbr;
-	string zEacSts;
-	string zEacTyp;
-	string zEacNam;
-	string zEacNik;
-	string zEacCod;
-	string zCltNbr;
-	string zIacNbr;
-	string zKeySeq;
-	string zFndClt;
-	string zFndIac;
-	string zFndCpb;
-	string zFndAtp;
-	string zFpnClt;
-	string zFpnIac;
-	string zCtfCnr;
-	string zCtfTyp;
-	string zPsbTag;
-	string zPsbFac;
-	string zPsbNbr;
-	string zPsbCod;
-	string zPsbSeq;
-	string zPsbMdm;
-	string zCvcCod;
-	string zCvcCd2;
-	string zCvcIcd;
-	string zMapBus;
-	string zMapCnl;
-	string zMapDpn;
-	string zMapPwd;
-	string zMapAut;
-	string zWrmFlg;
-	string zBlsFlg;
-	string zNamFlg;
-	string zActFlg;
-	string zSlpFlg;
-	string zFkcFlg;
-	string zSnmFlg;
-	string zWrfAll;
-	string zWrfNdk;
-	string zWrfZft;
-	string zWrfDsk;
-	string zPayLck;
-	string zQryTag;
-	string zFncTag;
-	string zWdwTag;
-	string zPayTag;
-	string zTmpTag;
-	string zExtTag;
-	string zCtfTag;
-	string zMskTag;
-	string zStfFlg;
-	string zSlaFlg;
-	string zBatFlg;
-	string zAgtFlg;
-	string zAmgTag;
-	string zCurTag;
-	string zImgIdt;
-	string zGrpFlg;
-	string zOpnDat;
-	string zOpnUsr;
-	string zOpnChk;
-	string zOpnAut;
-	string zActDat;
-	string zClsDat;
-	string zClsUsr;
-	string zClsChk;
-	string zClsAut;
-	string zDatEft;
-	string zDatExp;
-	string zBbkNbr;
-	string zBrnNbr;
-	string zBrnMng;
-	string zCtyCod;
-}EacQueryByEac_Z1;
-typedef struct CQueryCardTypeRet : CHTTPRet {
-	struct HEAD {
-		string xTypCod;
-		string xHdrLen;
-		string xSysCod;
-		string xDskSys;
-		string xWkeCod;
-		string xKeyVal;
-		string xIsuCnl;
-		string xEncCod;
-		string xDalCod;
-		string xCmmTyp;
-		string xOrgIsu;
-		string xPreIsu;
-		string xEntUsr;
-		string xUsrPwd;
-		string xIsuDat;
-		string xIsuTim;
-		string xMacCod;
-		string xRtnLvl;
-		string xRtnCod;
-		string xDevNbr;
-		string xTlrNbr;
-		string xRqsNbr;
-		string xCmmRsv;
-		string xDocSiz;
-		string xItvTms;
-		string xMsgFlg;
-		string xAppRsv;
-	}HEAD;
-	struct BODY {
-		EacQueryByEac_Z1 z1;
-	}BODY;
-	int Z1Count;
-	CQueryCardTypeRet() : Z1Count(1) {
-	}
-	bool Parse(string strData) {
-		Json::Value root,tmpZ1;
-		Json::Reader reader;
-		Json::Value::UInt index;
-		if (!reader.parse(strData, root, false))
-		{
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("reader.parse false");
-			return false;
-		}
-		index = 0;
-		HEAD.xRtnCod = root["HEAD"][REFLECTION(xRtnCod)].asCString();
-		if (HEAD.xRtnCod.compare("SUC0000") == 0)
-		{
-			tmpZ1 = root["BODY"][REFLECTION(EacQueryByEac_Z1)];
-			BODY.z1.zPsbMdm = tmpZ1[index][REFLECTION(zPsbMdm)].asCString();
-			BODY.z1.zEacNbr = tmpZ1[index][REFLECTION(zEacNbr)].asCString();
-			BODY.z1.zPsbSeq = tmpZ1[index][REFLECTION(zPsbSeq)].asCString();
-			return true;
-		}
-		else
-			return false;
-	}
-} CQueryCardTypeRet;
 typedef struct CRegistSwallowCardReq : CHTTPReq {
 	string cardNo;
 	string cardType;
@@ -643,134 +438,122 @@ struct SyncMaterialCountHTTPRet : CHTTPRet {
 class CCardIssuerFSM : public CCommDevFSM<CCardIssuerFSM, CardIssuerClass>, public IFSMStateHooker
 {
 public:
-	enum {s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12};
+	enum { s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12 };
 	BEGIN_FSM_STATE(CCardIssuerFSM)
-		FSM_STATE_ENTRY(s0,"Init",s0_on_entry,s0_on_exit,s0_on_event)
-		FSM_STATE_ENTRY(s1,"Initializing",s1_on_entry,s1_on_exit,s1_on_event)
-		FSM_STATE_ENTRY(s2,"Idle",s2_on_entry,s2_on_exit,s2_on_event)
-		FSM_STATE_ENTRY(s3,"Accepting",s3_on_entry,s3_on_exit,s3_on_event)
-		FSM_STATE_ENTRY(s4,"Hold",s4_on_entry,s4_on_exit,s4_on_event)
-		FSM_STATE_ENTRY(s5,"Reading",s5_on_entry,s5_on_exit,s5_on_event)
-		FSM_STATE_ENTRY(s6,"Ejecting",s6_on_entry,s6_on_exit,s6_on_event)
-		FSM_STATE_ENTRY(s7,"WaitFetching",s7_on_entry,s7_on_exit,s7_on_event)
-		FSM_STATE_ENTRY(s8,"Capturing",s8_on_entry,s8_on_exit,s8_on_event)
-		FSM_STATE_ENTRY(s9,"Failed",s9_on_entry,s9_on_exit,s9_on_event)
-		FSM_STATE_ENTRY(s10,"Issuing",s10_on_entry,s10_on_exit,s10_on_event)
+		FSM_STATE_ENTRY(s0, "Init", s0_on_entry, s0_on_exit, s0_on_event)
+		FSM_STATE_ENTRY(s1, "Initializing", s1_on_entry, s1_on_exit, s1_on_event)
+		FSM_STATE_ENTRY(s2, "Idle", s2_on_entry, s2_on_exit, s2_on_event)
+		FSM_STATE_ENTRY(s3, "Accepting", s3_on_entry, s3_on_exit, s3_on_event)
+		FSM_STATE_ENTRY(s4, "Hold", s4_on_entry, s4_on_exit, s4_on_event)
+		FSM_STATE_ENTRY(s5, "Reading", s5_on_entry, s5_on_exit, s5_on_event)
+		FSM_STATE_ENTRY(s6, "Ejecting", s6_on_entry, s6_on_exit, s6_on_event)
+		FSM_STATE_ENTRY(s7, "WaitFetching", s7_on_entry, s7_on_exit, s7_on_event)
+		FSM_STATE_ENTRY(s8, "Capturing", s8_on_entry, s8_on_exit, s8_on_event)
+		FSM_STATE_ENTRY(s9, "Failed", s9_on_entry, s9_on_exit, s9_on_event)
+		FSM_STATE_ENTRY(s10, "Issuing", s10_on_entry, s10_on_exit, s10_on_event)
 		FSM_STATE_ENTRY(s11, "ReadJSing", s11_on_entry, s11_on_exit, s11_on_event)
 		FSM_STATE_ENTRY(s12, "IssueJSing", s12_on_entry, s12_on_exit, s12_on_event)
 		END_FSM_STATE()
 
-	BEGIN_FSM_RULE(CCardIssuerFSM,s0)
-	
+		BEGIN_FSM_RULE(CCardIssuerFSM, s0)
+
 		FSM_RULE_ENTRY(s0, s2, USER_EVT_TEST, 0)
-		FSM_RULE_ENTRY(s0,s1,USER_EVT_INIT,0)
+		FSM_RULE_ENTRY(s0, s1, USER_EVT_INIT, 0)
 		FSM_RULE_ENTRY(s0, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s1,s2,USER_EVT_INITFINISHED,0)
-		FSM_RULE_ENTRY(s1,s9,USER_EVT_INITFINISHED,1)
+		FSM_RULE_ENTRY(s1, s2, USER_EVT_INITFINISHED, 0)
+		FSM_RULE_ENTRY(s1, s9, USER_EVT_INITFINISHED, 1)
 		FSM_RULE_ENTRY(s1, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s2,s3,USER_EVT_ACCEPT,0)
-//		FSM_RULE_ENTRY(s2,s9,USER_EVT_ACCEPT,1)
+		FSM_RULE_ENTRY(s2, s3, USER_EVT_ACCEPT, 0)
+		//		FSM_RULE_ENTRY(s2,s9,USER_EVT_ACCEPT,1)
 		FSM_RULE_ENTRY(s2, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s2,s10,USER_EVT_ISSUE,0)
 		FSM_RULE_ENTRY(s2, s10, USER_EVT_ISSUE_EX, 0)
 		FSM_RULE_ENTRY(s2, s3, USER_EVT_JS_INSERT, 0)//JS 插卡
 		FSM_RULE_ENTRY(s2, s12, USER_EVT_JS_ISSUE_FROM_BOX, 0)//JS 卡箱发卡
-		FSM_RULE_ENTRY(s2, s8, USER_EVT_JS_CAPTURE, 0)//JS 吞卡
-		FSM_RULE_ENTRY(s3,s4,USER_EVT_ACCEPTFINISHED,0)
-		FSM_RULE_ENTRY(s3,s9,USER_EVT_ACCEPTFINISHED,1)
-		FSM_RULE_ENTRY(s3,s2,USER_EVT_ACCEPTFINISHED,2)
-		FSM_RULE_ENTRY(s3,s2,USER_EVT_ACCEPTFINISHED,3)
-		FSM_RULE_ENTRY(s3,s7,USER_EVT_ACCEPTFINISHED,4)
+		FSM_RULE_ENTRY(s3, s4, USER_EVT_ACCEPTFINISHED, 0)
+		FSM_RULE_ENTRY(s3, s9, USER_EVT_ACCEPTFINISHED, 1)//设置进卡报错
+		FSM_RULE_ENTRY(s3, s2, USER_EVT_ACCEPTFINISHED, 2)
+		FSM_RULE_ENTRY(s3, s2, USER_EVT_ACCEPTFINISHED, 3)
+		FSM_RULE_ENTRY(s3, s7, USER_EVT_ACCEPTFINISHED, 4)
+		FSM_RULE_ENTRY(s3, s9, USER_EVT_ACCEPTFINISHED, 5)//查询硬件报错
 		FSM_RULE_ENTRY(s3, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
 		FSM_RULE_ENTRY(s3, s4, USER_EVT_JS_INSERT_FINISHED, 0)//JS 插卡成功
-		FSM_RULE_ENTRY(s3, s9, USER_EVT_JS_INSERT_FINISHED, 1)//JS 查询硬件报错
+		FSM_RULE_ENTRY(s3, s9, USER_EVT_JS_INSERT_FINISHED, 1)//JS 设置进卡报错
 		FSM_RULE_ENTRY(s3, s2, USER_EVT_JS_INSERT_FINISHED, 2)//JS 超时
 		FSM_RULE_ENTRY(s3, s2, USER_EVT_JS_INSERT_FINISHED, 3)//JS 取消
 		FSM_RULE_ENTRY(s3, s6, USER_EVT_JS_INSERT_FINISHED, 4)//JS 取消时有卡,吐卡
-		FSM_RULE_ENTRY(s3, s2, USER_EVT_JS_INSERT_FINISHED, 5)//JS 插卡前内部已有卡
-		FSM_RULE_ENTRY(s4,s5,USER_EVT_READ,0)
-		FSM_RULE_ENTRY(s4,s6,USER_EVT_EJECT,0)
-		FSM_RULE_ENTRY(s4,s6,USER_EVT_EXIT,0)
-		FSM_RULE_ENTRY(s4,s8,USER_EVT_ACCEPT,0)
-		FSM_RULE_ENTRY(s4,s8,USER_EVT_EXIT,1)
-		FSM_RULE_ENTRY(s4,s8,USER_EVT_CAPTURE,0)
+		FSM_RULE_ENTRY(s3, s9, USER_EVT_JS_INSERT_FINISHED, 5)//JS 查询硬件报错
+		FSM_RULE_ENTRY(s4, s5, USER_EVT_READ, 0)
+		FSM_RULE_ENTRY(s4, s6, USER_EVT_EJECT, 0)
+		FSM_RULE_ENTRY(s4, s8, USER_EVT_ACCEPT, 0)//???
+		FSM_RULE_ENTRY(s4, s8, USER_EVT_CAPTURE, 0)
 		FSM_RULE_ENTRY(s4, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s4, s2, USER_EVT_ISSUE_EX_FINISHED, 2)
-		FSM_RULE_ENTRY(s4, s6, USER_EVT_ISSUE_EX_FINISHED, 6)
 		FSM_RULE_ENTRY(s4, s5, USER_EVT_PREONLINE, 0)
 		FSM_RULE_ENTRY(s4, s5, USER_EVT_POSTONLINE, 0)
 		FSM_RULE_ENTRY(s4, s11, USER_EVT_JS_READ, 0)//JS 读卡
 		FSM_RULE_ENTRY(s4, s11, USER_EVT_JS_POSTONLINE, 0)//JS 联机后
 		FSM_RULE_ENTRY(s4, s6, USER_EVT_JS_EJECT, 0)//JS 吐卡
 		FSM_RULE_ENTRY(s4, s8, USER_EVT_JS_CAPTURE, 0)//JS 吞卡
-		FSM_RULE_ENTRY(s4, s6, USER_EVT_JS_EXIT_MIAN_PAGE, 0)//JS 退回首页吐卡
-		FSM_RULE_ENTRY(s4, s8, USER_EVT_JS_EXIT_MIAN_PAGE, 1)//JS 退回首页吞卡
-		FSM_RULE_ENTRY(s5,s4,USER_EVT_READ_FINISHED,0)
-		FSM_RULE_ENTRY(s5,s9,USER_EVT_READ_FINISHED,1)
-		FSM_RULE_ENTRY(s5,s4,USER_EVT_READ_FINISHED,2)
+		FSM_RULE_ENTRY(s4, s2, USER_EVT_CHECK_CARD_FINISHED, 0)
+		FSM_RULE_ENTRY(s4, s9, USER_EVT_CHECK_CARD_FINISHED, 1)
+		FSM_RULE_ENTRY(s4, s6, EVT_MAINPAGE_DISPLAY, 0)
+		FSM_RULE_ENTRY(s4, s8, EVT_MAINPAGE_DISPLAY, 1)
+		FSM_RULE_ENTRY(s5, s4, USER_EVT_READ_FINISHED, 0)
+		FSM_RULE_ENTRY(s5, s9, USER_EVT_READ_FINISHED, 1)
 		FSM_RULE_ENTRY(s5, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s5, s4, USER_EVT_EXIT, 0)
 		FSM_RULE_ENTRY(s5, s4, USER_EVT_PREONLINEFINISHED, 0)
 		FSM_RULE_ENTRY(s5, s4, USER_EVT_POSTONLINEFINISHED, 0)
-		FSM_RULE_ENTRY(s6,	s7,USER_EVT_EJECTFINISHED,0)
-		FSM_RULE_ENTRY(s6,	s9,USER_EVT_EJECTFINISHED,1)
+		FSM_RULE_ENTRY(s6, s7, USER_EVT_EJECTFINISHED, 0)
+		FSM_RULE_ENTRY(s6, s9, USER_EVT_EJECTFINISHED, 1)
 		FSM_RULE_ENTRY(s6, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
 		FSM_RULE_ENTRY(s6, s2, USER_EVT_JS_EJECT_FINISHED, 0)//JS 吐卡取卡成功,取卡超时吞卡成功
 		FSM_RULE_ENTRY(s6, s9, USER_EVT_JS_EJECT_FINISHED, 1)//JS 吐卡失败,取卡超时吞卡失败
-		FSM_RULE_ENTRY(s7,s2,USER_EVT_WAITFINISHED,0)
-		FSM_RULE_ENTRY(s7,s9,USER_EVT_WAITFINISHED,1)
-		FSM_RULE_ENTRY(s7,s8,USER_EVT_WAITFINISHED,2)
+		FSM_RULE_ENTRY(s7, s2, USER_EVT_WAITFINISHED, 0)
+		FSM_RULE_ENTRY(s7, s9, USER_EVT_WAITFINISHED, 1)
+		FSM_RULE_ENTRY(s7, s8, USER_EVT_WAITFINISHED, 2)
 		FSM_RULE_ENTRY(s7, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s8,s2,USER_EVT_CAPTUREFINISHED,0)
-		FSM_RULE_ENTRY(s8,s9,USER_EVT_CAPTUREFINISHED,1)
+		FSM_RULE_ENTRY(s8, s2, USER_EVT_CAPTUREFINISHED, 0)
+		FSM_RULE_ENTRY(s8, s9, USER_EVT_CAPTUREFINISHED, 1)
 		FSM_RULE_ENTRY(s8, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
 		FSM_RULE_ENTRY(s8, s2, USER_EVT_JS_CAPTURE_FINISHED, 0)//JS 吞卡成功
 		FSM_RULE_ENTRY(s8, s9, USER_EVT_JS_CAPTURE_FINISHED, 1)//JS 吞卡失败
-		FSM_RULE_ENTRY(s9, s2, USER_EVT_QUERY_CARD_POS_FINISHED, 0)
-		FSM_RULE_ENTRY(s9, s4, USER_EVT_QUERY_CARD_POS_FINISHED, 2)
-		FSM_RULE_ENTRY(s10,s4,USER_EVT_ISSUE_FINISHED,0)
-		FSM_RULE_ENTRY(s10,s9,USER_EVT_ISSUE_FINISHED,1)
-		FSM_RULE_ENTRY(s10,s2,USER_EVT_ISSUE_FINISHED,2)
+		FSM_RULE_ENTRY(s9, s2, USER_EVT_CHECK_CARD_FINISHED, 0)
+		FSM_RULE_ENTRY(s9, s4, USER_EVT_CHECK_CARD_FINISHED, 2)
 		FSM_RULE_ENTRY(s10, s6, USER_EVT_ISSUE_EX_FINISHED, 6)
 		FSM_RULE_ENTRY(s10, s4, USER_EVT_ISSUE_EX_FINISHED, 0)
 		FSM_RULE_ENTRY(s10, s9, USER_EVT_ISSUE_EX_FINISHED, 1)
 		FSM_RULE_ENTRY(s10, s2, USER_EVT_ISSUE_EX_FINISHED, 2)
 		FSM_RULE_ENTRY(s10, s6, USER_EVT_ISSUE_EX_FINISHED, 6)
 		FSM_RULE_ENTRY(s10, s2, USER_EVT_ISSUE_EX_FINISHED, 8)
-		FSM_RULE_ENTRY(s10, s2, USER_EVT_EXIT, 0)
 
 		FSM_RULE_ENTRY(s11, s4, USER_EVT_JS_READ_FINISHED, 0)//JS 读卡结果返回
-		FSM_RULE_ENTRY(s11, s2, USER_EVT_JS_READ_FINISHED, 1)//JS 无卡
 		FSM_RULE_ENTRY(s11, s4, USER_EVT_JS_POSTONLINE_FINISHED, 0)//JS
-		FSM_RULE_ENTRY(s11, s4, USER_EVT_JS_EXIT_MIAN_PAGE, 0)//退出事件
 		FSM_RULE_ENTRY(s12, s4, USER_EVT_JS_ISSUE_FROM_BOX_FINISHED, 0)//JS 发卡成功
 		FSM_RULE_ENTRY(s12, s2, USER_EVT_JS_ISSUE_FROM_BOX_FINISHED, 1)//JS 发卡失败
 		FSM_RULE_ENTRY(s12, s9, USER_EVT_JS_ISSUE_FROM_BOX_FINISHED, 2)//JS 发卡故障
 		FSM_RULE_ENTRY(s12, s8, USER_EVT_JS_ISSUE_FROM_BOX_FINISHED, 3)//JS 退回首页进行吞卡
-	END_FSM_RULE()
-
-	CCardIssuerFSM() : m_bCancelAccept(false),m_bWaitingAccept(false),
-	m_bWaitAccepteMore(false),m_bExit(false),m_resetTimes(0),m_testResult(Error_Succeed)
-	//,m_pTACReject(NULL),m_pIACOnline(NULL),m_pTACOnline(NULL),m_pIACDefault(NULL),m_pTACDefault(NULL)
-	,m_bCDA(false),m_pDataToARQC(NULL),m_bIssuingExit(false)
-	,m_bCardIssued(false),m_issueStatusFromFile(1),m_issueStatus(1),m_currCardNo("")
-	, m_captureReason(""), m_machineType(1), m_currentHopper(1), m_hopperNum(1)
-	, m_bSettingMaterial(false)	, m_addCardNo(""), m_addCardSerial(""), m_hasCardWhileDevOpen(false)
-	,  m_bCancelByRFIC(false), m_devOpenFailedCount(0)
-			, m_EacQueryHost(""),m_eacQueryFlag(0), m_bUseCardnoMismatch(false), m_ICRetryTimes(1)
-			, m_bCardFromHopper(true), m_bStopUseRF(false),m_rfVendorList(""), m_bUseRFTillNext(false), m_csSwallowCardUrl(""), m_csSyncMaterialUrl("")
-			, m_bCancelInsert(false), m_bReturnMainPage(false)
-		{
-			HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x203);
-			cmdDecodeMag2 = NULL;
-			cmdDecodeEx = NULL;
-			m_aidList.Init(3);
-			m_aidList[0] = "A000000333";
-			m_aidList[1] = "A0000000108888";
-			m_aidList[2] = "A000000790";
-		}
+		END_FSM_RULE()
+
+		CCardIssuerFSM() : m_bCancelAccept(false), m_bWaitingAccept(false),
+		m_bWaitAccepteMore(false), m_bExit(false), m_resetTimes(0), m_testResult(Error_Succeed)
+		//,m_pTACReject(NULL),m_pIACOnline(NULL),m_pTACOnline(NULL),m_pIACDefault(NULL),m_pTACDefault(NULL)
+		, m_bCDA(false), m_pDataToARQC(NULL)
+		, m_bCardIssued(false), m_issueStatus(1), m_currCardNo("")
+		, m_captureReason(""), m_machineType(1), m_currentHopper(1), m_hopperNum(1)
+		, m_bSettingMaterial(false), m_addCardSerial("")
+		, m_bCancelByRFIC(false), m_devOpenFailedCount(0), m_bSingleMagOrIC(false)
+		, m_bCardFromHopper(true), m_rfVendorList(""), m_bUseRFTillNext(false), m_csSwallowCardUrl(""), m_csSyncMaterialUrl("")
+		, m_bCancelInsert(false), m_iCheckCardInInterval(200), m_bMainPageWhileWorking(false)
+	{
+		HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x203);
+		cmdDecodeMag2 = NULL;
+		cmdDecodeEx = NULL;
+		m_aidList.Init(3);
+		m_aidList[0] = "A000000333";
+		m_aidList[1] = "A0000000108888";
+		m_aidList[2] = "A000000790";
+	}
 
-	~CCardIssuerFSM(){}
+	~CCardIssuerFSM() {}
 	virtual ErrorCodeEnum OnInit();
 	virtual ErrorCodeEnum OnExit();
 
@@ -815,46 +598,42 @@ public:
 	void s12_on_entry();
 	void s12_on_exit();
 	unsigned int s12_on_event(FSMEvent* event);
-	
-	ErrorCodeEnum OpenDevice(BYTE btOpenType, const char *pDevSN);
+
+	ErrorCodeEnum OpenDevice(BYTE btOpenType, const char* pDevSN);
 	int Initial();
-	bool GetDevStatus(bool bPrint=true);
-	int UnAcceptCard();
-	int CaptureCard(SpReqAnsContext<CardIssuerStandService_Capture_Req,CardIssuerStandService_Capture_Ans>::Pointer ctx);
-	int EjectCard(SpReqAnsContext<CardIssuerStandService_Eject_Req,CardIssuerStandService_Eject_Ans>::Pointer ctx);
+	int CheckIfHasCardOnCase(CheckCardCase eCase);
+	int CaptureCard(SpReqAnsContext<CardIssuerStandService_Capture_Req, CardIssuerStandService_Capture_Ans>::Pointer ctx);
+	int EjectCard(SpReqAnsContext<CardIssuerStandService_Eject_Req, CardIssuerStandService_Eject_Ans>::Pointer ctx);
 	int WaitFetchingCard();
 	int ReadCard(SpReqAnsContext<CardIssuerStandService_Read_Req, CardIssuerStandService_Read_Ans>::Pointer ctx);
 	int PreOnline(SpReqAnsContext<CardIssuerStandService_PreOnline_Req, CardIssuerStandService_PreOnline_Ans>::Pointer ctx);
 	int PostOnline(SpReqAnsContext<CardIssuerStandService_PostOnline_Req, CardIssuerStandService_PostOnline_Ans>::Pointer ctx);
-	int ReadCard_Contact(SpReqAnsContext<CardIssuerStandService_Read_Req,CardIssuerStandService_Read_Ans>::Pointer ctx, bool& bICOK);
-	int PreOnline_Contact(SpReqAnsContext<CardIssuerStandService_PreOnline_Req,CardIssuerStandService_PreOnline_Ans>::Pointer ctx, bool& bICOK);
-	int PostOnline_Contact(SpReqAnsContext<CardIssuerStandService_PostOnline_Req,CardIssuerStandService_PostOnline_Ans>::Pointer ctx, bool& bICOK);
+	int ReadCard_Contact(SpReqAnsContext<CardIssuerStandService_Read_Req, CardIssuerStandService_Read_Ans>::Pointer ctx, bool bContinue);
+	int PreOnline_Contact(SpReqAnsContext<CardIssuerStandService_PreOnline_Req, CardIssuerStandService_PreOnline_Ans>::Pointer ctx, bool& bICOK);
+	int PostOnline_Contact(SpReqAnsContext<CardIssuerStandService_PostOnline_Req, CardIssuerStandService_PostOnline_Ans>::Pointer ctx, bool& bICOK);
 	int ReadCard_RF(SpReqAnsContext<CardIssuerStandService_Read_Req, CardIssuerStandService_Read_Ans>::Pointer ctx);
 	int PreOnline_RF(SpReqAnsContext<CardIssuerStandService_PreOnline_Req, CardIssuerStandService_PreOnline_Ans>::Pointer ctx);
 	int PostOnline_RF(SpReqAnsContext<CardIssuerStandService_PostOnline_Req, CardIssuerStandService_PostOnline_Ans>::Pointer ctx);
-	int Reset();
-	int InternalAcceptCard();
+	int InternalAcceptCard(SpReqAnsContext<CardIssuerStandService_Insert_Req, CardIssuerStandService_Insert_Ans>::Pointer ctx);
 	int AcceptCard(SpReqAnsContext<CardIssuerStandService_Insert_Req, CardIssuerStandService_Insert_Ans>::Pointer ctx);
-	int IssueCard(SpReqAnsContext<CardIssuerStandService_Issue_Req, CardIssuerStandService_Issue_Ans>::Pointer ctx, SpReqAnsContext<CardIssuerStandService_IssueEx_Req, CardIssuerStandService_IssueEx_Ans>::Pointer ctxEx);
-	int WriteCard(SpReqAnsContext<CardIssuerStandService_WriteTrack_Req,CardIssuerStandService_WriteTrack_Ans>::Pointer ctx);
-
-	bool GetWaitFlag(){return m_bWaitingAccept;}
-	void SetWaitMore(){m_bWaitAccepteMore = true;}
-	void SetExitFlag(bool bFlag=true){m_bExit = bFlag;}
-	bool FSMSetIssueFlag(int value=1);
-	void FrontSetIssueFlag(bool bValue = true){ FSMSetIssueFlag(bValue); }
-	int QueryIssueFlag(){ return m_issueStatus; }
-	bool SetCardCaptured(const int num,bool bNewClear=false);
-	bool SetCardIssued(const int num,const int hopper);
-	bool SetCardRemains(const int num, const int hopper,bool bInit = false);
+	int IssueCard(SpReqAnsContext<CardIssuerStandService_IssueEx_Req, CardIssuerStandService_IssueEx_Ans>::Pointer ctxEx);
+
+	bool GetWaitFlag() { return m_bWaitingAccept; }
+	void SetWaitMore() { m_bWaitAccepteMore = true; }
+	void SetExitFlag(bool bFlag = true) { m_bExit = bFlag; }
+	void FSMSetIssueFlag(int value) { m_issueStatus = value; }
+	int QueryIssueFlag() { return m_issueStatus; }
+	bool SetCardCaptured(const int num, bool bNewClear = false);
+	bool SetCardIssued(const int num, const int hopper);
+	bool SetCardRemains(const int num, const int hopper, bool bInit = false);
 	bool SetCardMixed(const int num, const int hopper);
 	ErrorCodeEnum MachineMoveCardBackNotHold();
-	ErrorCodeEnum MachineMoveCardFrontGate(bool bInBussiness=false);
+	ErrorCodeEnum MachineMoveCardFrontGate(bool bInBussiness = false);
 
-	void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
+	void SelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext);
 	DevStateEnum GetDevState() const
 	{
-		if ((m_eDevState == DEVICE_STATUS_NORMAL) 
+		if ((m_eDevState == DEVICE_STATUS_NORMAL)
 			&& ((m_bHasHopper[0] && m_mixedEx[0] >= 3) || !m_bHasHopper[0])
 			&& ((m_bHasHopper[1] && m_mixedEx[1] >= 3) || !m_bHasHopper[1])
 			&& ((m_bHasHopper[2] && m_mixedEx[2] >= 3) || !m_bHasHopper[2]))
@@ -865,21 +644,11 @@ public:
 	int QueryCardPos();
 
 	int UpdateLocalRunCfg(CAutoArray<int> hopperArr);
-	int SyncDataToDB(bool bMaintain[12],bool bSetCaptured=true);//同步物料计数
+	int SyncDataToDB(bool bMaintain[12], bool bSetCaptured = true);//同步物料计数
 	void SetHopperNum(int hopperNum);
-	void DoExitWhenIdle();
-	int SAMICCommand(SpReqAnsContext<CardIssuerStandService_SAMICCommand_Req, CardIssuerStandService_SAMICCommand_Ans>::Pointer ctx);
-
-	bool WriteCardInfo(CSmartPointer<IConfigInfo> &cfgRun, const char *acc, const char* serial, int slot, bool bClear = false, bool bHasCard = false);
-	bool ReadCardInfo(CSmartPointer<IConfigInfo> &cfgRun, CSimpleStringA &acc, CSimpleStringA &serial, int slot);
+	void DecodeTracksData(const char* track2, DWORD dwT2size, const char* track3, DWORD dwT3size, char*& magData, bool bT2OK = true, bool bT3OK = true);
 
-	void DecodeTracksData(const char *track2, DWORD dwT2size, const char *track3, DWORD dwT3size,char *&magData,bool bT2OK=true,bool bT3OK=true);
-	int GetFSMState()
-	{ 
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("m_currentFSMState:%d", m_currentFSMState));
-		return m_currentFSMState;
-	}
-	void GetCardInfo(int &findCard, int &cardPos)
+	void GetCardInfo(int& findCard, int& cardPos)
 	{
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("<GetCardInfo>, findCard:%d, cardPos:%d", findCard, cardPos));
 		findCard = m_findCard;
@@ -891,11 +660,9 @@ public:
 	void CloseAndClearDevObj(bool bCheckConnecting = true, bool bCloseOnly = false);
 
 	static void HttpsLogCallBack(const char* logtxt);
-	//0:unknow(havn't access microservice or access failed),1:both mag & ic ,2:mag only,3:ic only
-	int JudgeCardType(CSimpleStringA cardno, bool &bMismatch);
 	void QueryCIStatus(SpReqAnsContext<CardIssuerStandService_QueryCIStatus_Req, CardIssuerStandService_QueryCIStatus_Ans>::Pointer ctx);
 	bool RegistCardWhileCaptureCard(CSimpleStringA cardno);
-	bool SyncMaterialCount(IHttpFunc* client,SyncMaterialCountInfo syncInfo);
+	bool SyncMaterialCount(IHttpFunc* client, SyncMaterialCountInfo syncInfo);
 protected:
 	int m_iInsertTries;
 	int m_resetTries;
@@ -904,44 +671,42 @@ private:
 	///
 	int m_resetTimes;
 	lpCMBdecodeMag2 cmdDecodeMag2;
-	lpCMBdecodeEx cmdDecodeEx;	
+	lpCMBdecodeEx cmdDecodeEx;
 	bool m_bCancelAccept, m_bWaitingAccept, m_bWaitAccepteMore, m_bExit
-		, m_bCDA, m_bIssuingExit, m_bCardIssued, m_bHasHopper[HOPPER_NUM]
-		, m_bSettingMaterial, m_hasCardWhileDevOpen, m_bCancelByRFIC
-		, m_bCardActiveNotify, m_bCardFromHopper, m_bUseCardnoMismatch, m_bStopUseRF;
+		, m_bCDA, m_bCardIssued, m_bHasHopper[HOPPER_NUM]
+		, m_bSettingMaterial, m_bCancelByRFIC, m_bSingleMagOrIC
+		, m_bCardActiveNotify, m_bCardFromHopper, m_bMainPageWhileWorking/*Accepting、Read(JS)ing、Issue(JS)ing*/;
 	bool m_bSupportRF, m_bUseRFTillNext;//if ReadCard by RF,the following PreOnline & PostOnline always use RF till the next card(insert/issue)
 	ErrorCodeEnum m_testResult;
 
 	int m_CardCaptured;
-	int m_issueStatusFromFile, m_issueStatus/*the status maybe changed by Business call*/;
+	int m_issueStatus/*the status maybe changed by Business call*/;
 	//1:default, 2:SCI, 3:no cfg
 	int m_machineType;
-	int m_currentHopper,m_devOpenFailedCount;
-	int m_maxSlot,m_findCard,m_cardPos,m_currentFSMState,m_maxRetainCount, m_eacQueryFlag/*accout query*/
-		,m_ICRetryTimes;
-	CSimpleStringA m_CardBoxNoEx[HOPPER_NUM], m_PsbCodeEx[HOPPER_NUM], m_PsbNameEx[HOPPER_NUM], m_MaintainerEx[HOPPER_NUM],m_csMaintainTimeEx[HOPPER_NUM];
-	int m_CardInitEx[HOPPER_NUM], m_CardPercentEx[HOPPER_NUM], m_remainsEx[HOPPER_NUM], m_issuedEx[HOPPER_NUM], m_mixedEx[HOPPER_NUM],m_hopperNum;
+	int m_currentHopper, m_devOpenFailedCount;
+	int m_maxSlot, m_findCard, m_cardPos, m_maxRetainCount, m_iCheckCardInInterval;
+	CSimpleStringA m_CardBoxNoEx[HOPPER_NUM], m_PsbCodeEx[HOPPER_NUM], m_PsbNameEx[HOPPER_NUM], m_MaintainerEx[HOPPER_NUM], m_csMaintainTimeEx[HOPPER_NUM];
+	int m_CardInitEx[HOPPER_NUM], m_CardPercentEx[HOPPER_NUM], m_remainsEx[HOPPER_NUM], m_issuedEx[HOPPER_NUM], m_mixedEx[HOPPER_NUM], m_hopperNum;
 	DWORD m_MaintainTimeEx[HOPPER_NUM];
 	BYTE m_connectType, m_r1[128], m_r2[128], m_r3[128], m_priKey[ONE_K / 2], m_devPubKey[ONE_K / 2];
 	CardIssuerStatus m_devStatus;
-	CCardProcess *m_pCardProcess;
+	CCardProcess* m_pCardProcess;
 	CAutoArray<CSimpleStringA> m_aidList;
 
-	char *m_pDataToARQC;
+	char* m_pDataToARQC;
 	long xxTest;
-	CSimpleStringA m_currCardNo, m_captureReason, m_csMachineType, m_terminalNo, m_addCardNo, m_addCardSerial, m_rfVendorList, m_csRF;
+	CSimpleStringA m_currCardNo, m_captureReason, m_csMachineType, m_terminalNo, m_addCardSerial, m_rfVendorList, m_csRF;
 	char m_AuthCode[2];
 	vector<CMBBin> m_vBin;
-	int SplitTrack2(CSimpleStringA pTrack2,Track2Data &decodeData);
+	int SplitTrack2(CSimpleStringA pTrack2, Track2Data& decodeData);
 	bool JustReadCardNo();
-	bool IsValidCardNo(const char*,int);
-	void GetVendorDllName(CSimpleStringA &dllName);
-	bool AccountExchange(const char *origAcc, CSimpleStringA &acc,int dir=1);
+	bool IsValidCardNo(const char*, int);
+	void GetVendorDllName(CSimpleStringA& dllName);
 	bool LoadCMBPrint(CSimpleStringA csBinPath);
 	DevCategoryInfo m_devCat;
 	bool ToRegistCaptureCardInfo();
 	void CheckSupportRf();
-	CSimpleStringA m_EacQueryHost, m_csSwallowCardUrl, m_csSyncMaterialUrl;
+	CSimpleStringA m_csSwallowCardUrl, m_csSyncMaterialUrl;
 	MagTracks m_magTracks;
 public:
 	int EjectJS(SpReqAnsContext<CardIssuerStandService_EjectJS_Req, CardIssuerStandService_EjectJS_Ans>::Pointer ctx);
@@ -957,22 +722,19 @@ public:
 	int ReadJS(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, CardIssuerStandService_ReadJS_Ans>::Pointer ctx);
 
 	int InsertJS(SpReqAnsContext<CardIssuerStandService_InsertJS_Req, CardIssuerStandService_InsertJS_Ans>::Pointer ctx);
-	int InternalInsert();
 
 	int PostOnlineJS_Contact(SpReqAnsContext<CardIssuerStandService_PostOnlineJS_Req, CardIssuerStandService_PostOnlineJS_Ans>::Pointer ctx, bool& bICOK);
 	int PostOnlineJS_RF(SpReqAnsContext<CardIssuerStandService_PostOnlineJS_Req, CardIssuerStandService_PostOnlineJS_Ans>::Pointer ctx);
 
 	void ReadMag(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, CardIssuerStandService_ReadJS_Ans>::Pointer ctx);
-	int CheckCardType(CSimpleStringA cardNo, bool bReadMag, int& ICtype);
 	int PreOnlineJS_ReadViaContact(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, CardIssuerStandService_ReadJS_Ans>::Pointer ctx, bool bContinue);
 	int PreOnlineJS_ReadViaRF(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, CardIssuerStandService_ReadJS_Ans>::Pointer ctx, bool bContinue);
 	int PreOnlineJS_ICDataProcess(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, CardIssuerStandService_ReadJS_Ans>::Pointer ctx);
 
 	CSimpleStringA MaskCardno(const char* cardno);
 	void GetCardProcessLastErr(ErrorCodeEnum& eErrCode, CSimpleStringA& lastApiName, CSimpleStringA& alarmMsg, CSimpleStringA& csErrMsgWithReturnCode);
-	
+
 	void SetDoExitFlag(bool bFlag) { m_bDoExit = bFlag; }
-	int PowerOffIC(int type);//0:接触IC 1:非接
 	virtual void OnStateTrans(int iSrcState, int iDstState);
 
 	CSimpleStringA getRTACode(DWORD dwUserCode) {
@@ -980,14 +742,14 @@ public:
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("rtaMsg=%s", rtaMsg.GetData());
 		return rtaMsg;
 	}
-	
+
 private:
 	bool m_bCancelInsert;
 	bool m_bDoExit;
-	bool m_bReturnMainPage;//正在处理过程中是否退到首页变量
 	ULLINT m_ullBeginTime, m_ullEndTime;
 	BYTE m_btCID/*9f27*/;
 	void FSMEventDefaultProcess(FSMEvent* pEvt, DWORD dwUserCode);
+	CSimpleStringA GetErrMsgByCode(DWORD dwCode);
 };
 
 class ReadJSEvent : public FSMEvent
@@ -1026,23 +788,13 @@ struct AcceptTask : public ITaskSp
 struct IssueTask : public ITaskSp
 {
 	CCardIssuerFSM* fsm;
-	SpReqAnsContext<CardIssuerStandService_Issue_Req, CardIssuerStandService_Issue_Ans>::Pointer ctx;
 	SpReqAnsContext<CardIssuerStandService_IssueEx_Req, CardIssuerStandService_IssueEx_Ans>::Pointer ctxEx;
 	IssueTask(CCardIssuerFSM* f) : fsm(f) {}
 	void Process()
 	{
 		LOG_FUNCTION();
-		FSMEvent *e;
-		if (ctx != NULL)
-			e = new FSMEvent(USER_EVT_ISSUE_FINISHED);
-		else if (ctxEx != NULL)
-			e = new FSMEvent(USER_EVT_ISSUE_EX_FINISHED);
-		else
-		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("IssueTask:ctx is null");
-			return;
-		}
-		e->param1 = fsm->IssueCard(ctx,ctxEx);
+		FSMEvent *e = new FSMEvent(USER_EVT_ISSUE_EX_FINISHED);
+		e->param1 = fsm->IssueCard(ctxEx);
 		fsm->PostEventFIFO(e);
 	}
 };
@@ -1120,29 +872,19 @@ struct WaitFetchingTask : public ITaskSp
 	}
 };
 
-struct QueryCardPosTask : public ITaskSp
+struct DoCheckCardTask : public ITaskSp
 {
 	CCardIssuerFSM* fsm;
-	QueryCardPosTask(CCardIssuerFSM* f) : fsm(f) {}
+	CheckCardCase eCase;
+	DoCheckCardTask(CCardIssuerFSM* f, CheckCardCase eCase) : fsm(f) {}
 	void Process()
 	{
-		FSMEvent* e = new FSMEvent(USER_EVT_QUERY_CARD_POS_FINISHED);
-		e->param1 = fsm->QueryCardPos();
+		FSMEvent* e = new FSMEvent(USER_EVT_CHECK_CARD_FINISHED);
+		e->param1 = fsm->CheckIfHasCardOnCase(eCase);
 		fsm->PostEventFIFO(e);
 	}
 };
 
-struct DoExitWhenIdleTask : public ITaskSp
-{
-	CCardIssuerFSM* fsm;
-	DoExitWhenIdleTask(CCardIssuerFSM* f) : fsm(f) {}
-	void Process()
-	{
-		fsm->DoExitWhenIdle();
-		fsm->SetDoExitFlag(false);
-	}
-};
-
 
 struct RegistCaptureCardInfoTask : public ITaskSp
 {

+ 15 - 147
Module/mod_CardIssuerStand/CardIssuerStand_UserErrorCode.h

@@ -4,9 +4,6 @@
 
 #define CardIssuer_UserErrorCode_Start 0x20300200
 
-#define CardIssuer_UserErrorCode_No_Encryted_Channel				(CardIssuer_UserErrorCode_Start + 1)	//未建立安全通道
-#define CardIssuer_UserErrorCode_Open_RunCfgFile_Failed				(CardIssuer_UserErrorCode_Start + 2)	//打开运行时配置失败
-#define CardIssuer_UserErrorCode_EntityInFailState					(CardIssuer_UserErrorCode_Start + 3)	//卡机处于故障态,请稍后重试,重试还有问题请联系厂商维护
 #define CardIssuer_UserErrorCode_NotHas_Hopper1						(CardIssuer_UserErrorCode_Start + 4)	//未检测到卡箱1,请确认卡箱1是否有卡箱
 #define CardIssuer_UserErrorCode_NotHas_Hopper2						(CardIssuer_UserErrorCode_Start + 5)	//未检测到卡箱2,请确认卡箱2是否有卡箱
 #define CardIssuer_UserErrorCode_NotHas_Hopper3						(CardIssuer_UserErrorCode_Start + 6)	//未检测到卡箱3,请确认卡箱3是否有卡箱
@@ -16,67 +13,20 @@
 #define CardIssuer_UserErrorCode_NoCardRemains_Hopper1				(CardIssuer_UserErrorCode_Start + 10)	//卡箱1剩余卡片计数为0(空)
 #define CardIssuer_UserErrorCode_NoCardRemains_Hopper2				(CardIssuer_UserErrorCode_Start + 11)	//卡箱2剩余卡片计数为0(空)
 #define CardIssuer_UserErrorCode_NoCardRemains_Hopper3				(CardIssuer_UserErrorCode_Start + 12)	//卡箱3剩余卡片计数为0(空)
-#define CardIssuer_UserErrorCode_MoveCard_FromHopper				(CardIssuer_UserErrorCode_Start + 13)	//卡片从卡箱移到读卡器
+
 #define CardIssuer_UserErrorCode_MoveCardToGate_Failed				(CardIssuer_UserErrorCode_Start + 14)	//前端进卡,吐卡失败
-#define CardIssuer_UserErrorCode_KakuFindEmptySlot_Failed			(CardIssuer_UserErrorCode_Start + 15)	//卡库找不到空闲卡槽
-#define CardIssuer_UserErrorCode_KakuHaveOldPanKuRecord				(CardIssuer_UserErrorCode_Start + 16)	//卡库有旧的盘库记录
-#define CardIssuer_UserErrorCode_KakuQuerySlot_Failed				(CardIssuer_UserErrorCode_Start + 17)	//卡库查询卡槽状态失败
-#define CardIssuer_UserErrorCode_KakuHaveNoPanKuRecord				(CardIssuer_UserErrorCode_Start + 18)	//卡库没有盘库记录
-#define CardIssuer_UserErrorCode_KakuPanKu_Failed					(CardIssuer_UserErrorCode_Start + 19)	//卡库盘库失败
 
 #define CardIssuer_UserErrorCode_Customer_Forget_Fectch_Card		(CardIssuer_UserErrorCode_Start + 20)	//客户超时未取卡
-#define CardIssuer_UserErrorCode_NotHas_Hopper4						(CardIssuer_UserErrorCode_Start + 21)	//未检测到卡箱4,请确认卡箱1是否有卡箱
-#define CardIssuer_UserErrorCode_NotHas_Hopper5						(CardIssuer_UserErrorCode_Start + 22)	//未检测到卡箱5,请确认卡箱2是否有卡箱
-#define CardIssuer_UserErrorCode_NotHas_Hopper6						(CardIssuer_UserErrorCode_Start + 23)	//未检测到卡箱6,请确认卡箱3是否有卡箱
-#define CardIssuer_UserErrorCode_NoCardInHopper4					(CardIssuer_UserErrorCode_Start + 24)	//卡箱4未检测到卡片	请确认卡箱4内卡片是否为空或重新摆放卡片
-#define CardIssuer_UserErrorCode_NoCardInHopper5					(CardIssuer_UserErrorCode_Start + 25)	//卡箱5未检测到卡片	请确认卡箱5内卡片是否为空或重新摆放卡片
-#define CardIssuer_UserErrorCode_NoCardInHopper6					(CardIssuer_UserErrorCode_Start + 26)	//卡箱6未检测到卡片	请确认卡箱6内卡片是否为空或重新摆放卡片
-#define CardIssuer_UserErrorCode_ICChannel_Failed					(CardIssuer_UserErrorCode_Start + 27)	//IC指令通道失败(实时制卡APDU)
-#define CardIssuer_UserErrorCode_NoCardRemains_Hopper4				(CardIssuer_UserErrorCode_Start + 28)	//卡箱4剩余卡片计数为0(空)
-#define CardIssuer_UserErrorCode_NoCardRemains_Hopper5				(CardIssuer_UserErrorCode_Start + 29)	//卡箱5剩余卡片计数为0(空)
-#define CardIssuer_UserErrorCode_NoCardRemains_Hopper6				(CardIssuer_UserErrorCode_Start + 30)	//卡箱6剩余卡片计数为0(空)
-#define CardIssuer_UserErrorCode_LogInfoAboutTerm					(CardIssuer_UserErrorCode_Start + 31)	//告警上送终端模块信息
-#define CardIssuer_UserErrorCode_KebaDeviceInfo						(CardIssuer_UserErrorCode_Start + 32)	//告警上送科堡机型信息
-#define CardIssuer_UserErrorCode_RootInfo							(CardIssuer_UserErrorCode_Start + 33)  //root中版本批次号
-#define CardIssuer_UserErrorCode_Adapter_Version					(CardIssuer_UserErrorCode_Start + 34)//告警适配器版本号(长城卡库是将驱动版本号告警上来)
-#define CardIssuer_UserErrorCode_DevOpenTime						(CardIssuer_UserErrorCode_Start + 35) //统计DevOpen时长
-
-#define CardIssuer_UserErrorCode_CaptureCard_OnExit					(CardIssuer_UserErrorCode_Start + 36) //OnExit时吞卡,实体退出。实际上会吗?
-#define CardIssuer_UserErrorCode_CaptureCard_Reset					(CardIssuer_UserErrorCode_Start + 37) //Reset时吞卡
-#define CardIssuer_UserErrorCode_CaptureCard_IssueExit				(CardIssuer_UserErrorCode_Start + 38) //发卡时业务强退
-#define CardIssuer_UserErrorCode_CaptureCard_IdleExit				(CardIssuer_UserErrorCode_Start + 39) //Idle空闲状态处理Exit事件时吞卡
-#define CardIssuer_UserErrorCode_CaptureCard_FromBusiness			(CardIssuer_UserErrorCode_Start + 40) //业务主动发起调用CaptureCard
-
-#define CardIssuer_UserErrorCode_EntityInStateCannotProcess			(CardIssuer_UserErrorCode_Start + 41) //卡机当前状态无法处理此请求
-#define CardIssuer_UserErrorCode_MoveCardToSlot						(CardIssuer_UserErrorCode_Start + 42) //卡片移到卡槽
-#define CardIssuer_UserErrorCode_MoveCardFromSlot					(CardIssuer_UserErrorCode_Start + 43) //卡槽移到卡机
-#define CardIssuer_UserErrorCode_PrintCardFaceRightNow				(CardIssuer_UserErrorCode_Start + 44) //卡面打印
-#define CardIssuer_UserErrorCode_InsertCardSucceed					(CardIssuer_UserErrorCode_Start + 45) //前端插卡
 
-#define CardIssuer_UserErrorCode_StandEntityInFailState				(CardIssuer_UserErrorCode_Start + 46)	//卡机处于故障态,请稍后重试,重试还有问题请联系厂商维护
-
-#define CardIssuer_UserErrorCode_CardStore_SlotNum					(CardIssuer_UserErrorCode_Start + 49) //记录卡库容量
-#define CardIssuer_UserErrorCode_Invoke_Access_IniDev_Failed		(CardIssuer_UserErrorCode_Start + 50) //建立加密通道时,调用准入接口失败
-#define CardIssuer_UserErrorCode_Connect_Access_Failed				(CardIssuer_UserErrorCode_Start + 51) //建立加密通道时,连接准入实体失败
-#define CardIssuer_UserErrorCode_Safe_Channel_Build_Failed			(CardIssuer_UserErrorCode_Start + 52) //安全加密通道建立失败
-#define CardIssuer_UserErrorCode_No_More_Card_Issue					(CardIssuer_UserErrorCode_Start + 53) //卡箱已无卡往出发
+#define CardIssuer_UserErrorCode_CaptureCard_FromBusiness			(CardIssuer_UserErrorCode_Start + 40) //业务主动发起调用CaptureCard
 
-#define CardIssuer_UserErrorCode_CFG_RUN_POINTER_FAILED				(CardIssuer_UserErrorCode_Start + 54) //卡箱已无卡往出发
+#define CardIssuer_UserErrorCode_UnkownReadJSMode					(CardIssuer_UserErrorCode_Start + 47)	//未知的ReadJS读卡模式
 
-#define CardIssuer_UserErrorCode_RETAIN_BIN_IS_FULL_SENSOR			(CardIssuer_UserErrorCode_Start + 55)//厂商传感器,回收箱满
-#define CardIssuer_UserErrorCode_FEW_CARD_REMAINS					(CardIssuer_UserErrorCode_Start + 56)//卡箱少卡
 #define CardIssuer_UserErrorCode_RETAIN_BIN_IS_FULL					(CardIssuer_UserErrorCode_Start + 57)//计数显示,回收箱满
 
-#define CardIssuer_UserErrorCode_Create_Object_Failed				(CardIssuer_UserErrorCode_Start + 58)//创建适配器指针对象失败
-#define CardIssuer_UserErrorCode_Track2_ServiceCode					(CardIssuer_UserErrorCode_Start + 59)//记录二磁道的服务代码
-
-//跨机激活过程
-#define CardIssuer_UserErrorCode_PreOnline_Connect_Heatbeat_Failed	(CardIssuer_UserErrorCode_Start + 60)	//跨机,连接心跳实体失败
+//跨机激活过程 oiltmp to be removed
 #define CardIssuer_UserErrorCode_PreOnline_Send_CardActive			(CardIssuer_UserErrorCode_Start + 61)	//跨机,调用CardActive
 #define CardIssuer_UserErrorCode_PreOnline_Recv_CardActive			(CardIssuer_UserErrorCode_Start + 62)	//跨机,CardActive返回
-#define CardIssuer_UserErrorCode_PreOnline_Slot_Is_Invalid			(CardIssuer_UserErrorCode_Start + 63)	//跨机,web传给卡库的卡槽号无效
-#define CardIssuer_UserErrorCode_PreOnline_Slot_Has_No_Card			(CardIssuer_UserErrorCode_Start + 64)	//跨机,卡槽中无卡
-#define CardIssuer_UserErrorCode_PreOnline_MoveCardFromSlot_Info	(CardIssuer_UserErrorCode_Start + 65)	//跨机,从卡槽中移卡读卡后,读出的一些信息
 
 #define CardIssuer_UserErrorCode_ContactIC_Failed					(CardIssuer_UserErrorCode_Start + 66)	//DetectIfICCard调用ContactIC失败
 #define CardIssuer_UserErrorCode_ActiveICCard_Failed				(CardIssuer_UserErrorCode_Start + 67)	//DetectIfICCard调用ActiveICCard失败
@@ -85,71 +35,35 @@
 #define CardIssuer_UserErrorCode_BuildSupportedAppList_Failed		(CardIssuer_UserErrorCode_Start + 70)	//BuildSupportedAppList failed
 #define CardIssuer_UserErrorCode_AppSelected_Failed					(CardIssuer_UserErrorCode_Start + 71)	//AppSelected failed
 
-#define CardIssuer_UserErrorCode_QueryCardInfoOnStore_JustQueryInfo	(CardIssuer_UserErrorCode_Start + 72)	//跨机后,再次调用QueryCardInfoOnStore查询卡信息
+//oiltmp to be removed
 #define CardIssuer_UserErrorCode_NotifyPreOnline_ParamInfo			(CardIssuer_UserErrorCode_Start + 73)	//跨机后,大机心跳调用NotifyPreOnline
-
-//加卡过程
-#define CardIssuer_UserErrorCode_AddCardToStoreStepFirst			(CardIssuer_UserErrorCode_Start + 74)	//加卡第一步,从卡箱移到读卡器
-#define CardIssuer_UserErrorCode_AddCardToStoreStepLast				(CardIssuer_UserErrorCode_Start + 75)	//加卡第二步,从读卡器移到卡槽
-#define CardIssuer_UserErrorCode_ReadAccount_Data_Error				(CardIssuer_UserErrorCode_Start + 76)	//加卡过程,卡片数据有误
-#define CardIssuer_UserErrorCode_AddCardToStoreStepFirst_Failed		(CardIssuer_UserErrorCode_Start + 77)	//加卡过程,移卡到卡槽失败
 #define CardIssuer_UserErrorCode_NotifyPreonline_Wait_TooLong		(CardIssuer_UserErrorCode_Start + 78)	//NotifyPreonline收到时已经超过等待时间
 
-//临时 后续去除
-#define CardIssuer_UserErrorCode_EastCom_Not_Exist_DataFile			(CardIssuer_UserErrorCode_Start + 79)	//东信卡库还不存在CardLibDB_CMB.db3文件
-#define CardIssuer_UserErrorCode_EastCom_Exist_DataFile				(CardIssuer_UserErrorCode_Start + 80)	//东信卡库已存在CardLibDB_CMB.db3文件
-
 //发卡过程
-#define CardIssuer_UserErrorCode_Has_Not_Build_SafeChannel			(CardIssuer_UserErrorCode_Start + 81)	//还未建立安全通道
-#define CardIssuer_UserErrorCode_Invalid_Slot						(CardIssuer_UserErrorCode_Start + 82)	//无效卡槽号
-#define CardIssuer_UserErrorCode_Slot_Has_No_Card					(CardIssuer_UserErrorCode_Start + 83)	//卡槽中无卡
-#define CardIssuer_UserErrorCode_IssueCardFromStore					(CardIssuer_UserErrorCode_Start + 84)	//发卡
-#define CardIssuer_UserErrorCode_Sign_Failed						(CardIssuer_UserErrorCode_Start + 85)	//签发失败,吞卡,req=87
 #define CardIssuer_UserErrorCode_Invalid_Hopper						(CardIssuer_UserErrorCode_Start + 86)	//传入了错误的hopper
 
 //Common Func
 #define CardIssuer_UserErrorCode_CaptureCard_ByTerminal				(CardIssuer_UserErrorCode_Start + 87)	//终端自行调用吞卡
-#define CardIssuer_UserErrorCode_EjectCard_ByTerminal				(CardIssuer_UserErrorCode_Start + 88)	//终端自行调用吐卡
 #define CardIssuer_UserErrorCode_CaptureCard_EntityOnStart			(CardIssuer_UserErrorCode_Start + 89)	//实体启动时发现有卡,终端自行调用吞卡
 #define CardIssuer_UserErrorCode_CardPosUnexpectedOnDevOpen			(CardIssuer_UserErrorCode_Start + 90)	//实体启动时卡片位置异常
 
 
 //读卡过程
-#define CardIssuer_UserErrorCode_ReadCard_Process					(CardIssuer_UserErrorCode_Start + 91)	//调用读卡
 #define CardIssuer_UserErrorCode_TrackSize_Wrong					(CardIssuer_UserErrorCode_Start + 92)	//磁道数据长度错误
 #define CardIssuer_UserErrorCode_Track2Size_Wrong					(CardIssuer_UserErrorCode_Start + 93)	//二磁道数据长度错误
-#define CardIssuer_UserErrorCode_CardBin							(CardIssuer_UserErrorCode_Start + 94)	//MagRead读出的卡bin
-#define CardIssuer_UserErrorCode_CardType							(CardIssuer_UserErrorCode_Start + 95)	//MagRead读出的卡片类型
+#define CardIssuer_UserErrorCode_CardBin							(CardIssuer_UserErrorCode_Start + 94)	//卡号
 #define CardIssuer_UserErrorCode_MaybeIC_Only						(CardIssuer_UserErrorCode_Start + 96)	//可能是纯IC
 
-//异常状况
-#define CardIssuer_UserErrorCode_HasCard_In_Machine					(CardIssuer_UserErrorCode_Start + 97)	//读卡器打开时,发现有卡片
-#define CardIssuer_UserErrorCode_CardNo_Maybe_Wrong					(CardIssuer_UserErrorCode_Start + 98)	//卡号可能有误
-
 //读卡器初始化过程
 #define CardIssuer_UserErrorCode_LoadLibraryA_Failed				(CardIssuer_UserErrorCode_Start + 99)	//LoadLibraryA
-#define CardIssuer_UserErrorCode_CreateDevComponent_Failed			(CardIssuer_UserErrorCode_Start + 100)	//CreateDevComponent
-#define CardIssuer_UserErrorCode_ReleaseDevComponent_Failed			(CardIssuer_UserErrorCode_Start + 101)	//ReleaseDevComponent
+
 #define CardIssuer_UserErrorCode_LoadLibraryA_CMBPrint_Failed		(CardIssuer_UserErrorCode_Start + 102)	//LoadLibraryA CMBPrint
-#define CardIssuer_UserErrorCode_cmdDecodeMag2_Failed				(CardIssuer_UserErrorCode_Start + 103)	//cmdDecodeMag2 
-#define CardIssuer_UserErrorCode_cmdDecodeEx_Failed					(CardIssuer_UserErrorCode_Start + 104)	//cmdDecodeEx
+
+#define CardIssuer_UserErrorCode_DeviceOpening						(CardIssuer_UserErrorCode_Start + 104)	//opening device
 #define CardIssuer_UserErrorCode_DevOpen_Failed						(CardIssuer_UserErrorCode_Start + 105)	//DevOpen
-#define CardIssuer_UserErrorCode_ConnecetSCI_OpenDevice_Failed		(CardIssuer_UserErrorCode_Start + 106)	//ConnecetSCI_OpenDevice_Failed
-#define CardIssuer_UserErrorCode_ConnecetSCI_Invalid_SCI_Name		(CardIssuer_UserErrorCode_Start + 107)	//Invalid_SCI_Name
 
 //物料信息
 #define CardIssuer_UserErrorCode_SyncMaterialCount_Failed			(CardIssuer_UserErrorCode_Start + 108)	//同步物料信息失败
-#define CardIssuer_UserErrorCode_QueryMaterialInfo_Failed			(CardIssuer_UserErrorCode_Start + 109)	//查询物料信息失败
-#define CardIssuer_UserErrorCode_QueryMaterialInfo_Count_Error		(CardIssuer_UserErrorCode_Start + 110)	//查询物料信息数量有误
-
-//蓝牙多合一绑定解绑
-#define CardIssuer_UserErrorCode_BindSCI							(CardIssuer_UserErrorCode_Start + 111)	//绑定类型
-#define CardIssuer_UserErrorCode_Bind_Invalid_SCI_Name				(CardIssuer_UserErrorCode_Start + 112)	//绑定失败,无效的多合一Name
-#define CardIssuer_UserErrorCode_Bind_SyncData_Failed				(CardIssuer_UserErrorCode_Start + 113)	//绑定后,同步信息失败
-#define CardIssuer_UserErrorCode_Unbind_Invalid_SCI_Name			(CardIssuer_UserErrorCode_Start + 114)	//解绑绑定失败,无效的多合一Name
-#define CardIssuer_UserErrorCode_Unbind_SyncData_Failed				(CardIssuer_UserErrorCode_Start + 115)	//解绑绑定后,同步信息失败
-
-#define CardIssuer_UserErrorCode_Load_CMBPrint_Failed		(CardIssuer_UserErrorCode_Start + 116)	//加载CMBPrint失败
 
 //预留一部分用于CardAssist.cpp中的报错告警
 //自CardIssuer_UserErrorCode_Start + 121 ~ CardIssuer_UserErrorCode_Start + 140
@@ -159,76 +73,30 @@
 #define CardIssuer_UserErrorCode_ICCommand_RF_RecvData_Invalid      (CardIssuer_UserErrorCode_Start + 124)	//APDU接收到的非接数据无效
 #define CardIssuer_UserErrorCode_RFTypeABCommand_Failed             (CardIssuer_UserErrorCode_Start + 125)	//BuildSupportedAppList调用RFTypeABCommand失败
 //
-#define CardIssuer_UserErrorCode_Open_Success						(CardIssuer_UserErrorCode_Start + 141)	//读卡器最终打开成功
 #define CardIssuer_UserErrorCode_Open_Failed						(CardIssuer_UserErrorCode_Start + 142)	//读卡器最终打开失败
 
-
-#define CardIssuer_UserErrorCode_QueryCardInfoOnStore_Inparam		(CardIssuer_UserErrorCode_Start + 143)	//盘库接口入参
-#define CardIssuer_UserErrorCode_CaptureCard_SignFailed				(CardIssuer_UserErrorCode_Start + 144)	//签发失败,业务发起吞卡
-#define CardIssuer_UserErrorCode_CaptureCard_IssueFromCardStore		(CardIssuer_UserErrorCode_Start + 145)	//卡库本地领卡吞卡
-#define CardIssuer_UserErrorCode_CaptureCard_AddCard_ReadFailed		(CardIssuer_UserErrorCode_Start + 146)	//卡库加卡,读卡失败吞卡
-#define CardIssuer_UserErrorCode_CaptureCard_Operate_ReadFailed		(CardIssuer_UserErrorCode_Start + 147)	//卡库盘库,读卡失败吞卡
-
-#define CardIssuer_UserErrorCode_GetAddCardInfo_CardCount			(CardIssuer_UserErrorCode_Start + 150)	//卡库中卡片数量
-
-//LogWarn real root config
-#define CardIssuer_UserErrorCode_Real_Root_Config					(CardIssuer_UserErrorCode_Start + 153)	//适配器实际的root配置
+//oiltmp to be removed
 #define CardIssuer_UserErrorCode_DupCallPreOnline_WhileInWorking	(CardIssuer_UserErrorCode_Start + 154)	//实体正忙,再次收到跨机激活
+
 #define CardIssuer_UserErrorCode_Hopper1_Mixed_Too_Much				(CardIssuer_UserErrorCode_Start + 155)	//卡箱1异常(连续吞卡过多)
 #define CardIssuer_UserErrorCode_Hopper2_Mixed_Too_Much				(CardIssuer_UserErrorCode_Start + 156)	//卡箱2异常(连续吞卡过多)
 #define CardIssuer_UserErrorCode_Hopper3_Mixed_Too_Much				(CardIssuer_UserErrorCode_Start + 157)	//卡箱3异常(连续吞卡过多)
-#define CardIssuer_UserErrorCode_RegistSwallowedCard_Failed			(CardIssuer_UserErrorCode_Start + 158)	//登记吞卡信息失败
-#define CardIssuer_UserErrorCode_CardActive_Service_NoReturn		(CardIssuer_UserErrorCode_Start + 159)	//卡库跨机服务端超时未返回
 #define CardIssuer_UserErrorCode_Maybe_InsertCard_InWrongStyle		(CardIssuer_UserErrorCode_Start + 160)	//可能卡片插反了
 #define CardIssuer_UserErrorCode_IssueCard_ActiveICCard_Failed		(CardIssuer_UserErrorCode_Start + 161)	//发卡时,DetectIfICCard调用ActiveICCard失败
+//oiltmp to be removed
 #define CardIssuer_UserErrorCode_Account_EAC_Mismatch				(CardIssuer_UserErrorCode_Start + 162)	//账户和户口系统的最新账户不匹配
 #define CardIssuer_UserErrorCode_CardStore_Reply_TooLong			(CardIssuer_UserErrorCode_Start + 163)	//跨机时卡库处理耗时过长
-#define CardIssuer_UserErrorCode_HopperCardMixed					(CardIssuer_UserErrorCode_Start + 164)	//卡箱中的卡片放置不对
 #define CardIssuer_UserErrorCode_CardActive_CardStore_OffLine		(CardIssuer_UserErrorCode_Start + 165)	//跨机时卡库不在线
+
 #define CardIssuer_UserErrorCode_ReadByRF							(CardIssuer_UserErrorCode_Start + 166)	//非接读取成功
+//oiltmp to be removed
 #define CardIssuer_UserErrorCode_CardActive_CardStore_Issuing		(CardIssuer_UserErrorCode_Start + 167)	//跨机时卡库正在本地领卡或加卡
-#define CardIssuer_UserErrorCode_CardActive_CardStore_CallByOther	(CardIssuer_UserErrorCode_Start + 168)	//跨机时卡库正在其他VTM调用
-#define CardIssuer_UserErrorCode_ReadAccount_Cost_Time				(CardIssuer_UserErrorCode_Start + 169)	//ReadAccount耗时
-#define CardIssuer_UserErrorCode_CardActive_CardIssuer_InFaultState	(CardIssuer_UserErrorCode_Start + 170)	//卡库收到跨机请求时卡机未成功打开
-#define CardIssuer_UserErrorCode_Account_NotMatchWithReadAccount	(CardIssuer_UserErrorCode_Start + 171)	//传入卡号与实际读到的不一致
-
-//***此段枚举值不可变动,涉及到业务逻辑***	卡库API细化后新增的错误码,也用于前端展示对应话术
-#define CardIssuer_UserErrorCode_Dev_HopperHasNoCard		(CardIssuer_UserErrorCode_Start + 180) //卡箱无卡
-#define CardIssuer_UserErrorCode_Dev_HopperMissing			(CardIssuer_UserErrorCode_Start + 181)//发卡箱缺失
-#define CardIssuer_UserErrorCode_Dev_TransCarJammed			(CardIssuer_UserErrorCode_Start + 182)//传输小车堵塞
-#define CardIssuer_UserErrorCode_Dev_RetainBinFull			(CardIssuer_UserErrorCode_Start + 183)//回收箱满
-#define CardIssuer_UserErrorCode_Dev_RetainBinMissing		(CardIssuer_UserErrorCode_Start + 184)//回收箱缺失
-#define CardIssuer_UserErrorCode_Dev_CardInReader			(CardIssuer_UserErrorCode_Start + 185)//读卡器内有卡
-#define CardIssuer_UserErrorCode_Dev_SlotHasNoCard			(CardIssuer_UserErrorCode_Start + 186)//卡槽内无卡
-#define CardIssuer_UserErrorCode_Dev_CardInSlot				(CardIssuer_UserErrorCode_Start + 187)//卡槽内有卡
-#define CardIssuer_UserErrorCode_Dev_NoCardInReader			(CardIssuer_UserErrorCode_Start + 188)//读卡器内无卡
-#define CardIssuer_UserErrorCode_Dev_CardJammed				(CardIssuer_UserErrorCode_Start + 189)//塞卡
-#define CardIssuer_UserErrorCode_Dev_SlotJammed				(CardIssuer_UserErrorCode_Start + 190)//卡槽堵塞
-#define CardIssuer_UserErrorCode_Dev_SlotInvalid			(CardIssuer_UserErrorCode_Start + 191)//卡槽地址非法(越界等)
-
-//盘库异常明细报错
-#define CardIssuer_UserErrorCode_KakuPanKu_MoveCardFromSlot_Failed				(CardIssuer_UserErrorCode_Start + 200)	//卡库盘库失败,卡槽移卡失败
-#define CardIssuer_UserErrorCode_KakuPanKu_ReadAccount_Failed					(CardIssuer_UserErrorCode_Start + 201)	//卡库盘库失败,读卡失败,吞卡成功
-#define CardIssuer_UserErrorCode_KakuPanKu_MoveCardToSlot_Failed				(CardIssuer_UserErrorCode_Start + 202)	//卡库盘库失败,卡移回卡槽失败,吞卡成功
-#define CardIssuer_UserErrorCode_KakuPanKu_ReadAccount_Capture_Failed			(CardIssuer_UserErrorCode_Start + 203)	//卡库盘库失败,读卡失败,吞卡失败
-#define CardIssuer_UserErrorCode_KakuPanKu_MoveCardToSlot_Capture_Failed		(CardIssuer_UserErrorCode_Start + 204)	//卡库盘库失败,卡移回卡槽失败,吞卡失败
-
-#define CardIssuer_UserErrorCode_EnterMainPage_SetFlag		0x20300300 //卡机进入首页设置运行时标志位
-#define CardIssuer_UserErrorCode_CopyRuncfg					0x20300301 //卡机拷贝旧运行时文件
-
-#define CardIssuer_UserErrorCode_Insert_Card_HasCard_Failed						0x20300302 //卡机未插卡时,内部已存在卡片
+
 #define CardIssuer_UserErrorCode_Insert_Card_TimeOut							0x20300303 //卡机插卡超时
 #define CardIssuer_UserErrorCode_Insert_Card_Cancel								0x20300304 //卡机插卡取消
-#define CardIssuer_UserErrorCode_Read_NoCard_Failed								0x20300305 //读卡时读卡器无卡
 #define CardIssuer_UserErrorCode_Capture_NoCard_Failed							0x20300306 //吞卡时发现读卡器无卡
 #define CardIssuer_UserErrorCode_Forget_Fetch_Card_Capture_Succ					0x20300307 //超时未取卡,已吞卡,请从吞卡箱中取卡
 #define CardIssuer_UserErrorCode_Forget_Fetch_Card_Capture_Fail					0x20300308 //超时未取卡,吞卡失败,请从发卡器取卡
-#define CardIssuer_UserErrorCode_Split_ICTrack2_Failed							0x20300309 //IC磁道2解析失败
-#define CardIssuer_UserErrorCode_CardAssistLoadFailed							0x2030030A //加载卡集对象失败
-#define CardIssuer_UserErrorCode_Write_RunCfgFile_Failed						0x2030030B //写运行时文件失败
-#define CardIssuer_UserErrorCode_ParseIC_Data_Fail								0x2030030C //ic数据解析异常
-#define CardIssuer_UserErrorCode_SplitTrack2_Fail								0x2030030D //拆解磁条2信息失败
-#define CardIssuer_UserErrorCode_ParseTrack_Data_Fail							0x2030030E //磁条信息解析异常
 #define CardIssuer_UserErrorCode_NotSupportRF									0x2030030F //卡机不支持非接
 
 //卡机流程状态报错

+ 0 - 161
Module/mod_CardIssuerStand/CardIssuerStand_client_g.h

@@ -395,69 +395,6 @@ public:
 		return ret;
 	}
 
-	ErrorCodeEnum Issue(CardIssuerStandService_Issue_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
-	{
-		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
-		CAutoBuffer Buf = SpObject2Buffer(Req);
-		if (m_context.checkEmpty())
-		{
-			m_context.AutoGenerate();
-			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
-			m_context = m_context.upgradeLink();
-		}
-		auto ret = pFunc->AsyncRequest(CardIssuerStandService_Method_Issue, CardIssuerStandService_MethodSignature_Issue, Buf, spAsyncWait, m_context, dwTimeout);
-		m_context.clear();
-		return ret;
-	}
-	ErrorCodeEnum Issue(CardIssuerStandService_Issue_Req &Req, CardIssuerStandService_Issue_Ans &Ans, DWORD dwTimeout)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = Issue(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum Issue(CardIssuerStandService_Issue_Req &Req, CardIssuerStandService_Issue_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = Issue(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum Issue(CardIssuerStandService_Issue_Req &Req, CardIssuerStandService_Issue_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = Issue(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			CSimpleString str;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-
-	ErrorCodeEnum SetIssueFlag()
-	{
-		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
-		if (m_context.checkEmpty())
-		{
-			m_context.AutoGenerate();
-			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
-			m_context = m_context.upgradeLink();
-		}
-		auto ret = pFunc->OnewayCall(CardIssuerStandService_Method_SetIssueFlag, CardIssuerStandService_MethodSignature_SetIssueFlag, m_context);
-		m_context.clear();
-		return ret;
-	}
-
 	ErrorCodeEnum QueryCardInfo(CardIssuerStandService_QueryCardInfo_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
 	{
 		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
@@ -507,55 +444,6 @@ public:
 		return Error;
 	}
 
-	ErrorCodeEnum WriteTrack(CardIssuerStandService_WriteTrack_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
-	{
-		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
-		CAutoBuffer Buf = SpObject2Buffer(Req);
-		if (m_context.checkEmpty())
-		{
-			m_context.AutoGenerate();
-			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
-			m_context = m_context.upgradeLink();
-		}
-		auto ret = pFunc->AsyncRequest(CardIssuerStandService_Method_WriteTrack, CardIssuerStandService_MethodSignature_WriteTrack, Buf, spAsyncWait, m_context, dwTimeout);
-		m_context.clear();
-		return ret;
-	}
-	ErrorCodeEnum WriteTrack(CardIssuerStandService_WriteTrack_Req &Req, CardIssuerStandService_WriteTrack_Ans &Ans, DWORD dwTimeout)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = WriteTrack(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum WriteTrack(CardIssuerStandService_WriteTrack_Req &Req, CardIssuerStandService_WriteTrack_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = WriteTrack(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum WriteTrack(CardIssuerStandService_WriteTrack_Req &Req, CardIssuerStandService_WriteTrack_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = WriteTrack(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			CSimpleString str;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-
 	ErrorCodeEnum GetMaterialCountEx(CardIssuerStandService_GetMaterialCountEx_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
 	{
 		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
@@ -752,55 +640,6 @@ public:
 		return Error;
 	}
 
-	ErrorCodeEnum SAMICCommand(CardIssuerStandService_SAMICCommand_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
-	{
-		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
-		CAutoBuffer Buf = SpObject2Buffer(Req);
-		if (m_context.checkEmpty())
-		{
-			m_context.AutoGenerate();
-			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
-			m_context = m_context.upgradeLink();
-		}
-		auto ret = pFunc->AsyncRequest(CardIssuerStandService_Method_SAMICCommand, CardIssuerStandService_MethodSignature_SAMICCommand, Buf, spAsyncWait, m_context, dwTimeout);
-		m_context.clear();
-		return ret;
-	}
-	ErrorCodeEnum SAMICCommand(CardIssuerStandService_SAMICCommand_Req &Req, CardIssuerStandService_SAMICCommand_Ans &Ans, DWORD dwTimeout)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = SAMICCommand(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum SAMICCommand(CardIssuerStandService_SAMICCommand_Req &Req, CardIssuerStandService_SAMICCommand_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = SAMICCommand(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum SAMICCommand(CardIssuerStandService_SAMICCommand_Req &Req, CardIssuerStandService_SAMICCommand_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = SAMICCommand(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			CSimpleString str;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-
 	ErrorCodeEnum PreOnlineOnStore(CardIssuerStandService_PreOnlineOnStore_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
 	{
 		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();

+ 7 - 111
Module/mod_CardIssuerStand/CardIssuerStand_def_g.h

@@ -21,15 +21,11 @@ namespace CardIssuerStand {
 #define CardIssuerStandService_Method_PreOnline 6
 #define CardIssuerStandService_Method_PostOnline 7
 #define CardIssuerStandService_Method_Exit 8
-#define CardIssuerStandService_Method_Issue 9
-#define CardIssuerStandService_Method_SetIssueFlag 12
 #define CardIssuerStandService_Method_QueryCardInfo 14
-#define CardIssuerStandService_Method_WriteTrack 15
 #define CardIssuerStandService_Method_GetMaterialCountEx 16
 #define CardIssuerStandService_Method_SetMaterialCountEx 17
 #define CardIssuerStandService_Method_SetSomeFlag 18
 #define CardIssuerStandService_Method_IssueEx 20
-#define CardIssuerStandService_Method_SAMICCommand 22
 #define CardIssuerStandService_Method_PreOnlineOnStore 27
 #define CardIssuerStandService_Method_NotifyPreonline 28
 #define CardIssuerStandService_Method_QueryCardInfoOnStore 29
@@ -53,15 +49,11 @@ namespace CardIssuerStand {
 #define CardIssuerStandService_MethodSignature_PreOnline 640958030
 #define CardIssuerStandService_MethodSignature_PostOnline 923284555
 #define CardIssuerStandService_MethodSignature_Exit -1158854104
-#define CardIssuerStandService_MethodSignature_Issue 438783077
-#define CardIssuerStandService_MethodSignature_SetIssueFlag 187641303
 #define CardIssuerStandService_MethodSignature_QueryCardInfo 154962579
-#define CardIssuerStandService_MethodSignature_WriteTrack -1424799012
 #define CardIssuerStandService_MethodSignature_GetMaterialCountEx 1356148904
 #define CardIssuerStandService_MethodSignature_SetMaterialCountEx -1512312761
 #define CardIssuerStandService_MethodSignature_SetSomeFlag -2033418025
 #define CardIssuerStandService_MethodSignature_IssueEx 1390328640
-#define CardIssuerStandService_MethodSignature_SAMICCommand 406988293
 #define CardIssuerStandService_MethodSignature_PreOnlineOnStore 158325869
 #define CardIssuerStandService_MethodSignature_NotifyPreonline -808637659
 #define CardIssuerStandService_MethodSignature_QueryCardInfoOnStore 1217447214
@@ -85,15 +77,11 @@ namespace CardIssuerStand {
 #define CardIssuerStandService_LogCode_PreOnline "QLR040220306"
 #define CardIssuerStandService_LogCode_PostOnline "QLR040220307"
 #define CardIssuerStandService_LogCode_Exit "QLR040220308"
-#define CardIssuerStandService_LogCode_Issue "QLR040220309"
-#define CardIssuerStandService_LogCode_SetIssueFlag "QLR040220312"
 #define CardIssuerStandService_LogCode_QueryCardInfo "QLR040220314"
-#define CardIssuerStandService_LogCode_WriteTrack "QLR040220315"
 #define CardIssuerStandService_LogCode_GetMaterialCountEx "QLR040220316"
 #define CardIssuerStandService_LogCode_SetMaterialCountEx "QLR040220317"
 #define CardIssuerStandService_LogCode_SetSomeFlag "QLR040220318"
 #define CardIssuerStandService_LogCode_IssueEx "QLR040220320"
-#define CardIssuerStandService_LogCode_SAMICCommand "QLR040220322"
 #define CardIssuerStandService_LogCode_PreOnlineOnStore "QLR040220327"
 #define CardIssuerStandService_LogCode_NotifyPreonline "QLR040220328"
 #define CardIssuerStandService_LogCode_QueryCardInfoOnStore "QLR040220329"
@@ -277,33 +265,6 @@ struct CardIssuerStandService_Exit_Info
 
 };
 
-struct CardIssuerStandService_Issue_Req
-{
-
-	void Serialize(SpBuffer &Buf)
-	{
-	}
-
-};
-
-struct CardIssuerStandService_Issue_Ans
-{
-
-	void Serialize(SpBuffer &Buf)
-	{
-	}
-
-};
-
-struct CardIssuerStandService_SetIssueFlag_Info
-{
-
-	void Serialize(SpBuffer &Buf)
-	{
-	}
-
-};
-
 struct CardIssuerStandService_QueryCardInfo_Req
 {
 
@@ -326,35 +287,6 @@ struct CardIssuerStandService_QueryCardInfo_Ans
 
 };
 
-struct CardIssuerStandService_WriteTrack_Req
-{
-	int mode;
-	int co;
-	CSimpleStringW track1;
-	CSimpleStringW track2;
-	CSimpleStringW track3;
-	CSimpleStringW reserved;
-
-	void Serialize(SpBuffer &Buf)
-	{
-		auto & buf = Buf & mode & co & track1 & track2 & track3 & reserved;
-	}
-
-};
-
-struct CardIssuerStandService_WriteTrack_Ans
-{
-	int result;
-	int reserved1;
-	CSimpleStringA reserved2;
-
-	void Serialize(SpBuffer &Buf)
-	{
-		auto & buf = Buf & result & reserved1 & reserved2;
-	}
-
-};
-
 struct CardIssuerStandService_GetMaterialCountEx_Req
 {
 	CAutoArray<int> GetHopper;
@@ -479,35 +411,6 @@ struct CardIssuerStandService_IssueEx_Ans
 
 };
 
-struct CardIssuerStandService_SAMICCommand_Req
-{
-	int cmdType;
-	CAutoArray<int> param1;
-	CAutoArray<CSimpleStringA> param2;
-	CAutoArray<int> reserved1;
-	CAutoArray<CSimpleStringA> reserved2;
-
-	void Serialize(SpBuffer &Buf)
-	{
-		auto & buf = Buf & cmdType & param1 & param2 & reserved1 & reserved2;
-	}
-
-};
-
-struct CardIssuerStandService_SAMICCommand_Ans
-{
-	CAutoArray<int> ret1;
-	CAutoArray<CSimpleStringA> ret2;
-	CAutoArray<int> reserved1;
-	CAutoArray<CSimpleStringA> reserved2;
-
-	void Serialize(SpBuffer &Buf)
-	{
-		auto & buf = Buf & ret1 & ret2 & reserved1 & reserved2;
-	}
-
-};
-
 struct CardIssuerStandService_PreOnlineOnStore_Req
 {
 	CSimpleStringA account;
@@ -664,14 +567,13 @@ struct CardIssuerStandService_GetDevInfo_Ans
 struct CardIssuerStandService_ReadJS_Req
 {
 	int mode;
-	CSimpleStringA aid;
 	CSimpleStringA businessData;
 	CAutoArray<int> reserved1;
 	CAutoArray<CSimpleStringA> reserved2;
 
 	void Serialize(SpBuffer &Buf)
 	{
-		auto & buf = Buf & mode & aid & businessData & reserved1 & reserved2;
+		auto & buf = Buf & mode & businessData & reserved1 & reserved2;
 	}
 
 };
@@ -679,24 +581,18 @@ struct CardIssuerStandService_ReadJS_Req
 struct CardIssuerStandService_ReadJS_Ans
 {
 	int magStatus;
-	CSimpleStringA track1;
-	CSimpleStringA track2;
-	CSimpleStringA track3;
-	int track1Size;
-	int track2Size;
-	int track3Size;
-	int track1Status;
-	int track2Status;
-	int track3Status;
-	int icState;
+	CSimpleStringA magData;
+	CSimpleStringA magMsg;
+	int icStatus;
+	CSimpleStringA icMsg;
 	int icMode;
-	CSimpleStringA result;
+	CSimpleStringA pbocData;
 	CAutoArray<int> reserved1;
 	CAutoArray<CSimpleStringA> reserved2;
 
 	void Serialize(SpBuffer &Buf)
 	{
-		auto & buf = Buf & magStatus & track1 & track2 & track3 & track1Size & track2Size & track3Size & track1Status & track2Status & track3Status & icState & icMode & result & reserved1 & reserved2;
+		auto & buf = Buf & magStatus & magData & magMsg & icStatus & icMsg & icMode & pbocData & reserved1 & reserved2;
 	}
 
 };

+ 0 - 108
Module/mod_CardIssuerStand/CardIssuerStand_server_g.h

@@ -93,20 +93,6 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
-		case CardIssuerStandService_Method_Issue:
-			if (dwSignature == CardIssuerStandService_MethodSignature_Issue) {
-				bOverlap = true;
-			} else {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CardIssuerStandService_Method_SetIssueFlag:
-			if (dwSignature == CardIssuerStandService_MethodSignature_SetIssueFlag) {
-				bOverlap = true;
-			} else {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
 		case CardIssuerStandService_Method_QueryCardInfo:
 			if (dwSignature == CardIssuerStandService_MethodSignature_QueryCardInfo) {
 				bOverlap = true;
@@ -114,13 +100,6 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
-		case CardIssuerStandService_Method_WriteTrack:
-			if (dwSignature == CardIssuerStandService_MethodSignature_WriteTrack) {
-				bOverlap = true;
-			} else {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
 		case CardIssuerStandService_Method_GetMaterialCountEx:
 			if (dwSignature == CardIssuerStandService_MethodSignature_GetMaterialCountEx) {
 				bOverlap = true;
@@ -149,13 +128,6 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
-		case CardIssuerStandService_Method_SAMICCommand:
-			if (dwSignature == CardIssuerStandService_MethodSignature_SAMICCommand) {
-				bOverlap = true;
-			} else {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
 		case CardIssuerStandService_Method_PreOnlineOnStore:
 			if (dwSignature == CardIssuerStandService_MethodSignature_PreOnlineOnStore) {
 				bOverlap = true;
@@ -303,26 +275,11 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
-		case CardIssuerStandService_Method_Issue:
-			if (dwSignature != CardIssuerStandService_MethodSignature_Issue) {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CardIssuerStandService_Method_SetIssueFlag:
-			if (dwSignature != CardIssuerStandService_MethodSignature_SetIssueFlag) {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
 		case CardIssuerStandService_Method_QueryCardInfo:
 			if (dwSignature != CardIssuerStandService_MethodSignature_QueryCardInfo) {
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
-		case CardIssuerStandService_Method_WriteTrack:
-			if (dwSignature != CardIssuerStandService_MethodSignature_WriteTrack) {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
 		case CardIssuerStandService_Method_GetMaterialCountEx:
 			if (dwSignature != CardIssuerStandService_MethodSignature_GetMaterialCountEx) {
 				Error = Error_MethodSignatureFailed;
@@ -343,11 +300,6 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
-		case CardIssuerStandService_Method_SAMICCommand:
-			if (dwSignature != CardIssuerStandService_MethodSignature_SAMICCommand) {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
 		case CardIssuerStandService_Method_PreOnlineOnStore:
 			if (dwSignature != CardIssuerStandService_MethodSignature_PreOnlineOnStore) {
 				Error = Error_MethodSignatureFailed;
@@ -465,26 +417,11 @@ public:
 	/// override by user
 	}
 
-	virtual void Handle_Issue(SpReqAnsContext<CardIssuerStandService_Issue_Req, CardIssuerStandService_Issue_Ans>::Pointer ctx)
-	{
-	/// override by user
-	}
-
-	virtual void Handle_SetIssueFlag(SpOnewayCallContext<CardIssuerStandService_SetIssueFlag_Info>::Pointer ctx)
-	{
-	/// override by user
-	}
-
 	virtual void Handle_QueryCardInfo(SpReqAnsContext<CardIssuerStandService_QueryCardInfo_Req, CardIssuerStandService_QueryCardInfo_Ans>::Pointer ctx)
 	{
 	/// override by user
 	}
 
-	virtual void Handle_WriteTrack(SpReqAnsContext<CardIssuerStandService_WriteTrack_Req, CardIssuerStandService_WriteTrack_Ans>::Pointer ctx)
-	{
-	/// override by user
-	}
-
 	virtual void Handle_GetMaterialCountEx(SpReqAnsContext<CardIssuerStandService_GetMaterialCountEx_Req, CardIssuerStandService_GetMaterialCountEx_Ans>::Pointer ctx)
 	{
 	/// override by user
@@ -505,11 +442,6 @@ public:
 	/// override by user
 	}
 
-	virtual void Handle_SAMICCommand(SpReqAnsContext<CardIssuerStandService_SAMICCommand_Req, CardIssuerStandService_SAMICCommand_Ans>::Pointer ctx)
-	{
-	/// override by user
-	}
-
 	virtual void Handle_PreOnlineOnStore(SpReqAnsContext<CardIssuerStandService_PreOnlineOnStore_Req, CardIssuerStandService_PreOnlineOnStore_Ans>::Pointer ctx)
 	{
 	/// override by user
@@ -681,26 +613,6 @@ public:
 						Handle_Exit(ctx);
 					}
 					break;
-				case CardIssuerStandService_Method_Issue:
-					{
-						SpReqAnsContext<CardIssuerStandService_Issue_Req,CardIssuerStandService_Issue_Ans>::Pointer ctx;
-						ctx.Attach(new SpReqAnsContext<CardIssuerStandService_Issue_Req,CardIssuerStandService_Issue_Ans>(pTransactionContext));
-						SpBuffer2Object(Buf, ctx->Req);
-						pTransactionContext->GetLinkContext(ctx->link);
-						EntityResource::setLink(ctx->link);
-						Handle_Issue(ctx);
-					}
-					break;
-				case CardIssuerStandService_Method_SetIssueFlag:
-					{
-						SpOnewayCallContext<CardIssuerStandService_SetIssueFlag_Info>::Pointer ctx;
-						ctx.Attach(new SpOnewayCallContext<CardIssuerStandService_SetIssueFlag_Info>());
-						SpBuffer2Object(Buf, ctx->Info);
-						pTransactionContext->GetLinkContext(ctx->link);
-						EntityResource::setLink(ctx->link);
-						Handle_SetIssueFlag(ctx);
-					}
-					break;
 				case CardIssuerStandService_Method_QueryCardInfo:
 					{
 						SpReqAnsContext<CardIssuerStandService_QueryCardInfo_Req,CardIssuerStandService_QueryCardInfo_Ans>::Pointer ctx;
@@ -711,16 +623,6 @@ public:
 						Handle_QueryCardInfo(ctx);
 					}
 					break;
-				case CardIssuerStandService_Method_WriteTrack:
-					{
-						SpReqAnsContext<CardIssuerStandService_WriteTrack_Req,CardIssuerStandService_WriteTrack_Ans>::Pointer ctx;
-						ctx.Attach(new SpReqAnsContext<CardIssuerStandService_WriteTrack_Req,CardIssuerStandService_WriteTrack_Ans>(pTransactionContext));
-						SpBuffer2Object(Buf, ctx->Req);
-						pTransactionContext->GetLinkContext(ctx->link);
-						EntityResource::setLink(ctx->link);
-						Handle_WriteTrack(ctx);
-					}
-					break;
 				case CardIssuerStandService_Method_GetMaterialCountEx:
 					{
 						SpReqAnsContext<CardIssuerStandService_GetMaterialCountEx_Req,CardIssuerStandService_GetMaterialCountEx_Ans>::Pointer ctx;
@@ -761,16 +663,6 @@ public:
 						Handle_IssueEx(ctx);
 					}
 					break;
-				case CardIssuerStandService_Method_SAMICCommand:
-					{
-						SpReqAnsContext<CardIssuerStandService_SAMICCommand_Req,CardIssuerStandService_SAMICCommand_Ans>::Pointer ctx;
-						ctx.Attach(new SpReqAnsContext<CardIssuerStandService_SAMICCommand_Req,CardIssuerStandService_SAMICCommand_Ans>(pTransactionContext));
-						SpBuffer2Object(Buf, ctx->Req);
-						pTransactionContext->GetLinkContext(ctx->link);
-						EntityResource::setLink(ctx->link);
-						Handle_SAMICCommand(ctx);
-					}
-					break;
 				case CardIssuerStandService_Method_PreOnlineOnStore:
 					{
 						SpReqAnsContext<CardIssuerStandService_PreOnlineOnStore_Req,CardIssuerStandService_PreOnlineOnStore_Ans>::Pointer ctx;

+ 3 - 16
Module/mod_CardIssuerStand/mod_cardissuerStand.cpp

@@ -76,13 +76,7 @@ void CardIssuerServerSession::Handle_Exit(SpOnewayCallContext<CardIssuerStandSer
 	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Exit");
 	m_pEntity->Exit(ctx);
 }
- void CardIssuerServerSession::Handle_SetIssueFlag(SpOnewayCallContext<CardIssuerStandService_SetIssueFlag_Info>::Pointer ctx)
-{
-	LOG_FUNCTION();
-	DbgToBeidou(ctx->link, __FUNCTION__)();
-	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("SetIssueFlag");
-	m_pEntity->SetIssueFlag(ctx);
-}
+
 void CardIssuerServerSession::Handle_QueryCardInfo(SpReqAnsContext<CardIssuerStandService_QueryCardInfo_Req, CardIssuerStandService_QueryCardInfo_Ans>::Pointer ctx)
 {
 	LOG_FUNCTION();
@@ -90,10 +84,7 @@ void CardIssuerServerSession::Handle_QueryCardInfo(SpReqAnsContext<CardIssuerSta
 	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("QueryCardInfo");
 	m_pEntity->QueryCardInfo(ctx);
 }
-void CardIssuerServerSession::Handle_WriteTrack(SpReqAnsContext<CardIssuerStandService_WriteTrack_Req, CardIssuerStandService_WriteTrack_Ans>::Pointer ctx)
-{
-	ctx->Answer(Error_NotImpl);
-}
+
 void CardIssuerServerSession::Handle_GetMaterialCountEx(SpReqAnsContext<CardIssuerStandService_GetMaterialCountEx_Req, CardIssuerStandService_GetMaterialCountEx_Ans>::Pointer ctx)
 {
 	LOG_FUNCTION();
@@ -122,10 +113,6 @@ void CardIssuerServerSession::Handle_IssueEx(SpReqAnsContext<CardIssuerStandServ
 	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("IssueEx, Req.hopper=%d",ctx->Req.hopper);
 	m_pEntity->IssueEx(ctx);
 }
-void CardIssuerServerSession::Handle_SAMICCommand(SpReqAnsContext<CardIssuerStandService_SAMICCommand_Req, CardIssuerStandService_SAMICCommand_Ans>::Pointer ctx)
-{
-	ctx->Answer(Error_NotImpl);
-}
 void CardIssuerServerSession::Handle_QueryCIStatus(SpReqAnsContext<CardIssuerStandService_QueryCIStatus_Req, CardIssuerStandService_QueryCIStatus_Ans>::Pointer ctx)
 {
 	LOG_FUNCTION();
@@ -146,7 +133,7 @@ void CardIssuerServerSession::Handle_ReadJS(SpReqAnsContext<CardIssuerStandServi
 {
 	LOG_FUNCTION();
 	DbgToBeidou(ctx->link, __FUNCTION__)();
-	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke ReadJS req.aid=%s, req.mode=%d, req.business=%s", ctx->Req.aid.GetData(), ctx->Req.mode, ctx->Req.businessData.GetData());
+	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke ReadJS req.mode=%d, req.business=%s", ctx->Req.mode, ctx->Req.businessData.GetData());
 	m_pEntity->ReadJS(ctx);
 }
 void CardIssuerServerSession::Handle_PostOnlineJS(SpReqAnsContext<CardIssuerStandService_PostOnlineJS_Req, CardIssuerStandService_PostOnlineJS_Ans>::Pointer ctx)

+ 16 - 41
Module/mod_CardIssuerStand/mod_cardissuerStand.h

@@ -20,14 +20,11 @@ public:
 	virtual void Handle_PreOnline(SpReqAnsContext<CardIssuerStandService_PreOnline_Req, CardIssuerStandService_PreOnline_Ans>::Pointer ctx);
 	virtual void Handle_PostOnline(SpReqAnsContext<CardIssuerStandService_PostOnline_Req, CardIssuerStandService_PostOnline_Ans>::Pointer ctx);
 	virtual void Handle_Exit(SpOnewayCallContext<CardIssuerStandService_Exit_Info>::Pointer ctx);
-	virtual void Handle_SetIssueFlag(SpOnewayCallContext<CardIssuerStandService_SetIssueFlag_Info>::Pointer ctx);
 	virtual void Handle_QueryCardInfo(SpReqAnsContext<CardIssuerStandService_QueryCardInfo_Req, CardIssuerStandService_QueryCardInfo_Ans>::Pointer ctx);
-	virtual void Handle_WriteTrack(SpReqAnsContext<CardIssuerStandService_WriteTrack_Req, CardIssuerStandService_WriteTrack_Ans>::Pointer ctx);
 	virtual void Handle_GetMaterialCountEx(SpReqAnsContext<CardIssuerStandService_GetMaterialCountEx_Req, CardIssuerStandService_GetMaterialCountEx_Ans>::Pointer ctx);
 	virtual void Handle_SetMaterialCountEx(SpReqAnsContext<CardIssuerStandService_SetMaterialCountEx_Req, CardIssuerStandService_SetMaterialCountEx_Ans>::Pointer ctx);
 	virtual void Handle_SetSomeFlag(SpReqAnsContext<CardIssuerStandService_SetSomeFlag_Req, CardIssuerStandService_SetSomeFlag_Ans>::Pointer ctx);
 	virtual void Handle_IssueEx(SpReqAnsContext<CardIssuerStandService_IssueEx_Req, CardIssuerStandService_IssueEx_Ans>::Pointer ctx);
-	virtual void Handle_SAMICCommand(SpReqAnsContext<CardIssuerStandService_SAMICCommand_Req, CardIssuerStandService_SAMICCommand_Ans>::Pointer ctx);
 	virtual void Handle_QueryCIStatus(SpReqAnsContext<CardIssuerStandService_QueryCIStatus_Req, CardIssuerStandService_QueryCIStatus_Ans>::Pointer ctx);
 	virtual void Handle_GetDevInfo(SpReqAnsContext<CardIssuerStandService_GetDevInfo_Req, CardIssuerStandService_GetDevInfo_Ans>::Pointer ctx);
 
@@ -103,7 +100,6 @@ public:
 		LOG_FUNCTION();
 		if(!m_fsm.GetDevInitFlag()){
 			ctx->Answer(Error_DevNotAvailable, CardIssuer_UserErrorCode_DevOpen_Failed);
-			LogWarn(Severity_Middle, Error_DevNotAvailable, CardIssuer_UserErrorCode_DevOpen_Failed, "Insert but DevOpen failed.");
 		}else{
 			m_bNewSessionInit = false;
 			m_fsm.SetExitFlag(false);
@@ -147,14 +143,6 @@ public:
 		if (m_fsm.GetWaitFlag())
 			m_fsm.SetWaitMore();
 	}
-	void Issue(SpReqAnsContext<CardIssuerStandService_Issue_Req, CardIssuerStandService_Issue_Ans>::Pointer ctx)
-	{
-		LOG_FUNCTION();
-		m_bNewSessionInit = false;
-		CardIssueEvent *pEvt = new CardIssueEvent();
-		pEvt->ctx = ctx;
-		m_fsm.PostEventFIFO(pEvt);
-	}
 	void PreOnline(SpReqAnsContext<CardIssuerStandService_PreOnline_Req, CardIssuerStandService_PreOnline_Ans>::Pointer ctx)
 	{
 		LOG_FUNCTION();
@@ -162,21 +150,6 @@ public:
 			ctx->Answer(Error_DevNotAvailable, CardIssuer_UserErrorCode_DevOpen_Failed);
 		}
 		else {
-			if (ctx->Req.reserved1.GetLength() > 0 && strnicmp("kaku#", (const char*)ctx->Req.reserved1, 5) == 0)
-			{
-				int state = m_fsm.GetFSMState();
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("PreOnline m_currentFSMState:%d", state));
-				if (state == 9)
-				{
-					ctx->Answer(Error_BridgeNotOK);
-					return;
-				}
-				else if (state != 2)
-				{
-					ctx->Answer(Error_InvalidState);
-					return;
-				}
-			}
 			PreOnlineEvent* e = new PreOnlineEvent();
 			e->ctx = ctx;
 			m_fsm.PostEventFIFO(e);
@@ -198,6 +171,14 @@ public:
 	}
 	void QueryCardInfo(SpReqAnsContext<CardIssuerStandService_QueryCardInfo_Req, CardIssuerStandService_QueryCardInfo_Ans>::Pointer ctx)
 	{
+		if (m_fsm.GetDevInitingFlag())
+		{
+			ctx->Answer(Error_DevNotAvailable, CardIssuer_UserErrorCode_DeviceOpening);
+			return;
+		}else if (!m_fsm.GetDevInitFlag()) {
+			ctx->Answer(Error_DevNotAvailable, CardIssuer_UserErrorCode_DevOpen_Failed);
+			return;
+		}
 		if (m_bNewSessionInit)
 		{
 			FSMEvent *pEvt = new FSMEvent(USER_EVT_EXIT);
@@ -220,7 +201,6 @@ public:
 			ctx->Answer(Error_Succeed);
 		}
 	}
-	void SetIssueFlag(SpOnewayCallContext<CardIssuerStandService_SetIssueFlag_Info>::Pointer ctx){ m_fsm.FrontSetIssueFlag(true); }
 	void GetMaterialCountEx(SpReqAnsContext<CardIssuerStandService_GetMaterialCountEx_Req, CardIssuerStandService_GetMaterialCountEx_Ans>::Pointer ctx)
 	{
 		m_bNewSessionInit = false;
@@ -237,16 +217,16 @@ public:
 	}
 	void SetSomeFlag(SpReqAnsContext<CardIssuerStandService_SetSomeFlag_Req, CardIssuerStandService_SetSomeFlag_Ans>::Pointer ctx)
 	{
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set issue flag to %d", ctx->Req.IssueBusiness);
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set issue flag to %d", ctx->Req.IssueBusiness);
 		if (ctx->Req.IssueBusiness == 1)
-			m_fsm.FrontSetIssueFlag(true);
+			m_fsm.FSMSetIssueFlag(1);
 		else if (ctx->Req.IssueBusiness == 0)
-			m_fsm.FrontSetIssueFlag(false);
+			m_fsm.FSMSetIssueFlag(0);
 		else if (ctx->Req.IssueBusiness == 2)//oilyang@20170621 query issue direction
 		{
 			ctx->Ans.reserved1.Init(1);
 			ctx->Ans.reserved1[0] = (m_fsm.QueryIssueFlag() ? 0 : 1);//according to yzx
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("issue direction:%d",ctx->Ans.reserved1[0]);//if 0 capture card eles eject card
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("issue direction:%d",ctx->Ans.reserved1[0]);//if 0 capture card eles eject card
 		}
 		else if (ctx->Req.IssueBusiness == 3)//oilyang@20181210 
 		{
@@ -272,14 +252,9 @@ public:
 	void IssueEx(SpReqAnsContext<CardIssuerStandService_IssueEx_Req, CardIssuerStandService_IssueEx_Ans>::Pointer ctx)
 	{
 		LOG_FUNCTION();
-		int state = m_fsm.GetFSMState();
-
 		if (!m_fsm.GetDevInitFlag()) {
 			ctx->Answer(Error_DevNotAvailable, CardIssuer_UserErrorCode_DevOpen_Failed);
 		}
-		else if (state == 9) {
-			ctx->Answer(Error_InvalidState, CardIssuer_UserErrorCode_StandEntityInFailState);
-		}
 		else {
 			m_bNewSessionInit = false;
 			CardIssueExEvent* pEvt = new CardIssueExEvent();
@@ -294,20 +269,20 @@ public:
 		
 
 		if (m_fsm.GetDevInitingFlag()) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetDevInfo device is opening,state return 0");
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("GetDevInfo device is opening,state return 0");
 			ctx->Ans.state = DEVICE_STATUS_NOT_READY;
-			ctx->Answer(Error_NotInit, CardIssuer_UserErrorCode_DevOpen_Failed);
+			ctx->Answer(Error_NotInit, CardIssuer_UserErrorCode_DeviceOpening);
 		}
 		else {
 			//设备未正常打开时,直接报state=0;
 			if (!m_fsm.GetDevInitFlag()) {
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetDevInfo device is not open,state return 0");
+				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("GetDevInfo device is not open,state return 0");
 				ctx->Ans.state = DEVICE_STATUS_NOT_READY;
 				ctx->Answer(Error_DevNotAvailable, CardIssuer_UserErrorCode_DevOpen_Failed);
 			}
 			else {
 				if (ctx->Ans.state != DEVICE_STATUS_NORMAL) {
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetDevInfo state=%d", ctx->Ans.state);
+					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("GetDevInfo state=%d", ctx->Ans.state);
 				}
 				ctx->Answer(Error_Succeed);
 			}

+ 15 - 105
Module/mod_CardReadAdapter/CardReadAdapterFSM.cpp

@@ -5,23 +5,14 @@
 #include "EventCode.h"
 #include <algorithm>
 #include <map>
+
 using namespace std;
+using namespace SP::Module::Comm;
+
 #define _ATL_NO_AUTOMATIC_NAMESPACE
 #define ReadCard_TIMEOUT	62000	//web的超时时间是65s
 #define ReadCard_Min_Time	12000	//Read+PreOnline 
 
-//TODO: CrossPlaform  [Gifur@2025730]
-unsigned long long GetTickCountRVC() {
-#ifdef RVC_OS_WIN
-	return GetTickCount64();
-#else
-	struct timespec ts;
-
-	clock_gettime(CLOCK_MONOTONIC, &ts);
-
-	return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
-#endif //RVC_OS_WIN
-}
 class CCardReadAdapterEntity;
 void CCardReadAdapterFSM::s0_on_entry()
 {
@@ -1004,8 +995,8 @@ int CCardReadAdapterFSM::ContactlessCardRead(SpReqAnsContext<CardReadAdapterServ
 	}
 	ErrorCodeEnum eErr = Error_Unexpect;
 	DWORD elapsed = 0;
-	DWORD dwStart = GetTickCountRVC();
-	DWORD dwEnd = GetTickCountRVC();
+	DWORD dwStart = RVCGetTickCount();
+	DWORD dwEnd = RVCGetTickCount();
 	int insertloopNum = 0;
 	int preloopNum = 0;
 	while(elapsed + ReadCard_Min_Time < ReadCard_TIMEOUT)
@@ -1018,7 +1009,7 @@ int CCardReadAdapterFSM::ContactlessCardRead(SpReqAnsContext<CardReadAdapterServ
 			DWORD dwUserCode = 0;
 			req.aid = ctx->Req.aid;
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to call contactless insert...");
-			dwEnd = GetTickCountRVC();
+			dwEnd = RVCGetTickCount();
 			DWORD dwTimeout = ReadCard_TIMEOUT - (dwEnd-dwStart);
 			m_busCtx.eCardFromWhich = Card_In_No_Where;
 			m_busCtx.eCardProcStage = Card_ProcStage_WaitForCard;
@@ -1063,7 +1054,7 @@ int CCardReadAdapterFSM::ContactlessCardRead(SpReqAnsContext<CardReadAdapterServ
 			}
 			else if(eErr == Error_Interact){
 				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("maybe ICCommand error, need loop!!!");
-				dwEnd = GetTickCountRVC();
+				dwEnd = RVCGetTickCount();
 				elapsed = dwEnd - dwStart;
 				Sleep(400);
 				insertloopNum++;
@@ -1084,7 +1075,7 @@ int CCardReadAdapterFSM::ContactlessCardRead(SpReqAnsContext<CardReadAdapterServ
 			{
 				//oilyang@20210223 add,The Entity FSM is too late to change state ,as the call coming so fast
 				Sleep(200);
-				dwEnd = GetTickCountRVC();
+				dwEnd = RVCGetTickCount();
 				DWORD elapsed1 = ReadCard_TIMEOUT - (dwEnd-dwStart);
 				if(elapsed1 < 5000)//PreOnline较慢,预留一定时间
 				{
@@ -1107,7 +1098,7 @@ int CCardReadAdapterFSM::ContactlessCardRead(SpReqAnsContext<CardReadAdapterServ
 					ctx->Ans.status = 0;
 				}else if(eErr == Error_Interact){
 					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ContacelssCard return Error_Interact, need loop.");
-					dwEnd = GetTickCountRVC();
+					dwEnd = RVCGetTickCount();
 					elapsed = dwEnd - dwStart;
 					preloopNum++;
 					Sleep(400);
@@ -1270,33 +1261,7 @@ int CCardReadAdapterFSM::WriteTrack(SpReqAnsContext<CardReadAdapterService_Write
 	LOG_FUNCTION();
 	if (IsCardIssuerSessionOK())
 	{
-		if (!IsCardIssuerStore()) {
-			CardIssuerStandService_WriteTrack_Req req;
-			CardIssuerStandService_WriteTrack_Ans ans;
-			req.co = ctx->Req.co;
-			req.mode = ctx->Req.mode;
-			req.track1 = ctx->Req.track1;
-			req.track2 = ctx->Req.track2;
-			req.track3 = ctx->Req.track3;
-			req.reserved = ctx->Req.reserved;
-			ErrorCodeEnum eErr = Error_Unexpect;
-			DWORD dwUsrErrCode = 0;
-			eErr = (*m_pCardIssuer)(EntityResource::getLink().upgradeLink())->WriteTrack(req, ans, 20000, dwUsrErrCode);
-			if (eErr != Error_Succeed)
-			{
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("WriteTrack failed.%d", eErr);
-				ctx->Answer(eErr, dwUsrErrCode);
-			}
-			else
-			{
-				ctx->Ans.result = ans.result;
-				ctx->Ans.reserved1 = ans.reserved1;
-				ctx->Ans.reserved2 = ans.reserved2;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("Write tracks ok.");
-				ctx->Answer(Error_Succeed);
-			}
-		}
-		else {
+		if (IsCardIssuerStore()) {
 			CardIssuerStoreService_WriteTrack_Req req;
 			CardIssuerStoreService_WriteTrack_Ans ans;
 			req.co = ctx->Req.co;
@@ -2183,31 +2148,7 @@ int CCardReadAdapterFSM::SAMICCommand(SpReqAnsContext<CardReadAdapterService_SAM
 {
 	if (IsTheEntity(ctx->Req.module, Module_CardIssuer) && IsCardIssuerSessionOK())
 	{
-		if (!IsCardIssuerStore()) {
-			ErrorCodeEnum eErr = Error_Unexpect;
-			CardIssuerStandService_SAMICCommand_Req req;
-			CardIssuerStandService_SAMICCommand_Ans ans;
-			req.cmdType = ctx->Req.cmdType;
-			req.param1.Copy(ctx->Req.param1);
-			req.param2.Copy(ctx->Req.param2);
-			req.reserved1.Copy(ctx->Req.reserved1);
-			req.reserved2.Copy(ctx->Req.reserved2);
-			eErr = (*m_pCardIssuer)(EntityResource::getLink().upgradeLink())->SAMICCommand(req, ans, 50000);
-			if (eErr == Error_Succeed)
-			{
-				ctx->Ans.ret1.Copy(ans.ret1);
-				ctx->Ans.ret2.Copy(ans.ret2);
-				ctx->Ans.reserved1.Copy(ans.reserved1);
-				ctx->Ans.reserved2.Copy(ans.reserved2);
-			}
-			else {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("SAMICCommand, CardIssuerStand SAMICCommand failed return:%d", eErr);
-
-			}
-			ctx->Answer(eErr);
-			return 0;
-		}
-		else {
+		if (IsCardIssuerStore()){
 			ErrorCodeEnum eErr = Error_Unexpect;
 			CardIssuerStoreService_SAMICCommand_Req req;
 			CardIssuerStoreService_SAMICCommand_Ans ans;
@@ -2286,7 +2227,7 @@ int CCardReadAdapterFSM::PreOnlineOnStore(SpReqAnsContext<CardReadAdapterService
 	ErrorCodeEnum eErr = Error_Unexpect;
 	CSimpleStringA errMsg(true);
 
-	m_ullCrossStart = GetTickCountRVC();
+	m_ullCrossStart = RVCGetTickCount();
 
 	if (m_pHBClient != NULL)
 	{
@@ -2322,7 +2263,7 @@ int CCardReadAdapterFSM::NotifyPreonline(SpReqAnsContext<CardReadAdapterService_
 {
 	LOG_FUNCTION();
 
-	UINT64 crossEnd = GetTickCountRVC();
+	UINT64 crossEnd = RVCGetTickCount();
 	//? ? ? 为什么是110s,重试?从生产实际来看,在25s到40s之间,大部分在30s左右,需要和前端(65s)一致,改成60s oilyang@20221019
 	//in 110 second 
 	if (m_crossCtx != NULL)
@@ -2522,38 +2463,7 @@ void CCardReadAdapterFSM::CrossTermInvokeInfo(SpOnewayCallContext<CardReadAdapte
 	LOG_FUNCTION();
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("entity sn:%x,type:%d,errcode:%x", ctx->Info.nEntityID, ctx->Info.type, ctx->Info.result);
 }
-int CCardReadAdapterFSM::LocalCallHeartBeat(int method, CBlob &bbSend,bool bTwoWay)
-{
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("method id(type):%d", method);
-	HeartBeatService_ClientBase* pClient = new HeartBeatService_ClientBase(GetEntityBase());
-	if (pClient == NULL)
-	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("create HeartBeat client failed.GetLastError:%d", GetLastError());
-		return -1;
-	}
-	ErrorCodeEnum eErr = Error_Unexpect;
-	eErr = pClient->Connect();
-	if (eErr != Error_Succeed)
-	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("client connect to HeartBeat failed:%x", eErr);
-		return -1;
-	}
-	HeartBeatService_CrossTermCall_Req req;
-	HeartBeatService_CrossTermCall_Ans ans;
-	req.nEntityID = 0x21b;
-	req.isTwoWay = bTwoWay;
-	req.fromTerminalNo = m_terminalNo;
-	GetAttachedTerminal(req.toTerminalNo);
-	//req.toTerminalNo = "7717715004";
-	req.param1 = "";
-	req.param2 = "";
-	req.paramX = bbSend;
-	req.type = method;
-	eErr = (*pClient)(EntityResource::getLink().upgradeLink())->CrossTermCall(req, ans, 20000);
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CrossTermCall to HeartBeat from %s to %s, result:%x",
-			req.fromTerminalNo.GetData(), req.toTerminalNo.GetData(), eErr);
-	return 0;
-}
+
 bool CCardReadAdapterFSM::GetAttachedTerminal(CSimpleStringA &csTerm)
 {
 	return (Error_Succeed == GetEntityBase()->GetFunction()->GetSysVar("AttachedTerminal", csTerm));
@@ -2709,7 +2619,7 @@ void CCardReadAdapterFSM::WaitCardActive()
 	{
 		if (m_bCardActiveNotify)
 			break;
-		UINT64 crossEnd = GetTickCountRVC();
+		UINT64 crossEnd = RVCGetTickCount();
 		if ((crossEnd - m_ullCrossStart) < 62 * 1000)
 			Sleep(1000);
 		else {

+ 1 - 1
Module/mod_CardReadAdapter/CardReadAdapterFSM.h

@@ -808,7 +808,7 @@ public:
 	void SelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext);
 	void SetReadCtx(SpReqAnsContext<CardReadAdapterService_Read_Req, CardReadAdapterService_Read_Ans>::Pointer ctx) { m_readCtx = ctx; }
 
-	int LocalCallHeartBeat(int method, CBlob &bbSend, bool bTwoWay=false);
+	
 	bool GetAttachedTerminal(CSimpleStringA &csTerm);
 	int CrossTermCall(SpReqAnsContext<CardReadAdapterService_CrossTermCall_Req, CardReadAdapterService_CrossTermCall_Ans>::Pointer ctx);
 	void CrossTermInvokeInfo(SpOnewayCallContext<CardReadAdapterService_CrossTermInvokeInfo_Info>::Pointer ctx);

+ 56 - 63
Module/mod_ContactlessCard/ContactlessFSM.cpp

@@ -9,8 +9,11 @@
 #include "publicFunExport.h"
 #include "CommEntityUtil.hpp"
 #ifdef RVC_OS_WIN
+#define CMBPRINT_LIBRARY_NAME "CMBPrint.dll"
 #else
 #include <dlfcn.h>
+#include <winpr/crt.h>
+#define CMBPRINT_LIBRARY_NAME "libCMBPrint.so"
 #endif //RVC_OS_WIN
 
 
@@ -1197,10 +1200,6 @@ int CContactlessCardFSM::PreOnline(SpReqAnsContext<ContactlessCardService_PreOnl
 		}
 		return 0;
 	}
-	//if (m_cardType == CI_CARDTYPE_IC)
-	//{
-	//	ProcessRestrict();
-	//	CardholderVerify();
 	m_pCardProcess->TermRiskManage();
 	CSimpleStringA taaResult;
 	BYTE bt9f27 = 0;
@@ -1240,12 +1239,7 @@ int CContactlessCardFSM::PreOnline(SpReqAnsContext<ContactlessCardService_PreOnl
 
 	char arqcLen[8];
 	ZeroMemory(arqcLen,sizeof(arqcLen));
-	//TODO: CrossPlaform  [Gifur@2025729]
-#ifdef RVC_OS_WIN
-    itoa(lenRet, arqcLen, 10);
-#else
-    sprintf(arqcLen, "%d", lenRet);
-#endif // RVC_OS_WIN
+	_itoa(lenRet, arqcLen, 10);
 	ICData appExpiryDate(false,0x5f,0x24);
 	if (m_pCardProcess->FindTagValue(TAG_VECTOR_IC,appExpiryDate,false,0) == -1)
 	{
@@ -1365,11 +1359,34 @@ int CContactlessCardFSM::PreOnline(SpReqAnsContext<ContactlessCardService_PreOnl
 
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("data to host(less)[%s],baseICData length:%d", txtresult.c_str(), baseICData.length());
 
+	if (pCID != NULL)
+	{
+		delete[] pCID;
+		pCID = NULL;
+	}
+
 	if (m_pDataToARQC != NULL)
 	{
-		delete []m_pDataToARQC;
+		delete [] m_pDataToARQC;
 		m_pDataToARQC = NULL;
 	}
+	if (pICCardSerial != NULL)
+	{
+		delete[] pICCardSerial;
+		pICCardSerial = NULL;
+	}
+
+	if (pIssueBankLen != NULL)
+	{
+		delete[] pIssueBankLen;
+		pIssueBankLen = NULL;
+	}
+
+	if (pExpireDate != NULL) {
+		delete[] pExpireDate;
+		pExpireDate = NULL;
+	}
+
 	ctx->Answer(Error_Succeed);
 	return 0;
 }
@@ -1500,59 +1517,41 @@ int CContactlessCardFSM::QueryCardInfo(SpReqAnsContext<ContactlessCardService_Qu
 
 bool CContactlessCardFSM::LoadCMBPrint(CSimpleStringA csBinPath)
 {
-	if (cmdDecodeEx == NULL) {
-		CSimpleStringA csCMBPrint("");
+	if (cmdDecodeEx != NULL) return true;
 
-		//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-		csCMBPrint = "CMBPrint.dll";
-		csCMBPrint = csBinPath + SPLIT_SLASH_STR + csCMBPrint;
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("cmbpath %s", (const char*)csCMBPrint);
-		HMODULE hr = LoadLibraryA(csCMBPrint);
-		if (hr == NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J18")("Load CMBPrint failed(%d).", hr);
-			return false;
-		}
-		if ((cmdDecodeMag2 = (lpCMBdecodeMag2)GetProcAddress(hr, "CMBdecodeMag2")) == NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J18")("Get Mag2 address failed.");
-			return false;
-		}
-		if ((cmdDecodeEx = (lpCMBdecodeEx)GetProcAddress(hr, "CMBdecodeEx")) == NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J18")("Get Mag23Ex address failed.");
-			cmdDecodeMag2 = NULL;
-			return false;
+	bool result(false);
+	CSimpleStringA csCMBPrint(CMBPRINT_LIBRARY_NAME);
+	csCMBPrint = csBinPath + SPLIT_SLASH_STR + csCMBPrint;
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("cmbpath %s", (const char*)csCMBPrint);
+	do
+	{
+		if (!ExistsFileA(csCMBPrint)) {
+			DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setResultCode("RTA2J18")("Load CMBPrint %s failed: no exist", (const char*)csCMBPrint);
+			break;
 		}
-#else
-		csCMBPrint = "libCMBPrint.so";
-		csCMBPrint = csBinPath + "/" + csCMBPrint;
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("cmbpath %s", (const char*)csCMBPrint);
-		void* hr = NULL;
-		hr = dlopen(csCMBPrint, RTLD_LAZY);
-		if (hr == NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J18")("Load CMBPrint failed(%s).", dlerror());
-			return false;
+		toolkit_lib_t cmbPrintLib;
+		int res = toolkit_dlopen(csCMBPrint, &cmbPrintLib);
+		if (res != 0) {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J18")("toolkit_dlopen[%s] failed with error %s.", csCMBPrint.GetData(), toolkit_dlerror(&cmbPrintLib));
+			break;
 		}
-		//pfunc_unpack = (PF_unpack)dlsym(hLib, "_Z6unpackPcS_i");
-		if ((cmdDecodeMag2 = (lpCMBdecodeMag2)dlsym(hr, "CMBdecodeMag2")) == NULL)
+		if ((res = toolkit_dlsym(&cmbPrintLib, "CMBdecodeMag2", (void**)&cmdDecodeMag2)) != 0)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J18")("Get Mag2 address failed.");
-			return false;
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J18")("Get 'CMBdecodeMag2' Func address failed with error: %s", toolkit_dlerror(&cmbPrintLib));
+			break;
 		}
-		if ((cmdDecodeEx = (lpCMBdecodeEx)dlsym(hr, "CMBdecodeEx")) == NULL)
+		if ((res = toolkit_dlsym(&cmbPrintLib, "CMBdecodeEx", (void**)&cmdDecodeEx)) != 0)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J18")("Get Mag23Ex address failed.");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J18")("Get 'CMBdecodeEx' Func address failed with error: %s", toolkit_dlerror(&cmbPrintLib));
 			cmdDecodeMag2 = NULL;
-			return false;
+			break;
 		}
-#endif
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Load %s succ.", (const char*)csCMBPrint);
-	}
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Load %s suc.", (const char*)csCMBPrint);
+		result = true;
 
-	return true;
+	} while (false);
+
+	return result;
 }
 
 void CContactlessCardFSM::GetCardProcessLastErr(ErrorCodeEnum& eErrCode, CSimpleStringA& ApiName, CSimpleStringA& alarmMsg, CSimpleStringA& csErrMsgWithReturnCode)
@@ -1954,14 +1953,7 @@ int CContactlessCardFSM::PreOnlineJS(SpReqAnsContext<ContactlessCardService_Read
 	}
 	char arqcLen[8];
 	ZeroMemory(arqcLen, sizeof(arqcLen));
-	//TODO: CrossPlaform  [Gifur@2025729]
-#ifdef RVC_OS_WIN
-	itoa(lenRet, arqcLen, 10);
-#else
-	sprintf(arqcLen, "%d", lenRet);
-#endif // RVC_OS_WIN
-
-	
+	_itoa(lenRet, arqcLen, 10);
 
 	ICData track2(false, 0x57, 0x00), ICCardSerial(false, 0x5f, 0x34), appExpiryDate(false, 0x5f, 0x24);
 	string t2ICAccount(""), t2ICCardSerial(""), t2ICCVC(""), t2ICTrack2(""), cardType("0"),t2ICExpireDate("");
@@ -2121,6 +2113,7 @@ int CContactlessCardFSM::PreOnlineJS(SpReqAnsContext<ContactlessCardService_Read
 
 	if (pCID != NULL)
 		delete[]pCID;
+
 	if (pIssueBankLen != NULL)
 		delete[]pIssueBankLen;
 

+ 3 - 4
Module/mod_ContactlessCard/mod_ContactlessCard.h

@@ -80,7 +80,6 @@ public:
 		LOG_FUNCTION();
 		if(!m_fsm.GetDevInitFlag()){
 			ctx->Answer(Error_DevNotAvailable, ContactlessCard_UserErrorCode_Read_OpenFailed);
-			LogWarn(Severity_Middle, Error_DevNotAvailable, ContactlessCard_UserErrorCode_Read_OpenFailed, "ReadCard but DevOpen failed.");
 		}
 		else{
 			m_fsm.SetExitFlag(false);
@@ -94,7 +93,7 @@ public:
 	{
 		LOG_FUNCTION();
 		if(!m_fsm.GetDevInitFlag()){
-			LogWarn(Severity_Middle, Error_DevNotAvailable, ContactlessCard_UserErrorCode_Cancel_OpenFailed, "CancelInsert but DevOpen failed.");
+
 		}else{
 			FSMEvent *evt = new FSMEvent(USER_EVT_ACCEPT_CANCEL);
 			m_fsm.PostEventFIFO(evt);
@@ -133,7 +132,7 @@ public:
 	{
 		LOG_FUNCTION();
 		if(!m_fsm.GetDevInitFlag()){
-			LogWarn(Severity_Middle, Error_DevNotAvailable, ContactlessCard_UserErrorCode_Exit_OpenFailed, "Exit but DevOpen failed.");
+
 		}else{
 			FSMEvent *evt = new FSMEvent(USER_EVT_EXIT);
 			m_fsm.PostEventFIFO(evt);
@@ -179,7 +178,7 @@ public:
 	{
 		LOG_FUNCTION();
 		if (!m_fsm.GetDevInitFlag()) {
-			LogWarn(Severity_Middle, Error_DevNotAvailable, ContactlessCard_UserErrorCode_DevOpen_Failed, "CancelInsert but DevOpen failed.");
+			
 		}
 		else {
 			FSMEvent* evt = new FSMEvent(USER_EVT_JS_READ_CANCEL);

+ 0 - 43
Module/mod_CustMngrAuth/CustMngrAuthFSM.cpp

@@ -792,53 +792,12 @@ void CCustMngrAuthFSM::DeleteBmp(int type)
 	}
 }
 
-//TODO: CrossPlaform  [Gifur@2025728]
 ErrorCodeEnum CCustMngrAuthFSM::DeleteFileIfExisted(const char* fileName)
 {
-#ifdef RVC_OS_WIN
-	if (strlen(fileName) == 0 || strchr(fileName, (int)'*') != NULL)
-	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Invalid or empty filename(%s)", fileName);
-		return Error_Param;
-	}
-	CSimpleStringA strPath, strObjPath;
-	ErrorCodeEnum errCode = m_pEntity->GetFunction()->GetPath("Dep", strPath);
-	strObjPath = strPath + "\\" + fileName;
-
-	UpdateAndWarnFileFindInDepBak(strObjPath, fileName, LOG_ERR_CUSTMNGRAUTH_FindFile_in_DepBak);
-	//TODO: CrossPlaform  [Gifur@2025728]
-	WIN32_FIND_DATA findData;
-	if (FindFirstFileA((LPCTSTR)strObjPath, &findData) != INVALID_HANDLE_VALUE)
-	{
-		if (DeleteFileA((LPCTSTR)strObjPath) != 0)
-		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("DeleteFile(%s) success.", strObjPath.GetData());
-			return Error_Succeed;
-		}
-		else {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("DeleteFile(%s) failed LastError(%s).", strObjPath.GetData(), GetLastError());
-			return Error_Unexpect;
-		}
-	}
-	if (GetLastError() == ERROR_FILE_NOT_FOUND)
-	{
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("file %s not exist.", fileName);
-		return Error_Succeed;
-	}
-	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("DeleteFle(%s) Unexpect GetLastError(%s).", strObjPath.GetData(), GetLastError());
-	return Error_Unexpect;
-#else
-	if (strlen(fileName) == 0 || strchr(fileName, (int)'*') != NULL)
-	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Invalid or empty filename(%s)", fileName);
-		return Error_Param;
-	}
 	CSimpleStringA strPath, strObjPath;
 	ErrorCodeEnum errCode = m_pEntity->GetFunction()->GetPath("Dep", strPath);
 	strObjPath = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "%s", strPath.GetData(), fileName);
-
 	UpdateAndWarnFileFindInDepBak(strObjPath, fileName, LOG_ERR_CUSTMNGRAUTH_FindFile_in_DepBak);
-
 	if (ExistsFileA(strObjPath))
 	{
 		if (RemoveFileA(strObjPath))
@@ -852,10 +811,8 @@ ErrorCodeEnum CCustMngrAuthFSM::DeleteFileIfExisted(const char* fileName)
 		}
 	}
 	else {
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("file %s not exist.", fileName);
 		return Error_Succeed;
 	}
-#endif	
 }
 
 void CCustMngrAuthFSM::UpdateAndWarnFileFindInDepBak(CSimpleStringA& newDepPath, const char* filename, DWORD userCode)

+ 24 - 102
Module/mod_FingerPrint/FingerPrintFSM.cpp

@@ -856,61 +856,30 @@ int CFingerPrintFSM::GetFingerPrint(SpReqAnsContext<FingerPrintService_GetFinger
 
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::Image2Feature").setCostTime(l_endTime - l_beginTime)("GetFingerPrint::Image2Feature succ ,fileName:%s, lpbLength:%d", fileName.GetData(), lpbLength);
 			Sleep(200);//save image may be delayed some time, not must happen
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-
-			//TODO: CrossPlaform  [Gifur@2025728]
-			WIN32_FIND_DATA findData;
-			if (FindFirstFileA((LPCTSTR)strPath, &findData) != INVALID_HANDLE_VALUE 
-				&& lpbFeature != NULL && lpbLength == STANDARD_FEATURE_LEN)
-			{
-				ctx->Ans.imageName = fileName;
-				lpbFeature[STANDARD_FEATURE_LEN] = '\0';
-				ctx->Ans.feature = (LPCTSTR)lpbFeature;
-				bGetFingerPrintSuc = true;
-				//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Image2Feature success.");
-				break;
-			}
-			else if(FindFirstFileA((LPCTSTR)strPath, &findData) == INVALID_HANDLE_VALUE)
-			{
-				//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, Cannot find the fingerprint image %s", fileName.GetData());
-				bNotFindImage = true;
-				break;
-			}else if(lpbLength != STANDARD_FEATURE_LEN){
-				//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, vendor returned feature length is not right.");
-				bLenIsNotRight = true;
-				break;
-			}else{
-				//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, Fingerprint feature is NULL.");
-				bFeatureIsNull = true;
-				break;
-			}
-#else
-			if (ExistsFile(strPath)
-				&& lpbFeature != NULL && lpbLength == STANDARD_FEATURE_LEN)
-			{
-				ctx->Ans.imageName = fileName;
-				lpbFeature[STANDARD_FEATURE_LEN] = '\0';
-				ctx->Ans.feature = (LPCTSTR)lpbFeature;
-				bGetFingerPrintSuc = true;
-				//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Image2Feature success.");
-				break;
-			}
-			else if (!ExistsFile(strPath))
-			{
+			if (ExistsFileA(strPath)) {
+				if (lpbFeature != NULL && lpbLength == STANDARD_FEATURE_LEN) {
+					ctx->Ans.imageName = fileName;
+					lpbFeature[STANDARD_FEATURE_LEN] = '\0';
+					ctx->Ans.feature = (LPCTSTR)lpbFeature;
+					bGetFingerPrintSuc = true;
+					//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Image2Feature success.");
+					break;
+				}
+				else if (lpbLength != STANDARD_FEATURE_LEN) {
+					//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, vendor returned feature length is not right.");
+					bLenIsNotRight = true;
+					break;
+				}
+				else {
+					//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, Fingerprint feature is NULL.");
+					bFeatureIsNull = true;
+					break;
+				}
+			} else {
 				//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, Cannot find the fingerprint image %s", fileName.GetData());
 				bNotFindImage = true;
 				break;
-			}else if(lpbLength != STANDARD_FEATURE_LEN){
-				//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, vendor returned feature length is not right.");
-				bLenIsNotRight = true;
-				break;
-			}else{
-				//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, Fingerprint feature is NULL.");
-				bFeatureIsNull = true;
-				break;
 			}
-#endif
 		}
 		dwEnd = SP::Module::Comm::RVCGetTickCount();
 		elapsed = dwEnd - dwStart;
@@ -1012,26 +981,12 @@ int CFingerPrintFSM::GenerateTemplate(SpReqAnsContext<FingerPrintService_Generat
 
 		imagePaths.push_back(tempStr);
 		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("imageName:%s", imagePaths[i].GetData());
-
-		//TODO: CrossPlaform  [Gifur@2025728]
-#ifdef RVC_OS_WIN		
-		WIN32_FIND_DATA findData;
-		if (FindFirstFileA((LPCTSTR)imagePaths[i], &findData) == INVALID_HANDLE_VALUE)
-		{
+		if (!ExistsFileA(imagePaths[i])) {
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Generate_Template_ID).setResultCode("RTA242C")("<GenerateTemplate>, image <%s> not exist.", imagePaths[i].GetData());
 			DeleteBmp(BmpImage);
 			ctx->Answer(Error_NoTarget);
 			return 0;
 		}
-#else
-		if (!ExistsFile(imagePaths[i]))
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Generate_Template_ID).setResultCode("RTA242C")("<GenerateTemplate>, image <%s> not exist.", imagePaths[i].GetData());
-			DeleteBmp(BmpImage);
-			ctx->Answer(Error_NoTarget);
-			return 0;
-		}
-#endif		
 	}
 
 	ULLINT l_beginTime, l_endTime;
@@ -1084,18 +1039,10 @@ int CFingerPrintFSM::GenerateTemplate(SpReqAnsContext<FingerPrintService_Generat
 
 ErrorCodeEnum CFingerPrintFSM::GetDevCatInfo(DevCategoryInfo& devInfo)
 {
-	//TODO: CrossPlaform  [Gifur@2025730]
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("DevCatgoryInfo len:%d, %d, %d", strlen(m_devCatInfo.szModel), strlen(m_devCatInfo.szType), strlen(m_devCatInfo.szVendor));
-#ifdef RVC_OS_WIN
-	strncpy_s(devInfo.szModel, m_devCatInfo.szModel, (MAX_DEV_MODEL_LEN > strlen(m_devCatInfo.szModel)) ? strlen(m_devCatInfo.szModel) : MAX_DEV_MODEL_LEN-1);
-	strncpy_s(devInfo.szType, m_devCatInfo.szType, (MAX_DEV_TYPE_LEN > strlen(m_devCatInfo.szType)) ? strlen(m_devCatInfo.szType) : MAX_DEV_TYPE_LEN-1);
-	strncpy_s(devInfo.szVendor, m_devCatInfo.szVendor, (MAX_DEV_VENDOR_LEN > strlen(m_devCatInfo.szVendor)) ? strlen(m_devCatInfo.szVendor) : MAX_DEV_VENDOR_LEN-1);
-#else
-	strncpy(devInfo.szModel, m_devCatInfo.szModel, (MAX_DEV_MODEL_LEN > strlen(m_devCatInfo.szModel)) ? strlen(m_devCatInfo.szModel) : MAX_DEV_MODEL_LEN-1);
-	strncpy(devInfo.szType, m_devCatInfo.szType, (MAX_DEV_TYPE_LEN > strlen(m_devCatInfo.szType)) ? strlen(m_devCatInfo.szType) : MAX_DEV_TYPE_LEN-1);
-	strncpy(devInfo.szVendor, m_devCatInfo.szVendor, (MAX_DEV_VENDOR_LEN > strlen(m_devCatInfo.szVendor)) ? strlen(m_devCatInfo.szVendor) : MAX_DEV_VENDOR_LEN-1);
-#endif // RVC_OS_WIN
-
+	strncpy(devInfo.szModel, m_devCatInfo.szModel, (MAX_DEV_MODEL_LEN > strlen(m_devCatInfo.szModel)) ? strlen(m_devCatInfo.szModel) : MAX_DEV_MODEL_LEN - 1);
+	strncpy(devInfo.szType, m_devCatInfo.szType, (MAX_DEV_TYPE_LEN > strlen(m_devCatInfo.szType)) ? strlen(m_devCatInfo.szType) : MAX_DEV_TYPE_LEN - 1);
+	strncpy(devInfo.szVendor, m_devCatInfo.szVendor, (MAX_DEV_VENDOR_LEN > strlen(m_devCatInfo.szVendor)) ? strlen(m_devCatInfo.szVendor) : MAX_DEV_VENDOR_LEN - 1);
 	return Error_Succeed;
 }
 
@@ -1234,30 +1181,6 @@ ErrorCodeEnum CFingerPrintFSM::DeleteFileIfExisted(const char* fileName)
 	strObjPath = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "%s", strPath.GetData(), fileName);
 
 	UpdateAndWarnFileFindInDepBak(strObjPath, fileName, FingerPrint_UserErrorCode_FindFile_in_DepBak);
-
-	//TODO: CrossPlaform  [Gifur@2025728]
-#ifdef RVC_OS_WIN
-	WIN32_FIND_DATA findData;
-	if (FindFirstFileA((LPCTSTR)strObjPath, &findData) != INVALID_HANDLE_VALUE)
-	{
-		if (DeleteFileA((LPCTSTR)strObjPath) != 0)
-		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("DeleteFile(%s) success.", strObjPath.GetData());
-			return Error_Succeed;
-		}
-		else
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA242G")("DeleteFile(%s) failed LastError(%s).", strObjPath.GetData(), GetLastError());
-			return Error_Unexpect;
-		}
-	}
-	if (GetLastError() == ERROR_FILE_NOT_FOUND)
-	{
-		return Error_Succeed;
-	}
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("DeleteFle(%s) Unexpect GetLastError(%s).", strObjPath.GetData(), GetLastError());
-	return Error_Unexpect;
-#else
 	if (ExistsFileA(strObjPath))
 	{
 		if (RemoveFileA(strObjPath))
@@ -1275,7 +1198,6 @@ ErrorCodeEnum CFingerPrintFSM::DeleteFileIfExisted(const char* fileName)
 		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("file %s not exist.", fileName);
 		return Error_Succeed;
 	}
-#endif
 }
 
 #pragma endregion

+ 3 - 4
Module/mod_FingerPrint/mod_FingerPrint.h

@@ -111,7 +111,7 @@ public:
 	{
 		if(!m_fsm.GetDevInitFlag()){
 			ctx->Answer(Error_DevNotAvailable, FingerPrint_UserErrorCode_DEVOPENFAILED_GETFINGERPRINT);
-			LogWarn(Severity_Middle, Error_DevNotAvailable, FingerPrint_UserErrorCode_DEVOPENFAILED_GETFINGERPRINT, "GetFingerPrint but DevOpen failed.");
+			
 		}
 		else{
 			GetFingerEvent* e = new GetFingerEvent();
@@ -194,7 +194,7 @@ public:
 	{
 		if (!m_fsm.GetDevInitFlag()) {
 			ctx->Answer(Error_DevNotAvailable, FingerPrint_UserErrorCode_DEVOPENFAILED_GETFINGERPRINT);
-			LogWarn(Severity_Middle, Error_DevNotAvailable, FingerPrint_UserErrorCode_DEVOPENFAILED_GETFINGERPRINT, "GetFingerPrintJS but DevOpen failed.");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetFingerPrintJS but DevOpen failed.");
 		}
 		else if (_stricmp(m_fsm.GetCurrStateName(), "Normal") != 0) {
 			//不符合请求调用,告知具体错误流程
@@ -214,7 +214,7 @@ public:
 	{
 		if (!m_fsm.GetDevInitFlag()) {
 			ctx->Answer(Error_DevNotAvailable, FingerPrint_UserErrorCode_DEVOPENFAILED_GenerateTemplate);
-			LogWarn(Severity_Middle, Error_DevNotAvailable, FingerPrint_UserErrorCode_DEVOPENFAILED_GenerateTemplate, "GenerateTemplateJS but DevOpen failed.");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GenerateTemplateJS but DevOpen failed.");
 		}
 		else if (_stricmp(m_fsm.GetCurrStateName(), "Normal") != 0) {
 			//不符合请求调用,告知具体错误流程
@@ -234,7 +234,6 @@ public:
 	{
 		if (!m_fsm.GetDevInitFlag()) {
 			ctx->Answer(Error_DevNotAvailable, FingerPrint_UserErrorCode_DEVOPENFAILED_CANCELSCAN_FAIL);
-			LogWarn(Severity_Middle, Error_DevNotAvailable, FingerPrint_UserErrorCode_DEVOPENFAILED_CANCELSCAN_FAIL, "CancelScanJS but DevOpen failed.");
 		}
 		else if (_stricmp(m_fsm.GetCurrStateName(), "Normal") != 0 && _stricmp(m_fsm.GetCurrStateName(), "Scan") != 0) {
 			//不符合请求调用,告知具体错误流程

+ 42 - 14
Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp

@@ -768,9 +768,9 @@ void ResourceWatcherFSM::AutoDeleteFiles()
     pFunc->OpenConfig(Config_CenterSetting, spConfig);
 
     //判断是否升级完毕,未完成升级不进行删除任务
-    CSimpleStringA strRunInfo, strStartTime;
-    if (m_pEntity->GetFunction()->GetPath("RunInfo", strRunInfo) == Error_Succeed) {
-        strStartTime = strRunInfo + SPLIT_SLASH_STR + "runcfg" + SPLIT_SLASH_STR + "starttime.dat";
+    CSimpleStringA strRunCfg, strStartTime;
+    if (m_pEntity->GetFunction()->GetPath("RunCfg", strRunCfg) == Error_Succeed) {
+        strStartTime = strRunCfg + SPLIT_SLASH_STR + "starttime.dat";
         if (!ExistsFileA(strStartTime.GetData())) {
             DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("upgrade prpcess done, try to delete version files.");//完成升级过程,通过
         }
@@ -4045,17 +4045,45 @@ void ResourceWatcherFSM::AlarmSystemBasicInfo()
 
 BOOL ResourceWatcherFSM::DetectIsFirstRunAtBoot()
 {
-    const BOOL bSet = SP::Module::Comm::IsFirsRunAppAfterSystemBoot(GetEntityBase(), LOG_RESOURCEWATCHER_FIRST_RUN_AFTER_BOOT);
-    if (bSet) {
-		ErrorCodeEnum eRet = GetEntityBase()->GetFunction()->SetSysVar(SYSVAR_FRAMEWORK_FIRST_BOOT, SYSVAR_FRAMEWORK_FIRST_BOOT_YES);
-		if (eRet != Error_Succeed) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Set %s with %s failed: %d", SYSVAR_FRAMEWORK_FIRST_BOOT, SYSVAR_FRAMEWORK_FIRST_BOOT_YES, eRet);
-		}
-    }
-    else {
-		GetEntityBase()->GetFunction()->SetSysVar(SYSVAR_FRAMEWORK_FIRST_BOOT, SYSVAR_FRAMEWORK_FIRST_BOOT_NO);
-    }
-    return bSet;
+	CSystemRunInfo runInfo = { 0 };
+	ErrorCodeEnum ec = GetEntityBase()->GetFunction()->GetSystemRunInfo(runInfo);
+	if (ec == Error_Succeed) {
+		CBootInfo bootInfo = { 0 };
+		CSmallDateTime dateTime;
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("systemRunInfo time: %s", (LPCTSTR)runInfo.tmStart.ToTimeString());
+		ec = GetEntityBase()->GetFunction()->GetRebootInfo(/*runInfo.tmStart*/dateTime, bootInfo);
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("bootInfor time: %s", (LPCTSTR)bootInfo.tmStart.ToTimeString());
+        tk_systime_t sy_t;
+		SYSTEMTIME systemTime;
+        if (0 == osutil_system_boot_time(&sy_t)) {
+			systemTime.wYear = sy_t.year;
+			systemTime.wMonth = sy_t.month;
+			systemTime.wDayOfWeek = sy_t.dayofweek;
+			systemTime.wDay = sy_t.day;
+			systemTime.wHour = sy_t.hour;
+			systemTime.wMinute = sy_t.minute;
+			systemTime.wSecond = sy_t.second;
+			systemTime.wMilliseconds = sy_t.milli_seconds;
+			CSmallDateTime systemBootTime;
+			systemBootTime.FromSystemTime(systemTime);
+
+			if (systemBootTime > bootInfo.tmStart) {
+				std::map<std::string, std::string> srcData;
+				CSimpleStringA strData = CSimpleStringA::Format("{\"AppLastStartTime\":\"%s\",\"AppStartTime\":\"%s\",\"OSStartTime\":\"%s\"}"
+					, (LPCTSTR)bootInfo.tmStart.ToTimeString(), (LPCTSTR)runInfo.tmStart.ToTimeString(), systemBootTime.ToTimeString().GetData());
+				LogWarn(Severity_Low, Error_Debug, LOG_RESOURCEWATCHER_FIRST_RUN_AFTER_BOOT, strData.GetData());
+
+				ErrorCodeEnum eRet = GetEntityBase()->GetFunction()->SetSysVar(SYSVAR_FRAMEWORK_FIRST_BOOT, SYSVAR_FRAMEWORK_FIRST_BOOT_YES);
+				if (eRet != Error_Succeed) {
+					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Set %s with %s failed: %d", SYSVAR_FRAMEWORK_FIRST_BOOT, SYSVAR_FRAMEWORK_FIRST_BOOT_YES, eRet);
+				}
+
+                return TRUE;
+			}
+        }
+	}
+    GetEntityBase()->GetFunction()->SetSysVar(SYSVAR_FRAMEWORK_FIRST_BOOT, SYSVAR_FRAMEWORK_FIRST_BOOT_NO);
+    return FALSE;
 }
 
 void ResourceWatcherFSM::DetectSoftwareInstallStatus()

+ 2 - 57
Module/mod_ResourceWatcher/mod_ResourceWatcher.cpp

@@ -134,18 +134,6 @@ struct SogouRunVersionInfo
         }
         return installVer;
     }
-    //TODO: CrossPlaform  [Gifur@2025730]
-    //true: 普通调用版本输入法,false: SDK版本输入法
-    bool IsTSFVersion()
-    {
-#if defined(_MSC_VER)
-        CVersion standardVer = CVersion(2, 6, 1, 1967); //对比版本为2.6.1.1967
-#else
-        CVersion standardVer = CVersion(2, 6, 4, 355); //对比版本为2.4.6.355
-#endif //_MSC_VER
-
-        return (ConvertVersion() >= standardVer);
-    }
 };
 
 struct SogouInstallStateInfo
@@ -403,7 +391,7 @@ ErrorCodeEnum SetFileExecutePriviledge(LPCTSTR lpcszDirOrFilePath)
 #endif //RVC_OS_WIN
     return result;
 }
-//TODO: CrossPlaform  [Gifur@2025730]
+/** 特殊逻辑需要这样返回?  [Gifur@2025821]*/
 static int IsFileExists(const char* pfilename)
 {
     int iRet = -1;
@@ -800,46 +788,6 @@ void ResourceWatcherEntity::ChcekDiskFileSpace()
     }
 }
 
-//TODO: CrossPlaform 看是否转移到框架toolkit,太常用了  [Gifur@2025730]
-BOOL ResourceWatcherEntity::KillProcessFromName(const CSimpleStringA& strProcessName)
-{
-
-#if defined(RVC_OS_WIN)
-    //创建进程快照(TH32CS_SNAPPROCESS表示创建所有进程的快照)    
-    HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
-    PROCESSENTRY32 pe;
-    pe.dwSize = sizeof(PROCESSENTRY32);
-    if (!Process32First(hSnapShot, &pe)) {
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("获取进程快照失败。");
-        return FALSE;
-    }
-
-    while (Process32Next(hSnapShot, &pe)) {
-        //pe.szExeFile获取当前进程的可执行文件名称    
-        CSimpleStringA scTmp = pe.szExeFile;
-        if (!scTmp.Compare(strProcessName)) {
-            DWORD dwProcessID = pe.th32ProcessID;
-            HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);
-            BOOL killed = ::TerminateProcess(hProcess, 0);
-            CloseHandle(hProcess);
-
-            if (killed) {
-                DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("SUCCESS! Kill process [%s], pid [%d].", strProcessName.GetData(), dwProcessID);
-            }
-            else {
-                DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("FAILED! Kill process [%s], pid [%d].", strProcessName.GetData(), dwProcessID);
-            }
-            return killed;
-        }
-    }
-    return TRUE;
-#else 
-    DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("It's not supported %s", __FUNCTION__);
-    return FALSE;
-#endif //RVC_OS_WIN
-
-}
-
 #endif //RVC_OS_LINUX
 
 #if defined(RVC_OS_LINUX)
@@ -882,7 +830,7 @@ ErrorCodeEnum ResourceWatcherEntity::GetSogouPkgDirPath(CSimpleStringA& strPkgPa
 }
 #endif //RVC_OS_LINUX
 
-//TODO: CrossPlaform  [Gifur@2025730]
+//TODO: CrossPlaform  这段代码感觉像是拷贝的,待处理 [Gifur@2025730]
 ErrorCodeEnum ResourceWatcherEntity::RunShellScript(LPCTSTR cmdline)
 {
 #if defined(RVC_OS_WIN)
@@ -1613,9 +1561,6 @@ void ResourceWatcherEntity::InstallSogou(SpReqAnsContext<ResourceWatcherService_
                         ctx->Ans.path = info.program.strInstallDir;
                         ctx->Ans.reserverd1 = info.program.strVersion;
                         ctx->Ans.reserverd2 = info.state.GetInstallTime().ToTimeString();
-                        //ctx->Ans.reserverd3 = info.program.IsTSFVersion() ? 1 : 0;
-                        //ctx->Ans.reserverd4 = 0;
-
                         if (doTryRestart) {
                             tmpMsg = CSimpleStringA::Format(" 从[%s]安装搜狗输入法成功。", strInstallPkgPath.GetData());
                         }

+ 0 - 1
Module/mod_ResourceWatcher/mod_ResourceWatcher.h

@@ -281,7 +281,6 @@ private:
 	std::vector<std::string> GetUserNameList(bool bExcludeRoot = false);
 	ErrorCodeEnum RunShellScript(LPCTSTR cmdline);
 	ErrorCodeEnum DeleteUnzipDir();//清理临时解压包文件
-	BOOL KillProcessFromName(const CSimpleStringA& strProcessName);
 	bool is_str_utf8(const char* str);
 	/// <summary>
 	/// 通过集中配置检测指定进程是否存在

+ 10 - 90
Module/mod_SalesRecorder/mod_SalesRecorder.cpp

@@ -93,20 +93,10 @@ static void CStringSplit(char* str, char** result, const char* del)
 {
 	char* pdata = NULL;
 	char* p = NULL;
-	//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
 	p = strtok_s(str, del, &pdata);
-#else
-	p = strtok_r(str, del, &pdata);
-#endif // RVC_OS_WIN
-
 	while (p != NULL) {
 		*result++ = p;
-#ifdef RVC_OS_WIN
 		p = strtok_s(NULL, del, &pdata);
-#else
-		p = strtok_r(NULL, del, &pdata);
-#endif
 	}
 }
 
@@ -117,9 +107,9 @@ static bool rvcMoveFile(const char* strSrcFile, const char* strDstFile)
 	if (NULL == strSrcFile || NULL == strDstFile) {
 		return bRet;
 	}
-	//TODO: CrossPlaform  [Gifur@2025730]
+	//TODO: CrossPlaform WINPR是支持直接跨平台使用 MoveFileA [Gifur@2025730]
 #ifdef RVC_OS_WIN
-	bRet = MoveFile(strSrcFile, strDstFile);
+	bRet = MoveFileA(strSrcFile, strDstFile);
 #else
 	if (0 == rename(strSrcFile, strDstFile)) {
 		bRet = true;
@@ -128,26 +118,6 @@ static bool rvcMoveFile(const char* strSrcFile, const char* strDstFile)
 	return bRet;
 }
 
-//TODO: CrossPlaform  [Gifur@2025728]
-static bool RvcDeleteFile(const char* strSrcFile)
-{
-	bool bRet = false;
-	if (NULL == strSrcFile) {
-		return bRet;
-	}
-
-#ifdef RVC_OS_WIN
-	bRet = DeleteFile(strSrcFile);
-#else
-	if (0 == remove(strSrcFile)) {
-		bRet = true;
-	}
-#endif // RVC_OS_WIN
-
-	return bRet;
-}
-
-
 #ifdef RVC_OS_WIN
 // 寻找某目录下与通配符匹配的文件
 static bool FindMatchedFile(const char* pstrFindPath, const char* pstrFindFileName, uint32_t & uCountFile)
@@ -267,36 +237,6 @@ static CSimpleStringA DecryptString(const char* lpszEncrpyted)
 	return CSimpleStringA((LPCTSTR)csPlainTxt);
 }
 
-//TODO: CrossPlaform  [Gifur@2025730]
-static unsigned long GetFileSize(const char* pfilename)
-{
-#ifdef RVC_OS_WIN
-	unsigned long usize = 0;
-	if (NULL == pfilename) {
-		return usize;
-	}
-
-	FILE* pFile = fopen(pfilename, "rb");
-	if (pFile) {
-		fseek(pFile, 0, SEEK_END);
-		usize = ftell(pFile);
-		fclose(pFile);
-	}
-
-	return usize;
-#else
-	struct stat statbuf;
-	if (0 == stat(pfilename, &statbuf)) {
-		return statbuf.st_size;
-	}
-	else {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("errno info is %s.", strerror(errno));
-		return 0;
-	}
-#endif
-}
-
-
 static void rvcDbg(filecrypt_loglevel elevel, const char* fmt, ...)
 {
 	va_list arg;
@@ -824,15 +764,10 @@ void CSalesRecorderEntity::DeleteAllVideo( const char * pszVideoName)
 				{
 					fileName = CSimpleStringA::Format("%s%s_%d.%s", strPath.GetData(), strFindFileName.GetData(), i, RECORD_MP4_SUFFIX);
 
-					bRet = RvcDeleteFile(fileName.GetData());
+					bRet = RemoveFileA(fileName.GetData());
 					if(!bRet) {
 						bDeleteSucc = false;
-					#ifdef RVC_OS_WIN
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Error Code %lu while delete %s.", GetLastError(), fileName.GetData());
-					#else
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s(%d) while delete %s.", strerror(errno), errno, fileName.GetData());
-					#endif // RVC_OS_WIN
-						
+						DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Error Code %lu while delete %s.", GetLastError(), fileName.GetData());
 					}
 				}
 				if (!bDeleteSucc) {
@@ -866,15 +801,10 @@ ErrorCodeEnum CSalesRecorderEntity::DeleteVideo( const char *videofilename)
 				{
 					fileName = CSimpleStringA::Format("%s%s_%d.%s", strPath.GetData(), videofilename, i, RECORD_MP4_SUFFIX);
 
-					bRet = RvcDeleteFile(fileName.GetData());
+					bRet = RemoveFileA(fileName.GetData());
 					if(!bRet) {
 						bDeleteSucc = false;
-						//TODO: CrossPlaform  [Gifur@2025730]
-					#ifdef RVC_OS_WIN
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Error Code %lu while delete %s ", GetLastError(), fileName.GetData());
-					#else
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s(%d) while delete %s ", strerror(errno), errno, fileName.GetData());
-					#endif
+						DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Error Code %lu while delete %s ", GetLastError(), fileName.GetData());
 					}
 				}
 				if (!bDeleteSucc) {
@@ -942,7 +872,7 @@ ErrorCodeEnum CSalesRecorderEntity::SaveVideo( const char * videofilename)
 					{
 						sourFileName = CSimpleStringA::Format("%s%s_%d.%s", sourPath.GetData(), strFindFileName.GetData(), i, RECORD_MP4_SUFFIX);
 						destFileName = CSimpleStringA::Format("%s%s_%d.%s", destPath.GetData(), strFindFileName.GetData(), i, RECORD_MP4_SUFFIX);
-						unsigned long ufilesize = GetFileSize(sourFileName.GetData());
+						unsigned long ufilesize = ReadFileSize(sourFileName.GetData());
 						char strhash[MAX_PATH] = { 0 };
 						get_file_sm3digest(strhash, MAX_PATH, sourFileName.GetData());
 						DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s file size is %u byte,sm3 digest is %s.", sourFileName.GetData(), ufilesize, strhash);
@@ -1648,22 +1578,17 @@ int CSalesRecorderEntity::HandleEncryptVideoRecord(const char* videofilename)
 	if (0 != iresult) {
 		LogWarn(Severity_Middle, Error_Debug, LOG_EVT_SALESRECORD_ENCRYPT_FAILED, CSimpleStringA::Format("encryption file %s failed, delete out temp file %s!", videofilename, strOutFile).GetData());
 		if (ExistsFile(strOutFile)) {
-			if (!RvcDeleteFile(strOutFile)) {
+			if (!RemoveFileA(strOutFile)) {
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("DeleteFile file %s failed!", strOutFile);
 			}
 		}
 		return iRet;
 	}
 
-	bool bRet = RvcDeleteFile(videofilename);
+	bool bRet = RemoveFileA(videofilename);
 	if (!bRet) {
-		//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
 		LogWarn(Severity_Middle, Error_Debug, LOG_EVT_SALESRECORD_DELETE_FAILED, CSimpleStringA::Format("Error Code %lu while delete %s, delete out temp file[%s]!", GetLastError(), videofilename, strOutFile).GetData());
-#else
-		LogWarn(Severity_Middle, Error_Debug, LOG_EVT_SALESRECORD_DELETE_FAILED, CSimpleStringA::Format("%s(%d) while delete %s, delete out temp file[%s]!", strerror(errno), errno, videofilename, strOutFile).GetData());
-#endif // RVC_OS_WIN
-		if (!RvcDeleteFile(strOutFile)) {
+		if (!RemoveFileA(strOutFile)) {
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("DeleteFile file %s failed!", strOutFile);
 		}
 		return iRet;
@@ -1674,12 +1599,7 @@ int CSalesRecorderEntity::HandleEncryptVideoRecord(const char* videofilename)
 			iRet = 0;
 		}
 		else {
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
 			LogWarn(Severity_Middle, Error_Debug, LOG_EVT_SALESRECORD_RENAME_FAILED, CSimpleStringA::Format("Error Code %lu while rename %s.", GetLastError(), strOutFile).GetData());
-#else
-			LogWarn(Severity_Middle, Error_Debug, LOG_EVT_SALESRECORD_RENAME_FAILED, CSimpleStringA::Format("%s(%d) while rename %s.", strerror(errno), errno, strOutFile).GetData());
-#endif // RVC_OS_WIN	
 		}
 	}
 

+ 0 - 8
Module/mod_SalesRecorder/mod_SalesRecorder.h

@@ -34,18 +34,10 @@ namespace SalesRecorder {
 		char Reserved2[128];
 	} RecordSubTitle;
 
-	//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-	class CSalesRecorderEntity : public CEntityBase, public CHostApi, public ILogListener,public ISysVarListener, public ITimerListener
-	{
-	public:
-		CSalesRecorderEntity() : m_pRecorder(NULL), m_bStarted(false) { ZeroMemory(m_SalesVideoName, MAX_PATH); }
-#else
 	class CSalesRecorderEntity : public CEntityBase, public CHostApi, public ILogListener, public ISysVarListener, public ITimerListener
 	{
 	public:
 		CSalesRecorderEntity() : m_pRecorder(NULL), m_bStarted(false) { ZeroMemory(m_SalesVideoName, MAX_PATH); }
-#endif // RVC_OS_WIN
 
 		virtual ~CSalesRecorderEntity() { /*empty implementation*/ }
 

+ 0 - 1
Module/mod_ScannerSet/ScannerSetFSM.cpp

@@ -72,7 +72,6 @@ const char* EvtTypeToString(int nEvtType)
 		return "Unknown EventType";
 		break;
 	}
-	return "Unknown EventType";
 }
 
 static bool MapErrorCode2Level(ErrorCodeEnum ec)

+ 55 - 216
Module/mod_UpgradeMgr/UpgradeTaskFSM.cpp

@@ -1420,7 +1420,7 @@ namespace Task
 							delete[] content;
 							return 4;//下载失败,算hash失败
 						}
-						//不区分大小写比较文件hash
+						//TODO: CrossPlaform 不区分大小写比较文件hash /** 为什么有平台差异??  [Gifur@2025821]*/
 #ifdef RVC_OS_WIN
 						if(stricmp(strMD5Val.GetData(),resp.sm3.c_str())==0){
 #else
@@ -1431,12 +1431,7 @@ namespace Task
 								if(remove(dPackPath)==0){
 									DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("delete download old pack succ ", dPackPath);
 									if(rename(dPackPathTemp.GetData(),dPackPath)!=0){
-										//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-										errMsg = CSimpleStringA::Format("exist old file,remove temp file fail, error=%d",(int)GetLastError()).GetData();
-#else
-										errMsg = CSimpleStringA::Format("exist old file,remove temp file fail, error=%d", errno).GetData();
-#endif										
+										errMsg = CSimpleStringA::Format("exist old file,remove temp file fail, error=%d", (int)GetLastError()).GetData();
 										LogWarn(Severity_Middle, Error_Exception, ERR_TASK_DOWNLOAD_PACK_FAIL,errMsg.GetData());
 										delete[] content;
 										return 4;//下载失败,移动文件失败
@@ -1445,24 +1440,14 @@ namespace Task
 										return 1;//成功返回
 									}
 								}else{
-									//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-									errMsg = CSimpleStringA::Format("delete download old pack fail ,error:%d",(int)GetLastError()).GetData();
-#else
-									errMsg = CSimpleStringA::Format("delete download old pack fail ,error:%d", errno).GetData();
-#endif
+									errMsg = CSimpleStringA::Format("delete download old pack fail ,error:%d", (int)GetLastError()).GetData();
 									LogWarn(Severity_Middle, Error_Exception, ERR_TASK_DOWNLOAD_PACK_FAIL,errMsg.GetData());
 									delete[] content;
 									return 4;//下载失败,删除旧文件失败
 								}
 							}else{
 								if(rename(dPackPathTemp.GetData(),dPackPath)!=0){
-									//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-									errMsg = CSimpleStringA::Format("not exist old file,remove temp file fail, error=%d",(int)GetLastError()).GetData();
-#else
-									errMsg = CSimpleStringA::Format("not exist old file,remove temp file fail, error=%d", errno).GetData();
-#endif
+									errMsg = CSimpleStringA::Format("not exist old file,remove temp file fail, error=%d", (int)GetLastError()).GetData();
 									LogWarn(Severity_Middle, Error_Exception, ERR_TASK_DOWNLOAD_PACK_FAIL,errMsg.GetData());
 									delete[] content;
 									return 4;//移动文件失败
@@ -1478,12 +1463,7 @@ namespace Task
 							if(remove(dPackPathTemp.GetData())==0){
 								DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("delete download temp pack succ ,%s", dPackPathTemp.GetData());
 							}else{
-								//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN							
-								DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("delete download temp pack fail ,%s  error:%d", dPackPathTemp.GetData(), GetLastError());
-#else
-								DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("delete download temp pack fail ,%s  error:%d", dPackPathTemp.GetData(), errno);
-#endif								
+								DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("delete download temp pack fail ,%s  error:%d", dPackPathTemp.GetData(), GetLastError());
 							}
 							delete[] content;
 							return 4;//下载失败,hash不对
@@ -1798,28 +1778,16 @@ ErrorCodeEnum CUpgradeTaskFSM::CreateNewVersion(CVersion NewSoftwareVersion,CSim
 	{
 		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("new version dir [%s] already exist, delete it", strNewVerPath.GetData());
 		if(!RemoveDirRecursiveA(strNewVerPath.GetData())){
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Create new version fail, delete already exist new version is fail:%d",GetLastError());
-			strErrInfo = CSimpleStringA::Format("Create new version fail, delete already exist new version is fail:%d",(int)GetLastError());
-#else
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Create new version fail, delete already exist new version is fail:%d", errno);
-			strErrInfo = CSimpleStringA::Format("Create new version fail, delete already exist new version is fail:%d", errno);
-#endif		
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Create new version fail, delete already exist new version is fail:%d", GetLastError());
+			strErrInfo = CSimpleStringA::Format("Create new version fail, delete already exist new version is fail:%d", (int)GetLastError());
 			return Error_Bug;
 		}
 	}
 
 	if (!CreateDirA(strNewVerPath.GetData(), TRUE))
 	{
-		//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Create new version dir fail: %d", GetLastError());
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Create new version dir fail: %d", GetLastError());
 		strErrInfo = CSimpleStringA::Format("create new version dir fail: %d", (int)GetLastError());
-#else
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Create new version dir fail: %d", errno);
-		strErrInfo = CSimpleStringA::Format("create new version dir fail: %d", errno);
-#endif	
 		return Error_Unexpect;
 	}
 	DbgWithLink(LOG_LEVEL_DEBUG,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create new version dir succ, dir = %s",strNewVerPath.GetData());
@@ -1938,12 +1906,7 @@ ErrorCodeEnum CUpgradeTaskFSM::ClearUpgradeFailVersion(CVersion NewSoftwareVersi
 	if (ExistsDirA(strNewVerPath.GetData()))
 	{
 		if(!RemoveDirRecursiveA(strNewVerPath.GetData())){
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ClearUpgradeFailVersion fail, delete temp Version [%s] is fail:%d",strNewVerPath.GetData(),(int)GetLastError());
-#else
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ClearUpgradeFailVersion fail, delete temp Version [%s] is fail:%d", strNewVerPath.GetData(), errno);
-#endif
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ClearUpgradeFailVersion fail, delete temp Version [%s] is fail:%d", strNewVerPath.GetData(), (int)GetLastError());
 			return Error_Bug;
 		}else{
 			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ClearUpgradeFailVersion succ, delete temp Version [%s] ", strNewVerPath.GetData());
@@ -1996,18 +1959,10 @@ bool CUpgradeTaskFSM::GetSysUpgradeResult(const char *pszResultLog, CSimpleStrin
 		auto arr2 = arr[i].Split('=');
 		if (arr2.GetCount() == 2)
 		{
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
 			if (stricmp(arr2[0], "result") == 0)
 				eErrorCode = arr2[1];
 			else if (stricmp(arr2[0], "msg") == 0)
 				strErrMsg = arr2[1];
-#else
-			if (strcmp(arr2[0], "result") == 0)
-				eErrorCode = arr2[1];
-			else if (strcmp(arr2[0], "msg") == 0)
-				strErrMsg = arr2[1];
-#endif
 		}
 	}
 	return true;
@@ -2193,15 +2148,9 @@ int CUpgradeTaskFSM::ExecRunCmd(CSimpleStringA &strErrMsg,CInstallStep* ins)
 		int ret = system_on(sysPathStr,true,err);
 		osutil_reset_redirect_32sys_in_wow64(&store);
 		if(ret!=0){
-			//TODO: CrossPlaform  [Gifur@2025730]
 			//程序执行异常,结果未知
-#ifdef RVC_OS_WIN
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecRunCmd is fail, system_on exec unknown ,err=%s",err.GetData());
-			strErrMsg = CSimpleStringA::Format("ExecRunCmd is fail, system_on exec unknown ,err=%s",err.GetData());
-#else
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecRunCmd is fail, system_on exec unknown , ret=%d, err=%s",ret, strerror(errno));
-			strErrMsg = CSimpleStringA::Format("ExecRunCmd is fail, system_on exec unknown  ret=%d, err=%s", ret, strerror(errno));
-#endif			
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecRunCmd is fail, system_on exec unknown ,err=%s", err.GetData());
+			strErrMsg = CSimpleStringA::Format("ExecRunCmd is fail, system_on exec unknown ,err=%s", err.GetData());
 			return -1;//未知结果返回
 
 		}else{
@@ -2222,14 +2171,8 @@ int CUpgradeTaskFSM::ExecRunCmd(CSimpleStringA &strErrMsg,CInstallStep* ins)
 				DbgWithLink(LOG_LEVEL_DEBUG,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecRunCmd is succ,[%s] ", destPath.GetData());
 				return 1;//成功
 			}else{
-				//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecRunCmd is fail,errorCode = %s", eErrorCode.GetData());
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecRunCmd is fail,errorCode = %s", eErrorCode.GetData());
 				strErrMsg = CSimpleStringA::Format("ExecRunCmd is fail,errorCode = %s", eErrorCode.GetData());
-#else
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecRunCmd is fail,errorCode = %s,%s", eErrorCode.GetData(), strErrMsg.GetData());
-				strErrMsg = CSimpleStringA::Format("ExecRunCmd is fail,errorCode = %s,%s", eErrorCode.GetData(), strErrMsg.GetData());
-#endif			
 				return 0;//失败
 			}
 		}
@@ -2652,17 +2595,12 @@ ErrorCodeEnum CUpgradeTaskFSM::CopyFileOperate(const char* srcPath, const char*
 	case 1:
 		{
 		if (bDestFileExists) {
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-			bRet = CopyFileA(srcPath, destPath, FALSE);
-#else
 			if (fileutil_copy_file(destPath, srcPath) == 0) {
 				bRet = TRUE;
 			}
 			else {
 				bRet = FALSE;
 			}
-#endif
 		}
 		else {
 			LOG_TRACE("ignore file [%s] copy for dest file not exists", srcPath);
@@ -2671,34 +2609,25 @@ ErrorCodeEnum CUpgradeTaskFSM::CopyFileOperate(const char* srcPath, const char*
 		break;
 	case 2:
 		{
-			if (!bDestFileExists)
-				//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-				bRet = CopyFileA(srcPath, destPath, TRUE);
-#else
-				if (fileutil_copy_file(destPath, srcPath) == 0) {
-					bRet = TRUE;
-				}
-				else {
-					bRet = FALSE;
-				}
-#endif
+		if (!bDestFileExists) {
+			if (fileutil_copy_file(destPath, srcPath) == 0) {
+				bRet = TRUE;
+			}
+			else {
+				bRet = FALSE;
+			}
+		}
 			else
 				LOG_TRACE("ignore file [%s] copy for dest file exists", srcPath);
 		}
 		break;
 	case 3:
-		//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-		bRet = CopyFileA(srcPath, destPath, FALSE);
-#else
 		if (fileutil_copy_file(destPath, srcPath) == 0) {
 			bRet = TRUE;
 		}
 		else {
 			bRet = FALSE;
 		}
-#endif
 		break;
 	case 4:
 		{
@@ -2714,12 +2643,7 @@ ErrorCodeEnum CUpgradeTaskFSM::CopyFileOperate(const char* srcPath, const char*
 	if (bRet){
 		RemoveFileReadOnlyAttributeA(destPath);
 	}else{
-		//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
 		strErrMsg = CSimpleStringA::Format("CopyFileOperate copy file fail:%d", GetLastError());
-#else
-		strErrMsg = CSimpleStringA::Format("CopyFileOperate copy file fail:%d", errno);
-#endif
 	}
 	ErrorCodeEnum rc = bRet ? Error_Succeed : Error_Unexpect;
 	return rc;
@@ -2739,12 +2663,7 @@ ErrorCodeEnum CUpgradeTaskFSM::SetRunSucceed(const char* pPackFile)
 	}
 	CSimpleStringA strSourcePath = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "%s", (const char*)strDownloadPath, pPackFile);
 	CSimpleStringA strDestPath = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "%s", (const char*)strUpgradedPath, pPackFile);
-	//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-	CopyFileA(strSourcePath.GetData(), strDestPath.GetData(), FALSE);
-#else
 	fileutil_copy_file(strDestPath.GetData(), strSourcePath.GetData());
-#endif
 	return Error_Succeed;
 }
 
@@ -2838,7 +2757,8 @@ ErrorCodeEnum CUpgradeTaskFSM::UpgradeToNewVersion()
 		return Error_Succeed;
 #else
 		bool backupSucc = true;
-		CSimpleStringA strBackupActiveFile = CSimpleStringA::Format("%s\\back_active.txt", rootVerPath.GetData());
+		CSimpleStringA strBackupActiveFile = CSimpleStringA::Format("%s/back_active.txt", rootVerPath.GetData());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("strBackupActiveFile=%s", strBackupActiveFile.GetData());
 		if (fileutil_copy_file( strBackupActiveFile.GetData(),strActiveFile.GetData())!=0) {
 			LogWarn(Severity_Middle, Error_Exception, ERR_TASK_UPDATE_ACTIVE_FAIL, CSimpleStringA::Format("UpgradeToNewVersion fail, back up active.txt fail, err=%d", errno).GetData());
 			backupSucc = false;
@@ -2989,7 +2909,8 @@ ErrorCodeEnum CUpgradeTaskFSM::RollBackToHistoryVersion(CVersion historyVersion)
 	return Error_Succeed;
 #else
 	bool backupSucc = true;
-	CSimpleStringA strBackupActiveFile = CSimpleStringA::Format("%s\\Rollback_active.txt", rootVerPath.GetData());
+	CSimpleStringA strBackupActiveFile = CSimpleStringA::Format("%s/Rollback_active.txt", rootVerPath.GetData());
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("strBackupActiveFile=%s", strBackupActiveFile.GetData());
 	if (fileutil_copy_file(strBackupActiveFile.GetData(), strActiveFile.GetData())!=0) {
 		LogWarn(Severity_Middle, Error_Exception, ERR_TASK_ROLL_BACK_ACTIVE_FAIL, CSimpleStringA::Format("RRollBackToHistoryVersion fail, back up active.txt fail, err=%d", errno).GetData());
 		backupSucc = false;
@@ -3144,12 +3065,11 @@ bool CUpgradeTaskFSM::IsFileMatch(const char *pszFilter, const char *pszFileName
 }
 
 bool CUpgradeTaskFSM::RecursiveCopyDir(const char *pszSourceDir, const char *pszDestDir,CSimpleStringA &strErrInfo)
-{//TODO: CrossPlaform  [Gifur@2025730]
+{
 	array_header_t *arr;
-#ifdef RVC_OS_WIN
 	if (!ExistsDirA(pszSourceDir))
 	{
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("source dir [%s] not exists: %d", pszSourceDir,GetLastError());
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("source dir [%s] not exists: %d", pszSourceDir, GetLastError());
 		strErrInfo = CSimpleStringA::Format("source dir [%s] not exists: %d", pszSourceDir, GetLastError());
 		return false;
 	}
@@ -3159,32 +3079,11 @@ bool CUpgradeTaskFSM::RecursiveCopyDir(const char *pszSourceDir, const char *psz
 		if (!CreateDirRecursiveA(pszDestDir))
 		{
 			strErrInfo = CSimpleStringA::Format("create dir [%s] fail: %d", pszDestDir, GetLastError());
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("create dir fail: %s",strErrInfo.GetData());
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("create dir fail: %s", strErrInfo.GetData());
 			return false;
 		}
-
-		//DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("create dir [%s] succ", pszDestDir);
-	}
-#else
-	if (!ExistsDirA(pszSourceDir))
-	{
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("source dir [%s] not exists: %d", pszSourceDir, errno);
-		strErrInfo = CSimpleStringA::Format("source dir [%s] not exists: %d", pszSourceDir, errno);
-		return false;
 	}
 
-	if (!ExistsDirA(pszDestDir))
-	{
-		if (!CreateDirRecursiveA(pszDestDir))
-		{
-			strErrInfo = CSimpleStringA::Format("create dir [%s] fail: %d", pszDestDir, errno);
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("create dir fail: %s",strErrInfo.GetData());
-			return false;
-		}
-
-		//DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("create dir [%s] succ", pszDestDir);
-	}
-#endif
 	arr = fileutil_get_sub_files_a(pszSourceDir);
 	if (arr)
 	{
@@ -3197,24 +3096,13 @@ bool CUpgradeTaskFSM::RecursiveCopyDir(const char *pszSourceDir, const char *psz
 			if (szDestFile[strlen(szDestFile) - 1] != SPLIT_SLASH)
 				strcat(szDestFile, SPLIT_SLASH_STR);
 			strcat(szDestFile, strrchr(file, SPLIT_SLASH) + 1);
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-			if (!CopyFileA(file, szDestFile, FALSE))
+			if (fileutil_copy_file(szDestFile, file) != 0)
 			{
 				strErrInfo = CSimpleStringA::Format("copy file [%s] fail: %d", file, GetLastError());
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("copy file fail:%s",strErrInfo.GetData());
-				toolkit_array_free2(arr);
-				return false;
-			}
-#else
-			if (fileutil_copy_file(szDestFile, file)!=0)
-			{
-				strErrInfo = CSimpleStringA::Format("copy file [%s] fail: %d", file, errno);
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("copy file fail:%s",strErrInfo.GetData());
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("copy file fail:%s", strErrInfo.GetData());
 				toolkit_array_free2(arr);
 				return false;
 			}
-#endif						
 		}
 		toolkit_array_free2(arr);
 	}
@@ -3234,25 +3122,13 @@ bool CUpgradeTaskFSM::RecursiveCopyDir(const char *pszSourceDir, const char *psz
 
 			if (!RecursiveCopyDir(dir, szDestSubDir,strErrInfo))
 			{
-				//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("copy dir [%s] fail: %d", dir, GetLastError());
-				if(strErrInfo.IsNullOrEmpty()){
-					strErrInfo = CSimpleStringA::Format("copy dir [%s] fail: %d", dir, GetLastError());
-				}
-				toolkit_array_free2(arr);
-				return false;
-#else
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("copy dir [%s] fail: %d", dir, errno);
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("copy dir [%s] fail: %d", dir, GetLastError());
 				if (strErrInfo.IsNullOrEmpty()) {
-					strErrInfo = CSimpleStringA::Format("copy dir [%s] fail: %d", dir, errno);
+					strErrInfo = CSimpleStringA::Format("copy dir [%s] fail: %d", dir, GetLastError());
 				}
 				toolkit_array_free2(arr);
 				return false;
-#endif				
 			}
-
-			//DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("copy dir [%s] succ", dir);
 		}
 		toolkit_array_free2(arr);
 	}
@@ -3528,12 +3404,7 @@ ErrorCodeEnum CUpgradeTaskFSM::DeleteUnzipDir()
 	if (ExistsDirA(strUnzipDir.GetData()))
 	{
 		if(!RemoveDirRecursiveA(strUnzipDir.GetData())){
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN		
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("DeleteUnzipDir fail , temp unzip dir [%s] fail,err=%d",strUnzipDir.GetData(),(int)GetLastError());
-#else
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("DeleteUnzipDir fail , temp unzip dir [%s] fail,err=%d",strUnzipDir.GetData(), errno);
-#endif
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("DeleteUnzipDir fail , temp unzip dir [%s] fail,err=%d", strUnzipDir.GetData(), (int)GetLastError());
 			return Error_Unexpect;
 		}else{
 			return Error_Succeed;
@@ -4023,7 +3894,7 @@ ErrorCodeEnum CUpgradeTaskFSM::loadCenterCfgInfo()
 	}
 	return Error_Succeed;
 }
-//TODO: CrossPlaform  [Gifur@2025730]
+//TODO: CrossPlaform  如果是获取文件大小,建议直接采用 fileutil中的 ReadFileSize [Gifur@2025730]
 bool CUpgradeTaskFSM::GetFileLength(const char* filePath,long &fileLen)
 {
 	FILE* file = fopen(filePath, "rb");  
@@ -4701,28 +4572,16 @@ ErrorCodeEnum CUpgradeTaskFSM::CreateNewDepVersion(CSimpleStringA NewSoftwareVer
 	{
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("new version dir [%s] already exist, delete it", strNewVerPath.GetData());
 		if (!RemoveDirRecursiveA(strNewVerPath.GetData())) {
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Create new dep version fail, delete already exist new dep version is fail:%d", GetLastError());
 			strErrInfo = CSimpleStringA::Format("Create new dep version fail, delete already exist new dep version is fail:%d", (int)GetLastError());
-#else
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Create new dep version fail, delete already exist new dep version is fail:%d", errno);
-			strErrInfo = CSimpleStringA::Format("Create new dep version fail, delete already exist new dep version is fail:%d", errno);
-#endif		
 			return Error_Bug;
 		}
 	}
 
 	if (!CreateDirA(strNewVerPath.GetData(), TRUE))
 	{
-		//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Create new dep version dir fail: %d", GetLastError());
 		strErrInfo = CSimpleStringA::Format("create new dep version dir fail: %d", (int)GetLastError());
-#else
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Create new dep version dir fail: %d", errno);
-		strErrInfo = CSimpleStringA::Format("create new dep version dir fail: %d", errno);
-#endif	
 		return Error_Unexpect;
 	}
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create new dep version dir succ, dir = %s", strNewVerPath.GetData());
@@ -4800,12 +4659,7 @@ ErrorCodeEnum CUpgradeTaskFSM::ClearUpgradeFailDepVersion(CSimpleStringA NewSoft
 	if (ExistsDirA(strNewVerPath.GetData()))
 	{
 		if (!RemoveDirRecursiveA(strNewVerPath.GetData())) {
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ClearUpgradeFailDepVersion fail, delete temp Version [%s] is fail:%d", strNewVerPath.GetData(), (int)GetLastError());
-#else
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ClearUpgradeFailDepVersion fail, delete temp Version [%s] is fail:%d", strNewVerPath.GetData(), errno);
-#endif
 			return Error_Bug;
 		}
 		else {
@@ -5044,14 +4898,8 @@ int CUpgradeTaskFSM::ExecDepRunCmd(CSimpleStringA& strErrMsg, CInstallStep* ins)
 		osutil_reset_redirect_32sys_in_wow64(&store);
 		if (ret != 0) {
 			//程序执行异常,结果未知
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecRunCmd is fail, system_on exec unknown ,err=%s", err.GetData());
 			strErrMsg = CSimpleStringA::Format("ExecRunCmd is fail, system_on exec unknown ,err=%s", err.GetData());
-#else
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecRunCmd is fail, system_on exec unknown , ret=%d, err=%s", ret, strerror(errno));
-			strErrMsg = CSimpleStringA::Format("ExecRunCmd is fail, system_on exec unknown  ret=%d, err=%s", ret, strerror(errno));
-#endif			
 			return -1;//未知结果返回
 		}
 		else {
@@ -5073,14 +4921,8 @@ int CUpgradeTaskFSM::ExecDepRunCmd(CSimpleStringA& strErrMsg, CInstallStep* ins)
 				return 1;//成功
 			}
 			else {
-				//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecRunCmd is fail,errorCode = %s", eErrorCode.GetData());
 				strErrMsg = CSimpleStringA::Format("ExecRunCmd is fail,errorCode = %s", eErrorCode.GetData());
-#else
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecRunCmd is fail,errorCode = %s,%s", eErrorCode.GetData(), strErrMsg.GetData());
-				strErrMsg = CSimpleStringA::Format("ExecRunCmd is fail,errorCode = %s,%s", eErrorCode.GetData(), strErrMsg.GetData());
-#endif			
 				return 0;//失败
 			}
 		}
@@ -5681,24 +5523,31 @@ bool CUpgradeTaskFSM::DownloadFileWrite(byte* content,long contentLen,const char
 	}
 	FILE* tempFp =  fopen(filePath,"ab");
 	if(tempFp==NULL){
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("DownloadFileWrite open file fail");
+		DbgWithLink(LOG_LEVEL_WARN,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("DownloadFileWrite open file fail");
 		return false;
 	}
 	int ret = fwrite(content,(size_t)contentLen,1,tempFp);
 
-	fclose(tempFp);
+	if (ret != 1) {
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("DownloadFileWrite write file fail,ret = %d,errno = %d", ret, (int)GetLastError());
+		fclose(tempFp);
+		return false;
+	}
+	else {
+		fflush(tempFp);
 
-	if(ret!=1){
-		//TODO: CrossPlaform  [Gifur@2025730]
 #ifdef RVC_OS_WIN
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("DownloadFileWrite write file fail,ret = %d,errno = %d",ret,(int)GetLastError());
-		return false;
+		int CommitRet = _commit(_fileno(tempFp));
 #else
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("DownloadFileWrite write file fail,ret = %d,errno = %d",ret, errno);
-		return false;
-#endif		
+		int CommitRet = fsync(fileno(tempFp));
+#endif
+
+		if (CommitRet != 0) {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("DownloadFileWrite write file commit fail,errno = %d", (int)GetLastError());
+		}
+		fclose(tempFp);
+		return true;
 	}
-	return true;
 }
 
 bool CUpgradeTaskFSM::CheckIfCanSwitchNow()
@@ -5967,27 +5816,17 @@ bool CUpgradeTaskFSM::isWork()
 	
 	//升级任务
 	if((!m_currentTask.NewVersion.IsNullOrEmpty())&&(m_currentTask.cPendingState=="T"||m_currentTask.cPendingState=="C"||m_currentTask.cPendingState=="X")){
-		CSimpleStringA strRunInfo,strStartTime;
-		if (m_pEntity->GetFunction()->GetPath("RunInfo",strRunInfo) == Error_Succeed){
-			//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-			strStartTime = strRunInfo + "\\runcfg\\starttime.dat";
-#else
-			strStartTime = strRunInfo + "/runcfg/starttime.dat";
-#endif
+		CSimpleStringA strRunCfg,strStartTime;
+		if (m_pEntity->GetFunction()->GetPath("RunCfg",strRunCfg) == Error_Succeed){
+			strStartTime = strRunCfg + SPLIT_SLASH_STR + "starttime.dat";
 			if(!ExistsFileA(strStartTime.GetData())){
 				return true;//完成升级过程,通过
 			}else{
-				//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("upgrade process is not end ,file \\runcfg\\starttime is exist");
-#else
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("upgrade process is not end ,file /runcfg/starttime is exist");
-#endif
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("upgrade process is not end ,file %s is exist", strStartTime.GetData());
 				return false;//继续等待
 			}
 		}else{
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("upgrade process is not end ,get runinfo path is error");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("upgrade process is not end ,get runinfo path is error");
 			return false;//失败,继续等待
 		}
 	}

+ 169 - 169
Module/mod_UpgradeMgr/UpgradeTaskFSM.h

@@ -14,12 +14,12 @@
 #define	QUERY_IS_WORK_WARN_LIMIT 10
 using namespace std;
 
-#define WARN_TASK_COPY_FILE_ZERO 0x50620022 //升级copy文件夹文件个数为0
-#define ERR_TASK_QUERY_PRE_NEW_TASK_FAIL 0x50620023 //查询新任务报错
-#define ERR_TASK_QUERY_CONTINUE_NEW_TASK_FAIL 0x50620024 //查询继续新任务报错
-#define ERR_TASK_QUERY_CONTINUE_NEW_TASK_ERR 0x50620025 //查询继续新任务异常
+#define WARN_TASK_COPY_FILE_ZERO 0x50620022 //鍗囩骇copy鏂囦欢澶规枃浠朵釜鏁颁负0
+#define ERR_TASK_QUERY_PRE_NEW_TASK_FAIL 0x50620023 //鏌ヨ�鏂颁换鍔℃姤閿�
+#define ERR_TASK_QUERY_CONTINUE_NEW_TASK_FAIL 0x50620024 //鏌ヨ�缁х画鏂颁换鍔℃姤閿�
+#define ERR_TASK_QUERY_CONTINUE_NEW_TASK_ERR 0x50620025 //鏌ヨ�缁х画鏂颁换鍔″紓甯�
 
-//#define WARN_BLACK_FILE_SUM 0x50600023 //黑名单文件数量
+//#define WARN_BLACK_FILE_SUM 0x50600023 //榛戝悕鍗曟枃浠舵暟閲�
 
 #define UpgradeMgr_VERSION_DOWNLOAD_ID "QLR0402506Z10101"
 #define UpgradeMgr_VERSION_INSTALL_ID "QLR0402506Z10201"
@@ -42,7 +42,7 @@ using namespace std;
 
 namespace HttpStruct
 {
-	//发送文件hash列表接口
+	//鍙戦€佹枃浠秇ash鍒楄〃鎺ュ彛
 	struct SendSM3TaskReq : CHTTPReq {
 		string m_reqStr;
 		string ToJson() {
@@ -57,7 +57,7 @@ namespace HttpStruct
 		}
 	};
 
-	//更新任务状态接口
+	//鏇存柊浠诲姟鐘舵€佹帴鍙�
 	struct UpdateTaskStatusReq : CHTTPReq {
 		string m_reqStr;
 		string ToJson() {
@@ -72,7 +72,7 @@ namespace HttpStruct
 		}
 	};
 
-	//查询当前任务
+	//鏌ヨ�褰撳墠浠诲姟
 	struct QueryCurrTaskReq : CHTTPReq {
 		string m_reqStr;
 		string ToJson() {
@@ -87,7 +87,7 @@ namespace HttpStruct
 		}
 	};
 
-	//查询新任务
+	//鏌ヨ�鏂颁换鍔�
 	struct QueryNewTaskReq : CHTTPReq {
 		string m_reqStr;
 		string ToJson() {
@@ -102,7 +102,7 @@ namespace HttpStruct
 		}
 	};
 
-	//断点下载升级包
+	//鏂�偣涓嬭浇鍗囩骇鍖�
 	struct DownloadPackTaskRet{
 		long content_length;
         long origin_file_length;
@@ -114,7 +114,7 @@ namespace HttpStruct
 
 
 
-// 升级任务状态机
+// 鍗囩骇浠诲姟鐘舵€佹満
 class CUpgradeTaskFSM : public FSMImpl<CUpgradeTaskFSM>, public IFSMStateHooker, public ISysVarListener
 {
 public:
@@ -153,7 +153,7 @@ public:
 
 	struct SendSM3TaskEvent:public FSMEvent
 	{
-		bool isSucc;//是否写入成功
+		bool isSucc;//鏄�惁鍐欏叆鎴愬姛
 		SendSM3TaskEvent(bool isSendSucc) 
 			: FSMEvent(Event_EndSendSM3Task), isSucc(isSendSucc)
 		{}
@@ -162,7 +162,7 @@ public:
 
 	struct UpdateTaskStatusEvent:public FSMEvent
 	{
-		bool isSucc;//是否更新成功
+		bool isSucc;//鏄�惁鏇存柊鎴愬姛
 		UpdateTaskStatusEvent(bool isSendSucc) 
 			: FSMEvent(Event_EndUpdateTask), isSucc(isSendSucc)
 		{}
@@ -170,8 +170,8 @@ public:
 
 	struct QueryCurrTaskEvent:public FSMEvent
 	{
-		bool isSucc;//是否查询成功
-		bool isTask_valid;//任务是否有效
+		bool isSucc;//鏄�惁鏌ヨ�鎴愬姛
+		bool isTask_valid;//浠诲姟鏄�惁鏈夋晥
 		QueryCurrTaskEvent(bool isSendSucc,bool isValid) 
 			: FSMEvent(Event_EndQueryCurrTask), isSucc(isSendSucc),isTask_valid(isValid)
 		{}
@@ -179,7 +179,7 @@ public:
 
 	struct QueryNewTaskEvent:public FSMEvent
 	{
-		bool isSucc;//是否查询成功
+		bool isSucc;//鏄�惁鏌ヨ�鎴愬姛
 		QueryNewTaskEvent(bool isSendSucc) 
 			: FSMEvent(Event_EndPoll), isSucc(isSendSucc)
 		{}
@@ -187,7 +187,7 @@ public:
 
 	struct QueryNewContinueTaskEvent:public FSMEvent
 	{
-		int retParam;//是否查询成功
+		int retParam;//鏄�惁鏌ヨ�鎴愬姛
 		QueryNewContinueTaskEvent(int ret) 
 			: FSMEvent(Event_EndContinuePoll)
 		{
@@ -197,7 +197,7 @@ public:
 
 	struct QueryNewPreTaskEvent:public FSMEvent
 	{
-		bool isSucc;//是否查询成功
+		bool isSucc;//鏄�惁鏌ヨ�鎴愬姛
 		QueryNewPreTaskEvent(bool isSendSucc) 
 			: FSMEvent(Event_EndPrePoll), isSucc(isSendSucc)
 		{}
@@ -205,8 +205,8 @@ public:
 
 	struct QueryTaskStatusEvent:public FSMEvent
 	{
-		bool isSucc;//是否查询成功
-		bool isTask_valid;//任务是否有效
+		bool isSucc;//鏄�惁鏌ヨ�鎴愬姛
+		bool isTask_valid;//浠诲姟鏄�惁鏈夋晥
 		QueryTaskStatusEvent(bool isSendSucc,bool isValid) 
 			: FSMEvent(Event_EndQueryTaskStatus), isSucc(isSendSucc),isTask_valid(isValid)
 		{}
@@ -222,7 +222,7 @@ public:
 
 	struct DownloadPackTaskFailEvent:public FSMEvent
 	{
-		string errMsg;//错误信息
+		string errMsg;//閿欒�淇℃伅
 		DownloadPackTaskFailEvent(string errorMsg) 
 			: FSMEvent(Event_Download_Fail), errMsg(errorMsg)
 		{}
@@ -266,123 +266,123 @@ public:
 
 	struct CInstallStep
 	{
-		//不存储到运行时
-		int stepSeq; //步骤序号
-		CSimpleStringA cmdType;		//升级安装需执行命令类型:Delete、Copy、Run
-		int cmdFail;		//0:执行失败认为升级失败 1:执行失败忽略继续升级
-		CSimpleStringA srcPathType; //0:相对路径 1:绝对路径 2:当前版本相对路径 3:升级包相对路径
+		//涓嶅瓨鍌ㄥ埌杩愯�鏃�
+		int stepSeq; //姝ラ�搴忓彿
+		CSimpleStringA cmdType;		//鍗囩骇瀹夎�闇€鎵ц�鍛戒护绫诲瀷:Delete銆丆opy銆丷un
+		int cmdFail;		//0锛氭墽琛屽け璐ヨ�涓哄崌绾уけ璐� 1锛氭墽琛屽け璐ュ拷鐣ョ户缁�崌绾�
+		CSimpleStringA srcPathType; //0锛氱浉瀵硅矾寰� 1锛氱粷瀵硅矾寰� 2锛氬綋鍓嶇増鏈�浉瀵硅矾寰� 3锛氬崌绾у寘鐩稿�璺�緞
 		CSimpleStringA srcPath;		
-		CSimpleStringA dstPathType;	//0:相对路径 1:绝对路径 2:当前版本相对路径 3:升级版本相对路径 4:升级包相对路径
+		CSimpleStringA dstPathType;	//0锛氱浉瀵硅矾寰� 1锛氱粷瀵硅矾寰� 2锛氬綋鍓嶇増鏈�浉瀵硅矾寰� 3锛氬崌绾х増鏈�浉瀵硅矾寰� 4锛氬崌绾у寘鐩稿�璺�緞
 		CSimpleStringA dstPath;
 	};
 
-	// 待安装任务信息(运行时保存的中间变量)
+	// 寰呭畨瑁呬换鍔′俊鎭�紙杩愯�鏃朵繚瀛樼殑涓�棿鍙橀噺锛�
 	struct CTaskInfo
-	{	//存储到运行时
-		CSimpleStringA upgradeTaskId;	//升级任务编号
-		CSimpleStringA createTaskVersion;//创建升级任务时的版本号
-		CSimpleStringA cPendingState;	// 已下载D、安装中I、等待切换S、任务结果确认T
-		CSimpleStringA NewVersion;		// 任务升级后的版本号
-		CSimpleStringA pack_name;		//升级包名
-		CSimpleStringA task_type;		//任务类型 U:升级任务 R:回退任务
-		CSimpleStringA depNewVersion;    //适配器新版本号
-		//CSimpleStringA task_class;      //任务类别 A:应用版本任务 D:适配器任务 T:体系外任务
-		//不存储到运行时
-		CSimpleStringA pack_version;	//升级包指定的版本号
-		bool stop_media_play;   //停止广告播放(0:不停止 1:停止)
-		int reboot_type;		//重启策略类型(0:不启动 1:重启框架 2:重启系统)
-		CSimpleStringA file_path;       //升级包路径
-		CSimpleStringA download_url;    //升级包下载地址
-		CSimpleStringA pack_hash;		//升级包hash值
-		long pack_length;		//升级包长度(服务端暂时不传)
-
-		queue<CInstallStep*> install_step;//安装步骤队列
+	{	//瀛樺偍鍒拌繍琛屾椂
+		CSimpleStringA upgradeTaskId;	//鍗囩骇浠诲姟缂栧彿
+		CSimpleStringA createTaskVersion;//鍒涘缓鍗囩骇浠诲姟鏃剁殑鐗堟湰鍙�
+		CSimpleStringA cPendingState;	// 宸蹭笅杞紻銆佸畨瑁呬腑I銆佺瓑寰呭垏鎹�銆佷换鍔$粨鏋滅‘璁�
+		CSimpleStringA NewVersion;		// 浠诲姟鍗囩骇鍚庣殑鐗堟湰鍙�
+		CSimpleStringA pack_name;		//鍗囩骇鍖呭悕
+		CSimpleStringA task_type;		//浠诲姟绫诲瀷 U:鍗囩骇浠诲姟 R:鍥為€€浠诲姟
+		CSimpleStringA depNewVersion;    //閫傞厤鍣ㄦ柊鐗堟湰鍙�
+		//CSimpleStringA task_class;      //浠诲姟绫诲埆 A:搴旂敤鐗堟湰浠诲姟 D:閫傞厤鍣ㄤ换鍔� T:浣撶郴澶栦换鍔�
+		//涓嶅瓨鍌ㄥ埌杩愯�鏃�
+		CSimpleStringA pack_version;	//鍗囩骇鍖呮寚瀹氱殑鐗堟湰鍙�
+		bool stop_media_play;   //鍋滄�骞垮憡鎾�斁锛�0:涓嶅仠姝� 1:鍋滄�锛�
+		int reboot_type;		//閲嶅惎绛栫暐绫诲瀷锛�0:涓嶅惎鍔� 1:閲嶅惎妗嗘灦 2:閲嶅惎绯荤粺锛�
+		CSimpleStringA file_path;       //鍗囩骇鍖呰矾寰�
+		CSimpleStringA download_url;    //鍗囩骇鍖呬笅杞藉湴鍧€
+		CSimpleStringA pack_hash;		//鍗囩骇鍖卙ash鍊�
+		long pack_length;		//鍗囩骇鍖呴暱搴�(鏈嶅姟绔�殏鏃朵笉浼�)
+
+		queue<CInstallStep*> install_step;//瀹夎�姝ラ�闃熷垪
 
 	};
 
 	
 	struct CTaskProcess
 	{
-		CSimpleStringA strPackName;//包名
-		CSimpleStringA installVersion;//安装版本号
-		CSimpleStringA CurrentVersion;//当前版本号
-		CSimpleStringA cInstallState;//升级状态
-		CSimpleStringA strInstallComment;//升级状态备注
+		CSimpleStringA strPackName;//鍖呭悕
+		CSimpleStringA installVersion;//瀹夎�鐗堟湰鍙�
+		CSimpleStringA CurrentVersion;//褰撳墠鐗堟湰鍙�
+		CSimpleStringA cInstallState;//鍗囩骇鐘舵€�
+		CSimpleStringA strInstallComment;//鍗囩骇鐘舵€佸�娉�
 	};
 
 	struct CenterUrl
 	{
-		string updateTaskUrl;		//更新升级任务url
-		string queryCurrTaskUrl;	//查询当前任务url
-		string queryNewTaskUrl;		//查询新任务url(旧版本使用)
-		string queryPreTaskUrl;		//预查询新任务url
-		string queryContinueTaskUrl; //继续查询新任务url
-		string queryTaskStatus;		//查询当前任务是否有效url
-		string sendSM3TaskUrl;		//发送文件hashurl
+		string updateTaskUrl;		//鏇存柊鍗囩骇浠诲姟url
+		string queryCurrTaskUrl;	//鏌ヨ�褰撳墠浠诲姟url
+		string queryNewTaskUrl;		//鏌ヨ�鏂颁换鍔�rl锛堟棫鐗堟湰浣跨敤锛�
+		string queryPreTaskUrl;		//棰勬煡璇㈡柊浠诲姟url
+		string queryContinueTaskUrl; //缁х画鏌ヨ�鏂颁换鍔�rl
+		string queryTaskStatus;		//鏌ヨ�褰撳墠浠诲姟鏄�惁鏈夋晥url
+		string sendSM3TaskUrl;		//鍙戦€佹枃浠秇ashurl
 	};
 
 	struct HashScanSet
 	{
-		CSimpleStringA relativeDir;	//相对路径
-		CSimpleStringA absoluteDir;	//绝对路径 
-		CSimpleStringA currVerDir;	//当前版本相对路径
-		CSimpleStringA blackFile;	//不纳入扫描的文件名称
-		CSimpleStringA blackDir;	//不纳入扫描的文件夹
+		CSimpleStringA relativeDir;	//鐩稿�璺�緞
+		CSimpleStringA absoluteDir;	//缁濆�璺�緞 
+		CSimpleStringA currVerDir;	//褰撳墠鐗堟湰鐩稿�璺�緞
+		CSimpleStringA blackFile;	//涓嶇撼鍏ユ壂鎻忕殑鏂囦欢鍚嶇О
+		CSimpleStringA blackDir;	//涓嶇撼鍏ユ壂鎻忕殑鏂囦欢澶�
 	};
 
 public:
 	CUpgradeTaskFSM(){
-		isSendHash = false;//默认查询策略不发送hash
-		m_isSM3HashSucc = false;//默认hash计算失败
+		isSendHash = false;//榛樿�鏌ヨ�绛栫暐涓嶅彂閫乭ash
+		m_isSM3HashSucc = false;//榛樿�hash璁$畻澶辫触
 		m_bDownloadIdle = false;
 		m_bTaskCancel=false;
-		m_fileSM3ListHash="";//终端hash列表64位hash值
-		m_fileSM3List = "";//终端hash列表值
-		m_strPreTaskId="";//预检查任务ID
-		m_bNeedHash=0;//预检查是否需要hash
+		m_fileSM3ListHash="";//缁堢�hash鍒楄〃64浣峢ash鍊�
+		m_fileSM3List = "";//缁堢�hash鍒楄〃鍊�
+		m_strPreTaskId="";//棰勬�鏌ヤ换鍔�D
+		m_bNeedHash=0;//棰勬�鏌ユ槸鍚﹂渶瑕乭ash
 		m_newEachDownloadLen=DOWNLOAD_CONTENT_EACH_LEN;
 		m_PrintHttpLog =false;
 		m_startFlag = false;
 		m_iBlackFileCount=0;
 		m_bSwitchFlag = false;
 		m_bRollbackTask = false;
-		m_TempDepUpgradeFlag = false;//默认非适配器升级
-		m_queryNewTaskInterval = 240;//默认查询任务时间间隔
-		m_installStopCopyDep = false;//默认拷贝
+		m_TempDepUpgradeFlag = false;//榛樿�闈為€傞厤鍣ㄥ崌绾�
+		m_queryNewTaskInterval = 240;//榛樿�鏌ヨ�浠诲姟鏃堕棿闂撮殧
+		m_installStopCopyDep = false;//榛樿�鎷疯礉
 		m_downloadBreakOffCount = 0; 
 		m_queryIsWorkCount = 0;
 	}
 	~CUpgradeTaskFSM(){}
-	//具体实现方法
-	ErrorCodeEnum CreateNewVersion(CVersion NewSoftwareVersion,CSimpleStringA &strErrInfo);//创建新版本
-	ErrorCodeEnum ClearUpgradeFailVersion(CVersion NewSoftwareVersion);//清理升级新版本临时文件
-	bool GetSysUpgradeResult(const char *pszResultLog, CSimpleStringA &eErrorCode, CSimpleStringA &strErrMsg);//从体系外生成的result.log文件中获取结果
+	//鍏蜂綋瀹炵幇鏂规硶
+	ErrorCodeEnum CreateNewVersion(CVersion NewSoftwareVersion,CSimpleStringA &strErrInfo);//鍒涘缓鏂扮増鏈�
+	ErrorCodeEnum ClearUpgradeFailVersion(CVersion NewSoftwareVersion);//娓呯悊鍗囩骇鏂扮増鏈�复鏃舵枃浠�
+	bool GetSysUpgradeResult(const char *pszResultLog, CSimpleStringA &eErrorCode, CSimpleStringA &strErrMsg);//浠庝綋绯诲�鐢熸垚鐨剅esult.log鏂囦欢涓�幏鍙栫粨鏋�
 	
-	//安装执行步骤方法
-	int ExecInstall(CSimpleStringA &strErrMsg);//升级安装 0:失败 1:成功 -1:未知
+	//瀹夎�鎵ц�姝ラ�鏂规硶
+	int ExecInstall(CSimpleStringA &strErrMsg);//鍗囩骇瀹夎� 0锛氬け璐� 1锛氭垚鍔� -1锛氭湭鐭�
 	int ExecRunCmd(CSimpleStringA &strErrMsg,CInstallStep* ins);
 	bool ExecDeleteCmd(CSimpleStringA &strErrMsg,CInstallStep* ins);
 	bool ExecCpoyCmd(CSimpleStringA &strErrMsg,CInstallStep* ins);
-	bool GetRootTypePath(int rootType,CSimpleStringA &rootPath);//1:相对路径 2:当前版本相对路径 3:升级版本相对路径 4:升级包相对路径
+	bool GetRootTypePath(int rootType,CSimpleStringA &rootPath);//1:鐩稿�璺�緞 2锛氬綋鍓嶇増鏈�浉瀵硅矾寰� 3锛氬崌绾х増鏈�浉瀵硅矾寰� 4锛氬崌绾у寘鐩稿�璺�緞
 	ErrorCodeEnum CopyFileOperate(const char* srcPath, const char* destPath, int nCopyMode, CSimpleStringA &strErrMsg);
 
 
 
-	ErrorCodeEnum SetRunSucceed(const char* pPackFile);//成功切换新版本
-	ErrorCodeEnum UpgradeToNewVersion();//设置新版本状态
-	ErrorCodeEnum RollBackToHistoryVersion(CVersion historyVersion);//回退到某个历史版本
+	ErrorCodeEnum SetRunSucceed(const char* pPackFile);//鎴愬姛鍒囨崲鏂扮増鏈�
+	ErrorCodeEnum UpgradeToNewVersion();//璁剧疆鏂扮増鏈�姸鎬�
+	ErrorCodeEnum RollBackToHistoryVersion(CVersion historyVersion);//鍥為€€鍒版煇涓�巻鍙茬増鏈�
 	
 	void RecursiveGetSubFiles(const char *pszDir, const char *pszTrimStart, list<CSimpleStringA>& retList);
 	bool IsFileMatch(const char *pszFilter, const char *pszFileName);
-	bool RecursiveCopyDir(const char *pszSourceDir, const char *pszDestDir,CSimpleStringA &strErrInfo);//可以合并
-	CSimpleStringA GetFileDirectory(const char *pszFullPath);//查找文件的父路径
-	int system_on(string cmdFilePath, bool isWait,CSimpleStringA &errMsg);//cmd窗口程序
-	int waitSystem(string cmd, const char * par, bool nShow,CSimpleStringA &errMsg);//起进程执行cmd
+	bool RecursiveCopyDir(const char *pszSourceDir, const char *pszDestDir,CSimpleStringA &strErrInfo);//鍙�互鍚堝苟
+	CSimpleStringA GetFileDirectory(const char *pszFullPath);//鏌ユ壘鏂囦欢鐨勭埗璺�緞
+	int system_on(string cmdFilePath, bool isWait,CSimpleStringA &errMsg);//cmd绐楀彛绋嬪簭
+	int waitSystem(string cmd, const char * par, bool nShow,CSimpleStringA &errMsg);//璧疯繘绋嬫墽琛宑md
 	
 
-	ErrorCodeEnum UnzipPack(const char* unZipPackName);//解压文件
-	ErrorCodeEnum DeleteUnzipDir();//清理临时解压包文件
-	ErrorCodeEnum RollBackVersionCheck(string &failReason, CSimpleStringA& strErrMsg);//回退版本检查 C:一般错误 X:终端找不到需要回退的版本文件夹 、回退版本比现在版本高
+	ErrorCodeEnum UnzipPack(const char* unZipPackName);//瑙e帇鏂囦欢
+	ErrorCodeEnum DeleteUnzipDir();//娓呯悊涓存椂瑙e帇鍖呮枃浠�
+	ErrorCodeEnum RollBackVersionCheck(string &failReason, CSimpleStringA& strErrMsg);//鍥為€€鐗堟湰妫€鏌� C锛氫竴鑸�敊璇� X锛氱粓绔�壘涓嶅埌闇€瑕佸洖閫€鐨勭増鏈�枃浠跺す 銆佸洖閫€鐗堟湰姣旂幇鍦ㄧ増鏈�珮
 	
 	
 
@@ -390,56 +390,56 @@ public:
 	ErrorCodeEnum GetRunConfigStrValue(const char *pszSection, const char *pszKey, CSimpleStringA &strValue);
 	ErrorCodeEnum SetRunConfigStrValue(const char *pszSection, const char *pszKey, const char *pszValue);
 
-	bool ClearCurrTaskInfo();//任务无效清除运行时记录和残留下载包
-	bool ClearInstallStep();//清理历史任务安装步骤
+	bool ClearCurrTaskInfo();//浠诲姟鏃犳晥娓呴櫎杩愯�鏃惰�褰曞拰娈嬬暀涓嬭浇鍖�
+	bool ClearInstallStep();//娓呯悊鍘嗗彶浠诲姟瀹夎�姝ラ�
 
-	ErrorCodeEnum LoadPersistTaskInfo();//启动开始加载运行时文件
-	ErrorCodeEnum loadCenterCfgInfo();//启动开始加载集中配置文件
+	ErrorCodeEnum LoadPersistTaskInfo();//鍚�姩寮€濮嬪姞杞借繍琛屾椂鏂囦欢
+	ErrorCodeEnum loadCenterCfgInfo();//鍚�姩寮€濮嬪姞杞介泦涓�厤缃�枃浠�
 
-	bool GetFileLength(const char* filePath,long &fileLen);//获取文件长度
-	ErrorCodeEnum GetSM3List(CSimpleStringA &strSM3List);//获取版本文件hash集合字符串
+	bool GetFileLength(const char* filePath,long &fileLen);//鑾峰彇鏂囦欢闀垮害
+	ErrorCodeEnum GetSM3List(CSimpleStringA &strSM3List);//鑾峰彇鐗堟湰鏂囦欢hash闆嗗悎瀛楃�涓�
 	ErrorCodeEnum ScanSM3ByType(int type,CSimpleStringA pathFilter);
-	ErrorCodeEnum NewSM3Folder(CSimpleStringA scanFilter,CSimpleStringA replaceDir);//新的hash扫描文件夹实现
+	ErrorCodeEnum NewSM3Folder(CSimpleStringA scanFilter,CSimpleStringA replaceDir);//鏂扮殑hash鎵�弿鏂囦欢澶瑰疄鐜�
 
-	//新国密SM3函数,isSub表示是否截取新国密中间一段密文
+	//鏂板浗瀵哠M3鍑芥暟锛宨sSub琛ㄧず鏄�惁鎴�彇鏂板浗瀵嗕腑闂翠竴娈靛瘑鏂�
 	ErrorCodeEnum SM3FileToStr(CSimpleStringA strFilePath, CSimpleStringA &strSM3,bool isSub);
 	ErrorCodeEnum SM3DataToStr(CSimpleStringA strData, CSimpleStringA &strSM3,bool isSub);
 	ErrorCodeEnum SM3_Str(CSimpleStringA &strSM3,BYTE * SM3Byte,bool isSub);
 
-	bool IsPackDownloaded(const char *pPackName,const char* packHash,long packLen);//判断安装包是否已下载成功
+	bool IsPackDownloaded(const char *pPackName,const char* packHash,long packLen);//鍒ゆ柇瀹夎�鍖呮槸鍚﹀凡涓嬭浇鎴愬姛
 	bool DownloadFileWrite(byte* content,long contentLen,const char* filePath);
 
-	bool CheckIfCanSwitchNow();//是否允许切换
-	ErrorCodeEnum SwitchUpgradeNow();//切换版本
+	bool CheckIfCanSwitchNow();//鏄�惁鍏佽�鍒囨崲
+	ErrorCodeEnum SwitchUpgradeNow();//鍒囨崲鐗堟湰
 
-	ErrorCodeEnum DownloadProgress(long tempFileLen,long fileSumLen);//返回下载进度
-	char GetInstallState(int nState);//根据状态机获取升级状态
+	ErrorCodeEnum DownloadProgress(long tempFileLen,long fileSumLen);//杩斿洖涓嬭浇杩涘害
+	char GetInstallState(int nState);//鏍规嵁鐘舵€佹満鑾峰彇鍗囩骇鐘舵€�
 	ErrorCodeEnum GetUpgradeState(bool &bInstalling, CSimpleStringA &strPackFile, CSimpleStringA &strExecID,
 		char &cInstallState, bool &bSysInstall, bool &bLightPack, CSimpleStringA &strNewVersion);
 	
 	static void HttpsLogCallBack(const char* logtxt);
 
-	void judgeTaskClass();//临时判定升级任务类别
-	ErrorCodeEnum judgeRollbackTaskClass(CSimpleStringA verDirName, string& failReason, CSimpleStringA& strErrMsg);//临时判定回退任务类别
+	void judgeTaskClass();//涓存椂鍒ゅ畾鍗囩骇浠诲姟绫诲埆
+	ErrorCodeEnum judgeRollbackTaskClass(CSimpleStringA verDirName, string& failReason, CSimpleStringA& strErrMsg);//涓存椂鍒ゅ畾鍥為€€浠诲姟绫诲埆
 	
-	ErrorCodeEnum CreateNewDepVersion(CSimpleStringA NewSoftwareVersion, CSimpleStringA& strErrInfo);//升级时创建新适配器版本
-	ErrorCodeEnum CreateInstallDepVersion(CSimpleStringA NewSoftwareVersion, CSimpleStringA& strErrInfo);//安装时创建新适配器版本
-	ErrorCodeEnum ClearUpgradeFailDepVersion(CSimpleStringA NewSoftwareVersion);//清理升级新版本临时文件
-	ErrorCodeEnum UpgradeDepToNewVersion();//更新depactive文件
-	ErrorCodeEnum SwitchUpgradeDepNow();//切换适配器版本
-	ErrorCodeEnum RollBackDepVersionCheck(string& failReason, CSimpleStringA& strErrMsg);//回退版本检查 C:一般错误 X:终端找不到需要回退的版本文件夹
-	ErrorCodeEnum RollBackToHistoryDepVersion(CSimpleStringA historyDepVersion);//适配器回退到某个历史版本
-
-	//适配器安装函数
-	int ExecDepInstall(CSimpleStringA& strErrMsg);//适配器升级 0:失败 1:成功 
+	ErrorCodeEnum CreateNewDepVersion(CSimpleStringA NewSoftwareVersion, CSimpleStringA& strErrInfo);//鍗囩骇鏃跺垱寤烘柊閫傞厤鍣ㄧ増鏈�
+	ErrorCodeEnum CreateInstallDepVersion(CSimpleStringA NewSoftwareVersion, CSimpleStringA& strErrInfo);//瀹夎�鏃跺垱寤烘柊閫傞厤鍣ㄧ増鏈�
+	ErrorCodeEnum ClearUpgradeFailDepVersion(CSimpleStringA NewSoftwareVersion);//娓呯悊鍗囩骇鏂扮増鏈�复鏃舵枃浠�
+	ErrorCodeEnum UpgradeDepToNewVersion();//鏇存柊depactive鏂囦欢
+	ErrorCodeEnum SwitchUpgradeDepNow();//鍒囨崲閫傞厤鍣ㄧ増鏈�
+	ErrorCodeEnum RollBackDepVersionCheck(string& failReason, CSimpleStringA& strErrMsg);//鍥為€€鐗堟湰妫€鏌� C锛氫竴鑸�敊璇� X锛氱粓绔�壘涓嶅埌闇€瑕佸洖閫€鐨勭増鏈�枃浠跺す
+	ErrorCodeEnum RollBackToHistoryDepVersion(CSimpleStringA historyDepVersion);//閫傞厤鍣ㄥ洖閫€鍒版煇涓�巻鍙茬増鏈�
+
+	//閫傞厤鍣ㄥ畨瑁呭嚱鏁�
+	int ExecDepInstall(CSimpleStringA& strErrMsg);//閫傞厤鍣ㄥ崌绾� 0锛氬け璐� 1锛氭垚鍔� 
 	int ExecDepRunCmd(CSimpleStringA& strErrMsg, CInstallStep* ins);
 	bool ExecDepDeleteCmd(CSimpleStringA& strErrMsg, CInstallStep* ins);
 	bool ExecDepCpoyCmd(CSimpleStringA& strErrMsg, CInstallStep* ins);
-	bool GetDepRootTypePath(int rootType, CSimpleStringA& rootPath);//1:相对路径 2:当前版本相对路径 3:升级版本相对路径 4:升级包相对路径
+	bool GetDepRootTypePath(int rootType, CSimpleStringA& rootPath);//1:鐩稿�璺�緞 2锛氬綋鍓嶇増鏈�浉瀵硅矾寰� 3锛氬崌绾х増鏈�浉瀵硅矾寰� 4锛氬崌绾у寘鐩稿�璺�緞
 
 	CSimpleStringA getAlarmCurrVersion();
 
-	//升级时添加防火墙策略
+	//鍗囩骇鏃舵坊鍔犻槻鐏��绛栫暐
 	ErrorCodeEnum SetNewVersionPathToFirewall();
 
 	bool isWork();
@@ -462,13 +462,13 @@ private:
 	enum{s1, s2, s3, s4, s5, s6, s7};
 
 	BEGIN_FSM_STATE(CUpgradeTaskFSM)
-		FSM_STATE_ENTRY(s1, "Start",s1_on_entry,s1_on_exit,s1_on_event)//计算hash值
-		FSM_STATE_ENTRY(s2, "DealTask",s2_on_entry,s2_on_exit,s2_on_event)//处理上个任务,反馈任务结果,并根据任务状态跳转到其他状态
-		FSM_STATE_ENTRY(s3, "Poll",s3_on_entry,s3_on_exit,s3_on_event)//查询任务
-		FSM_STATE_ENTRY(s4, "Download", s4_on_entry, s4_on_exit, s4_on_event)//下载安装包
-		FSM_STATE_ENTRY(s5, "Install", s5_on_entry, s5_on_exit, s5_on_event)//安装升级包
-		FSM_STATE_ENTRY(s6, "Switch", s6_on_entry, s6_on_exit, s6_on_event)//进行版本切换
-		FSM_STATE_ENTRY(s7, "Disable", s7_on_entry, s7_on_exit, s7_on_event)//静止状态
+		FSM_STATE_ENTRY(s1, "Start",s1_on_entry,s1_on_exit,s1_on_event)//璁$畻hash鍊�
+		FSM_STATE_ENTRY(s2, "DealTask",s2_on_entry,s2_on_exit,s2_on_event)//澶勭悊涓婁釜浠诲姟锛屽弽棣堜换鍔$粨鏋滐紝骞舵牴鎹�换鍔$姸鎬佽烦杞�埌鍏朵粬鐘舵€�
+		FSM_STATE_ENTRY(s3, "Poll",s3_on_entry,s3_on_exit,s3_on_event)//鏌ヨ�浠诲姟
+		FSM_STATE_ENTRY(s4, "Download", s4_on_entry, s4_on_exit, s4_on_event)//涓嬭浇瀹夎�鍖�
+		FSM_STATE_ENTRY(s5, "Install", s5_on_entry, s5_on_exit, s5_on_event)//瀹夎�鍗囩骇鍖�
+		FSM_STATE_ENTRY(s6, "Switch", s6_on_entry, s6_on_exit, s6_on_event)//杩涜�鐗堟湰鍒囨崲
+		FSM_STATE_ENTRY(s7, "Disable", s7_on_entry, s7_on_exit, s7_on_event)//闈欐�鐘舵€�
 	END_FSM_STATE()
 
 	BEGIN_FSM_RULE(CUpgradeTaskFSM,s1)
@@ -478,39 +478,39 @@ private:
 		FSM_RULE_ENTRY(s2, s5, Event_EndQueryCurrTask, 5)	
 		FSM_RULE_ENTRY(s2, s6, Event_EndQueryCurrTask, 6)
 		FSM_RULE_ENTRY_ANY(s3, s4, Event_StartDownload)
-		FSM_RULE_ENTRY_ANY(s3, s5, Event_StartInstall)//回退
+		FSM_RULE_ENTRY_ANY(s3, s5, Event_StartInstall)//鍥為€€
 		FSM_RULE_ENTRY_ANY(s4, s5, Event_StartInstall)
-		FSM_RULE_ENTRY_ANY(s4, s3, Event_StartPoll)//任务取消进入S3
-		FSM_RULE_ENTRY_ANY(s4, s2, Event_StartDealTask)//下载失败进入S2
+		FSM_RULE_ENTRY_ANY(s4, s3, Event_StartPoll)//浠诲姟鍙栨秷杩涘叆S3
+		FSM_RULE_ENTRY_ANY(s4, s2, Event_StartDealTask)//涓嬭浇澶辫触杩涘叆S2
 		FSM_RULE_ENTRY_ANY(s5, s6, Event_StartSwitch)
-		FSM_RULE_ENTRY_ANY(s5, s2, Event_StartDealTask)//安装失败进入S2
-		FSM_RULE_ENTRY_ANY(s6, s2, Event_StartDealTask)//无需重启框架和系统切换成功进入S2
-		FSM_RULE_ENTRY_ANY(s6, s3, Event_StartPoll)//取消任务进入S3
-		FSM_RULE_ENTRY_ANY(s6, s7, Event_PreRestart)//重启服务
+		FSM_RULE_ENTRY_ANY(s5, s2, Event_StartDealTask)//瀹夎�澶辫触杩涘叆S2
+		FSM_RULE_ENTRY_ANY(s6, s2, Event_StartDealTask)//鏃犻渶閲嶅惎妗嗘灦鍜岀郴缁熷垏鎹㈡垚鍔熻繘鍏�2
+		FSM_RULE_ENTRY_ANY(s6, s3, Event_StartPoll)//鍙栨秷浠诲姟杩涘叆S3
+		FSM_RULE_ENTRY_ANY(s6, s7, Event_PreRestart)//閲嶅惎鏈嶅姟
 	END_FSM_RULE()
 
 private:
-	//完成
+	//瀹屾垚
 	void s1_on_entry();
 	void s1_on_exit();
 	unsigned int s1_on_event(FSMEvent* event);
-	//完成
+	//瀹屾垚
 	void s2_on_entry();
 	void s2_on_exit();
 	unsigned int s2_on_event(FSMEvent* event);
-	//完成
+	//瀹屾垚
 	void s3_on_entry();
 	void s3_on_exit();
 	unsigned int s3_on_event(FSMEvent* event);
-	//完成
+	//瀹屾垚
 	void s4_on_entry();
 	void s4_on_exit();
 	unsigned int s4_on_event(FSMEvent* event);
-	//完成
+	//瀹屾垚
 	void s5_on_entry();
 	void s5_on_exit();
 	unsigned int s5_on_event(FSMEvent* event);
-	//完成
+	//瀹屾垚
 	void s6_on_entry();
 	void s6_on_exit();
 	unsigned int s6_on_event(FSMEvent* event);
@@ -523,45 +523,45 @@ private:
 
 	
 	
-	list<CSimpleStringA> m_DepWhitelist; //dep文件夹白名单
-	list<CSimpleStringA> m_DirBlacklist; //整体文件夹黑名单
-	list<CSimpleStringA> m_FileBlacklist; //整体文件黑名单
+	list<CSimpleStringA> m_DepWhitelist; //dep鏂囦欢澶圭櫧鍚嶅崟
+	list<CSimpleStringA> m_DirBlacklist; //鏁翠綋鏂囦欢澶归粦鍚嶅崟
+	list<CSimpleStringA> m_FileBlacklist; //鏁翠綋鏂囦欢榛戝悕鍗�
 
 public:
-	map<CSimpleStringA, CSimpleStringA> m_fileSM3Map;	// 版本文件hash值集合
-
-	CTaskInfo m_currentTask;	//当前的任务缓存变量
-	CVersion m_currentVersion;  //当前终端版本
-	CSimpleStringA m_currentDepVersion; //当前适配器版本
-
-	CenterUrl m_centerUrl;//访问总行的url地址集合
-	int m_newEachDownloadLen;//新的每次下载数据长度阈值(k)
-	bool m_PrintHttpLog;  //是否打印通讯日志
-	bool m_startFlag; //升级实体启动标志位,默认是不开,
-	bool m_stopSetFirewall;//是否停止设置防火墙路径,默认是不停止
-	HashScanSet m_hashScanSet;//扫描文件hash设置
-
-	bool m_isSM3HashSucc;//hash是否计算成功
-	bool isSendHash;//hash是否发送
-	CSimpleStringA m_fileSM3ListHash;//SM3 64位hash
-	CSimpleStringA m_fileSM3List;//版本文件hash集合字符串
-	DWORD m_beginSendSM3Time;//开始发送sm3hahs时间
-	int m_queryNewTaskCount;//查询新任务时无任务次数
+	map<CSimpleStringA, CSimpleStringA> m_fileSM3Map;	// 鐗堟湰鏂囦欢hash鍊奸泦鍚�
+
+	CTaskInfo m_currentTask;	//褰撳墠鐨勪换鍔$紦瀛樺彉閲�
+	CVersion m_currentVersion;  //褰撳墠缁堢�鐗堟湰
+	CSimpleStringA m_currentDepVersion; //褰撳墠閫傞厤鍣ㄧ増鏈�
+
+	CenterUrl m_centerUrl;//璁块棶鎬昏�鐨剈rl鍦板潃闆嗗悎
+	int m_newEachDownloadLen;//鏂扮殑姣忔�涓嬭浇鏁版嵁闀垮害闃堝€�(k)
+	bool m_PrintHttpLog;  //鏄�惁鎵撳嵃閫氳�鏃ュ織
+	bool m_startFlag; //鍗囩骇瀹炰綋鍚�姩鏍囧織浣�,榛樿�鏄�笉寮€锛�
+	bool m_stopSetFirewall;//鏄�惁鍋滄�璁剧疆闃茬伀澧欒矾寰勶紝榛樿�鏄�笉鍋滄�
+	HashScanSet m_hashScanSet;//鎵�弿鏂囦欢hash璁剧疆
+
+	bool m_isSM3HashSucc;//hash鏄�惁璁$畻鎴愬姛
+	bool isSendHash;//hash鏄�惁鍙戦€�
+	CSimpleStringA m_fileSM3ListHash;//SM3 64浣峢ash
+	CSimpleStringA m_fileSM3List;//鐗堟湰鏂囦欢hash闆嗗悎瀛楃�涓�
+	DWORD m_beginSendSM3Time;//寮€濮嬪彂閫乻m3hahs鏃堕棿
+	int m_queryNewTaskCount;//鏌ヨ�鏂颁换鍔℃椂鏃犱换鍔℃�鏁�
 	int m_queryIsWorkCount;
 	int m_downloadBreakOffCount;
 
-	bool m_bDownloadIdle;	//是否下载空闲 true: 不能下载,false: 可下载
-	bool m_bTaskCancel;		//是否任务取消 true: 任务取消,false: 未取消
+	bool m_bDownloadIdle;	//鏄�惁涓嬭浇绌洪棽 true: 涓嶈兘涓嬭浇锛宖alse: 鍙�笅杞�
+	bool m_bTaskCancel;		//鏄�惁浠诲姟鍙栨秷 true: 浠诲姟鍙栨秷锛宖alse: 鏈�彇娑�
 
-	int m_iBlackFileCount;    //黑名单文件数量
+	int m_iBlackFileCount;    //榛戝悕鍗曟枃浠舵暟閲�
 
-	CSimpleStringA m_strPreTaskId; //预检查taskId
-	int m_bNeedHash;//是否需要hash对比查询任务
-	bool m_bSwitchFlag;//是否启动后切换流程直接进入标志
-	bool m_bRollbackTask;//是否已经处于回退流程。
+	CSimpleStringA m_strPreTaskId; //棰勬�鏌�askId
+	int m_bNeedHash;//鏄�惁闇€瑕乭ash瀵规瘮鏌ヨ�浠诲姟
+	bool m_bSwitchFlag;//鏄�惁鍚�姩鍚庡垏鎹㈡祦绋嬬洿鎺ヨ繘鍏ユ爣蹇�
+	bool m_bRollbackTask;//鏄�惁宸茬粡澶勪簬鍥為€€娴佺▼銆�
 
-	bool m_TempDepUpgradeFlag;//临时适配器升级安装的判定标志 true 适配器 false 非适配器
-	int m_queryNewTaskInterval;//查询任务时间间隔,默认是240s
-	bool m_installStopCopyDep;//安装时是否停止拷贝应用dep公共文件夹
+	bool m_TempDepUpgradeFlag;//涓存椂閫傞厤鍣ㄥ崌绾у畨瑁呯殑鍒ゅ畾鏍囧織 true 閫傞厤鍣� false 闈為€傞厤鍣�
+	int m_queryNewTaskInterval;//鏌ヨ�浠诲姟鏃堕棿闂撮殧锛岄粯璁ゆ槸240s
+	bool m_installStopCopyDep;//瀹夎�鏃舵槸鍚﹀仠姝㈡嫹璐濆簲鐢╠ep鍏�叡鏂囦欢澶�
 };
 #endif //RVC_MOD_UPGRADETASK_FSM_H_

+ 4 - 41
Module/mod_UpgradeMgr/mod_UpgradeMgr.cpp

@@ -429,55 +429,20 @@ ErrorCodeEnum CUpgradeMgrEntity::testActive()
 	}
 
 	CSimpleStringA strActiveFile = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "active.txt", rootVerPath.GetData());
-	//TODO: CrossPlaform  [Gifur@2025729]
 	FILE* fp = fopen(strActiveFile.GetData(),"rb+");
 	if(fp==NULL){
-		//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-		LogWarn(Severity_Middle, Error_Exception, ERR_WRAN_OPEN_ACTIVE_FAIL,CSimpleStringA::Format("open write active.txt fail,please edit active attribute, err=%d",(int)GetLastError()).GetData());
-#else
-		LogWarn(Severity_Middle, Error_Exception, ERR_WRAN_OPEN_ACTIVE_FAIL,CSimpleStringA::Format("open write active.txt fail,please edit active attribute, err=%d",errno).GetData());
-#endif	
+		LogWarn(Severity_Middle, Error_Exception, ERR_WRAN_OPEN_ACTIVE_FAIL, CSimpleStringA::Format("open write active.txt fail,please edit active attribute, err=%d", (int)GetLastError()).GetData());
 		return Error_Unexpect;
 	}
 	fclose(fp);
 	return Error_Succeed;
-
 }
 
 
 ErrorCodeEnum CUpgradeMgrEntity::NewStopMediaPlay()
 {
-//#ifdef RVC_OS_WIN
-//	// 通知媒体停止播放广告和声音
-//	LocalMediaPlay::PlayService_ClientBase *pClient = new LocalMediaPlay::PlayService_ClientBase(this);
-//	ErrorCodeEnum rc = pClient->Connect();
-//	if (rc == Error_Succeed)
-//	{
-//		DbgWithLink(LOG_LEVEL_DEBUG,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("connect to entity [LocalMediaPlay] succeed, start StopMediaPlay now");
-//		//采用新接口停止所有音视频播放
-//		LocalMediaPlay::PlayService_StopPlayAllMedias_Req req1 = {};
-//		LocalMediaPlay::PlayService_StopPlayAllMedias_Ans ans1 = {};
-//		rc = (*pClient)(EntityResource::getLink().upgradeLink())->StopPlayAllMedias(req1, ans1, 30000);
-//		if (Error_Succeed == rc )
-//		{
-//			DbgWithLink(LOG_LEVEL_DEBUG,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("StopPlayAllMedias success");
-//		}else{
-//			DbgWithLink(LOG_LEVEL_WARN,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("StopPlayAllMedias fail, err=%d",(int)rc);
-//			pClient->GetFunction()->CloseSession();
-//			pClient->SafeDelete();
-//			return rc;
-//		}
-//		pClient->GetFunction()->CloseSession();
-//	}
-//	else
-//	{
-//		LogWarn(Severity_Low, rc, ERR_TASK_STOP_MEDIA_FAIL, "connect to entity [LocalMediaPlay] fail");
-//	}
-//	pClient->SafeDelete();
-//	return rc;
-//#else
-		// 通知媒体停止播放广告和声音
+
+	// 通知媒体停止播放广告和声音
 	LocalMediaPlay::PlayService_ClientBase *pClient = new LocalMediaPlay::PlayService_ClientBase(this);
 	ErrorCodeEnum rc = pClient->Connect();
 	if (rc == Error_Succeed)
@@ -516,10 +481,8 @@ ErrorCodeEnum CUpgradeMgrEntity::NewStopMediaPlay()
 		pClient->SafeDelete();
 		return rc;
 	}
-	
-//#endif
-	
 }
+
 SP_BEGIN_ENTITY_MAP()
 	SP_ENTITY(CUpgradeMgrEntity)
 SP_END_ENTITY_MAP()

+ 25 - 35
Module/mod_accessauth/AccessAuthFSM.cpp

@@ -31,7 +31,7 @@ using namespace PinPad;
 
 CAccessAuthFSM::CAccessAuthFSM()
 	:m_finishAccess(0), m_nAccessFailedCount(0)
-	, m_accessAuthHost(true), m_initDeviceHost(true)
+	, m_accessAuthHost(true)
 	, m_torelateDiffSyncTimeSecs(180)
 {
 }
@@ -74,11 +74,6 @@ ErrorCodeEnum CAccessAuthFSM::OnExit()
 	return Error_Succeed;
 }
 
-void CAccessAuthFSM::HttpsLogCallBack(const char* logtxt)
-{
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI("HttpsLogCallBack")("%s", logtxt);
-}
-
 struct TimeSynTask : ITaskSp
 {
 	CAccessAuthFSM* m_fsm;
@@ -152,11 +147,11 @@ struct TimeSynTask : ITaskSp
 			printFunc();
 
 			int decodedSessionKeyLen = 0;
-			char* decodedSessionKey = Hex2Str(timeSyncAns.sessionKey.c_str(), decodedSessionKeyLen);
+			char* decodedSessionKey = SP::Module::Util::Hex2Str(timeSyncAns.sessionKey.c_str(), decodedSessionKeyLen);
 			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("decodedSessionKey=%s,%d", decodedSessionKey, decodedSessionKeyLen);
 			DWORD rc = Error_InvalidState;
 			rc = m_fsm->HandleTimeSyn(timeSyncAns.timeDiff, (BYTE*)decodedSessionKey);
-			delete decodedSessionKey;
+			delete [] decodedSessionKey;
 			if (rc == Error_Succeed) {
 				auto pEvent = new FSMEvent(CAccessAuthFSM::Event_EndSyncTime);
 				m_fsm->PostEventFIFO(pEvent);
@@ -537,6 +532,7 @@ unsigned int CAccessAuthFSM::s2_on_event(FSMEvent* pEvent)
 		} 
 		else 
 		{
+			//TODO: 没看到任何地方对 m_finishAccess 赋有意义的值  [Gifur@2025822]
 			CSimpleStringA strErrMsg = CSimpleStringA::Format("准入超时(%d)", m_finishAccess);
 			pEntity->GetFunction()->ShowFatalError(strErrMsg);
 		}
@@ -621,9 +617,9 @@ ErrorCodeEnum CAccessAuthFSM::LoadCenterConfig()
 	if (Error_Succeed == Error) 
 	{
 		spConfig->ReadConfigValue("AccessAuthorization", "HostUrl", m_accessAuthHost);
-		spConfig->ReadConfigValue("AccessAuthorization", "HostInitDeviceUrl", m_initDeviceHost);
+		//TODO: 需要清理集中配置  [Gifur@2025820]
+		//spConfig->ReadConfigValue("AccessAuthorization", "HostInitDeviceUrl", m_initDeviceHost);
 	}
-
 	return Error;
 }
 
@@ -631,15 +627,15 @@ bool CAccessAuthFSM::DecryptWithSessionKey(BYTE* encText, int encTextLen, BYTE*
 {
 	BYTE key[16] = { 0 };
 	memcpy(key, ((CAccessAuthEntity*)m_pEntity)->m_AuthSessionKey, 16);
-	char* keyTmp = Str2Hex((char*)key, 16);
-	delete keyTmp;
+	char* keyTmp = SP::Module::Util::Str2Hex((char*)key, 16);
+	delete[] keyTmp;
 
 	if (!DecWithSM4_ECB(key, encText, encTextLen, decTest, &decTestLen)) {
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("DecryptWithSessionKey ECB error.");
 		return false;
 	}
-	keyTmp = Str2Hex((char*)decTest, decTestLen);
-	delete keyTmp;
+	keyTmp = SP::Module::Util::Str2Hex((char*)decTest, decTestLen);
+	delete[] keyTmp;
 	return true;
 }
 
@@ -689,10 +685,10 @@ DWORD CAccessAuthFSM::HandleGetToken(BYTE* enToken1, BYTE* sharedKey, BYTE* enTo
 	char* enToken1_acs, * sharedKey_acs, * enToken2_acs, * hash_acs;
 	int enToken1_acs_len = 0, sharedKey_acs_len = 0, enToken2_acs_len = 0, hash_acs_len = 0;
 
-	enToken1_acs = Hex2Str((char*)enToken1, enToken1_acs_len);
-	sharedKey_acs = Hex2Str((char*)sharedKey, sharedKey_acs_len);
-	enToken2_acs = Hex2Str((char*)enToken2, enToken2_acs_len);
-	hash_acs = Hex2Str((char*)retHash, hash_acs_len);
+	enToken1_acs = SP::Module::Util::Hex2Str((char*)enToken1, enToken1_acs_len);
+	sharedKey_acs = SP::Module::Util::Hex2Str((char*)sharedKey, sharedKey_acs_len);
+	enToken2_acs = SP::Module::Util::Hex2Str((char*)enToken2, enToken2_acs_len);
+	hash_acs = SP::Module::Util::Hex2Str((char*)retHash, hash_acs_len);
 
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI("HandleGetToken")("enToken1_acs_len=%d", enToken1_acs_len);
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI("HandleGetToken")("sharedKey_acs_len=%d", sharedKey_acs_len);
@@ -709,10 +705,10 @@ DWORD CAccessAuthFSM::HandleGetToken(BYTE* enToken1, BYTE* sharedKey, BYTE* enTo
 	memcpy(enToken2, enToken2_acs, enToken2_acs_len);
 	memcpy(retHash, hash_acs, hash_acs_len);
 
-	delete enToken1_acs;
-	delete sharedKey_acs;
-	delete enToken2_acs;
-	delete hash_acs;
+	delete [] enToken1_acs;
+	delete [] sharedKey_acs;
+	delete [] enToken2_acs;
+	delete [] hash_acs;
 
 	BYTE enToken[512 + 16] = { 0 };
 	memcpy(enToken, enToken1, 256);
@@ -728,8 +724,8 @@ DWORD CAccessAuthFSM::HandleGetToken(BYTE* enToken1, BYTE* sharedKey, BYTE* enTo
 		rc = Error_Bug;
 		pEntity->SetAuthErrMsg("返回令牌校验不通过");
 		pEntity->GetFunction()->SetSysVar("AuthErrMsg", "返回令牌校验不通过");
-		char* sm3Ret = Str2Hex((char*)sm3, 32);
-		delete sm3Ret;
+		char* sm3Ret = SP::Module::Util::Str2Hex((char*)sm3, 32);
+		delete[] sm3Ret;
 		doWarnMsg(ERR_ACCESSAUTH_TOKEN_HASH, "返回令牌校验不通过", true);
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(GetOutPutStr("%s%s", "Hash", "返回令牌校验不通过").c_str());
 	} 
@@ -795,17 +791,12 @@ DWORD CAccessAuthFSM::GetEncTerminalInfoWithKey(CBlob& encInfo, BYTE* key)
 	strResult = generateJsonStr(termInfo);
 
 	char* pBuf = new char[2048];
-	int len = 0;
-	//TODO: CrossPlaform
-#ifdef RVC_OS_WIN
 	string tmpStr = strResult.second;
+#ifdef RVC_OS_WIN
 	SP::Module::Util::ConvertGBK2Utf8(tmpStr);
-	strcpy(pBuf, tmpStr.c_str()); //GBK转UTF8
-	len = tmpStr.size();
-#else
-	strcpy(pBuf, strResult.second.c_str());
-	len = strResult.second.size();
 #endif // RVC_OS_WIN
+	strcpy(pBuf, tmpStr.c_str());
+	int len = tmpStr.size();
 
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("HardWareInfo: %s", pBuf);
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("HardWareInfo size: %d", len);
@@ -826,7 +817,6 @@ DWORD CAccessAuthFSM::GetEncTerminalInfoWithKey(CBlob& encInfo, BYTE* key)
 	}
 
 	delete[] pBuf;
-
 	return Error_Succeed;
 }
 
@@ -880,9 +870,9 @@ DWORD CAccessAuthFSM::GetTokenReq(CAccessAuthGetTokenReq* getTokenReq)
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetEncTerminalInfo failed:%d", rc);
 		return rc;
 	}
-	char* pTmp = Str2Hex((char*)encInfo.m_pData, encInfo.m_iLength);
+	char* pTmp = SP::Module::Util::Str2Hex((char*)encInfo.m_pData, encInfo.m_iLength);
 	getTokenReq->encTerminalInfo = pTmp;
-	delete pTmp;
+	delete[] pTmp;
 
 	string tmpStr = "";
 	if ((rc = GetTmk(tmpStr)) != Error_Succeed) 

+ 1 - 21
Module/mod_accessauth/AccessAuthFSM.h

@@ -8,25 +8,9 @@
 #include "IHttpFunc.h"
 #include "json/json.h"
 #include "CommEntityRestful.hpp"
-
-//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-///*TODO:  (80374374@11/27/2023)*/
-typedef CAutoArray<CSimpleStringA>  NetworkAddressesList;
-#define MACSESION 6
-#else
 #include <mutex>
 #include "publicFunExport.h"
 #include <winpr/sysinfo.h>
-static void GetLocalTimeRVC(SYSTEMTIME& stTime)
-{
-	GetLocalTime(&stTime);
-}
-#endif // RVC_OS_WIN
-
-#define ACS_SUCCESS "0"
-#define REFLECTION(var) #var
-#define JUAGEHTTPS(ret) (ret.m_sysCode == 200 || ret.m_sysCode == 201)
 
 typedef struct CSessionkeySynReq
 {
@@ -182,7 +166,6 @@ public:
 	unsigned int s3_on_event(FSMEvent* event);
 
 public:
-	static void HttpsLogCallBack(const char* logtxt);
 	CSimpleStringA GetmAccessAuthHost() { return m_accessAuthHost; }
 	bool DecryptWithSessionKey(BYTE* encText, int encTextLen, BYTE* decTest, int& decTestLen);
 	//oilyang@20210813 add bNeedEvent.
@@ -212,10 +195,7 @@ private:
 	void GetDiffSyncTimeFromCenterSettings();
 private:
 	int m_nAccessFailedCount;
-	CSimpleStringA m_accessAuthHost, m_initDeviceHost;
+	CSimpleStringA m_accessAuthHost;
 	int m_torelateDiffSyncTimeSecs;
 	int m_finishAccess;
-#ifdef RVC_OS_LINUX
-	int m_nCheckMD5;
-#endif // RVC_OS_LINUX
 };

+ 0 - 48
Module/mod_accessauth/MyBase64.cpp

@@ -113,52 +113,4 @@ namespace MyBase64{
 			//}
 		}
 	}
-	unsigned char Ch2Hex(char ch)
-	{
-		static const char* hex = "0123456789ABCDEF";
-		for (unsigned char i = 0;i != 16;++i)
-			if (ch == hex[i])
-				return i;
-		return 0;
-	}
-	char* Hex2Str(const char* src, int& dstLen)
-	{
-		int i = 0;
-		int cnt = 0;
-		int len = strlen(src);
-		unsigned char* d = new unsigned char[len];
-		memset(d, 0, len);
-		while (*src)
-		{
-			if (i & 1)
-			{
-				d[cnt++] |= Ch2Hex(*src);
-			}
-			else
-			{
-				d[cnt] = Ch2Hex(*src) << 4;
-			}
-			src++;
-			i++;
-		}
-		dstLen = cnt;
-		return (char*)d;
-	}
-	char* Str2Hex(const char* src, int srcLen)
-	{
-		string ret;
-		static const char* hex = "0123456789ABCDEF";
-
-		for (int i = 0;i != srcLen;++i)
-		{
-			ret.push_back(hex[(src[i] >> 4) & 0xf]);
-			ret.push_back(hex[src[i] & 0xf]);
-		}
-		char* tmp = new char[ret.length() + 1];
-		memset(tmp, 0, ret.length() + 1);
-		memcpy(tmp, ret.c_str(), ret.length());
-		return tmp;
-	}
-
-
 }

+ 0 - 2
Module/mod_accessauth/MyBase64.h

@@ -27,6 +27,4 @@ namespace MyBase64{
 	const int pemLineSz = 64;
 	void Encode(const string plain,string& encoded);
 	void Decode(const string coded,string& decoded);
-	char* Hex2Str(const char* src, int& dstLen);
-	char* Str2Hex(const char* str, int strLen);
 }

+ 0 - 49
Module/mod_accessauth/comm.cpp

@@ -97,55 +97,6 @@ int str2int(const string str) {
 	return ret;
 }
 
-unsigned char Ch2Hex(char ch)
-{
-	static const char* hex = "0123456789ABCDEF";
-	for (unsigned char i = 0; i != 16; ++i)
-		if (ch == hex[i])
-			return i;
-	return 0;
-}
-
-char* Hex2Str(const char* src, int& dstLen)
-{
-	int i = 0;
-	int cnt = 0;
-	int len = strlen(src);
-	unsigned char* d = new unsigned char[len];
-	memset(d, 0, len);
-	while (*src)
-	{
-		if (i & 1)
-		{
-			d[cnt++] |= Ch2Hex(*src);
-		}
-		else
-		{
-			d[cnt] = Ch2Hex(*src) << 4;
-		}
-		src++;
-		i++;
-	}
-	dstLen = cnt;
-	return (char*)d;
-}
-
-char* Str2Hex(const char* src, int srcLen)
-{
-	string ret;
-	static const char* hex = "0123456789ABCDEF";
-
-	for (int i = 0; i != srcLen; ++i)
-	{
-		ret.push_back(hex[(src[i] >> 4) & 0xf]);
-		ret.push_back(hex[src[i] & 0xf]);
-	}
-	char* tmp = new char[ret.length() + 1];
-	memset(tmp, 0, ret.length() + 1);
-	memcpy(tmp, ret.c_str(), ret.length());
-	return tmp;
-}
-
 #ifdef __linux__
 	
 	void parse_cpu_id(const char* file_name, const char* match_words, std::string& cpu_id)

+ 0 - 4
Module/mod_accessauth/comm.h

@@ -38,10 +38,6 @@ int str2int(const string str, int& ret);
 
 int str2int(const string str);
 
-char* Hex2Str(const char* src, int& dstLen);
-
-char* Str2Hex(const char* str, int strLen);
-
 #ifdef __linux__
 #define RUNTIME_PATH "/opt/run/runinfo/runcfg"
 #include <sys/types.h>

+ 32 - 71
Module/mod_accessauth/mod_AccessAuth.cpp

@@ -447,13 +447,6 @@ void CAccessAuthEntity::printPasswdError(const string& strErrMsg){
 	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA520C")(strErrMsg.c_str());
 }
 
-int Char2Int(char * ch) {
-	int num = 0;
-	for (int i = 0;i < strlen(ch);i++) {
-		num += ((int)(ch[i] - '0')) * pow((float)10, (float)(strlen(ch) - i - 1));
-	}
-	return num;
-}
 bool CAccessAuthEntity::SaveAuthKey(BYTE *pKey)
 {
 	memset(m_AuthSessionKey, 0, 140);
@@ -484,7 +477,7 @@ bool CAccessAuthEntity::SaveAuthKey(BYTE *pKey)
 
 	int decodedPrivateKeyLen;
 
-	char* pDecodedPrivateKey = Hex2Str(privateKey, decodedPrivateKeyLen);
+	char* pDecodedPrivateKey = SP::Module::Util::Hex2Str(privateKey, decodedPrivateKeyLen);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("privateKey len:%d, decodedPrivateKeyLen=%d", strlen(privateKey), decodedPrivateKeyLen);
 
 	char pDecryptPrivateKey[BUF_SIZE] = { 0 };
@@ -501,16 +494,17 @@ bool CAccessAuthEntity::SaveAuthKey(BYTE *pKey)
 	int plainKeyLen = KEY_SIZE;
 	char pKeyLen[4] = { 0 };
 	memcpy(pKeyLen, pKey, 4);
-	int kenLen = Char2Int(pKeyLen);
-	char* pEncodeKey = Str2Hex((char*)pKey, kenLen + 4);
+	int kenLen = SP::Module::Util::Char2Int(pKeyLen);
+	char* pEncodeKey = SP::Module::Util::Str2Hex((char*)pKey, kenLen + 4);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("kenLen=%d", kenLen);
-	delete pEncodeKey;
+	delete [] pEncodeKey;
 	char* key = new char[kenLen + 1];
 	memset(key, 0, kenLen + 1);
 	memcpy(key, pKey + 4, kenLen);
 	if (!DecWithSM2PriKey((BYTE*)key, kenLen, (BYTE*)pPlainKey, &plainKeyLen, (BYTE*)pDecryptPrivateKey, decryprtLen)) {
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("使用私钥解密失败!");
 		printPasswdError("终端初始化未完成,请重置秘钥进行初始化");
+		delete[] key;
 		return false;
 	}
 	if (plainKeyLen != KEY_SIZE) {
@@ -518,34 +512,11 @@ bool CAccessAuthEntity::SaveAuthKey(BYTE *pKey)
 	}
 
 	memcpy(m_AuthSessionKey, pPlainKey, KEY_SIZE);
+	delete[] key;
 
 	return true;
 }
 
-static BYTE* ConvertHexStrToBytes(const char *pszStr)
-{
-	if (pszStr == NULL || strlen(pszStr) == 0)
-		return NULL;
-
-	int nLen = strlen(pszStr) / 2;
-	BYTE *pRet = (BYTE*)malloc(nLen);
-	memset(pRet, 0, nLen);
-
-	for (int i = 0; i < nLen; i++)
-	{
-		int nTmp(0);
-		if (sscanf(&pszStr[i * 2], "%2X", &nTmp) != 1)
-		{
-			free(pRet);
-			return NULL;
-		}
-
-		pRet[i] = (BYTE)nTmp;
-	}
-
-	return pRet;
-}
-
 // 使用密钥加密
 ErrorCodeEnum CAccessAuthEntity::EncryptDataWithKey(const CBlob &raw, CBlob &enc, BYTE* key)
 {
@@ -554,7 +525,7 @@ ErrorCodeEnum CAccessAuthEntity::EncryptDataWithKey(const CBlob &raw, CBlob &enc
 	BYTE* pEncData = new BYTE[1024];
 	int pEncDataSize = 1024;
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("pEncDataSize=%d", pEncDataSize);
-	char* pPlainInfo = Str2Hex((char*)raw.m_pData, raw.m_iLength);
+	char* pPlainInfo = SP::Module::Util::Str2Hex((char*)raw.m_pData, raw.m_iLength);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("raw Length=%d", raw.m_iLength);
 	delete[] pPlainInfo;
 
@@ -566,11 +537,11 @@ ErrorCodeEnum CAccessAuthEntity::EncryptDataWithKey(const CBlob &raw, CBlob &enc
 	
 	enc.Attach(pEncData,pEncDataSize);
 
-	char* tmp = Str2Hex((char*)pEncData, pEncDataSize);
+	char* tmp = SP::Module::Util::Str2Hex((char*)pEncData, pEncDataSize);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("pEncData size:%d", pEncDataSize);
 	delete[] tmp;
 
-	tmp = Str2Hex((char*)enc.m_pData, enc.m_iLength);
+	tmp = SP::Module::Util::Str2Hex((char*)enc.m_pData, enc.m_iLength);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("EncWithSM4_ECB data size:%d", enc.m_iLength);
 	delete[] tmp;
 
@@ -581,33 +552,20 @@ ErrorCodeEnum CAccessAuthEntity::EncryptDataWithKey(const CBlob &raw, CBlob &enc
 bool CAccessAuthEntity::GetTerminalPublicKey(BYTE* pBuf, int& nBufLen, string& pubkey)
 {
 	LOG_FUNCTION();
-	CSimpleString runInfoPath;
-	auto rc = GetFunction()->GetPath("runinfo", runInfoPath);
+	CSimpleString runCfgPath(true);
+	auto rc = GetFunction()->GetPath("RunCfg", runCfgPath);
 	if (rc != Error_Succeed) {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("GetPath runinfo error=%d.", rc);
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("GetPath RunCfg error=%d.", rc);
 		return false;
 	}
-	runInfoPath += SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR;
-	//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-	DWORD dwAttr = GetFileAttributes(runInfoPath.GetData());
-	if (dwAttr == 0xFFFFFFFF)  //目录不存在则创建   
-	{
-		if (!CreateDirectory(runInfoPath.GetData(), NULL))
-		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("Create %s dir failed!", runInfoPath.GetData());
-		}
-	}
-#else
-	if (!dir_is_exist(runInfoPath.GetData()))
-	{
-		if (dir_create(runInfoPath.GetData()) != 0)
+	if (!ExistsDirA(runCfgPath)) {
+		if (!CreateDirA(runCfgPath, TRUE))
 		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("Create %s dir failed!", runInfoPath.GetData());
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("Create %s dir failed!", runCfgPath.GetData());
 		}
 	}
-#endif // RVC_OS_WIN
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("Dir=%s", runInfoPath.GetData());
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("Dir=%s", runCfgPath.GetData());
+
 	CSmartPointer<IConfigInfo> pConfig;
 	rc = GetFunction()->OpenConfig(Config_Run, pConfig);
 	if (rc != Error_Succeed) {
@@ -630,12 +588,9 @@ bool CAccessAuthEntity::GetTerminalPublicKey(BYTE* pBuf, int& nBufLen, string& p
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("iPublicKeyLen=%d,iPrivateKeyLen=%d", iPublicKeyLen, iPrivateKeyLen);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("[btPublicKey=%s]", (char*)btPublicKey);
 
-	char* pEncode = Str2Hex((char*)btPublicKey, iPublicKeyLen);
+	char* pEncode = SP::Module::Util::Str2Hex((char*)btPublicKey, iPublicKeyLen);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("pEncode=%s,%d", pEncode, strlen(pEncode));
 
-	/*rc = pConfig->WriteConfigValue("TerminalPD", "PublicKey", pEncode);
-	assert(rc == Error_Succeed);*/
-
 	m_publicKey = pEncode;
 	pubkey = pEncode;
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("write public key success.");
@@ -653,7 +608,7 @@ bool CAccessAuthEntity::GetTerminalPublicKey(BYTE* pBuf, int& nBufLen, string& p
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("sm4 encrypt pri key success.");
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("cryptPrivateKeyLen=%d", cryptPrivateKeyLen);
 
-	char* pEncodedCryptPrivateKey = Str2Hex((char*)pCryptPrivateKey, cryptPrivateKeyLen);
+	char* pEncodedCryptPrivateKey = SP::Module::Util::Str2Hex((char*)pCryptPrivateKey, cryptPrivateKeyLen);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("encode pri key success.");
 
 	m_privateKey = pEncodedCryptPrivateKey;
@@ -669,11 +624,14 @@ bool CAccessAuthEntity::GetTerminalPublicKey(BYTE* pBuf, int& nBufLen, string& p
 	delete[] pEncode;
 	delete[] pEncodedCryptPrivateKey;
 
-	char* pDecode = Hex2Str(publicKey.GetData(), nBufLen);
+	char* pDecode = SP::Module::Util::Hex2Str(publicKey.GetData(), nBufLen);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("pDecode=[%s],len=%d", pDecode, nBufLen);
 
 	memcpy(pBuf, pDecode, nBufLen);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetTerminalPublicKey")("pBuf[0]=%02X,nBufLen=%d", pBuf[0], nBufLen);
+
+	delete[] pDecode;
+
 	return true;
 }
 
@@ -997,19 +955,22 @@ bool CAccessAuthEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 	CBlob encInfo;
 	char* hexStr = "21009872C31CBC00D0C8F421D09CF707";
 	BYTE key[KEY_SIZE] = { 0 };
-	memcpy(key, ConvertHexStrToBytes(hexStr), KEY_SIZE);
-	//char key[KEY_SIZE] = { 0 };
-	//memcpy(key, "1234567890123456234", KEY_SIZE);
+	PBYTE btTmp(NULL);
+	SP::Module::Util::StrBuf2HexBuf(hexStr, &btTmp);
+	memcpy(key, btTmp, KEY_SIZE);
+	if (btTmp != NULL) {
+		delete[] btTmp;
+		btTmp = NULL;
+	}
 	nRet = (ErrorCodeEnum)m_FSM.GetEncTerminalInfoWithKey(encInfo, key);
 	if (nRet != Error_Succeed)
 	{
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetEncTerminalInfo failed:%d", nRet);
 		return false;
 	}
-	//TODO: CrossPlaform  [Gifur@202584]
-	char* pTmp = Str2Hex((char*)encInfo.m_pData, encInfo.m_iLength);
+	char* pTmp = SP::Module::Util::Str2Hex((char*)encInfo.m_pData, encInfo.m_iLength);
 	initMKReq.iniTerminalInfo = pTmp;
-
+	delete[] pTmp;
 	CSystemStaticInfo si;
 	pFunc->GetSystemStaticInfo(si);
 	initMKReq.terminalVersion = si.InstallVersion.ToString();

+ 7 - 35
Module/mod_alarm/mod_alarm.cpp

@@ -1,26 +1,21 @@
 #include "stdafx.h"
 #include "mod_alarm.h"
-#ifdef RVC_OS_WIN
-
-#else
+#ifdef RVC_OS_LINUX
 #include <sys/timeb.h>
 #include "SpUtility.h"
 #endif
-
+#include <winpr/sysinfo.h>
 
 void CAlarmEntity::OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
 	const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID, 
 	const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage, const linkContext &pLinkInfo)
 {
-		//Dbg("receive log,pszEntityName=%s,eLogType=%d,pszMessage=%s",pszEntityName,(int)eLogType,pszMessage);
-#ifdef RVC_OS_WIN
-
-#else
-		CSimpleStringA strMessage(true);
-		if (!(pszMessage == NULL || strlen(pszMessage) == 0))
-			strMessage = pszMessage;
+	CSimpleStringA strMessage(true);
+	if (!(pszMessage == NULL || strlen(pszMessage) == 0))
+		strMessage = pszMessage;
 
-		//如果是旧模式则转GBK码
+#ifdef RVC_OS_LINUX
+		//TODO: CrossPlaform 由文涛确认并处理:UOS现在是否还有区分新旧模式 如果是旧模式则转GBK码  [Gifur@2025820]
 		if (m_fsm.m_CenterModel == 0) {
 			if (!strMessage.IsNullOrEmpty()) {
 				std::string tmpStr = SP::Utility::UTF8ToGBK(pszMessage);
@@ -56,36 +51,13 @@ void CAlarmEntity::OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,con
 		}
 
 		char cDescription[512]={0};
-		//char clogTime[32]={0};//2020-20-20 12:12:12.100 日志时间,记得释放
 		char warnTime[20]={0};//2020-20-20 12:12:12 告警时间,记得释放
-
-		//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
 		SYSTEMTIME st;
 		GetLocalTime(&st);
-		//sprintf(clogTime, "%04d-%02d-%02d %02d:%02d:%02d.%03d  ", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
 		sprintf(warnTime, "%04d-%02d-%02d %02d:%02d:%02d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
-#else
-		struct timeb stime = { 0, 0 };
-		tm nowTm = { 0 };
-		ftime(&stime);
-		localtime_r(&stime.time, &nowTm);
-		//sprintf(clogTime, "%04d-%02d-%02d %02d:%02d:%02d.%03d  ", nowTm.tm_year + 1900, nowTm.tm_mon + 1, nowTm.tm_mday, nowTm.tm_hour, nowTm.tm_min, nowTm.tm_sec, stime.millitm);
-		sprintf(warnTime, "%04d-%02d-%02d %02d:%02d:%02d", nowTm.tm_year + 1900, nowTm.tm_mon + 1, nowTm.tm_mday, nowTm.tm_hour, nowTm.tm_min, nowTm.tm_sec);
-#endif
-
-		//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-		strncat(cDescription, pszMessage, 512 - 1);
-#else
 		strncat(cDescription, strMessage.GetData(), 512 - 1);
-#endif
-		
 		Alarm->Description = _strdup(cDescription);
 		Alarm->warnTime = _strdup(warnTime);
-
-
-
 		m_fsm.add_NewAlarm(Alarm);
 		m_fsm.m_iRec++;
 		if(m_fsm.m_iRec%500==0){

+ 2 - 17
Module/mod_assistantchannel/chan_protocol.h

@@ -53,18 +53,13 @@ typedef struct acm_hdr {
 	unsigned char encrypt : 1;
 	unsigned char error : 7;
 	unsigned short sub_type;
-	//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(RVC_OS_WIN)
-	unsigned long length; // 需要注意的是长度最大为2^16-1,65535
-	unsigned long id; // 包id
-	unsigned long hash;
-#else
 	unsigned int length; // 需要注意的是长度最大为2^16-1,65535
 	unsigned int id; // 包id
 	unsigned int hash;
-#endif //RVC_OS_WIN
 	unsigned char data[0]; // 长度由length决定
 }acm_hdr;
+
+
 typedef struct proxy_hdr {
 	char	 tag[3]; // 必须为’ACM’
 	char	 version; // 版本号,目前为1
@@ -73,12 +68,7 @@ typedef struct proxy_hdr {
 	unsigned int rtp_port; // 视频rtp端口
 	int media_desc; // 媒体描述
 	char client_id[20]; // 用户身份证号码,用与视频面签
-	//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(RVC_OS_WIN)
-	unsigned long encrypt_keyhash; // 加密key hash code
-#else
 	unsigned int  encrypt_keyhash; // 加密key hash code
-#endif //RVC_OS_WIN
 	char encrypt_key[16]; // encodestring(密钥),传送过去之后利用decodestring解密
 }proxy_hdr;
 typedef struct proxy_ack_hdr {
@@ -87,12 +77,7 @@ typedef struct proxy_ack_hdr {
 	unsigned int rtp_port; // 视频rtp端口
 	int media_desc; // 媒体描述
 	char client_id[20]; // peer request client_id
-	//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(RVC_OS_WIN)
-	unsigned long encrypt_keyhash; // 加密key hash code
-#else
 	unsigned int encrypt_keyhash; // 加密key hash code
-#endif //RVC_OS_WIN
 	char encrypt_key[16]; // encodestring(密钥),传送过去之后利用decodestring解密
 }proxy_ack_hdr;
 

+ 1 - 13
Module/mod_assistantchannel/mod_assistantchannel.cpp

@@ -1,6 +1,7 @@
 #include "stdafx.h"
 #include "mod_assistantchannel.h"
 #include "EventCode.h"
+#include <winpr/string.h>
 
 static const char *__states[] = {
 	"Idle", "Connecting", "Connected", "Closing"
@@ -68,13 +69,7 @@ static void __on_destroy(bizchan_t *chan, void *user_data)
 
 static void __dbg(void *user_data, const char *fmt, va_list arg)
 {
-	//vDbg(fmt, arg);
-	//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(RVC_OS_WIN)
 	int n = _vscprintf(fmt, arg);
-#else
-	int n = _scprintf(fmt, arg);
-#endif //RVC_OS_WIN
 	if (n >= MAX_PATH) {
 		char* buf = (char*)malloc((size_t)(n + 1));
 		vsnprintf(buf, n + 1, fmt, arg);
@@ -83,18 +78,11 @@ static void __dbg(void *user_data, const char *fmt, va_list arg)
 	}
 	else {
 		char strlog[MAX_PATH] = { 0 };
-		//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(RVC_OS_WIN)
 		_vsnprintf(strlog, MAX_PATH, fmt, arg);
-#else
-		vsnprintf(strlog, MAX_PATH, fmt, arg);
-#endif //RVC_OS_WIN
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s", strlog);
 	}
 }
 
-
-
 void CBizChannelEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext) 
 { 
 	ErrorCodeEnum Error = __OnStart(Error_Succeed);

文件差异内容过多而无法显示
+ 172 - 230
Module/mod_cardissuerstore/CardIssuerStoreFSM.cpp


+ 1 - 1
Module/mod_chromium/CModTools.cpp

@@ -1150,7 +1150,7 @@ namespace Chromium {
 			CSimpleString runningVer = "";
 			m_pEntity->GetFunction()->GetRunningVersion(runningVer);
 			dstInstallUrl.append("?terminalVersion=").append(runningVer.GetData());
-			//TODO: CrossPlaform  [Gifur@2025730]
+			//TODO: CrossPlaform  由良瑜确认并处理:考虑采用 SpUtility.h 中的 replaceInPlace 函数 [Gifur@2025730]
 #if defined(RVC_OS_LINUX)
 			auto replaceAll = [](std::string& str, const std::string& search, const std::string& replace) {
 				size_t pos = 0;

+ 0 - 39
Module/mod_chromium/CWSCodec.cpp

@@ -1267,45 +1267,6 @@ namespace Chromium {
 		msgInfo.value = value.second;
 	}
 
-	using namespace std;
-	vector<string> split(const string & s, const string & seperator) {
-		vector<string> result;
-		typedef string::size_type string_size;
-		string_size i = 0;
-
-		while (i != s.size()) {
-			//找到字符串中首个不等于分隔符的字母;
-			int flag = 0;
-			while (i != s.size() && flag == 0) {
-				flag = 1;
-				for (string_size x = 0; x < seperator.size(); ++x)
-					if (s[i] == seperator[x]) {
-						++i;
-						flag = 0;
-						break;
-					}
-			}
-
-			//找到又一个分隔符,将两个分隔符之间的字符串取出;
-			flag = 0;
-			string_size j = i;
-			while (j != s.size() && flag == 0) {
-				for (string_size x = 0; x < seperator.size(); ++x)
-					if (s[j] == seperator[x]) {
-						flag = 1;
-						break;
-					}
-				if (flag == 0)
-					++j;
-			}
-			if (i != j) {
-				result.emplace_back(s.substr(i, j - i));
-				i = j;
-			}
-		}
-		return result;
-	}
-
 	void CWSCodec::SerializeGetVarReq(cJSON * js, char* data, int* wpos, int* capacity, CMedthodInterface * pI, char* errmsg, ws_msgInfo& msgInfo) {
 		auto  transID = json_deal::getIntergerFromCjsonObj(js, "transID");
 		if (transID.first == false)

+ 2 - 20
Module/mod_chromium/mod_chromium.cpp

@@ -531,15 +531,6 @@ namespace Chromium {
 	{
 		LogManager::getInstance().logEntityStageChange("OnPreStart_register", 0, "begin");
 		ErrorCodeEnum Error;
-
-		//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(RVC_OS_LINUX)
-        Error = GetFunction()->SubscribeLog(m_uuidAllFault, this, Log_Notify, Severity_High, Error_IgnoreAll, -2, NULL, false);
-        if (Error_Succeed != Error) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("subscribe log for notify failed! %s", SpStrError(Error));
-        }
-#endif //RVC_OS_LINUX
-
 		if (!ConfigManager::getInstance().m_withBrowser)
 		{
 			if (Error_Succeed == (Error = GetFunction()->SubscribeLog(m_uuidAccessAuth, this, Log_Event, Severity_None, Error_IgnoreAll, -1, "AccessAuthorization")))
@@ -790,16 +781,9 @@ namespace Chromium {
 					return false;
 				}
 				path = csHardwareCfg + SPLIT_SLASH_STR + "root.ini";
-				//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(RVC_OS_WIN)
-				if (_access(path.GetData(), 0) == 0) {
-#else
-				if (access(path.GetData(), F_OK) == 0) {
-#endif
+				if (ExistsFileA(path)) {
 					return true;
-				}
-				else
-				{
+				} else {
 					DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("root.ini(%s) is not exist.", path.GetData());
 					return false;
 				}
@@ -808,8 +792,6 @@ namespace Chromium {
 			//if root.ini not exist
 			CSimpleString rootIni_path;
 			ConfigManager::getInstance().m_existRootIni = IsRootINIExist(rootIni_path);
-			
-
 
 			//the system info may be not complete.If the device is not install ,it can't not read the terminalNo.
 			CSystemStaticInfo t_sysInfo;

+ 1 - 2
Module/mod_counterconnector/CMakeLists.txt

@@ -7,8 +7,6 @@ set(${MODULE_PREFIX}_SRCS
 	ConnectorFSM.cpp
 	mod_counterconnector.h
 	mod_counterconnector.cpp
-	strutil.h
-	strutil.cpp
 	callroute_nodelist.h
 	callroute_nodelist.cpp
 	http_callrouter.h
@@ -19,6 +17,7 @@ set(MOD_VERSION_STRING "0.0.1-dev1")
 add_module_libraries(${MODULE_PREFIX} ${MODULE_NAME} ${MOD_VERSION_STRING})
 
 target_include_directories(${MODULE_NAME} PRIVATE
+	${RVC_TOOLKIT_INCLUDE_DIR}
 	${MODULE_BASE_DIR}/mod_assistantchannel
 	${MODULE_BASE_DIR}/mod_sipphone
 	${MODULE_BASE_DIR}/mod_mediacontroller

+ 5 - 64
Module/mod_counterconnector/ConnectorFSM.cpp

@@ -2,6 +2,9 @@
 #include "ConnectorFSM.h"
 #include "EventCode.h"
 #include "json/json.h"
+#include "strutil.h"
+#include <winpr/crt.h>
+#include <winpr/string.h>
 
 #define RELEASEING_TIMER_INTERVAL	1200
 #define RELEASEING_SIP_TIMER		20000
@@ -391,22 +394,12 @@ static int CStringSplit(char* str, char** result, size_t ucount, const char* del
 {
 	char* ptr = NULL;
 	size_t unum = ucount;
-	//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(RVC_OS_WIN)
 	char* p = strtok_s(str, del, &ptr);
 	while (p != NULL && unum > 0) {
 		*result++ = p;
 		p = strtok_s(NULL, del, &ptr);
 		unum--;
 	}
-#else
-	char* p = strtok_r(str, del, &ptr);
-	while (p != NULL && unum > 0) {
-		*result++ = p;
-		p = strtok_r(NULL, del, &ptr);
-		unum--;
-	}
-#endif //RVC_OS_WIN
 	return ucount - unum;
 }
 
@@ -433,58 +426,6 @@ static int GetCallInfoFromConfig(char* strcallurl, uint32_t ucalllen, char* stra
 	return iRet;
 }
 
-/*无符号长整形转字符型*/
-#if defined(RVC_OS_LINUX)
-namespace
-{
-	//TODO: CrossPlaform  [Gifur@2025730]
-	char* _ultoa(unsigned long value, char* pstring, int radix)
-	{
-		char tmp[33] = { 0 };
-		char* tp = tmp;
-		long i;
-		unsigned long v = value;
-		char* sp;
-
-		if (radix > 36 || radix <= 1 || NULL == pstring) {
-			return 0;
-		}
-
-		while (v || tp == tmp) {
-			i = v % radix;
-			v = v / radix;
-			if (i < 10)
-				*tp++ = i + '0';
-			else
-				*tp++ = i + 'a' - 10;
-		}
-
-		sp = pstring;
-
-		while (tp > tmp)
-			*sp++ = *--tp;
-		*sp = 0;
-		return pstring;
-	}
-}
-#endif //RVC_OS_LINUX
-
-static int get_interger_netaddr(char *strbuf, size_t ubufszie, const char* szip)
-{
-	int ret = -1;
-
-	unsigned long ulip = 0;
-	if (NULL == strbuf || NULL == szip){
-		return ret;
-	}
-
-	ulip = inet_addr(szip);
-	_ultoa(ulip, strbuf, 10);
-
-	ret = 0;
-	return ret;
-}
-
 int ACMCallFSM::ParseDefaultServer(const char* strServer)
 {
 	int iRet = 0;
@@ -877,7 +818,7 @@ void ACMCallFSM::s11_on_entry()
 		callurl_node_t *node = get_no_used_node(m_pCallRouteList);
 
 		char callid_str[64] = { 0 };
-		get_format_uuid(callid_str, 64);
+		str_get_format_uuid(callid_str, 64);
 
 		if (node != NULL){
 			m_LastSipError = MakeCall(node->strcallurl, CSimpleStringA::Format("sip:%s@%s;transport=UDP", node->strnewcallernum, ipstr), 
@@ -899,7 +840,7 @@ void ACMCallFSM::s11_on_entry()
 				snprintf(strserver, MAX_PATH, "%s", m_voipserver[index].c_str());
 				if (0 == GetCallInfoFromConfig(strcallurl, MAX_PATH, strassistip, 32, &iport, strserver)){
 					char strassitinter[32] = {0};
-					get_interger_netaddr(strassitinter, 32, strassistip);
+					str_get_interger_netaddr(strassitinter, 32, strassistip);
 					m_LastSipError = MakeCall(strcallurl, CSimpleStringA::Format("sip:%s#%s@%s;transport=UDP", m_strTerminalId.GetData(), strassitinter, ipstr), 
 						callid_str, m_CallingParam);
 					m_iChanProxyPort[0] = iport;

+ 1 - 26
Module/mod_counterconnector/ConnectorFSM.h

@@ -12,8 +12,6 @@
 
 #ifdef _WIN32
 #include "resource.h"
-#else
-#include "uuid/uuid.h"
 #endif
 
 #include "http_callrouter.h"
@@ -482,30 +480,7 @@ private:
 	int TranslateState(int innerState);
 	ErrorCodeEnum SetCallState(int state);
 
-	//TODO: CrossPlaform  [Gifur@2025730]
-	void get_format_uuid(char* strbuffer, size_t ulen)
-	{
-#ifdef RVC_OS_WIN
-		UUID uuid;
-		size_t uuidlen = 0;
-		RPC_CSTR buf;
-		UuidCreate((UUID*)&uuid);
-		UuidToString((UUID*)&uuid, &buf);
-
-		uuidlen = strlen((const char*)buf);
-		if (uuidlen < ulen) {
-			memcpy(strbuffer, (const char*)buf, uuidlen);
-		}
-
-		RpcStringFree(&buf);
-#else
-		uuid_t uuid;
-		uuid_generate(uuid);
-		uuid_unparse(uuid, strbuffer);
-#endif
-	}
-
-	//TODO: CrossPlaform IP [Gifur@2025729]
+	//TODO: CrossPlaform IP 框架具备统一支持,但不清楚影响范围(继而无法评估测试范围),未敢轻易改动 [Gifur@2025729]
 	ErrorCodeEnum GetLocalIP(char *buff, size_t ulen)
 	{
 #if defined(RVC_OS_WIN)

+ 1 - 1
Module/mod_counterconnector/callroute_nodelist.cpp

@@ -53,7 +53,7 @@ int add_node_to_list(node_list_head_t* plist, const char* newcallernum, const ch
 		int uport = atoi(pstrport);
 
 		memset(psipurl, 0, ulen+1);
-		fifter_string(psipurl, ulen+1, pcallurl, '\'');
+		str_fifter_string(psipurl, ulen+1, pcallurl, '\'');
 
 		ulen = strlen(pstrassistip);
 		pstrip = (char*)malloc(ulen+1);

+ 1 - 1
Module/mod_counterconnector/http_callrouter.cpp

@@ -45,7 +45,7 @@ static int get_http_callnodeinfo(node_info_t* pnode, const char* pcaller_num, co
 		snprintf(pnode->strcallurl, RVC_DATALEN, "%s%s%s@%s", "sip:", "8", paccess_num, strvoiceip);
 	}
 	//new new_caller_id_number=callernum#assist_int_ip
-	get_interger_netaddr(strinterip, RVC_DATALEN, pnode->strassistip);
+	str_get_interger_netaddr(strinterip, RVC_DATALEN, pnode->strassistip);
 	snprintf(pnode->strcallernum, RVC_DATALEN, "%s%s%s", pcaller_num, "#", strinterip);
 
 	iret = 0;

+ 0 - 150
Module/mod_counterconnector/strutil.cpp

@@ -1,150 +0,0 @@
-#include "stdafx.h"
-#include "strutil.h"
-
-int reset_buffer(void* pbuf, int idata, size_t ulen)
-{
-	int ret = -1;
-	if (pbuf){
-		memset(pbuf, idata, ulen);
-		ret = 0;
-	}
-
-	return ret;
-}
-
-
-int rend_string(char* pSrc, int iflag)
-{
-	int ret = -1;
-	if (pSrc){
-		char* pindex = pSrc;
-		while(*pindex != iflag){
-			pindex++;
-		};
-		*pindex = '\0';
-		ret = 0;
-	}
-
-	return ret;
-}
-
-int fifter_string(char*pbuf, size_t usize, const char* psrc, const char cflag)
-{
-	int ret = -1;
-	int i = 0;
-	int j = 0;
-	size_t ulen = 0;
-	const char* pindex = psrc;
-	if (NULL == psrc){
-		return ret;
-	}
-
-	ulen = strlen(psrc);
-	for (i=0; i<ulen && i<usize; i++){
-		if (pindex[i] != cflag){
-			pbuf[j++] = pindex[i];
-		}
-	}
-	if (j == ulen - 2){
-		ret = 0;
-	}
-
-	return ret;
-}
-//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(_MSC_VER)
-#else
-/*无符号长整形转字符型*/
-char* _ultoa(unsigned long value, char* pstring, int radix)
-{
-	char tmp[33] = { 0 };
-	char* tp = tmp;
-	long i;
-	unsigned long v = value;
-	char* sp;
-
-	if (radix > 36 || radix <= 1 || NULL == pstring) {
-		return 0;
-	}
-
-
-	while (v || tp == tmp) {
-		i = v % radix;
-		v = v / radix;
-		if (i < 10)
-			*tp++ = i + '0';
-		else
-			*tp++ = i + 'a' - 10;
-	}
-
-	sp = pstring;
-
-	while (tp > tmp)
-		*sp++ = *--tp;
-	*sp = 0;
-	return pstring;
-}
-
-#endif //_MSC_VER
-
-int get_interger_netaddr(char *strbuf, size_t ubufszie, const char* szip)
-{
-	int ret = -1;
-
-	unsigned long ulip = 0;
-	if (NULL == strbuf || NULL == szip){
-		return ret;
-	}
-
-	ulip = inet_addr(szip);
-	_ultoa(ulip, strbuf, 10);
-
-	ret = 0;
-	return ret;
-}
-
-int convert_interaddr_strip(char *strbuf, size_t ubufszie, const char* szinter_ip)
-{
-	int ret = -1;
-	char* strip = NULL;
-	struct sockaddr_in addr = {0};
-	if (!szinter_ip || !strbuf){
-		return ret;
-	}
-
-	addr.sin_addr.s_addr = strtoul(szinter_ip, NULL, 10);//inet_addr(config->switch_server);
-	strip = inet_ntoa(addr.sin_addr);
-	if (strip){
-		size_t ulen = strlen(strip);
-		if (ulen < ubufszie){
-			memcpy(strbuf, strip, ulen);
-			ret = 0;
-		}
-	}
-
-	return ret;
-}
-
-
-int connect_strings(char* strbuf, size_t ulen, const char* psrca, const char* pstr, const char* psrcb)
-{
-	int ret = -1;
-	size_t ulena = 0;
-	size_t ulenb = 0;
-	size_t ulenstr = 0;
-
-	if(!psrca || !psrcb || !pstr){
-		return ret;
-	}
-
-	ulena = strlen(psrca);
-	ulenb = strlen(psrcb);
-	ulenstr = strlen(pstr);
-
-	if (ulen > ulena + ulenb + ulenstr){
-		snprintf(strbuf, ulen, "%s%s%s", psrca, pstr, psrcb);
-		ret = 0;
-	}
-
-	return ret;
-}

+ 0 - 18
Module/mod_counterconnector/strutil.h

@@ -1,18 +0,0 @@
-#ifndef _STR_UTIL_
-#define _STR_UTIL_
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-#define proxy_copy(pDst, pSrc)		if(pSrc)	{	memcpy(pDst, pSrc, strlen(pSrc));	}
-
-int reset_buffer(void* pbuf, int idata, size_t ulen);
-int rend_string(char* pSrc, int iflag);
-int fifter_string(char*pbuf, size_t usize, const char* psrc, const char cflag);
-int get_interger_netaddr(char *strbuf, size_t ubufszie, const char* szip);
-int convert_interaddr_strip(char *strbuf, size_t ubufszie, const char* szinter_ip);
-int connect_strings(char* strbuf, size_t ulen, const char* psrca, const char* psrcb, const char* pstr);
-
-#endif

+ 3 - 11
Module/mod_facetracking/mod_facetracking.cpp

@@ -10,19 +10,11 @@
 #include "fileutil.h"
 #include "EventCode.h"
 #include "../mod_mediacontroller/Event.h"
+#include <winpr/string.h>
 
 #ifndef MAX_LOG_LEN
 #define MAX_LOG_LEN 512
 #endif
-//TODO: CrossPlaform  [Gifur@2025730]
-#ifndef rvc_snprintf
-#ifdef RVC_OS_WIN
-#define rvc_snprintf _snprintf
-#else
-#define rvc_snprintf snprintf
-#endif // RVC_OS_WIN
-
-#endif // rvc_snprintf
 
 // 脸部跟踪&拍照 devel: 0x302
 
@@ -281,11 +273,11 @@ void CFaceTrackingEntity::GetFaceImgName(char* FaceName, uint32_t uLen)
 	{
 		if (((const char*)strCustomerID == NULL)||(_stricmp(strCustomerID,"N") == 0))
 		{
-			rvc_snprintf(FaceName, uLen,"%s%s%s_0", strPath.GetData(), SPLIT_SLASH_STR, strSessionID.GetData());
+			_snprintf(FaceName, uLen,"%s%s%s_0", strPath.GetData(), SPLIT_SLASH_STR, strSessionID.GetData());
 		}
 		else
 		{
-			rvc_snprintf(FaceName, uLen, "%s%s%s_%s", strPath.GetData(), SPLIT_SLASH_STR, strSessionID.GetData(), strCustomerID.GetData());
+			_snprintf(FaceName, uLen, "%s%s%s_%s", strPath.GetData(), SPLIT_SLASH_STR, strSessionID.GetData(), strCustomerID.GetData());
 		}
 		bIsSessionChange = false;
 		bIsCustomerChange = false;

+ 2 - 4
Module/mod_guiconsole/guiconsole_define.cpp

@@ -386,8 +386,7 @@ static const std::unordered_map<LogTypeEnum, std::string> logTypeEnumToString =
 	{LogTypeEnum::Log_Warning, "Warning"},
 	{LogTypeEnum::Log_Error, "Error"},
 	{LogTypeEnum::Log_Debug, "Debug"},
-	{LogTypeEnum::Log_Fatal, "Fatal"},
-	{LogTypeEnum::Log_Notify, "Notify"}
+	{LogTypeEnum::Log_Fatal, "Fatal"}
 };
 
 static const std::unordered_map<std::string, LogTypeEnum> stringToLogTypeEnum = {
@@ -396,8 +395,7 @@ static const std::unordered_map<std::string, LogTypeEnum> stringToLogTypeEnum =
 	{"Warning", LogTypeEnum::Log_Warning},
 	{"Error", LogTypeEnum::Log_Error},
 	{"Debug", LogTypeEnum::Log_Debug},
-	{"Fatal", LogTypeEnum::Log_Fatal},
-	{"Notify", LogTypeEnum::Log_Notify}
+	{"Fatal", LogTypeEnum::Log_Fatal}
 };
 
 std::string LogTypeEnumToString(LogTypeEnum logType) {

+ 3 - 2
Module/mod_guiconsole/mod_guiconsole.cpp

@@ -443,7 +443,7 @@ std::pair<DWORD, std::string> CGUIConsoleEntity::VTMSystemControl(SpReqAnsContex
 	msg.entityName = GetEntityName();
 	msg.LogType = 1;
 	
-	//TODO: CrossPlaform 采用框架指令去关机,形成完整链路  [Gifur@2025729]
+	
 	DWORD rc = Error_Succeed;
 	if (!ctx->Req.rebootFunction.Compare("RestartApp", true))
 	{
@@ -455,7 +455,7 @@ std::pair<DWORD, std::string> CGUIConsoleEntity::VTMSystemControl(SpReqAnsContex
 	{
 		msg.message = "正在重启系统";
 		SpSendBroadcast(GetFunction(), eMsg_LogInfo, eMsgSig_LogInfo, msg);
-
+		//TODO: CrossPlaform 采用框架指令去关机,形成完整链路  [Gifur@2025729]
 #ifdef RVC_OS_WIN
 		rc = pFuncPrivilege->Reboot(RebootTrigger_ManualLocal, RebootWayEnum::RebootWay_OS);
 #else
@@ -467,6 +467,7 @@ std::pair<DWORD, std::string> CGUIConsoleEntity::VTMSystemControl(SpReqAnsContex
 	{
 		msg.message = "正在关闭系统";
 		SpSendBroadcast(GetFunction(), eMsg_LogInfo, eMsgSig_LogInfo, msg);
+		//TODO: CrossPlaform 采用框架指令去关机,形成完整链路  [Gifur@2025729]
 #ifdef RVC_OS_WIN
 		std::string cmdline = "shutdown -f -s -t 00";
 		openProcess(cmdline);

+ 7 - 25
Module/mod_healthmanager/HealthManagerFSM.cpp

@@ -5,6 +5,8 @@
 #include <regex>
 #include "SpUtility.h"
 #include "iniutil.h"
+#include "fileutil.h"
+
 #if defined(RVC_OS_WIN)
 #include <TlHelp32.h>
 #include <iphlpapi.h>
@@ -17,7 +19,7 @@
 #include <fcntl.h>
 #include <errno.h>
 #endif //RVC_OS_WIN
-
+#include <winpr/sysinfo.h>
 
 #include "mod_healthmanager.h"
 #include "publicFunExport.h"
@@ -27,15 +29,6 @@ using namespace std;
 const int MAX_AYSNC_TIMEOUT = 60000;
 const int MAX_IGNORE_TIMEOUT = 100;
 
-//TODO: CrossPlaform  [Gifur@2025730]
-unsigned long long GetLastErrorRVC() {
-#if defined(RVC_OS_WIN)
-	return GetLastError();
-#else
-	return errno;
-#endif //RVC_OS_WIN
-}
-
 enum EntityOP
 {
 	OP_STOP_ENTITY,
@@ -799,14 +792,8 @@ void CHealthManagerFSM::ToLogWarnTermAboutInfo()
 	char elapseTime[64] = {0};//使用机器启动时间秒数
 	ULONGLONG dwElapse = SP::Module::Comm::RVCGetTickCount();
 	DWORD elapseTimeTemp = dwElapse / 1000;
-	//TODO: CrossPlaform  [Gifur@2025729]
-#if defined(RVC_OS_WIN)
-	termInfo["OSTime"] = itoa(m_elapseTimeFromOSStart, xOSTime, 10);
-	termInfo["elapseTime"] = itoa(elapseTimeTemp, elapseTime, 10);
-#else
 	termInfo["OSTime"] = _itoa(m_elapseTimeFromOSStart, xOSTime, 10);
 	termInfo["elapseTime"] = _itoa(elapseTimeTemp, elapseTime, 10);
-#endif
 	
 	CSimpleStringA csRunPath("");
 	GetEntityBase()->GetFunction()->GetPath("Run", csRunPath);
@@ -846,12 +833,7 @@ bool CHealthManagerFSM::IfInUpgradeProcess()
 	ErrorCodeEnum eErr = GetEntityBase()->GetFunction()->GetPath("RunCfg", csRunCfgPath);
 	csFileName = csRunCfgPath + SPLIT_SLASH_STR + "starttime.dat";
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("csFileName:%s", csFileName.GetData());
-	//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(RVC_OS_WIN)
-	if (_access((const char*)csFileName, 0) == 0) {
-#else
-	if (access((const char*)csFileName, F_OK) == 0) {
-#endif
+	if (ExistsFileA(csFileName)) {
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("升级切换中");
 		return true;
 	}
@@ -915,7 +897,7 @@ void CHealthManagerFSM::WKUpdatePeriod()
 			stSyncTime.wHour, stSyncTime.wMinute, stSyncTime.wSecond);
 
 	SYSTEMTIME stNow = {};
-	GetLocalTimeRVC(stNow);
+	GetLocalTime(&stNow);
 	int lastUpdateDays = sumday(stSyncTime.wYear, stSyncTime.wMonth, stSyncTime.wDay);
 	int todayDays = sumday(stNow.wYear, stNow.wMonth, stNow.wDay);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("lastUpdateDays:%d,todayDays:%d,x:%d", lastUpdateDays,todayDays, todayDays-lastUpdateDays);
@@ -1143,7 +1125,7 @@ void CHealthManagerFSM::QueryAndSendCPUInfo()
 #else
 	ifstream cpuinfo("/proc/cpuinfo");
 	if (!cpuinfo.is_open()) {
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("opening /proc/cpuinfo error:%s", strerror(GetLastErrorRVC()));
+		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("opening /proc/cpuinfo error:%s", strerror(errno));
 		return;
 	}
 	std::map<std::string, std::string> map_cpuInfo;
@@ -1310,7 +1292,7 @@ void CHealthManagerFSM::CheckIfPinPadOK()
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("connect to pinpad failed.error code:%d", eErrCode);
 	}
 	else
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("new PinPadService_ClientBase failed.GetLastError:%d", GetLastErrorRVC());
+		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("new PinPadService_ClientBase failed.GetLastError:%d", GetLastError());
 	m_ullWaitForPinPad = ullWaitEnd - ullWaitStart;
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501A3").setCostTime(m_ullWaitForPinPad)("finish (or time out) check  PinPad");
 	return;

+ 45 - 76
Module/mod_healthmanager/mod_healthmanager.cpp

@@ -30,15 +30,15 @@
 #include "fileutil.h"
 #include "iniutil.h"
 #include "osutil.h"
-
-using namespace std;
+#include <winpr/sysinfo.h>
 
 #include "mod_healthmanager.h"
 #include "CommEntityUtil.hpp"
 #include "TerminalInfoQueryConn.h"
 #include "Chromium_client_g.h" //启动浏览器接口
-using namespace Chromium;
 
+using namespace std;
+using namespace Chromium;
 
 const DWORD HEALTHMANAGER_TIMER_ID = 1;
 const DWORD HEALTHMANAGER_WAIT_MAINPAGE_OPEN_TIMER_ID = 2;
@@ -85,7 +85,6 @@ namespace {
 
 	void InitializeOtherLogSwitch(CEntityBase* pEntity, const CSimpleStringA& strModuleName)
 	{
-		LOG_FUNCTION();
 		if (pEntity == NULL || strModuleName.IsNullOrEmpty()) {
 			return;
 		}
@@ -327,7 +326,7 @@ void CHealthManagerEntity::OnCheckTimeTimeout()
 		}
 	}
 	SYSTEMTIME localTime;
-	GetLocalTimeRVC(localTime);
+	GetLocalTime(&localTime);
 	//for example:[1----6]
 	//               ^ here we go
 	//in reboot period
@@ -384,28 +383,15 @@ void CHealthManagerEntity::OnCheckTimeTimeout()
 				ErrorCodeEnum eErr = GetFunction()->GetPath("RunCfg", csRunCfgPath);
 				csStartTime = csRunCfgPath + SPLIT_SLASH_STR + "starttime.dat";
 				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("csStartTime:%s", csStartTime.GetData());
-
-				//TODO: CrossPlaform  [Gifur@2025728]
-#if defined(RVC_OS_WIN)
-				if (_access((const char*)csStartTime, 0) == 0) {
-					int ret = DeleteFileA(csStartTime);//oiltmp@20240423 why don't use remove ,what's the different?
-					if (ret != 0)//删除成功,清理前次记录的guardian版本记录
-					{
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("delete start time file [%s] suc.", csStartTime.GetData());
-						spConfigRun->WriteConfigValue("Run", "VersionEx", "");
-					}
-					else
-						DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("delete time file [%s] error.[%d]", csStartTime.GetData(), GetLastError());
-				}
-#else
-				if (access((const char*)csStartTime, F_OK) == 0) {
-					int ret = remove(csStartTime);
-					if (ret == 0)//删除成功,清理前次记录的guardian版本记录
-						spConfigRun->WriteConfigValue("Run", "VersionEx", "");
-					else
-						DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("delete time file [%s] error.[%d]", csStartTime.GetData(), errno);
+				if (ExistsFileA(csStartTime)) {
+						if (RemoveFileA(csStartTime))//删除成功,清理前次记录的guardian版本记录
+						{
+							DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("delete start time file [%s] suc.", csStartTime.GetData());
+							spConfigRun->WriteConfigValue("Run", "VersionEx", "");
+						}
+						else
+							DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("delete time file [%s] error.[%d]", csStartTime.GetData(), GetLastError());
 				}
-#endif
 			}
 			if (iCheckGuardian > 0)
 			{
@@ -866,8 +852,7 @@ bool CHealthManagerEntity::DoRestart()
 	}
 	DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("[NonExclusive],NonGuardian=%s", csimpleStrMachineTypeCfg.GetData());
 	SYSTEMTIME localTime;
-	GetLocalTimeRVC(localTime);
-
+	GetLocalTime(&localTime);
 
 	ITimerListener *pListener = new TimerOutHelper<CHealthManagerEntity>(this, &CHealthManagerEntity::OnCheckTimeTimeout);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set check timer %d(ms)", HEALTHMANAGER_TIMER_INTERVAL);
@@ -897,49 +882,33 @@ bool CHealthManagerEntity::DoRestart()
 		}
 		
 	}
-	//TODO: CrossPlaform  [Gifur@2025730]
-#if defined(RVC_OS_WIN)
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("guardian file path [%s]", deamonBasePath.GetData());
-	HMODULE hDll = LoadLibraryA(deamonBasePath);
-	if (hDll == NULL)
+	do 
 	{
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("load guardianbase.dll failed(%d)", GetLastError());
-		return false;
-	}
+		if (!ExistsFileA(deamonBasePath)) {
+			DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("Load guardian %s failed: no exist", (const char*)deamonBasePath);
+			return false;
+		}
+		toolkit_lib_t guardianLib;
+		int res = toolkit_dlopen(deamonBasePath, &guardianLib);
+		if (res != 0) {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("toolkit_dlopen[%s] failed with error %s.", deamonBasePath.GetData(), toolkit_dlerror(&guardianLib));
+			return false;
+		}
+		if ((res = toolkit_dlsym(&guardianLib, "ShakeHands", (void**)&m_pfShake)) != 0)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Get 'ShakeHands' Func address failed with error: %s", toolkit_dlerror(&guardianLib));
+			toolkit_dlclose(&guardianLib);
+			return false;
+		}
+		if ((res = toolkit_dlsym(&guardianLib, "UpgradeRestart", (void**)&m_pfUpgradeRestart)) != 0)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Get 'UpgradeRestart' Func address failed with error: %s", toolkit_dlerror(&guardianLib));
+			toolkit_dlclose(&guardianLib);
+			return false;
+		}
+	} while (false);
 
-	m_pfShake = (pfShakeHands)GetProcAddress(hDll,"ShakeHands");
-	if (m_pfShake == NULL)
-	{
-		DbgWithLink(LOG_LEVEL_ERROR,LOG_TYPE_SYSTEM)("get ShakeHands function address failed(%d)",GetLastError());
-		return false;
-	}
-	m_pfUpgradeRestart = (pfUpgradeRestart)GetProcAddress(hDll,"UpgradeRestart");
-	if (m_pfUpgradeRestart == NULL)
-	{
-		DbgWithLink(LOG_LEVEL_ERROR,LOG_TYPE_SYSTEM)("get UpgradeRestart function address failed(%d)",GetLastError());
-		return false;
-	}
-#else
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("guardian file path [%s]", (LPCTSTR)deamonBasePath);
-	void* handle = dlopen(deamonBasePath, RTLD_LAZY);
-	if (handle == NULL)
-	{
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("load libGuardianBase.so failed(%d)", errno);
-		return false;
-	}
-	m_pfShake = (pfShakeHands)dlsym(handle, "ShakeHands");
-	if (m_pfShake == NULL)
-	{
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("get ShakeHands failed(%d)", GetLastError());
-		return false;
-	}
-	m_pfUpgradeRestart = (pfUpgradeRestart)dlsym(handle, "UpgradeRestart");
-	if (m_pfUpgradeRestart == NULL)
-	{
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("get UpgradeRestart failed(%d)", GetLastError());
-		return false;
-	}
-#endif
 	DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("have load guardian base file (dll/so).");
 	if (CheckGuardianIsRun(true) > 0)
 	{
@@ -963,19 +932,19 @@ bool CHealthManagerEntity::DoRestart()
 
 bool CHealthManagerEntity::SaveCurrentVersion()
 {
-	CSimpleStringA csRootVer,csRunInfo,csBakFile,csVerFile;
+	CSimpleStringA csRootVer,csRunCfg,csBakFile,csVerFile;
 	ErrorCodeEnum eErr;
 	if ((eErr = GetFunction()->GetPath("RootVer",csRootVer)) != Error_Succeed)
 	{
 		DbgWithLink(LOG_LEVEL_ERROR,LOG_TYPE_SYSTEM)("Get version path failed(%s).", SpStrError(eErr));
 		return false;
 	}
-	if ((eErr = GetFunction()->GetPath("RunInfo",csRunInfo)) != Error_Succeed)
+	if ((eErr = GetFunction()->GetPath("RunCfg", csRunCfg)) != Error_Succeed)
 	{
-		DbgWithLink(LOG_LEVEL_ERROR,LOG_TYPE_SYSTEM)("get runinfo path failed(%s)", SpStrError(eErr));
+		DbgWithLink(LOG_LEVEL_ERROR,LOG_TYPE_SYSTEM)("get RunCfg path failed(%s)", SpStrError(eErr));
 		return false;
 	}
-	csBakFile = csRunInfo + SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR "version.dat";
+	csBakFile = csRunCfg + SPLIT_SLASH_STR + "version.dat";
 	ofstream outfile (csBakFile,std::ofstream::binary);
 
 	CSmartPointer<IConfigInfo> spConfigRun;
@@ -1002,16 +971,16 @@ bool CHealthManagerEntity::SaveCurrentVersion()
 }
 bool CHealthManagerEntity::SaveFrameStartTimeForUpgrade()
 {
-	CSimpleStringA csRunInfo,csBakFile;
+	CSimpleStringA csRunCfg,csBakFile;
 	ErrorCodeEnum eErr;
 
-	if ((eErr = GetFunction()->GetPath("RunInfo",csRunInfo)) != Error_Succeed)
+	if ((eErr = GetFunction()->GetPath("RunCfg",csRunCfg)) != Error_Succeed)
 	{
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("get runinfo path failed(%s)", SpStrError(eErr));
+		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("get RunCfg path failed(%s)", SpStrError(eErr));
 		return false;
 	}
 
-	csBakFile = csRunInfo + SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR "starttime.dat";
+	csBakFile = csRunCfg + SPLIT_SLASH_STR + "starttime.dat";
 	ofstream outfile (csBakFile,std::ofstream::binary);
 
 	CSystemRunInfo sysRunInfo;

+ 0 - 17
Module/mod_healthmanager/mod_healthmanager.h

@@ -17,10 +17,8 @@ using namespace HealthManager;
 using namespace std;
 using namespace UpgradeManager;
 
-
 #include "GuardianBase.h"
 typedef int (*pfShakeHands)(WorkStateEnum &eState);
-
 typedef int (*pfPushUpdateTask)(const char *pszPackName);
 typedef bool (*pfIsInstalling)();
 typedef int (*pfUpgradeRestart)(const DWORD dwParam1,const DWORD dwParam2);
@@ -45,21 +43,6 @@ struct ModuleRunInfo
 	int abnormalCount;
 	bool bAbnormalBusy;
 };
-struct RestartModeInfo
-{
-	DWORD dwTimes;
-	DWORD dwInternal;
-};
-
-#define MACSESION 6
-
-
-#include <winpr/sysinfo.h>
-static void GetLocalTimeRVC(SYSTEMTIME& stTime)
-{
-	GetLocalTime(&stTime);
-}
-
 
 class HealthManagerSession : public HealthManagerService_ServerSessionBase
 {

+ 215 - 176
Module/mod_heartbeat/HeartBeatFSM.cpp

@@ -4,6 +4,7 @@
 #include <regex>
 #include "json/json.h"
 #include <string.h>
+#include <winpr/crt.h>
 
 using namespace CardReadAdapter;
 #include "EventCode.h"
@@ -29,12 +30,32 @@ const char * ProcessTimeQuery	= "\\Processor Information(_Total)\\% Processor Ti
 
 #ifdef DEVOPS_ON_ST /*DevOps流水线编译,ST环境*/
 #define HAND_SHAKE_URL			"http://connectservice.paasst.cmbchina.cn/api/heartbeat/keep"
+#define	CARDISSUER_STAND_MAIN_SERVER				"rvctsst.cmbchina.cn 30033"
+#define CARDISSUER_STAND_BACKUP_SERVER				""
+#define	CARDISSUER_STORE_MAIN_SERVER				"rvctsst.cmbchina.cn 30033"
+#define CARDISSUER_STORE_BACKUP_SERVER				""
+
 #elif defined(DEVOPS_ON_UAT)/*DevOps流水线编译,UAT环境*/
 #define HAND_SHAKE_URL			"http://connectservice.paasuat.cmbchina.cn/api/heartbeat/keep"
+#define	CARDISSUER_STAND_MAIN_SERVER				"rvctsuat.cmbchina.cn 30033"
+#define CARDISSUER_STAND_BACKUP_SERVER				""
+#define	CARDISSUER_STORE_MAIN_SERVER				"55.6.78.32 30033"
+#define CARDISSUER_STORE_BACKUP_SERVER				""
+
 #elif defined(DEVOPS_ON_PRD)/*DevOps流水线编译,PRD环境*/
 #define HAND_SHAKE_URL			"https://connectservice.paas.cmbchina.cn/api/heartbeat/keep"
+#define	CARDISSUER_STAND_MAIN_SERVER				"rvcts.cmbchina.cn 30033"
+#define CARDISSUER_STAND_BACKUP_SERVER				""
+#define	CARDISSUER_STORE_MAIN_SERVER				"rvccardstore.cmbchina.cn 30033"
+#define CARDISSUER_STORE_BACKUP_SERVER				""
+
 #else/*DevOps流水线编译,Dev环境&本地编译等非DevOps环境*/
 #define HAND_SHAKE_URL			"http://connectservice.paasst.cmbchina.cn/api/heartbeat/keep"
+#define	CARDISSUER_STAND_MAIN_SERVER				"rvctsst.cmbchina.cn 30033"
+#define CARDISSUER_STAND_BACKUP_SERVER				""
+#define	CARDISSUER_STORE_MAIN_SERVER				"rvctsst.cmbchina.cn 30033"
+/*多个备机地址用分隔符'|'隔开,eg: rvctsst1.cmbchina.cn 30033|rvctsst2.cmbchina.cn 30033*/
+#define CARDISSUER_STORE_BACKUP_SERVER				""
 #endif
 
 // End Performance Component [Josephus in 9:32:05 2016/4/23]
@@ -48,8 +69,9 @@ ErrorCodeEnum CHeartBeatFSM::OnInit()
 	CSmartPointer<IConfigInfo> spConfig;
 	CSystemStaticInfo sysInfo;
 	Error = GetEntityBase()->GetFunction()->GetSystemStaticInfo(sysInfo);
-	if(Error == Error_Succeed) {
-		m_localDeviceNo = sysInfo.strTerminalID;
+	if (Error != Error_Succeed) {
+		LogWarn(Severity_Middle, Error_NotConfig, LOG_EVT_HEARTBEAT_LACK_CENSETTINGS, "获取GetSystemStaticInfo失败");
+		return Error_DevLoadFileFailed;
 	}
 
 	Error = spEntityFunction->OpenConfig(Config_CenterSetting, spConfig);
@@ -57,13 +79,15 @@ ErrorCodeEnum CHeartBeatFSM::OnInit()
 		LogWarn(Severity_Middle, Error_NotConfig, LOG_EVT_HEARTBEAT_LACK_CENSETTINGS, "打开集中配置失败,请检查集中配置是否存在!");
 		return Error_DevLoadFileFailed;
 	}
-	m_tmpTestFlag = 0;
+	
 
 	m_isCardStore = !sysInfo.strMachineType.Compare("RVC.CardStore", true);
 
-	ErrorCodeEnum rc = GetServerAddr(spConfig, m_isCardStore);
+	//ErrorCodeEnum rc = GetServerAddr(spConfig, m_isCardStore);
+	ErrorCodeEnum rc = ParseServerAddr(m_isCardStore);
+
 	if (Error_Succeed != rc) {
-		LogWarn(Severity_Middle, Error_NotConfig, LOG_EVT_HEARTBEAT_LACK_CENSETTINGS, "找不到对应的配置,请检查集中配置是否存在!");
+		LogWarn(Severity_Middle, Error_NotConfig, LOG_EVT_HEARTBEAT_SERVER_CFG_FAIL, "读取连接虚机服务配置失败,请检查配置是否正确!");
         return rc;
 	}
 	int tmpCrossUseJS = 0;
@@ -73,8 +97,6 @@ ErrorCodeEnum CHeartBeatFSM::OnInit()
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CrossUseJS=%d", tmpCrossUseJS);
 	}
 	
-	spConfig->ReadConfigValueInt(GetEntityBase()->GetEntityName(),"TestFlag",m_tmpTestFlag);
-
 	spConfig->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "LongConnInterval", m_longConnInterval);
 	if (m_longConnInterval == 0) {
 		//未配置
@@ -106,12 +128,20 @@ ErrorCodeEnum CHeartBeatFSM::OnInit()
 			m_handShakeConnInterval = intervalTemp;
 		}
 	}
-	
+	int tmpSleepMode = 0;
+	Error =spConfig->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "SleepMode", tmpSleepMode);
+	if(Error ==Error_Succeed){
+		if (tmpSleepMode == 1) {
+			m_bSleepMode = true;
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("SleepMode=%d", tmpSleepMode);
+		}
+	}
+
 	//网络字节序
 	//由于双活改造,改成固定ip,分行服务有处理
 	//m_servIP = "99.1.100.215";
 	m_dwServIP = inet_addr("99.1.100.215");
-	//m_csServerIP = m_servIP;
+
 
 	CSimpleStringA csRunDiskName("C:\\");
 	Error = GetEntityBase()->GetFunction()->GetPath("Run", csRunDiskName);
@@ -126,14 +156,13 @@ ErrorCodeEnum CHeartBeatFSM::OnInit()
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Split rundisk file string(%s) failed", (LPCTSTR)csRunDiskName);
 		return Error_Unexpect;
 	}
-	//CSimpleStringA temp="";
-	//spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(), "HandShakeUrl", temp);
+
 	m_strHandShakeUrl = HAND_SHAKE_URL;
 	//有心跳地址才启动心跳新线程
 	if (!m_strHandShakeUrl.IsNullOrEmpty()) {
 		NewHandShakeTask* task = new NewHandShakeTask(this);
 		Error = this->GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
-		if (rc != Error_Succeed)
+		if (Error != Error_Succeed)
 		{
 			LogError(Severity_Middle, rc, 0, CSimpleStringA::Format("NewHandShakeTask Thread is fail,%d", (int)rc).GetData());
 			m_testResult = Error_InvalidState;//启动心跳线程失败
@@ -181,8 +210,9 @@ void CHeartBeatFSM::s0_on_entry()
 		FSMEvent *e = new FSMEvent(USER_EVT_START);
 		PostEventFIFO(e);
 		m_initTimes++;
-		if (m_initTimes > 1)
-			Sleep(30000);
+		if (m_initTimes > 1) {
+			Sleep(m_ConnectSleepInterval);
+		}
 		if (m_initTimes > MAX_INIT_TIMES)
 		{
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("have try to init x times,give up!");
@@ -251,7 +281,7 @@ void CHeartBeatFSM::s2_on_entry()
 	m_initTimes = 0;
 	m_testResult = Error_Succeed;
 	LogEvent(Severity_Middle, LOG_EVT_HEARTBEAT_CONNECTED, "Branch heartbeat service connected.");
-	LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_HEARTBEAT_CONNECTED, "Branch heartbeat service connected.");
+	//LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_HEARTBEAT_CONNECTED, "Branch heartbeat service connected.");
 }
 void CHeartBeatFSM::s2_on_exit()
 {
@@ -347,20 +377,12 @@ int CHeartBeatFSM::Starting()
 
 	if (!m_pHandShakeConn) 
 	{
-		//HeartBeatConnection* pHandShakeConn;
 		m_pHandShakeConn = new HeartBeatConnection(m_pEntity, this);
 		if (m_pHandShakeConn != NULL)
 		{
-			bool bConn = false;
-
-			if(m_isCardStore)
-			{
-				bConn = m_pHandShakeConn->Connect(m_servIP, m_port, 3);
-			}
-			else
-			{
-				bConn = m_pHandShakeConn->ConnectFromCentralSetting();
-			}
+			CSimpleStringA connectedServ = "";
+			bool bConn = m_pHandShakeConn->ConnectFromAddress(m_servStr, m_servStrBArr, connectedServ);
+			
 			if (!bConn) 
 			{
 				m_pHandShakeConn->Close();
@@ -372,6 +394,17 @@ int CHeartBeatFSM::Starting()
 				LogWarn(Severity_Middle, Error_Unexpect, LOG_EVT_HEARTBEAT_UN_CONNECTED, "Branch heartbeat service unconnected.");
 				return 1;
 			}
+			else {
+				CSimpleStringA msg = "";
+				if (!connectedServ.IsNullOrEmpty()) {
+					msg = CSimpleStringA::Format("heartbeat service connected. server addr str = %s", connectedServ.GetData());
+				}
+				else {
+					msg = CSimpleStringA::Format("heartbeat service connected. server use last time addr str ");
+				}
+				LogWarn(Severity_Low, Error_Succeed, LOG_EVT_HEARTBEAT_CONNECTED, msg);
+				return 0;
+			}
 		}
 	}
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("HeartBeat connected.");
@@ -388,6 +421,7 @@ int CHeartBeatFSM::DoHandShake()
 			
 			if (!m_pHandShakeConn || !m_pHandShakeConn->IsConnectionOK())
 			{
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("DoHandShake m_pHandShakeConn is disConnection");
 				FSMEvent *e = new FSMEvent(USER_EVT_START);
 				PostEventFIFO(e);
 				break;
@@ -395,27 +429,31 @@ int CHeartBeatFSM::DoHandShake()
 			GetEntityBase()->GetFunction()->SetSysVar("HeartbeatState", "C");
 			m_pHandShakeConn->SendHandShake();
 
-			if(m_pHandShakeConn->IsConnectionOK() && !m_bAlarmed)
-			{
-				regex reg("((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])");
-				if(regex_match(m_servIP.GetData(), reg))
-				{
-					CSimpleStringA msg = CSimpleStringA::Format("Branch server IP: %s, backup ip: %s", m_servIP.GetData(), m_servIPB.GetData());
-					LogWarn(Severity_Low, Error_Succeed, LOG_EVT_CONNECT_BRANCH, msg);
-				}
-				else
-				{
-					CSimpleStringA msg = CSimpleStringA::Format("Center server url: %s", m_servIP.GetData());
-					LogWarn(Severity_Low, Error_Succeed, LOG_EVT_CONNECT_CENTER, msg);
-				}
-				m_bAlarmed = true;
+			if (m_bSleepMode) {
+				Sleep(m_longConnInterval);//修改成可配置的时间间隔
 			}
-			Sleep(m_longConnInterval);//修改成可配置的时间间隔
-			//Sleep(20000);//oiltest
-			if (m_tmpTestFlag)
-			{
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("send spshell.exe restart event.");
-				LogEvent(Severity_Middle, Event_Req_Framework_Restart, "spshell.exe restart");
+			else {
+				int sleepTimeInterval = 10000;
+				int remainSleepTime = m_longConnInterval;
+				while (remainSleepTime > 0) {
+					int sleepTime = 0;
+					if (remainSleepTime >= sleepTimeInterval) {
+						sleepTime = sleepTimeInterval;
+					}
+					else {
+						sleepTime = remainSleepTime;
+					}
+					Sleep(sleepTime);
+					remainSleepTime = remainSleepTime - sleepTime;
+					if (!m_pHandShakeConn || !m_pHandShakeConn->IsConnectionOK()) {
+						DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("m_pHandShakeConn is disconnect");
+						break;
+					}
+					else {
+						//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("m_pHandShakeConn is connect");
+					}
+				}
+
 			}
 		}
 	}
@@ -538,69 +576,36 @@ string CHeartBeatFSM::HandShakeJsonStr() {
 	//写入shakehandvo对象
 	CSystemStaticInfo sysSInfo;
 	m_pEntity->GetFunction()->GetSystemStaticInfo(sysSInfo);
-	CSimpleStringA warningLevel("w"), runState("O"), customerHandle("c"), callState("s"),
-		localMaintain("l"), remoteMaintain("m"), termStage("U");
-	//m_pEntity->GetFunction()->GetSysVar("RunState", runState);
-	m_pEntity->GetFunction()->GetSysVar("CustomerHandle", customerHandle);
-	m_pEntity->GetFunction()->GetSysVar("CallState", callState);
-	m_pEntity->GetFunction()->GetSysVar("TerminalStage", termStage);
 	obj1["terminalNo"] = sysSInfo.strTerminalID.GetData();
-	obj1["ip"] = (unsigned int)GetLocalIP();
-	obj1["warningLevel"] = warningLevel.GetData();
-	obj1["runState"] = runState.GetData();
-	obj1["customerHandle"] = customerHandle.GetData();
-	obj1["callState"] = callState.GetData();
-	obj1["localMaintain"] = localMaintain.GetData();
-	obj1["remoteMaintain"] = remoteMaintain.GetData();
-	obj1["termStage"] = termStage.GetData();
+	obj1["ip"] = 0;
+	obj1["warningLevel"] = "";
+	obj1["runState"] = "";
+	obj1["customerHandle"] = "";
+	obj1["callState"] = "";
+	obj1["localMaintain"] = "";
+	obj1["remoteMaintain"] = "";
+	obj1["termStage"] = "";
 	obj1["preTermStage"] = "";
 	obj1["netState"] = "";
 	obj1["preNetState"] = "";
 	root["shakeHandVO"]=Json::Value(obj1);
 
 	//写入shakeHandSystemInfo对象
-	TermianlCounter counter;
-	ErrorCodeEnum erroCode = GetPerformCounter(counter);
-	if (erroCode != Error_Succeed)
-	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Get Terminal Performance Information failed !!!");
-	}
-	//Dbg("dwServIP 0x%x", counter.serverIP);
-#ifdef RVC_OS_WIN
-	const char* diskPath = GetRunDiskPath();
-	ULARGE_INTEGER uliFreeBytesAvailable;
-	if (GetDiskFreeSpaceEx(diskPath, &uliFreeBytesAvailable, NULL, NULL))
-	{
-		counter.freeDisk = (unsigned int)(uliFreeBytesAvailable.QuadPart / 1024.0 / 1024.0);
-	}
-	else
-	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetDiskFreeSpaceEx with %s failed failed 0x%x", diskPath, GetLastError());
-	}
-#else
-	//oiltestlinux
-	counter.freeDisk = 0;
-#endif //RVC_OS_WIN
 	obj2["serverIP"] = (unsigned int)m_dwServIP;
-	obj2["totalMem"] = (int)counter.totalMem;
-	obj2["freeMem"] = (int)counter.freeMem;
-	obj2["procNum"] = (int)counter.procNum;
-	obj2["threadNum"] = (int)counter.threadNum;;
-	obj2["handleNum"] = (unsigned int)counter.handleNum;;
-	obj2["freeDisk"] = (unsigned int)counter.freeDisk;
-	obj2["osStartTime"] = CSimpleStringA::Format("%s",counter.osStartTime).GetData();
-	obj2["cpuLoad"] = (int)counter.cpuLoad;
+	obj2["totalMem"] = 0;
+	obj2["freeMem"] = 0;
+	obj2["procNum"] = 0;
+	obj2["threadNum"] = 0;
+	obj2["handleNum"] = 0;
+	obj2["freeDisk"] = 0;
+	obj2["osStartTime"] = "";
+	obj2["cpuLoad"] = 0;
 	root["shakeHandSystemInfo"]=Json::Value(obj2);
 
 	//写入shakeHandErrorVO对象
-	HandErrListReq errListReq;
-	errListReq.warnLevel = GetWarnLevel();
-	errListReq.reserved1 = ' ';
-	ZeroMemory(errListReq.errList, 512);
 
-	obj3["warnLevel"] = errListReq.warnLevel;
-	string tmp_string(1, errListReq.reserved1);
-	obj3["reserved1"] = tmp_string.c_str();
+	obj3["warnLevel"] = 0;
+	obj3["reserved1"] = "";
 	obj3["errList"] = "";
 	root["shakeHandErrorVO"]=Json::Value(obj3); 
 
@@ -683,12 +688,7 @@ void CHeartBeatFSM::LocalPreOnline(int slot, CSimpleStringA fromTermNo,CSimpleSt
 	req.businessData = data;
 	char buf[16];
 	ZeroMemory(buf, sizeof(buf));
-	//TODO: CrossPlaform  [Gifur@2025729]
-#ifdef RVC_OS_WIN
-	itoa(slot, buf, 10);
-#else
 	_itoa(slot, buf, 10);
-#endif	
 	CSimpleStringA kaku("kaku#");
 	req.module = 1;
 	req.reserved2.Init(2);
@@ -1190,6 +1190,7 @@ void HeartBeatConnection::SendCardActive(const int type,const int slot,unsigned
 	CSimpleStringA inParm = CSimpleStringA::Format("SendCardActive,type:%d, slot:%d, errCode:%d, fromTerm:%s, termNo:%s, findCard:%d, cardPos:%d, dataSize:%d,errCSCode:%d",
 													type, slot, errCode, m_TerminalNo.GetData(), termNo, findCard, cardPos, dataSize, errCSCode);
 	LogWarn(Severity_Low, Error_Unexpect, HeartBeat_UserErrorCode_SendCardActive_InParam, inParm.GetData());
+	//TODO: 下面这两部分,绝大部分逻辑类似,为什么不把相同的部分抽出来???  [Gifur@2025821]
 	//发起跨机调用包
 	if (type == 0||type==10)
 	{
@@ -1198,19 +1199,12 @@ void HeartBeatConnection::SendCardActive(const int type,const int slot,unsigned
 		m_pEntity->GetFunction()->GetSystemStaticInfo(sysSInfo);
 		req.type = type;
 		req.slot = slot;
-
-		//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-		strncpy_s(req.FromTerminalNo, m_TerminalNo.GetData(), m_TerminalNo.GetLength());
-		strncpy_s(req.Account, account, accSize);
-		strncpy_s(req.TerminalNo, termNo, strlen(termNo));
-		strncpy_s(req.Param2, data, dataSize);
-#else
+		
 		strcpy_s(req.FromTerminalNo, sizeof(req.FromTerminalNo), m_TerminalNo.GetData());
 		strcpy_s(req.Account, accSize, account);
 		strcpy_s(req.TerminalNo, sizeof(req.TerminalNo), termNo);
 		strcpy_s(req.Param2, dataSize, data);
-#endif //RVC_OS_WIN		
+
 		CSmartPointer<IPackage> pkt = CreateNewPackage("CARDACT");
 		pkt->AddStruct("INSREQX", false, false, (LPBYTE)&req, sizeof(CardActiveReq));
 
@@ -1228,18 +1222,11 @@ void HeartBeatConnection::SendCardActive(const int type,const int slot,unsigned
 		req.cardPos = cardPos;
 		req.reserved1 = errCSCode;
 
-		//TODO: CrossPlaform  [Gifur@2025730]
-#ifdef RVC_OS_WIN
-		strncpy_s(req.FromTerminalNo, m_TerminalNo.GetData(), m_TerminalNo.GetLength());
-		strncpy_s(req.Account, account, accSize);
-		strncpy_s(req.TerminalNo, termNo, strlen(termNo));
-		strncpy_s(req.Param2, data, dataSize);
-#else
 		strcpy_s(req.FromTerminalNo, sizeof(req.FromTerminalNo), m_TerminalNo.GetData());
 		strcpy_s(req.Account, accSize, account);
 		strcpy_s(req.TerminalNo, sizeof(req.TerminalNo), termNo);
 		strcpy_s(req.Param2, dataSize, data);
-#endif //RVC_OS_WIN		
+
 		CSmartPointer<IPackage> pkt = CreateNewPackage("CARDACT");
 		pkt->AddStruct("INSREQX", false, false, (LPBYTE)&req, sizeof(CardActiveReq));
 
@@ -1394,77 +1381,129 @@ void HeartBeatConnection::PkgRcvProcCardActive(const CSmartPointer<IPackage> &pR
 	}
 }
 
-ErrorCodeEnum CHeartBeatFSM::GetServerAddr(CSmartPointer<IConfigInfo> &spConfig, bool isCardStore)
+//ErrorCodeEnum CHeartBeatFSM::GetServerAddr(CSmartPointer<IConfigInfo> &spConfig, bool isCardStore)
+//{
+//	//卡库用新地址
+//	if(isCardStore)
+//	{
+//		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"ServerNew",m_servStr);
+//
+//		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ServerNew=%s", m_servStr);
+//		if (m_servStr.IsNullOrEmpty()) {
+//			GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的ServerNew配置,请检查集中配置");
+//			return Error_Param;
+//		}
+//
+//		if (!m_servStr.IsNullOrEmpty())
+//		{
+//			CAutoArray<CSimpleStringA> aaServ = m_servStr.Split(' ');
+//			if (aaServ.GetCount() >= 2)
+//			{
+//				m_servIP = aaServ[0];
+//				m_port = atoi(aaServ[1]);
+//
+//			}
+//			else
+//			{
+//				GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的配置,请检查集中配置");
+//				return Error_Param;
+//			}
+//		}
+//		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s,%d",(LPCTSTR)m_servIP,m_port);
+//	}
+//	else
+//	{
+//		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"Server",m_servStr);
+//		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"Server_Backup",m_servStrB);
+//		if (!m_servStr.IsNullOrEmpty())
+//		{
+//			CAutoArray<CSimpleStringA> aaServ = m_servStr.Split(' ');
+//			if (aaServ.GetCount() >= 2)
+//			{
+//				m_servIP = aaServ[0];
+//				m_port = atoi(aaServ[1]);
+//
+//			}
+//			else
+//			{
+//				GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的配置,请检查集中配置");
+//				return Error_Param;
+//			}
+//		}
+//		if (!m_servStrB.IsNullOrEmpty())
+//		{
+//			CAutoArray<CSimpleStringA> aaServB = m_servStrB.Split(' ');
+//			if (aaServB.GetCount() >= 2)
+//			{
+//				m_servIPB = aaServB[0];
+//				m_portB = atoi(aaServB[1]);
+//
+//			}
+//			else
+//			{
+//				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("no backup(%s).",(LPCSTR)m_servStrB);
+//				m_servIPB = m_servIP;
+//				m_portB = m_port;
+//			}
+//		}
+//
+//		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s,%d;%s,%d",(LPCTSTR)m_servIP,m_port,(LPCTSTR)m_servIPB,m_portB);
+//	}
+//
+//	return Error_Succeed;
+//}
+
+ErrorCodeEnum CHeartBeatFSM::ParseServerAddr(bool isCardStore)
 {
-	//卡库用新地址
-	if(isCardStore)
-	{
-		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"ServerNew",m_servStr);
+	//地址赋值
+	CSimpleStringA servStrBackup = "";
+	if (isCardStore){
+		m_servStr = CARDISSUER_STORE_MAIN_SERVER;
+		servStrBackup = CARDISSUER_STORE_BACKUP_SERVER;
 
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ServerNew=%s", m_servStr);
-		if (m_servStr.IsNullOrEmpty()) {
-			GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的ServerNew配置,请检查集中配置");
+	}else {
+		m_servStr = CARDISSUER_STAND_MAIN_SERVER;
+		servStrBackup = CARDISSUER_STAND_BACKUP_SERVER;
+	}
+	m_servStrBArr = servStrBackup.Split('|');
+
+	if (m_servStr.IsNullOrEmpty()) {
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("实体HeartBeat配置的main_server值为空,请确认是否已设置正确,main_server=%s", m_servStr);
+		return Error_Param;
+	}
+	else {
+		CAutoArray<CSimpleStringA> aaServ = m_servStr.Split(' ');
+		if (aaServ.GetCount() != 2){
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("实体HeartBeat配置的main_server值无法解析,请确认格式是否正确,main_server=%s", m_servStr.GetData());
 			return Error_Param;
 		}
-
-		if (!m_servStr.IsNullOrEmpty())
-		{
-			CAutoArray<CSimpleStringA> aaServ = m_servStr.Split(' ');
-			if (aaServ.GetCount() >= 2)
-			{
-				m_servIP = aaServ[0];
-				m_port = atoi(aaServ[1]);
-
-			}
-			else
-			{
-				GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的配置,请检查集中配置");
-				return Error_Param;
-			}
+		else {
+			CSimpleStringA servIP = aaServ[0];
+			int port = atoi(aaServ[1]);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("main server: %s,%d", servIP.GetData(), port);
 		}
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s,%d",(LPCTSTR)m_servIP,m_port);
 	}
-	else
-	{
-		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"Server",m_servStr);
-		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"Server_Backup",m_servStrB);
-		if (!m_servStr.IsNullOrEmpty())
-		{
-			CAutoArray<CSimpleStringA> aaServ = m_servStr.Split(' ');
-			if (aaServ.GetCount() >= 2)
-			{
-				m_servIP = aaServ[0];
-				m_port = atoi(aaServ[1]);
+	
 
-			}
-			else
-			{
-				GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的配置,请检查集中配置");
+	for (int i = 0; i<m_servStrBArr.GetCount(); i++)
+	{
+		CSimpleStringA servStrB = m_servStrBArr[i];
+		if (!servStrB.IsNullOrEmpty()) {
+			CAutoArray<CSimpleStringA> aaServB = servStrB.Split(' ');
+			if (aaServB.GetCount() != 2) {
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("实体HeartBeat配置的Backup_server值无法解析,请确认格式是否正确,Backup_server=%s", servStrB.GetData());
 				return Error_Param;
 			}
-		}
-		if (!m_servStrB.IsNullOrEmpty())
-		{
-			CAutoArray<CSimpleStringA> aaServB = m_servStrB.Split(' ');
-			if (aaServB.GetCount() >= 2)
-			{
-				m_servIPB = aaServB[0];
-				m_portB = atoi(aaServB[1]);
-
-			}
-			else
-			{
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("no backup(%s).",(LPCSTR)m_servStrB);
-				m_servIPB = m_servIP;
-				m_portB = m_port;
+			else {
+				CSimpleStringA servIP = aaServB[0];
+				int port = atoi(aaServB[1]);
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("backup server: %s,%d", servIP.GetData(), port);
 			}
 		}
-
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s,%d;%s,%d",(LPCTSTR)m_servIP,m_port,(LPCTSTR)m_servIPB,m_portB);
 	}
-
 	return Error_Succeed;
 }
+
 bool CHeartBeatFSM::CheckCRASessionOrToConnect()
 {
 	if (m_pCRAClient != NULL && !m_pCRAClient->QuerySessionClosed())

部分文件因为文件数量过多而无法显示