소스 검색

Z991239-3084 #comment feat: uos网络检测

陈纪林80310970 3 년 전
부모
커밋
10d1d2b1c1

+ 30 - 0
Module/mod_DeviceControl/mod_DeviceControl.cpp

@@ -12,6 +12,7 @@
 #include "array.h"
 #include "fileutil.h"
 #include <vector>
+#include <sys/utsname.h>
 
 #include "publicFunExport.h"
 #include "DeviceAdaptChecker.h"
@@ -82,11 +83,36 @@ void CDeviceControlEntity::QueryHardwareInfo(SpReqAnsContext<DeviceControlServic
 {
     CSystemStaticInfo info;
     GetFunction()->GetSystemStaticInfo(info);
+    CSimpleStringA deviceFct("");
 
     NetworkAddressesList macAddrs;
     NetworkAddressesList ipAddrs;
     SP::Module::Net::GetINETMacAddresses(macAddrs, ipAddrs);
 
+    CSimpleStringA tmpVendor(""), tmpDevSN(""), tmpDLLVersion("");
+    GetFunction()->GetSysVar("FWBVendor", tmpVendor);
+    GetFunction()->GetSysVar("FWBDevSN", tmpDevSN);
+    GetFunction()->GetSysVar("FWBVersion", tmpDLLVersion);
+
+    if (tmpDLLVersion.GetLength() < 2)
+        tmpDLLVersion = "8.1";
+    if (tmpDevSN.GetLength() > 12 && tmpDevSN.IndexOf("FWB") > 2)
+    {
+        Dbg("This is fwb device.");
+        deviceFct = tmpVendor;
+    }
+    else
+    {
+        CSmartPointer<IConfigInfo> spConfig;
+        GetFunction()->OpenConfig(Config_Root, spConfig);
+        spConfig->ReadConfigValue("Device.PinPad", "Vendor", deviceFct);
+    }
+
+    utsname sysInfo;
+    uname(&sysInfo);
+    CSimpleStringA sysVer("UOS ");
+    sysVer.Append(sysInfo.release);
+
     if (ctx != NULL) {
         ctx->Ans.ip = ipAddrs;
         ctx->Ans.mac = macAddrs;
@@ -95,6 +121,10 @@ void CDeviceControlEntity::QueryHardwareInfo(SpReqAnsContext<DeviceControlServic
         ctx->Ans.terminalNo = info.strTerminalID;
         ctx->Ans.termLimit = __ReadCenterConfigStr("TermLimitSwitch", "IEBrowser").second;
         ctx->Ans.termVersion = info.InstallVersion.ToString();
+
+        ctx->Ans.reserved3 = sysVer;
+        ctx->Ans.reserved4 = deviceFct;
+
         ctx->Answer(Error_Succeed);
     }
 }

+ 119 - 61
Module/mod_ResourceWatcher/ResourceWatcher.xml

@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="gb2312" ?>
+锘�<?xml version="1.0" encoding="utf-8" ?>
 <entity name="ResourceWatcher">
 	<class name="ResourceWatcherService" overlap="true" exclusive="false">			
 		<twoway name="Fetch" overlap="true">
@@ -38,66 +38,66 @@
 		
 			<twoway  name="OperateFile" overlap="true">
 			<req>
-				<!--当前操作的磁盘或目录或文件的的完整路径
-						磁盘如:C:
-						目录如:C:\RUN\version
-						文件如:C:\Run\version\active.txt
-						注:为空将会返回当前操作终端系统存有的磁盘/卷信息
+				<!--褰撳墠鎿嶄綔鐨勭�鐩樻垨鐩�綍鎴栨枃浠剁殑鐨勫畬鏁磋矾寰�
+						纾佺洏濡傦細C:
+						鐩�綍濡傦細C:\RUN\version
+						鏂囦欢濡傦細C:\Run\version\active.txt
+						娉�細涓虹┖灏嗕細杩斿洖褰撳墠鎿嶄綔缁堢�绯荤粺瀛樻湁鐨勭�鐩�/鍗蜂俊鎭�
 				 -->
 				<param name="current" type="string"/>
-				<!--操作方式:
-						0:展开信息,如果 current 是卷或目录的,返回当前卷或目录首层的文件列表信息;该操作对文件无作为;
-						1:打开/执行,使用默认程序执行该文件,打开方式取决于文件类型和终端设备,通常为可执行程序或脚本文件;此时 attachment1 保存输入参数的长度,attachment2输入参数的内容,该操作对卷和目录无作为;
-						2:文件删除操作(直接删除),如果current 指向的是目录,则删除整个目录(忽略该目录下是否有文件),该操作对卷无作为;做二次确认?
-						3:清空磁盘或目录下的所有文件和子目录,保留当前空的文件夹,或者清空文件的内容
-						4:新增目录或文件,所在磁盘存在的情况下忽略目标目录或文件的上层目录是否存在,attribute字段指定文件类型,如果是文件,content字段保存文件内容的字节流(可选)
-						5:追加文件内容,前提是目标文件存在,content字段保存追加的文件字节流(必需),该操作对卷和目录无作为;
-						6:重命名,前提是目标目录或文件存在,修改目标目录或文件的名称,content字节保存新文件名(文件名需符合系统命名规范),该操作对卷无作为;
+				<!--鎿嶄綔鏂瑰紡锛�
+						0锛氬睍寮€淇℃伅锛屽�鏋� current 鏄�嵎鎴栫洰褰曠殑锛岃繑鍥炲綋鍓嶅嵎鎴栫洰褰曢�灞傜殑鏂囦欢鍒楄〃淇℃伅锛涜�鎿嶄綔瀵规枃浠舵棤浣滀负锛�
+						1锛氭墦寮€/鎵ц�锛屼娇鐢ㄩ粯璁ょ▼搴忔墽琛岃�鏂囦欢锛屾墦寮€鏂瑰紡鍙栧喅浜庢枃浠剁被鍨嬪拰缁堢�璁惧�锛岄€氬父涓哄彲鎵ц�绋嬪簭鎴栬剼鏈�枃浠讹紱姝ゆ椂 attachment1 淇濆瓨杈撳叆鍙傛暟鐨勯暱搴︼紝attachment2杈撳叆鍙傛暟鐨勫唴瀹癸紝璇ユ搷浣滃�鍗峰拰鐩�綍鏃犱綔涓猴紱
+						2锛氭枃浠跺垹闄ゆ搷浣滐紙鐩存帴鍒犻櫎锛夛紝濡傛灉current 鎸囧悜鐨勬槸鐩�綍锛屽垯鍒犻櫎鏁翠釜鐩�綍锛堝拷鐣ヨ�鐩�綍涓嬫槸鍚︽湁鏂囦欢锛夛紝璇ユ搷浣滃�鍗锋棤浣滀负锛涘仛浜屾�纭��锛�
+						3锛氭竻绌虹�鐩樻垨鐩�綍涓嬬殑鎵€鏈夋枃浠跺拰瀛愮洰褰曪紝淇濈暀褰撳墠绌虹殑鏂囦欢澶癸紝鎴栬€呮竻绌烘枃浠剁殑鍐呭�
+						4锛氭柊澧炵洰褰曟垨鏂囦欢锛屾墍鍦ㄧ�鐩樺瓨鍦ㄧ殑鎯呭喌涓嬪拷鐣ョ洰鏍囩洰褰曟垨鏂囦欢鐨勪笂灞傜洰褰曟槸鍚﹀瓨鍦�紝attribute瀛楁�鎸囧畾鏂囦欢绫诲瀷锛屽�鏋滄槸鏂囦欢锛宑ontent瀛楁�淇濆瓨鏂囦欢鍐呭�鐨勫瓧鑺傛祦锛堝彲閫夛級
+						5锛氳拷鍔犳枃浠跺唴瀹癸紝鍓嶆彁鏄�洰鏍囨枃浠跺瓨鍦�紝content瀛楁�淇濆瓨杩藉姞鐨勬枃浠跺瓧鑺傛祦锛堝繀闇€锛夛紝璇ユ搷浣滃�鍗峰拰鐩�綍鏃犱綔涓猴紱
+						6锛氶噸鍛藉悕锛屽墠鎻愭槸鐩�爣鐩�綍鎴栨枃浠跺瓨鍦�紝淇�敼鐩�爣鐩�綍鎴栨枃浠剁殑鍚嶇О锛宑ontent瀛楄妭淇濆瓨鏂版枃浠跺悕锛堟枃浠跺悕闇€绗﹀悎绯荤粺鍛藉悕瑙勮寖锛夛紝璇ユ搷浣滃�鍗锋棤浣滀负锛�
 				 -->
 				<param name="mode" type="int" />
-				<!-- 相关属性: 
-						当 mode = 0 时:1  表示要求文件列表中需得到子目录的占用空间大小(可能耗时较长);
-						当 mode = 4 时:16 表示新建的文件类型为目录,0 表示新建的文件类型为文件,类型由名称决定;
-						当 mode = 6 时:1  表示如要修改的是文件,则用新文件名整体覆盖旧文件名(包括后缀名),0表示保留后缀名情况下进行重命名
+				<!-- 鐩稿叧灞炴€э細 
+						褰� mode = 0 鏃讹細1  琛ㄧず瑕佹眰鏂囦欢鍒楄〃涓�渶寰楀埌瀛愮洰褰曠殑鍗犵敤绌洪棿澶у皬锛堝彲鑳借€楁椂杈冮暱锛夛紱
+						褰� mode = 4 鏃讹細16 琛ㄧず鏂板缓鐨勬枃浠剁被鍨嬩负鐩�綍锛�0 琛ㄧず鏂板缓鐨勬枃浠剁被鍨嬩负鏂囦欢锛岀被鍨嬬敱鍚嶇О鍐冲畾锛�
+						褰� mode = 6 鏃讹細1  琛ㄧず濡傝�淇�敼鐨勬槸鏂囦欢锛屽垯鐢ㄦ柊鏂囦欢鍚嶆暣浣撹�鐩栨棫鏂囦欢鍚嶏紙鍖呮嫭鍚庣紑鍚嶏級锛�0琛ㄧず淇濈暀鍚庣紑鍚嶆儏鍐典笅杩涜�閲嶅懡鍚�
 				-->
 				<param name="attribute" type="int" />
-				<!-- 新建文件的内容和已存文件追加,或重命名操作的新文件名称 -->
+				<!-- 鏂板缓鏂囦欢鐨勫唴瀹瑰拰宸插瓨鏂囦欢杩藉姞锛屾垨閲嶅懡鍚嶆搷浣滅殑鏂版枃浠跺悕绉� -->
 				<param name="content" type="string" />
-				<!-- 过滤属性:
-				   当 mode = 0 时:0x00000002 不返回隐藏文件;0x00000004 不返回系统文件;0x00004000 不返回加密文件;
+				<!-- 杩囨护灞炴€э細
+				   褰� mode = 0 鏃讹細0x00000002 涓嶈繑鍥為殣钘忔枃浠讹紱0x00000004 涓嶈繑鍥炵郴缁熸枃浠讹紱0x00004000 涓嶈繑鍥炲姞瀵嗘枃浠讹紱
 				-->
 				<param name="filter1" type="int" />
 				<param name="filter2" type="string" />
-				<!-- 附加信息:保留 -->
+				<!-- 闄勫姞淇℃伅锛氫繚鐣� -->
 				<param name="attachment1" type="int" />
 				<param name="attachment2" type="string" />
 				<param name="reserved1" type="array_int"/>
      		<param name="reserved2" type="array_string"/>
 			</req>
 			<res>
-				<!--对应操作的结果:
-						-1: 操作无效
-						-2:  操作失败 attachment2 字段存储错误信息
-						>0:  操作成功
+				<!--瀵瑰簲鎿嶄綔鐨勭粨鏋滐細
+						-1锛� 鎿嶄綔鏃犳晥
+						-2:  鎿嶄綔澶辫触 attachment2 瀛楁�瀛樺偍閿欒�淇℃伅
+						>0:  鎿嶄綔鎴愬姛
 						
 				 -->
 				<param name="result" type="int" />
 			
-				<!-- 当前卷/目录/文件的完整路径 
-					当 mode = 0 时,header 与 传递过来的 current 是一致的;
-					当 mode = 6 时,header 为 重命名后的目录或文件的完整路径
+				<!-- 褰撳墠鍗�/鐩�綍/鏂囦欢鐨勫畬鏁磋矾寰� 
+					褰� mode = 0 鏃讹紝header 涓� 浼犻€掕繃鏉ョ殑 current 鏄�竴鑷寸殑锛�
+					褰� mode = 6 鏃讹紝header 涓� 閲嶅懡鍚嶅悗鐨勭洰褰曟垨鏂囦欢鐨勫畬鏁磋矾寰�
 				-->
 				<param name="header" type="string" />
-				<!-- 附加信息:保留 -->
+				<!-- 闄勫姞淇℃伅锛氫繚鐣� -->
 				<param name="attachment1" type="int" />
 				<param name="attachment2" type="string" />
-				<!--以下为当前目录和旗下子目录和文件列表的信息:
-					  当 mode = 2 不存储相关文件列表内容
-				    当 mode = 2 存储与删除目录/文件 同级目录的文件列表,以便查实是否成功删除;
-				    当 mode = 3 返回当前已清空的磁盘或目录下的文件列表,或文件所在目录的文件列表,以便根据内容或文件大小查实是否成功清除;
-				    当 mode = 4 返回当前新增目录或文件所在目录的文件列表,以便查实是否成功新建;
-				    当 mode = 5 返回当前追加文件内容的文件所在目录的文件列表,以便根据文件大小查实是否成功追加文件内容;
-				    当 mode = 6 返回当前重命名目录或文件所在目录的文件列表,以便查实是否成功重命名;
+				<!--浠ヤ笅涓哄綋鍓嶇洰褰曞拰鏃椾笅瀛愮洰褰曞拰鏂囦欢鍒楄〃鐨勪俊鎭�細
+					  褰� mode = 2 涓嶅瓨鍌ㄧ浉鍏虫枃浠跺垪琛ㄥ唴瀹�
+				    褰� mode = 2 瀛樺偍涓庡垹闄ょ洰褰�/鏂囦欢 鍚岀骇鐩�綍鐨勬枃浠跺垪琛�紝浠ヤ究鏌ュ疄鏄�惁鎴愬姛鍒犻櫎锛�
+				    褰� mode = 3 杩斿洖褰撳墠宸叉竻绌虹殑纾佺洏鎴栫洰褰曚笅鐨勬枃浠跺垪琛�紝鎴栨枃浠舵墍鍦ㄧ洰褰曠殑鏂囦欢鍒楄〃锛屼互渚挎牴鎹�唴瀹规垨鏂囦欢澶у皬鏌ュ疄鏄�惁鎴愬姛娓呴櫎锛�
+				    褰� mode = 4 杩斿洖褰撳墠鏂板�鐩�綍鎴栨枃浠舵墍鍦ㄧ洰褰曠殑鏂囦欢鍒楄〃锛屼互渚挎煡瀹炴槸鍚︽垚鍔熸柊寤猴紱
+				    褰� mode = 5 杩斿洖褰撳墠杩藉姞鏂囦欢鍐呭�鐨勬枃浠舵墍鍦ㄧ洰褰曠殑鏂囦欢鍒楄〃锛屼互渚挎牴鎹�枃浠跺ぇ灏忔煡瀹炴槸鍚︽垚鍔熻拷鍔犳枃浠跺唴瀹癸紱
+				    褰� mode = 6 杩斿洖褰撳墠閲嶅懡鍚嶇洰褰曟垨鏂囦欢鎵€鍦ㄧ洰褰曠殑鏂囦欢鍒楄〃锛屼互渚挎煡瀹炴槸鍚︽垚鍔熼噸鍛藉悕锛�
 				 -->
 				<param name="fileSize" type="uint64" />
 				<param name="ftCreate" type="uint64" />
@@ -105,26 +105,26 @@
 				<param name="ftAccess" type="uint64" />
 				<param name="fileAttribute" type="uint" />
 				<param name="forbidAttribute" type="uint" />
-				<!-- 保留字段 -->
+				<!-- 淇濈暀瀛楁� -->
 				<param name="reversed1" type="int" />
 				<param name="reversed2" type="string" />
-				 <!-- 首层子目录和子文件的数目 -->
+				 <!-- 棣栧眰瀛愮洰褰曞拰瀛愭枃浠剁殑鏁扮洰 -->
 				<param name="count" type="int" />
-				<!-- 目录或文件的名称 -->
+				<!-- 鐩�綍鎴栨枃浠剁殑鍚嶇О -->
 				<param name="fileNames" type="array_string" />
-				<!-- 目录或文件的字节大小,目录非必需,默认为0 -->
+				<!-- 鐩�綍鎴栨枃浠剁殑瀛楄妭澶у皬锛岀洰褰曢潪蹇呴渶锛岄粯璁や负0 -->
 				<param name="fileSizes" type="array_uint64" />
-				<!-- 目录或文件的创建时间,默认为0-->
+				<!-- 鐩�綍鎴栨枃浠剁殑鍒涘缓鏃堕棿锛岄粯璁や负0-->
 				<param name="ftCreates" type="array_uint64" />
-				<!-- 目录或文件的修改时间,默认为0 -->
+				<!-- 鐩�綍鎴栨枃浠剁殑淇�敼鏃堕棿锛岄粯璁や负0 -->
 				<param name="ftModifieds" type="array_uint64" />
-				<!-- 目录或文件的访问时间,默认为0 -->
+				<!-- 鐩�綍鎴栨枃浠剁殑璁块棶鏃堕棿锛岄粯璁や负0 -->
 				<param name="ftAccesses" type="array_uint64" />
-				<!-- 目录或文件的属性,按照系统的约定赋值 -->
+				<!-- 鐩�綍鎴栨枃浠剁殑灞炴€э紝鎸夌収绯荤粺鐨勭害瀹氳祴鍊� -->
 				<param name="fileAttributes" type="array_uint" />
-				<!-- 存储目录或文件的操作权限 -->
+				<!-- 瀛樺偍鐩�綍鎴栨枃浠剁殑鎿嶄綔鏉冮檺 -->
 				<param name="forbidAttributes" type="array_uint" />
-				<!-- 保留字段 -->
+				<!-- 淇濈暀瀛楁� -->
 				<param name="reserved1" type="array_int"/>
      		<param name="reserved2" type="array_string"/>
 				
@@ -134,29 +134,29 @@
 		
 		<twoway  name="ExtractEventLog" overlap="true">
 			<req>
-				<!-- 0x0000:不筛选,0x0001:应用程序,0x0002:安全,0x0004:Setup,0x0008:系统,0x0100:自定义,0x00FF:全部类型(不包括自定义)-->
+				<!-- 0x0000:涓嶇瓫閫夛紝0x0001:搴旂敤绋嬪簭锛�0x0002:瀹夊叏锛�0x0004:Setup锛�0x0008:绯荤粺锛�0x0100:鑷�畾涔夛紝0x00FF:鍏ㄩ儴绫诲瀷锛堜笉鍖呮嫭鑷�畾涔夛級-->
 				<param name="evtName" type="ushort" />
-				<!-- 0x0000:不筛选,0x0001:错误,0x0002:警告,0x0004:信息,0x0008:审计成功,0x0010:审计失败,0x00FF:全部类型 -->
+				<!-- 0x0000:涓嶇瓫閫夛紝0x0001:閿欒�锛�0x0002:璀﹀憡锛�0x0004:淇℃伅锛�0x0008锛氬�璁℃垚鍔燂紝0x0010:瀹¤�澶辫触锛�0x00FF:鍏ㄩ儴绫诲瀷 -->
 				<param name="evtLevel" type="ushort" />
-				<!-- 0x0000:任何时间,0x0001: 近1小时,0x0002:近12小时,0x0003:近1天,0x0004:近7天,0x0005:近30天,0x000F:自定义-->
+				<!-- 0x0000:浠讳綍鏃堕棿锛�0x0001: 杩�1灏忔椂锛�0x0002:杩�12灏忔椂锛�0x0003:杩�1澶╋紝0x0004:杩�7澶╋紝0x0005:杩�30澶╋紝0x000F:鑷�畾涔�-->
 				<param name="duration" type="ushort" />
-				<!-- 当 duration == 0x000F 时有效,如下两项有效,startTime存储筛选的开始时间,endTime存储筛选的结束时间,具体到秒,需满足endTime >= startTime -->
+				<!-- 褰� duration == 0x000F 鏃舵湁鏁堬紝濡備笅涓ら」鏈夋晥锛宻tartTime瀛樺偍绛涢€夌殑寮€濮嬫椂闂达紝endTime瀛樺偍绛涢€夌殑缁撴潫鏃堕棿锛屽叿浣撳埌绉掞紝闇€婊¤冻endTime >= startTime -->
 				<param name="startTime" type="uint64" />
 				<param name="endTime" type="uint64" />
-				<!-- 当 evtName == 0x0100 时有效,保留先 -->
+				<!-- 褰� evtName == 0x0100 鏃舵湁鏁堬紝淇濈暀鍏� -->
 				<param name="cusEvtFileName" type="string" />
-				<!-- 存储事件日志来源,一般应用程序名称,比较常用的应该是“Application Error”,不指定请置为NULL或“”-->
+				<!-- 瀛樺偍浜嬩欢鏃ュ織鏉ユ簮锛屼竴鑸�簲鐢ㄧ▼搴忓悕绉帮紝姣旇緝甯哥敤鐨勫簲璇ユ槸鈥淎pplication Error鈥濓紝涓嶆寚瀹氳�缃�负NULL鎴栤€溾€�-->
 				<param name="evtSrcEventName" type="string" />
-				<!-- 保留字段 -->
+				<!-- 淇濈暀瀛楁� -->
 				<param name="reversed1" type="int" />
 				<param name="reversed2" type="string" />
 			</req>
 			<res>
-				<!-- 提取的事件日志条数 0 表示失败或无符合筛选要求的事件日志-->
+				<!-- 鎻愬彇鐨勪簨浠舵棩蹇楁潯鏁� 0 琛ㄧず澶辫触鎴栨棤绗﹀悎绛涢€夎�姹傜殑浜嬩欢鏃ュ織-->
 				<param name="entries" type="uint" />
-				<!-- 当 entries == 0 时有效,存储具体原因:如“参数错误”、“筛选后结果为零”等 -->
+				<!-- 褰� entries == 0 鏃舵湁鏁堬紝瀛樺偍鍏蜂綋鍘熷洜锛氬�鈥滃弬鏁伴敊璇�€濄€佲€滅瓫閫夊悗缁撴灉涓洪浂鈥濈瓑 -->
 				<param name="information" type="string" />
-				<!-- 储存事件日志的文件名称,entiries 为 0 时无效 -->
+				<!-- 鍌ㄥ瓨浜嬩欢鏃ュ織鐨勬枃浠跺悕绉帮紝entiries 涓� 0 鏃舵棤鏁� -->
 				<param name="evtLogFileName" type="string" />
 			</res>
 		</twoway>
@@ -188,11 +188,11 @@
     </twoway>
     <twoway  name="GetThirdPartyInstallState" overlap="true">
       <req>
-        <!---1: 搜狗输入法-->
+        <!---1: 鎼滅嫍杈撳叆娉�-->
         <param name="mode" type="int" />
       </req>
       <res>
-        <!--1:已安装-->
+        <!--1:宸插畨瑁�-->
         <param name="status" type="int" />
         <param name="version" type="string"/>
         <param name="path" type="string"/>
@@ -204,7 +204,7 @@
     </twoway>
     <twoway  name="InstallThirdPartyProgram" overlap="true">
       <req>
-        <!---1: 搜狗输入法-->
+        <!---1: 鎼滅嫍杈撳叆娉�-->
         <param name="type" type="int" />
       </req>
       <res>
@@ -215,8 +215,66 @@
         <param name="reserverd2" type="string"/>
       </res>
     </twoway>
+		
+		<!--缃戠粶杩炴帴绫诲瀷妫€娴�-->
+		<twoway name="CheckNetType" overlap="true">
+			<req>
+			</req>
+			<res>
+				<!--0锛氭湭鐭ワ紝1锛氱綉缁滄棤杩炴帴锛�2锛氭湁绾匡紝3锛氭棤绾匡紝4锛氱Щ鍔ㄧ綉缁� ...-->
+				<param name="netType" type="int"/>
+				<param name="strParam" type="string"/>
+				<param name="intParam" type="int"/>
+			</res>
+		</twoway>
+
+		<!--涓氬姟绔欑偣淇℃伅鏌ヨ�-->
+		<twoway name="GetBizLinks" overlap="true">
+			<req>
+				<!--澶囩敤杩囨护鍙傛暟锛岀洰鍓嶅彧鏀�寔浼犲叆0锛岃〃绀轰笉杩囨护锛岃繑鍥炴墍鏈変笟鍔$珯鐐广€傚悗缁��鏈夊叾浠栬繃婊ら渶姹傚彲閫氳繃姝ゅ弬鏁拌繘琛岄€夋嫨-->
+				<param name="filter" type="int"/>
+			</req>
+			<res>
+				<param name="bizLinks" type="array_string"/>
+				<param name="bizNames" type="array_string"/>
+				<param name="params1" type="array_string"/>
+			</res>
+		</twoway>
+
+		<!--涓氬姟绔欑偣妫€娴�-->
+		<twoway name="BizLinkDetect" overlap="true">
+			<req>
+				<!--鎵╁睍浣跨敤锛岄�鐣欓€氳繃鍙傛暟璁剧疆妫€娴嬫柟寮忥細0.ping銆� 1.http... 锛岀洰鍓嶄紶0鍗冲彲-->
+				<param name="protocol" type="int"/>
+				<param name="bizLink" type="string"/>
+				<!--鍚庣画鎵╁睍浣跨敤-->
+				<param name="attachment1" type="string"/>
+				<!--鍚庣画鎵╁睍浣跨敤-->
+				<param name="attachment2" type="string"/>
+			</req>
+			<res>
+				<param name="bizLinkStatus" type="bool"/>
+				<!--鍦╞izLinkStatus涓� true鐨勬儏鍐典笅锛岃�鍊兼柟鏈夋晥锛岃繑鍥濸ING鍚庣殑寤惰繜鏃堕棿锛屽崟浣嶄负姣�� -->
+				<param name="bizLinkDelayMS" type="uint"/>
+				<!--鍚庣画鎵╁睍浣跨敤-->
+				<param name="strParam" type="string"/>
+				<!--鍚庣画鎵╁睍浣跨敤-->
+				<param name="intParam" type="int"/>
+			</res>
+		</twoway>
 	</class>
+	
 	<message name="QueryCardSwiper">
 			<param name="status" type = "int" />	
-	</message>	
+	</message>
+
+	聽<!--鎺㈡祴涓荤珯鐐�-->
+	<message name="MainLinkDetect">
+		<!--0锛氫笉閫氾紝1锛氱綉缁滆繛閫氾紝鍏朵粬鍊肩敤浜庡悗缁��鐢�-->
+		<param name="mainLinkStatus" type="int"/>
+		<!--棰勭暀鍙傛暟-->
+		<param name="reversed1" type="int"/>
+		<!--棰勭暀鍙傛暟-->
+		<param name="reversed2" type="string"/>
+	</message>
 </entity>

+ 246 - 2
Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp

@@ -30,6 +30,9 @@
 const int MAX_HARDWARE_CHECK_TIME = 5000;
 const int TIMER_HARDWARE_CHECK = 2;
 
+const int MAX_MAINLINK_CHECK_TIME = 5000;
+const int TIMER_MAINLINK_CHECK = 3;
+
 const int DEFAULT_DAY_OF_BACKWARD = 90;
 const int MAX_DAY_OF_BACKWARD = 365;
 const char* DEFAULT_DELETE_FILE_SUFFIX = "*";
@@ -508,7 +511,12 @@ ErrorCodeEnum ResourceWatcherFSM::OnInit()
         void* pTmpData = NULL;
         ITimerListener* pListener = new TimerOutHelper<ResourceWatcherFSM>(this, &ResourceWatcherFSM::HardwareInfoTimer, pTmpData);
         GetEntityBase()->GetFunction()->SetTimer(TIMER_HARDWARE_CHECK, pListener, MAX_HARDWARE_CHECK_TIME);
-        Dbg("Set Timer!");
+        Dbg("Set Hardware Timer!");
+
+        /*void* pTmpData2 = NULL;
+        ITimerListener* pListener2 = new TimerOutHelper<ResourceWatcherFSM>(this, &ResourceWatcherFSM::MainLinkDetectTimer, pTmpData2);
+        GetEntityBase()->GetFunction()->SetTimer(TIMER_MAINLINK_CHECK, pListener2, MAX_MAINLINK_CHECK_TIME);
+        Dbg("Set MainLinkDetect Timer!");*/
     }
 
     return Error_Succeed;
@@ -1039,6 +1047,7 @@ ErrorCodeEnum ResourceWatcherFSM::GetCpuType(
 #endif //RVC_OS_WIN
 }
 
+
 BOOL ResourceWatcherFSM::RemoveDuplicateCenterSettingFiles()
 {
     LOG_FUNCTION();
@@ -3913,10 +3922,245 @@ void ResourceWatcherFSM::HardwareInfoTimer(void* pData)
     GetSystemMemoryStatus();
     GetSystemDiskStatus();
     GetOperationDiskStatus();
+    GetMainLinkStatus();
 
     GetEntityBase()->GetFunction()->ResetTimer(TIMER_HARDWARE_CHECK, MAX_HARDWARE_CHECK_TIME * 2);
 }
 
+
+void ResourceWatcherFSM::LinkDetect(int detectType, const char* url, bool &status, uint &delay)
+{
+    switch (detectType)
+    {
+        case 0 :
+        {
+            string cmd = "wget --spider -T 1 -q -t 2 " + string(url);
+            FILE* fp;
+            char buffer[2048];
+
+            Dbg("CMD = %s.", cmd.c_str());
+            
+            timeval begin, end;
+
+            gettimeofday(&begin, NULL);
+            popen(cmd.c_str(), "r");
+            gettimeofday(&end, NULL);
+            uint tInterval = (end.tv_sec - begin.tv_sec) * 1000 + (end.tv_usec - begin.tv_usec) / 1000;
+
+            sleep(5);
+
+            cmd = "echo $?";
+            fp = popen(cmd.c_str(), "r");
+
+            string s;
+            if (fgets(buffer, sizeof(buffer), fp))
+            {
+                s = buffer;
+            }
+            pclose(fp);
+
+            if (s == "0")
+            {
+                status = true;
+                delay = tInterval;
+                Dbg("http code = %s. ---- Net check Time used %d ms.", s.c_str(), tInterval);
+            }
+            else
+            {
+                Dbg("http code = %s. ---- Net check Time used %d ms.", s.c_str(), tInterval);
+            }
+
+        }
+        
+        case 1 : 
+        {
+            FILE* fp;
+            string cmd = "ping " + string(url) + " -c 2 -w 2";
+            char buffer[2048];
+            fp = popen(cmd.c_str(), "r");
+            //fp = popen("ping www.cmbchina.com -c 2 -w 2", "r");
+            sleep(2);
+
+            int i = 0;
+            string s;
+            string str[4];
+            vector<string> v;
+            while (true)
+            {
+                if (fgets(buffer, sizeof(buffer), fp))
+                {
+                    s = buffer;
+                    v.push_back(s);
+                }
+                else {
+                    break;
+                }
+            }
+            pclose(fp);
+
+            if (v.size() > 1)
+            {
+                string data = v[v.size() - 2];
+                int iPos = data.find("received,");
+                if (iPos != -1)
+                {
+                    data = data.substr(iPos + 10, 3);//截取字符串返回packet loss
+                    int  n = atoi(data.c_str());
+                    if (n == 0)
+                    {
+                        data = v[v.size() - 2];
+                        int mPos = data.find("time");
+                        int len = data.size();
+                        data = data.substr(mPos + 5, 100);
+                        int temp = atoi(data.c_str());
+
+                        status = true;
+                        delay = temp;
+                    }
+                }
+
+            }
+        }
+    
+        default:
+            break;
+    }
+}
+
+ErrorCodeEnum ResourceWatcherFSM::BizLinkDetect(
+    SpReqAnsContext<ResourceWatcherService_BizLinkDetect_Req, ResourceWatcherService_BizLinkDetect_Ans>::Pointer ctx)
+{
+    LOG_FUNCTION();
+    ErrorCodeEnum ec = Error_Succeed;
+
+    int detectType = ctx->Req.protocol;
+    CSimpleStringA url = ctx->Req.bizLink;
+    bool linkStatus = false;
+    uint delay = 0;
+
+    LinkDetect(detectType, url.GetData(), linkStatus, delay);
+
+    ctx->Ans.bizLinkStatus = linkStatus;
+    ctx->Ans.bizLinkDelayMS = delay;
+    ctx->Ans.intParam = 0;
+
+    if (ctx != NULL) {
+        ctx->Answer(ec);
+    }
+    return ec;
+
+}
+
+ErrorCodeEnum ResourceWatcherFSM::CheckNetType(
+    SpReqAnsContext<ResourceWatcherService_CheckNetType_Req, ResourceWatcherService_CheckNetType_Ans>::Pointer ctx)
+{
+    LOG_FUNCTION();
+    ErrorCodeEnum ec = Error_Succeed;
+    int netType = 0; //默认未知
+
+    CSimpleStringA tmpVendor(""), tmpDevSN(""), tmpDLLVersion("");
+    GetEntityBase()->GetFunction()->GetSysVar("FWBVendor", tmpVendor);
+    GetEntityBase()->GetFunction()->GetSysVar("FWBDevSN", tmpDevSN);
+    GetEntityBase()->GetFunction()->GetSysVar("FWBVersion", tmpDLLVersion);
+
+
+    if (tmpDLLVersion.GetLength() < 2)
+        tmpDLLVersion = "8.1";
+    if (tmpDevSN.GetLength() > 12 && tmpDevSN.IndexOf("FWB") > 2)
+    {
+        Dbg("This is fwb device.");
+    }
+    else
+    {
+        int i = 0;
+        int sockfd;
+        struct ifconf ifconf;
+        struct ifreq* ifreq;
+        char buf[1024];
+
+        //初始化ifconf
+        ifconf.ifc_len = 1024;
+        ifconf.ifc_buf = buf;
+
+        if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+        {
+            perror("socket error");
+            exit(1);
+        }
+
+        //获取所有接口信息
+        ioctl(sockfd, SIOCGIFCONF, &ifconf);
+
+        //逐个获取Ip地址
+        int size = ifconf.ifc_len / sizeof(struct ifreq);
+        ifreq = (struct ifreq*)buf;
+        string netName(ifreq->ifr_name);
+        
+        if(size == 1 &&  netName == "lo") //只有逻辑地址 -- 网线被拔出
+        {
+            netType = 1;
+        }
+        else
+        {
+            for (i = size; i > 0; i--)
+            {
+                string netName(ifreq->ifr_name); //有其他网卡 -- 有线
+                if (netName != "lo")
+                {
+                    netType = 2;
+                }
+                ifreq++;
+            }
+        }
+
+        ctx->Ans.netType = netType;
+    }
+
+    if (ctx != NULL) {
+        ctx->Answer(ec);
+    }
+    return ec;
+}
+
+//void ResourceWatcherFSM::MainLinkDetectTimer(void* pData)
+//{
+//    GetMainLinkStatus();
+//    GetEntityBase()->GetFunction()->ResetTimer(TIMER_MAINLINK_CHECK, MAX_MAINLINK_CHECK_TIME * 2);
+//}
+
+void ResourceWatcherFSM::GetMainLinkStatus()
+{
+    ErrorCodeEnum errorCode = Error_Succeed;
+
+    CSmartPointer<IConfigInfo> spCtSettingConfig;
+    GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spCtSettingConfig);
+    ErrorCodeEnum erroCode = Error_Unexpect;
+    CSimpleStringA mLink("");
+    erroCode = spCtSettingConfig->ReadConfigValue("Chromium", "UserMgrUrlFulture", mLink);
+
+    MainLinkDetect mainDetect;
+    const char* mainLink = "www.google.com";
+    //const char* mainLink = mLink.GetData();
+    bool curStatus = false;
+    uint delay = 0;
+    LinkDetect(0, mainLink, curStatus, delay);
+
+    if (!curStatus)
+    {
+        Dbg("Main Link disconnected [%s].", mainLink);
+        mainDetect.mainLinkStatus = curStatus;
+        mainDetect.reversed1 = 0;
+        mainDetect.reversed2 = "";
+        SpSendBroadcast(GetEntityBase()->GetFunction(),
+            SP_MSG_OF(MainLinkDetect), SP_MSG_SIG_OF(MainLinkDetect), mainDetect);
+    }
+    else
+    {
+        Dbg("Main Link is connected [%s].", mainLink);
+    }
+
+}
+
 BOOL ResourceWatcherFSM::ReadCPUInfo(CPUInfo * cpu)
 {
     FILE* fp;
@@ -3959,7 +4203,7 @@ void ResourceWatcherFSM::GetSystemCPUStatus()
     double freeTime = cpuNew->idle - cpuOld->idle;
     cUsedRate = (totalTime - freeTime) / totalTime;
 
-    if (cUsedRate < 0.8) {
+    if (cUsedRate < 0) {
         //Dbg("[CPU] used rate: %.1lf%%.", cUsedRate * 100);
     } else {
         LogWarn(Severity_Low, Error_Resource, LOG_EVT_RESOURCE_CPU_TOO_HIGH,

+ 12 - 1
Module/mod_ResourceWatcher/ResourceWatcherFSM.h

@@ -477,7 +477,18 @@ public:
 	void UploadSysVersionInfo(UINT& ver);
 
 	void HardwareInfoTimer(void* pData);
-
+	
+	void LinkDetect(int detectType, const char* url, bool& status, uint &delay);
+
+	//void MainLinkDetectTimer(void* pData);
+	void GetMainLinkStatus();
+	ErrorCodeEnum BizLinkDetect(
+		SpReqAnsContext<ResourceWatcherService_BizLinkDetect_Req,
+		ResourceWatcherService_BizLinkDetect_Ans>::Pointer ctx);
+	ErrorCodeEnum CheckNetType(
+		SpReqAnsContext<ResourceWatcherService_CheckNetType_Req,
+		ResourceWatcherService_CheckNetType_Ans>::Pointer ctx);
+	
 	BOOL ReadCPUInfo(CPUInfo* cpu);
 
 	void GetSystemCPUStatus();

+ 87 - 0
Module/mod_ResourceWatcher/ResourceWatcher_client_g.h

@@ -329,6 +329,93 @@ public:
 		return Error;
 	}
 
+	ErrorCodeEnum CheckNetType(ResourceWatcherService_CheckNetType_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	{
+		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
+		CAutoBuffer Buf = SpObject2Buffer(Req);
+		return pFunc->AsyncRequest(ResourceWatcherService_Method_CheckNetType, ResourceWatcherService_MethodSignature_CheckNetType, Buf, spAsyncWait, dwTimeout);
+	}
+	ErrorCodeEnum CheckNetType(ResourceWatcherService_CheckNetType_Req &Req, ResourceWatcherService_CheckNetType_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = CheckNetType(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum CheckNetType(ResourceWatcherService_CheckNetType_Req &Req, ResourceWatcherService_CheckNetType_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = CheckNetType(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+
+	ErrorCodeEnum GetBizLinks(ResourceWatcherService_GetBizLinks_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	{
+		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
+		CAutoBuffer Buf = SpObject2Buffer(Req);
+		return pFunc->AsyncRequest(ResourceWatcherService_Method_GetBizLinks, ResourceWatcherService_MethodSignature_GetBizLinks, Buf, spAsyncWait, dwTimeout);
+	}
+	ErrorCodeEnum GetBizLinks(ResourceWatcherService_GetBizLinks_Req &Req, ResourceWatcherService_GetBizLinks_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = GetBizLinks(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum GetBizLinks(ResourceWatcherService_GetBizLinks_Req &Req, ResourceWatcherService_GetBizLinks_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = GetBizLinks(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+
+	ErrorCodeEnum BizLinkDetect(ResourceWatcherService_BizLinkDetect_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	{
+		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
+		CAutoBuffer Buf = SpObject2Buffer(Req);
+		return pFunc->AsyncRequest(ResourceWatcherService_Method_BizLinkDetect, ResourceWatcherService_MethodSignature_BizLinkDetect, Buf, spAsyncWait, dwTimeout);
+	}
+	ErrorCodeEnum BizLinkDetect(ResourceWatcherService_BizLinkDetect_Req &Req, ResourceWatcherService_BizLinkDetect_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = BizLinkDetect(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum BizLinkDetect(ResourceWatcherService_BizLinkDetect_Req &Req, ResourceWatcherService_BizLinkDetect_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = BizLinkDetect(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+
 
 	bool SafeDelete()
 	{

+ 80 - 0
Module/mod_ResourceWatcher/ResourceWatcher_def_g.h

@@ -22,6 +22,9 @@ namespace ResourceWatcher {
 #define ResourceWatcherService_Method_GetNetworkInfo 6
 #define ResourceWatcherService_Method_GetThirdPartyInstallState 7
 #define ResourceWatcherService_Method_InstallThirdPartyProgram 8
+#define ResourceWatcherService_Method_CheckNetType 9
+#define ResourceWatcherService_Method_GetBizLinks 10
+#define ResourceWatcherService_Method_BizLinkDetect 11
 
 #define ResourceWatcherService_MethodSignature_Fetch -1944912560
 #define ResourceWatcherService_MethodSignature_GetDevInfo 296205965
@@ -33,6 +36,9 @@ namespace ResourceWatcher {
 #define ResourceWatcherService_MethodSignature_GetNetworkInfo 1741482404
 #define ResourceWatcherService_MethodSignature_GetThirdPartyInstallState -15861483
 #define ResourceWatcherService_MethodSignature_InstallThirdPartyProgram -1049249852
+#define ResourceWatcherService_MethodSignature_CheckNetType 1341887614
+#define ResourceWatcherService_MethodSignature_GetBizLinks 651862197
+#define ResourceWatcherService_MethodSignature_BizLinkDetect 1476437131
 
 struct ResourceWatcherService_Fetch_Req
 {
@@ -315,6 +321,80 @@ struct ResourceWatcherService_InstallThirdPartyProgram_Ans
 
 };
 
+struct ResourceWatcherService_CheckNetType_Req
+{
+
+	void Serialize(SpBuffer &Buf)
+	{
+	}
+
+};
+
+struct ResourceWatcherService_CheckNetType_Ans
+{
+	int netType;
+	CSimpleStringA strParam;
+	int intParam;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & netType & strParam & intParam;
+	}
+
+};
+
+struct ResourceWatcherService_GetBizLinks_Req
+{
+	int filter;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & filter;
+	}
+
+};
+
+struct ResourceWatcherService_GetBizLinks_Ans
+{
+	CAutoArray<CSimpleStringA> bizLinks;
+	CAutoArray<CSimpleStringA> bizNames;
+	CAutoArray<CSimpleStringA> params1;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & bizLinks & bizNames & params1;
+	}
+
+};
+
+struct ResourceWatcherService_BizLinkDetect_Req
+{
+	int protocol;
+	CSimpleStringA bizLink;
+	CSimpleStringA attachment1;
+	CSimpleStringA attachment2;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & protocol & bizLink & attachment1 & attachment2;
+	}
+
+};
+
+struct ResourceWatcherService_BizLinkDetect_Ans
+{
+	bool bizLinkStatus;
+	unsigned int bizLinkDelayMS;
+	CSimpleStringA strParam;
+	int intParam;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & bizLinkStatus & bizLinkDelayMS & strParam & intParam;
+	}
+
+};
+
 
 ///////////////////////////
 

+ 17 - 0
Module/mod_ResourceWatcher/ResourceWatcher_msg_g.h

@@ -10,8 +10,10 @@
 
 namespace ResourceWatcher {
 #define eMsg_QueryCardSwiper 0
+#define eMsg_MainLinkDetect 1
 
 #define eMsgSig_QueryCardSwiper 690144769
+#define eMsgSig_MainLinkDetect 46828988
 
 struct QueryCardSwiper
 {
@@ -26,5 +28,20 @@ struct QueryCardSwiper
 
 ///////////////////////////
 
+struct MainLinkDetect
+{
+	int mainLinkStatus;
+	int reversed1;
+	CSimpleStringA reversed2;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & mainLinkStatus & reversed1 & reversed2;
+	}
+
+};
+
+///////////////////////////
+
 } // namespace ResourceWatcher
 #endif // __RESOURCEWATCHER_MSG_G_H

+ 75 - 0
Module/mod_ResourceWatcher/ResourceWatcher_server_g.h

@@ -100,6 +100,27 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case ResourceWatcherService_Method_CheckNetType:
+			if (dwSignature == ResourceWatcherService_MethodSignature_CheckNetType) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case ResourceWatcherService_Method_GetBizLinks:
+			if (dwSignature == ResourceWatcherService_MethodSignature_GetBizLinks) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case ResourceWatcherService_Method_BizLinkDetect:
+			if (dwSignature == ResourceWatcherService_MethodSignature_BizLinkDetect) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		default:
 			Error = Error_MethodNotFound;
 			break;
@@ -161,6 +182,21 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case ResourceWatcherService_Method_CheckNetType:
+			if (dwSignature != ResourceWatcherService_MethodSignature_CheckNetType) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case ResourceWatcherService_Method_GetBizLinks:
+			if (dwSignature != ResourceWatcherService_MethodSignature_GetBizLinks) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case ResourceWatcherService_Method_BizLinkDetect:
+			if (dwSignature != ResourceWatcherService_MethodSignature_BizLinkDetect) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		default:
 			Error = Error_MethodNotFound;
 			break;
@@ -218,6 +254,21 @@ public:
 	/// override by user
 	}
 
+	virtual void Handle_CheckNetType(SpReqAnsContext<ResourceWatcherService_CheckNetType_Req, ResourceWatcherService_CheckNetType_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
+	virtual void Handle_GetBizLinks(SpReqAnsContext<ResourceWatcherService_GetBizLinks_Req, ResourceWatcherService_GetBizLinks_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
+	virtual void Handle_BizLinkDetect(SpReqAnsContext<ResourceWatcherService_BizLinkDetect_Req, ResourceWatcherService_BizLinkDetect_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
 	virtual void OnRequest(CSmartPointer<ITransactionContext> pTransactionContext)
 	{
 		CAutoBuffer Buf;
@@ -314,6 +365,30 @@ public:
 						Handle_InstallThirdPartyProgram(ctx);
 					}
 					break;
+				case ResourceWatcherService_Method_CheckNetType:
+					{
+						SpReqAnsContext<ResourceWatcherService_CheckNetType_Req,ResourceWatcherService_CheckNetType_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<ResourceWatcherService_CheckNetType_Req,ResourceWatcherService_CheckNetType_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						Handle_CheckNetType(ctx);
+					}
+					break;
+				case ResourceWatcherService_Method_GetBizLinks:
+					{
+						SpReqAnsContext<ResourceWatcherService_GetBizLinks_Req,ResourceWatcherService_GetBizLinks_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<ResourceWatcherService_GetBizLinks_Req,ResourceWatcherService_GetBizLinks_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						Handle_GetBizLinks(ctx);
+					}
+					break;
+				case ResourceWatcherService_Method_BizLinkDetect:
+					{
+						SpReqAnsContext<ResourceWatcherService_BizLinkDetect_Req,ResourceWatcherService_BizLinkDetect_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<ResourceWatcherService_BizLinkDetect_Req,ResourceWatcherService_BizLinkDetect_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						Handle_BizLinkDetect(ctx);
+					}
+					break;
 				default:
 					assert(0);
 					break;

+ 12 - 0
Module/mod_ResourceWatcher/mod_ResourceWatcher.cpp

@@ -146,6 +146,18 @@ void ResourceWatcherServiceSession::Handle_InstallThirdPartyProgram(SpReqAnsCont
     m_pEntity->InstallThirdPartyProgram(ctx);
 }
 
+void ResourceWatcherServiceSession::Handle_BizLinkDetect(SpReqAnsContext<ResourceWatcherService_BizLinkDetect_Req, ResourceWatcherService_BizLinkDetect_Ans>::Pointer ctx)
+{
+    LOG_FUNCTION();
+    m_pEntity->BizLinkDetect(ctx);
+}
+
+void ResourceWatcherServiceSession::Handle_CheckNetType(SpReqAnsContext<ResourceWatcherService_CheckNetType_Req, ResourceWatcherService_CheckNetType_Ans>::Pointer ctx)
+{
+    LOG_FUNCTION();
+    m_pEntity->CheckNetType(ctx);
+}
+
 void ResourceWatcherEntity::UpdateDNS(SpReqAnsContext<ResourceWatcherService_UpdateDNS_Req, ResourceWatcherService_UpdateDNS_Ans>::Pointer ctx)
 {
     ctx->Answer(Error_NotImpl);

+ 15 - 0
Module/mod_ResourceWatcher/mod_ResourceWatcher.h

@@ -44,6 +44,9 @@ public:
 
 	virtual void Handle_InstallThirdPartyProgram(SpReqAnsContext<ResourceWatcherService_InstallThirdPartyProgram_Req, ResourceWatcherService_InstallThirdPartyProgram_Ans>::Pointer ctx);
 
+	virtual void Handle_BizLinkDetect(SpReqAnsContext<ResourceWatcherService_BizLinkDetect_Req, ResourceWatcherService_BizLinkDetect_Ans>::Pointer ctx);
+
+	virtual void Handle_CheckNetType(SpReqAnsContext<ResourceWatcherService_CheckNetType_Req, ResourceWatcherService_CheckNetType_Ans>::Pointer ctx);
 private:
 	ResourceWatcherEntity* m_pEntity;
 };
@@ -189,6 +192,18 @@ public:
 		m_fsm.GetCpuType(ctx);
 	}
 
+	void BizLinkDetect(SpReqAnsContext<ResourceWatcherService_BizLinkDetect_Req,
+		ResourceWatcherService_BizLinkDetect_Ans>::Pointer ctx)
+	{
+		m_fsm.BizLinkDetect(ctx);
+	}
+
+	void CheckNetType(SpReqAnsContext<ResourceWatcherService_CheckNetType_Req,
+		ResourceWatcherService_CheckNetType_Ans>::Pointer ctx)
+	{
+		m_fsm.CheckNetType(ctx);
+	}
+
 	void OperateFile(
 		SpReqAnsContext<ResourceWatcherService_OperateFile_Req, 
 		ResourceWatcherService_OperateFile_Ans>::Pointer ctx)