Ver código fonte

Z991239-1035 #comment feat:upgradeMgr 实体 合并国密版本

Signed-Off-By: commit-hook
刘文涛174520 5 anos atrás
pai
commit
541663274a

+ 41 - 20
Module/mod_UpgradeMgr/UpgradeMgrCnn.cpp

@@ -70,7 +70,7 @@ ErrorCodeEnum CUpgradeMgrConn::SendQueryExecInfoReq(const char* pPackExecID)
 	return Error_Succeed;
 }
 
-ErrorCodeEnum CUpgradeMgrConn::SendPollUpgradeReq()
+ErrorCodeEnum CUpgradeMgrConn::SendPollUpgradeReq(bool IsHashComputed)
 {
 	auto pFunc = m_pEntity->GetFunction();
 	CSystemStaticInfo info;
@@ -225,21 +225,33 @@ ErrorCodeEnum CUpgradeMgrConn::SendPollUpgradeReq()
 	//((CUpgradeMgrEntity*)m_pEntity)->GetMD5List(strMD5List);
 	PollUpgrade_Req6 req6;
 	memset(&req6, 0, sizeof(req6));	
-	CSimpleStringA md5List = ((CUpgradeMgrEntity*)m_pEntity)->m_strMD5List;
-	if (!md5List.IsNullOrEmpty())
-	{
-		CSimpleStringA strMD5ListHash = "";
-		((CUpgradeMgrEntity*)m_pEntity)->MD5Data(md5List, strMD5ListHash);
-		if (strMD5ListHash.IsNullOrEmpty())
-		{
-			Dbg("get md5list hash fail");
-		}
-		else
+	//hash完成才添加hash文件
+	if(IsHashComputed){
+		CSimpleStringA SM3Hash= ((CUpgradeMgrEntity*)m_pEntity)->m_strSM3Hash;
+		if (!SM3Hash.IsNullOrEmpty())
 		{
 			Dbg("add md5list hash");
-			strncpy(req6.MD5ListHash, strMD5ListHash, strMD5ListHash.GetLength());
+			strncpy(req6.MD5ListHash, SM3Hash, SM3Hash.GetLength());
+		}else{
+			Dbg("add md5list hash fail");
 		}
 	}
+	//CSimpleStringA md5List = ((CUpgradeMgrEntity*)m_pEntity)->m_strMD5List;
+	//if (!md5List.IsNullOrEmpty())
+	//{
+	//	CSimpleStringA strMD5ListHash = "";
+	//	((CUpgradeMgrEntity*)m_pEntity)->MD5Data(md5List, strMD5ListHash);
+	//	if (strMD5ListHash.IsNullOrEmpty())
+	//	{
+	//		Dbg("get md5list hash fail");
+	//	}
+	//	else
+	//	{
+	//		Dbg("add md5list hash");
+	//		strncpy(req6.MD5ListHash, strMD5ListHash, strMD5ListHash.GetLength());
+	//	}
+	//}
+
 	package->AddStruct("POLLREQ6", false, false, (BYTE*)&req6, sizeof(req6));
 
 	Dbg("send poll upgrade package");
@@ -300,16 +312,25 @@ ErrorCodeEnum CUpgradeMgrConn::SendMD5ListReq(CSimpleStringA strBlockId)
 			strncpy(req.MD5List, strMD5List.GetData()+(m_BlockId-1)*MAX_MD5LIST_LEN, strMD5List.GetLength()-(m_BlockId-1)*MAX_MD5LIST_LEN);
 		}
 
-		CSimpleStringA strMD5ListHash = "";
-		((CUpgradeMgrEntity*)m_pEntity)->MD5Data(strMD5List, strMD5ListHash);
-		if (strMD5ListHash.IsNullOrEmpty())
-		{
+		//SM3hash字符串拷贝
+		if(((CUpgradeMgrEntity*)m_pEntity)->m_IsSM3listSucc){
+			CSimpleStringA strMD5ListHash = ((CUpgradeMgrEntity*)m_pEntity)->m_strSM3Hash;
+			strncpy(req.MD5ListHash, strMD5ListHash, strMD5ListHash.GetLength());	
+		}else{
 			Dbg("get md5list hash fail");
 		}
-		else
-		{				
-			strncpy(req.MD5ListHash, strMD5ListHash, strMD5ListHash.GetLength());			
-		}
+
+		//CSimpleStringA strMD5ListHash = "";
+		//((CUpgradeMgrEntity*)m_pEntity)->MD5Data(strMD5List, strMD5ListHash);
+
+		//if (strMD5ListHash.IsNullOrEmpty())
+		//{
+		//	Dbg("get md5list hash fail");
+		//}
+		//else
+		//{	
+		//	strncpy(req.MD5ListHash, strMD5ListHash, strMD5ListHash.GetLength());			
+		//}
 
 		package->AddStruct("MD5REQ", false, false, (BYTE*)&req, sizeof(req));
 	}

+ 1 - 1
Module/mod_UpgradeMgr/UpgradeMgrConn.h

@@ -219,7 +219,7 @@ public:
 	{
 	}
 
-	ErrorCodeEnum SendPollUpgradeReq();
+	ErrorCodeEnum SendPollUpgradeReq(bool IsHashComputed);
 	ErrorCodeEnum ReportUpgradeResult(const char* pPackName, CVersion &installVersion, char installState, DWORD stateTime, DWORD dwErrCode, const char *pComment);
 	ErrorCodeEnum SendConfirmUpgradeReq(const char* pPackExecID);
 	ErrorCodeEnum SendQueryExecInfoReq(const char* pPackExecID);

+ 44 - 6
Module/mod_UpgradeMgr/UpgradeMgrFSM.cpp

@@ -202,8 +202,9 @@ void CReportMgrFSM::s3_on_entry()
 	if (m_bNeedPoll)
 	{
 		Dbg("SendPollUpgradeReq 1");
-		m_pConnection->SendPollUpgradeReq();
-		m_bNeedPoll = false;
+		//m_pConnection->SendPollUpgradeReq();
+		StartPoll();
+		m_bNeedPoll =false;
 	}
 
 	if (!m_strBlockId.IsNullOrEmpty())
@@ -238,7 +239,8 @@ unsigned int CReportMgrFSM::s3_on_event(FSMEvent* event)
 		if (CSmallDateTime::GetNow() - m_LastPollTime >= UPGRADE_POLL_INTERVAL / 1000)
 		{
 			Dbg("SendPollUpgradeReq 2");
-			m_pConnection->SendPollUpgradeReq();
+			//m_pConnection->SendPollUpgradeReq();
+			StartPoll();
 			m_LastPollTime = CSmallDateTime::GetNow();
 			m_LastReqTime = CSmallDateTime::GetNow();
 		}
@@ -246,7 +248,7 @@ unsigned int CReportMgrFSM::s3_on_event(FSMEvent* event)
 	else if (event->iEvt == Event_SendMD5list)
 	{
 		auto pEvent = (SendMD5ListEvent *)event;
-		m_strBlockId = pEvent->BlockId;
+		m_strBlockId = pEvent->BlockId;//服务端返回的下一个块号
 		m_pConnection->SendMD5ListReq(m_strBlockId);
 		m_strBlockId.Clear();
 		m_LastReqTime = CSmallDateTime::GetNow();
@@ -328,6 +330,36 @@ ErrorCodeEnum CReportMgrFSM::SecureClientRelease()
 	return Error_Succeed; 
 }
 
+ErrorCodeEnum CReportMgrFSM::StartPoll()
+{
+	
+	if(((CUpgradeMgrEntity*)m_pEntity)->m_IsSM3listSucc==1){
+		//hash文件计算成功
+		Dbg("SM3 Hash compute succ ,sendPoll with hash");
+		m_pConnection->SendPollUpgradeReq(true);
+		return Error_Succeed;
+	}else if(((CUpgradeMgrEntity*)m_pEntity)->m_IsSM3listSucc==-1){
+		//hash文件计算失败
+		Dbg("SM3 Hash compute fail ,sendPoll with null");
+		m_pConnection->SendPollUpgradeReq(false);
+		return Error_Succeed;
+	}else if(((CUpgradeMgrEntity*)m_pEntity)->m_IsSM3listSucc==0){
+		//hash文件计算是否超时:10分钟
+		DWORD elapseTime = CSmallDateTime::GetNow()-((CUpgradeMgrEntity*)m_pEntity)->m_beginSM3HashTime;
+		if(elapseTime>60*10){
+			//发送空
+			Dbg("SM3 Hash compute is timeout,sendPoll with null");
+			((CUpgradeMgrEntity*)m_pEntity)->m_beginSM3HashTime=-1;//超时完成,设置为计算失败
+			m_pConnection->SendPollUpgradeReq(false);
+			return Error_Succeed;
+		}else{
+			//发送中断,等待下次触发
+			Dbg("SM3 Hash has not compute complete,sendPoll is break");
+			return Error_Break;
+		}
+	}
+}
+
 CUpgradeMgrFSM::CUpgradeMgrFSM()
 {
 	m_ReportFSM.SetOuterFSM(this);
@@ -378,7 +410,7 @@ ErrorCodeEnum CUpgradeMgrFSM::OnInit()
 	}else{
 		LogWarn(Severity_Middle, rc, ERR_READ_INI_FAIL,  "get upgradeMgr.ini error");
 	}
-	m_ReportFSM.PostEventFIFO(new CReportMgrFSM::SendMD5ListEvent("1"));
+	//m_ReportFSM.PostEventFIFO(new CReportMgrFSM::SendMD5ListEvent("1"));放到单独线程去处理
 
 	return Error_Succeed;
 }
@@ -777,7 +809,7 @@ unsigned int CUpgradeMgrFSM::s2_on_event(FSMEvent* event)
 	if (event->iEvt == Event_StartPoll)
 	{
 		Dbg("send Event_StartPoll 3");
-		m_ReportFSM.PostEventFIFO(new FSMEvent(CReportMgrFSM::Event_StartPoll));	
+		m_ReportFSM.PostEventFIFO(new FSMEvent(CReportMgrFSM::Event_StartPoll));	//唯一和分行服务查询策略的出口
 	}
 	else if (event->iEvt == Event_EndPoll)
 	{		
@@ -2335,3 +2367,9 @@ ErrorCodeEnum CUpgradeMgrFSM::UpdateInstallFailedPackInfo(CSimpleStringA strPack
 	return SetInstallFailedPackInfo(strNewPackInfoList);
 }
 
+void CUpgradeMgrFSM::SendSM3ListEvent()
+{
+	m_ReportFSM.PostEventFIFO(new CReportMgrFSM::SendMD5ListEvent("1"));
+}
+
+

+ 2 - 2
Module/mod_UpgradeMgr/UpgradeMgrFSM.h

@@ -126,7 +126,7 @@ private:
 	unsigned int s3_on_event(FSMEvent* event);
 	ErrorCodeEnum SecureClientConnect();
 	ErrorCodeEnum SecureClientRelease();
-
+	ErrorCodeEnum StartPoll();//·¢Æð²ßÂÔ²éѯ
 public:
 	UpgradeConnect::CUpgradeMgrConn *m_pConnection;
 
@@ -300,7 +300,7 @@ public:
 	ErrorCodeEnum SetInstallFailedPackInfo(CSimpleStringA strPackName);
 	ErrorCodeEnum GetInstallFailedPackInfo(CSimpleStringA &strPackName);
 	ErrorCodeEnum UpdateInstallFailedPackInfo(CSimpleStringA strPackName);
-
+	void SendSM3ListEvent();
 
 private:
 	virtual ErrorCodeEnum OnInit();

+ 198 - 16
Module/mod_UpgradeMgr/mod_UpgradeMgr.cpp

@@ -18,6 +18,58 @@ using namespace AccessAuthorization;
 #include <io.h>
 #include "fileutil.h"
 #include <regex>
+#include "RVCComm.h"
+
+namespace Task
+{
+	struct GetMD5Task : public ITaskSp
+	{
+		CUpgradeMgrEntity* Mgr;
+		explicit GetMD5Task(CUpgradeMgrEntity* e) : Mgr(e) {}
+		void Process(){
+			LOG_FUNCTION();
+			bool isSendHashList = false;
+			for(int i=0;i<3;i++){
+				Dbg("begin get MD5 list");
+				//尝试三次机会获取,如失败则不再获取hash文件,计算耗时时间
+
+				CSmallDateTime beginT = CSmallDateTime::GetNow();
+				CSimpleStringA tempSM3ListStr = "";
+				ErrorCodeEnum rc = Mgr->GetMD5List(tempSM3ListStr);
+				CSmallDateTime endT = CSmallDateTime::GetNow();
+				Dbg("get MD5 list 耗时%d秒",(DWORD)(endT-beginT));
+
+				if (rc != Error_Succeed)
+				{
+					LogError(Severity_Middle, rc, 0, "get MD5 list fail");
+				}
+				else
+				{
+					CSimpleStringA tempSM3HashStr = "";
+					if(Error_Succeed==Mgr->SM3DataToStr(tempSM3ListStr,tempSM3HashStr,true)){
+						//通知发送传hash值给服务器,并置获取hash码成功状态位
+						Mgr->m_strSM3Hash = tempSM3HashStr;
+						Dbg("get MD5 list success, len=%d, SM3 hash=%s", Mgr->m_strMD5List.GetLength(),Mgr->m_strSM3Hash.GetData());
+						isSendHashList = true;
+						break;
+					}else{
+						LogError(Severity_Middle, rc, 0, "get MD5 list hash fail");
+					}
+					
+				}
+			}
+
+			if(isSendHashList){
+				Dbg("send MD5 list to ReportFSM");
+				Mgr->m_IsSM3listSucc=1;//获取sm3hash成功
+				Mgr->m_fsm.SendSM3ListEvent();	
+			}else{
+				Mgr->m_IsSM3listSucc=-1;//获取sm3hash失败
+				Dbg("get MD5 list fail,don't send MD5 list to ReportFSM");
+			}
+		}
+	};
+}
 
 // 升级管理 UpgradeManager	0x506
 void CUpgradeMgrEntity::OnStarted()
@@ -48,16 +100,23 @@ void CUpgradeMgrEntity::OnStarted()
 	//}
 
 	//zl@20190311 每次启动时生成新的MD5List	
-	rc = GetMD5List(m_strMD5List);
+	//rc = GetMD5List(m_strMD5List);
+	//if (rc != Error_Succeed)
+	//{
+	//	LogError(Severity_Middle, rc, 0, "GetMD5List fail");
+	//}
+	//else
+	//{
+	//	Dbg("get MD5 list success, len=%d", m_strMD5List.GetLength());
+	//}
+	//计算时间太长,放入工作线程中
+	Task::GetMD5Task* task = new Task::GetMD5Task(this);
+	rc = this->GetFunction()->PostThreadPoolTask(task);
 	if (rc != Error_Succeed)
 	{
-		LogError(Severity_Middle, rc, 0, "GetMD5List fail");
-	}
-	else
-	{
-		Dbg("get MD5 list success, len=%d", m_strMD5List.GetLength());
+		LogError(Severity_Middle, rc, 0, "Post GetMD5Task task to Thread is fail");
 	}
-
+	m_beginSM3HashTime = CSmallDateTime::GetNow();
 	// 由于准入未上线或可能不稳定,为了保持升级服务的可用性,一直保持可升级状态
 	m_fsm.PostEventFIFO(new FSMEvent(CUpgradeMgrFSM::Event_EntryPermit));
 }
@@ -322,6 +381,93 @@ ErrorCodeEnum CUpgradeMgrEntity::MD5File(CSimpleStringA strFilePath, CSimpleStri
 
 	return Error_Succeed;
 }
+
+ErrorCodeEnum CUpgradeMgrEntity::SM3_Str(CSimpleStringA &strSM3,BYTE * SM3Byte,bool isSub){
+	if(SM3Byte == NULL){
+		return Error_Exception;
+	}
+	int SM3_len=64;
+	if(isSub){
+		SM3_len=32;
+	}
+	int i; 
+	char* file_SM3 = (char*)malloc((SM3_len + 1) * sizeof(char)); 
+	if(file_SM3 == NULL)  
+	{  
+		fprintf(stderr, "SM3 malloc failed.\n");  
+		return Error_Exception;  
+	} 
+	memset(file_SM3, 0, (SM3_len + 1));  
+
+	if(SM3_len == 32)  
+	{  
+		for(i=0; i<16; i++)  
+		{   //SM3截取中间16位字节,8-24位字节数,小写
+			sprintf(&file_SM3[i*2], "%02x", SM3Byte[i+8]);  
+		}  
+	}  
+	else if(SM3_len == 64)  
+	{  
+		for(i=0; i<32; i++)  
+		{  
+			sprintf(&file_SM3[i*2], "%02x", SM3Byte[i]);  
+		}  
+	}    
+
+	strSM3=file_SM3;  
+	free(file_SM3);
+	return Error_Succeed;
+}
+
+ErrorCodeEnum CUpgradeMgrEntity::SM3FileToStr(CSimpleStringA strFilePath, CSimpleStringA &strSM3,bool isSub)
+{
+	if(strFilePath.IsNullOrEmpty()){
+		return Error_Null;
+	}
+	int nlen = strlen(strFilePath.GetData());
+	char* pchar = new char[nlen+1];
+	strcpy(pchar,strFilePath.GetData());
+	BYTE md5[32]={0};
+	//Dbg("进行国密加密,file=%s",strFilePath.GetData());
+	//if(SM3File(pchar,md5)){
+	//	delete pchar;
+	//	获取16进制的字符串
+	//	if(Error_Succeed!=SM3_Str(strSM3,md5,isSub)){
+	//		Dbg("sm3国密转16进制字符串失败,file=%s",strFilePath.GetData());
+	//		return Error_Unexpect;
+	//	}		
+	//	return Error_Succeed;
+	//}else{
+	//	delete pchar;
+	//	Dbg("sm3国密加密失败,file=%s",strFilePath.GetData());
+	//	return Error_Unexpect;
+	//}
+
+	try
+	{
+		if(SM3File(pchar,md5)){
+			delete pchar;
+			//获取16进制的字符串
+			if(Error_Succeed!=SM3_Str(strSM3,md5,isSub)){
+				Dbg("sm3国密转16进制字符串失败,file=%s",strFilePath.GetData());
+				return Error_Unexpect;
+			}		
+			return Error_Succeed;
+		}else{
+			delete pchar;
+			Dbg("sm3国密加密失败,file=%s",strFilePath.GetData());
+			return Error_Unexpect;
+		}
+	}
+	catch (...)
+	{
+		delete pchar;
+		Dbg("sm3国密加密异常失败,file=%s",strFilePath.GetData());
+		return Error_Exception;
+	}
+	
+}
+
 ErrorCodeEnum CUpgradeMgrEntity::MD5Data(CSimpleStringA strData, CSimpleStringA &strMD5)
 {
 	char* pMd5 = MD5FILE::MD5_data((char*)strData.GetData(), 32);
@@ -335,6 +481,35 @@ ErrorCodeEnum CUpgradeMgrEntity::MD5Data(CSimpleStringA strData, CSimpleStringA
 
 	return Error_Succeed;
 }
+
+ErrorCodeEnum CUpgradeMgrEntity::SM3DataToStr(CSimpleStringA strData, CSimpleStringA &strSM3,bool isSub)
+{
+	if(strData.IsNullOrEmpty()){
+		return Error_Null;
+	}
+	BYTE md5[32]={0};
+	try
+	{
+		if(SM3Hash((BYTE*)strData.GetData(),strlen(strData.GetData()),md5)){
+			//获取16进制的字符串
+			if(Error_Succeed!=SM3_Str(strSM3,md5,isSub)){
+				Dbg("sm3国密转16进制字符串失败");
+				return Error_Unexpect;
+			}	
+			return Error_Succeed;
+		}else{
+			Dbg("sm3国密加密失败");
+			return Error_Unexpect;
+		}
+	}
+	catch (...)
+	{
+		Dbg("sm3国密加密异常失败");
+		return Error_Exception;
+	}
+	
+}
+//修改成sm3加密
 ErrorCodeEnum CUpgradeMgrEntity::MD5Folder(CSimpleStringA strFolderPath,bool isDepDIr)
 {
 	if (strFolderPath.IsNullOrEmpty())
@@ -380,13 +555,21 @@ ErrorCodeEnum CUpgradeMgrEntity::MD5Folder(CSimpleStringA strFolderPath,bool isD
 					Dbg("BlackDir Filter don't add to md5 list, dir=[%s]", dirPath.GetData());
 					continue;//跳过文件夹
 				}else{
-					//判断是否是dep文件夹
-					if(strcmp(FileInfo.name, "dep") == 0){
+					//判断是否是dep文件夹或者是dep文件夹下面的子文件夹
+					if(strcmp(FileInfo.name, "dep") == 0||isDepDIr){
 						newPath = strFolderPath + "\\" + FileInfo.name;
-						MD5Folder(newPath,true);
+						ErrorCodeEnum rc = MD5Folder(newPath,true);
+						if(Error_Succeed!=rc){
+							_findclose(Handle);
+							return rc;
+						}
 					}else{
 						newPath = strFolderPath + "\\" + FileInfo.name;
-						MD5Folder(newPath);
+						ErrorCodeEnum rc = MD5Folder(newPath);
+						if(Error_Succeed!=rc){
+							_findclose(Handle);
+							return rc;
+						}
 					}
 				}
 			}
@@ -423,10 +606,6 @@ ErrorCodeEnum CUpgradeMgrEntity::MD5Folder(CSimpleStringA strFolderPath,bool isD
 				if(std::regex_match(strFindName.GetData(),e,regex_constants::match_default)){
 					continue;
 				}
-				/*if(strFindName.IndexOf("CenterSetting.")>-1&&strFindName.IndexOf(".ini")>-1){
-					continue;
-				}*/
-
 
 				// 过滤install.ini,集中配置,log文件和cfg\certs目录
 				// TODO:改成配置
@@ -467,10 +646,13 @@ ErrorCodeEnum CUpgradeMgrEntity::MD5Folder(CSimpleStringA strFolderPath,bool isD
 
 				CSimpleStringA strFilePath = strFolderPath + "\\" + strFindName;
 				CSimpleStringA strMD5Val;
-				ErrorCodeEnum rErrcode = MD5File(strFilePath, strMD5Val);
+				//ErrorCodeEnum rErrcode = MD5File(strFilePath, strMD5Val);
+				//修改为SM3进行哈希
+				ErrorCodeEnum rErrcode = SM3FileToStr(strFilePath, strMD5Val,false);
 				if (Error_Succeed != rErrcode)
 				{
 					Dbg("%s获取MD5失败,错误码:%d", strFilePath.GetData(), (int)rErrcode);
+					_findclose(Handle);
 					return rErrcode;
 				}
 

+ 14 - 1
Module/mod_UpgradeMgr/mod_UpgradeMgr.h

@@ -19,7 +19,11 @@ using namespace UpgradeManager;
 class CUpgradeMgrEntity : public CEntityBase, public ISysVarListener, public IBroadcastListener
 {
 public:
-	CUpgradeMgrEntity(){}
+	CUpgradeMgrEntity(){
+		m_IsSM3listSucc=0;
+		m_beginSM3HashTime=0;
+		m_strSM3Hash="";
+	}
 	virtual ~CUpgradeMgrEntity() {}
 	virtual const char *GetEntityName() const { return "UpgradeManager"; }
 	virtual bool IsService()const{return true;}
@@ -58,6 +62,12 @@ public:
 	ErrorCodeEnum MD5Data(CSimpleStringA strData, CSimpleStringA &strMD5);
 	ErrorCodeEnum MD5Folder(CSimpleStringA strFolderPath, bool isDepDir=false);
 	ErrorCodeEnum GetMD5List(CSimpleStringA &strMD5List);
+
+	//新国密SM3函数,isSub表示是否截取新国密中间一段密文
+	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);
+
 	ErrorCodeEnum StopMediaPlay();
 	
 	SP_BEGIN_MSG_DISPATCH_MAP(CUpgradeMgrEntity)
@@ -74,6 +84,9 @@ public:
 	CUpgradeMgrFSM m_fsm;
 	map<CSimpleStringA, CSimpleStringA> m_FileHashMap;		// 版本文件hash值集合
 	CSimpleStringA m_strMD5List;
+	CSimpleStringA m_strSM3Hash;//SM3 32位hash
+	int m_IsSM3listSucc;//获取SM3哈希list是否成功,0:还未计算完毕,1:表示成功 ,-1表示计算失败
+	DWORD m_beginSM3HashTime;//开始计算sm3hahs时间
 };
 
 class CUpgradeMgrSession : public UpgradeMgrService_ServerSessionBase