#pragma once #include "SpSecureClient.h" #include "SpFSM.h" #include #include using namespace std; #pragma pack(1) // 请求建立远程控制通道 // [StructName("RemoteR")] struct RvcCreateChannelReq { char TerminalNo[16]; // 终端号 BYTE IPAddr[4]; // 终端IP地址,用于IP绑定 DWORD LifeID; // 生命标识,用户判断终端是否已重启 }; //[StructName("RemoteA")] struct RvcCreateChannelRet { char AgentID[16]; // 远程用户 char ChannelID[20]; // 通道标识 }; // 查看实体状态 // [StructName("ViewEntR")] struct RvcViewEntityReq { int TaskID; // 任务号 }; // [StructName("ViewEnA1")] struct RvcViewEntityRet1 { int TaskID; // 任务号 }; // [StructName("ViewEnA2")] struct RvcViewEntityRet2 { char EntityName[32]; // 实体名 int EntityState; // 具体定义参见spbase.h的EntityStateEnum int ProcessID; // 进程号 int EntityID; // 实体号 int UsedMemory; // 占用内存 }; // 查看实体状态(返回是否有静态配置和运行时配置) // [StructName("ViEnExR")] struct RvcViewEntityExReq { int TaskID; // 任务号 }; // [StructName("ViEnExA1")] struct RvcViewEntityExRet1 { int TaskID; // 任务号 }; // [StructName("ViEnExA2")] struct RvcViewEntityExRet2 { char EntityName[32]; // 实体名 int EntityState; // 具体定义参见spbase.h的EntityStateEnum int ProcessID; // 进程号 int EntityID; // 实体号 int UsedMemory; // 占用内存 bool HasConfig; // 是否有实体配置 bool HasRunCfg; // 是否有运行时配置 }; // 查询实体配置文件 // [StructName("ViewCfgR")] struct RvcViewConfigReq { int TaskID; // 任务号 char EntityName[32]; // 实体名 }; //[StructName("ViewCfgA")] struct RvcViewConfigRet { int TaskID; // 任务号 char ConfigData[0]; // 配置文件(变长字段) }; // 查询dbg日志 //[StructName("ViewDbgR")] struct RvcViewDbgReq { int TaskID; // 任务号 char EntityName[32]; // 实体名 char ViewDate[10]; // 查看对应日期的日志,空表示当天,如"20131218" long long StartPos; // 起始位移,0表示从头开始 long long MaxRetBytes; // 最大返回字节数 }; //[StructName("ViewDbgA")] struct RvcViewDbgRet { int TaskID; // 任务号 char EntityName[32]; // 实体名 char ViewDate[10]; // 查看对应日期的日志,空表示当天,如"20131218" long long NextPos; // 下次开始位移,如果为0表示已结束 long long FileLength; // 当前日志文件长度 char LogData[0]; // 日志内容(变长字段) }; // 操作磁盘文件 //[StructName("OprDiskR")] struct RvcOperateDiskReq { int TaskID; // 任务号 char current[260]; //路径,windows最大长度260 int mode; int attribute; char content[260]; int filter1; char filter2[260]; int attachment1; char attachment2[260]; }; // [StructName("OprDiskJA")] struct RvcOperateDiskJsonRet { int TaskID; long long jsonLength; char jsonData[0]; }; #if !(defined _WIN32 || defined _WIN64) #define _TRUNCATE ((size_t)-1) int strncpy_s(char* _Destination, size_t _SizeInBytes, char const* _Source, size_t _MaxCount); int strncpy_s(char* _Destination, char const* _Source, size_t _MaxCount); #endif #include "remoteBase.h" // [StructName("OprDiskA2")] class RvcOperateDiskRet2 { public: RvcOperateDiskRet2() :fileSize(0), ftCreate(0), ftModified(0), ftAccess(0), fileAttribute(0), forbidAttributes(0), reserved1(0) { ZeroMemory(fileName, sizeof(fileName)); ZeroMemory(reserved2, sizeof(reserved2)); } RvcOperateDiskRet2(const CSimpleStringA &oldName, const unsigned long long &oldSize, const unsigned long long &oldCreate, const unsigned long long &oldModified, const unsigned long long &oldAccess, const unsigned int &oldAttribute, const unsigned int &oldForbidAttributes, const int &oldReserved1, const CSimpleStringA &oldReserved2) :fileSize(oldSize), ftCreate(oldCreate), ftModified(oldModified), ftAccess(oldAccess), fileAttribute(oldAttribute), forbidAttributes(oldForbidAttributes), reserved1(oldReserved1) { ZeroMemory(fileName, sizeof(fileName)); strncpy_s(fileName, sizeof(fileName), (const char*)oldName, _TRUNCATE); ZeroMemory(reserved2, sizeof(reserved2)); strncpy_s(reserved2, sizeof(reserved2), (const char*)oldReserved2, _TRUNCATE); } public: char fileName[260]; unsigned long long fileSize; unsigned long long ftCreate; unsigned long long ftModified; unsigned long long ftAccess; unsigned int fileAttribute; unsigned int forbidAttributes; int reserved1; char reserved2[260]; }; //[StructName("OprDiskA1")] struct RvcOperateDiskRet1 { int TaskID; // 任务号 int result; char header[260]; int attachment1; RvcOperateDiskRet1(const int &oldID, const int &oldResult, const CSimpleStringA &oldHeader, const int &oldAttach) :TaskID(oldID), result(oldResult) { ZeroMemory(header, sizeof(header)); strncpy_s(header, sizeof(header), (const char*)oldHeader, _TRUNCATE); } }; // 进入维护模式 // [StructName("EnterMMR")] struct RvcEnterMaintainModeReq { int TaskID; // 任务号 }; // [StructName("EnterMMA")] struct RvcEnterMaintainModeRet { int TaskID; // 任务号 }; // 退出维护模式 // [StructName("ExitMMR")] struct RvcExitMaintainModeReq { int TaskID; // 任务号 }; // [StructName("ExitMMA")] struct RvcExitMaintainModeRet { int TaskID; // 任务号 }; // 手工升级 // [StructName("UpgPackR")] struct RvcUpgradePackReq { int TaskID; // 任务号 char PackName[64]; // 包名称 }; // [StructName("UpgPackA")] struct RvcUpgradePackRet { int TaskID; // 任务号 }; // 查询当前维护用户 //[StructName("GetUserR")] struct RvcGetUserReq { int TaskID; // 任务号 }; // [StructName("GetUserA")] struct RvcGetUserRet { int TaskID; // 任务号 char UserID[16]; // 用户号 char UserName[16]; // 用户名称 char CurRight[16]; // 用户权限 char Authorizer[16]; // 授权人 unsigned int BeginTime; // 开始时间 }; // 提升当前维护用户 // [StructName("EnpowerR")] struct RvcEnpowerUserReq { int TaskID; // 任务号 char UserID[16]; // 用户号 }; // [StructName("EnpowerA")] struct RvcEnpowerUserRet { int TaskID; // 任务号 }; // 降级当前维护用户 // [StructName("TakeovrR")] struct RvcTakeoverPowerReq { int TaskID; // 任务号 char UserID[16]; // 用户号 }; // [StructName("TakeovrA")] struct RvcTakeoverPowerRet { int TaskID; // 任务号 }; // 强制当前维护用户退出 // [StructName("ForceQtR")] struct RvcForceQuitReq { int TaskID; // 任务号 }; //[StructName("ForceQtA")] struct RvcForceQuitRet { int TaskID; // 任务号 }; // 修改实体配置文件 // [StructName("EditCfgR")] struct RvcEditConfigReq { int TaskID; char EditType; // "A"增加;"U"修改;“D" 删除 char EntityName[32]; // 配置文件名 char Section[32]; // 配置节 char Key[32]; // 配置项 char Value[256]; // 值 }; // [StructName("EditCfgA")] struct RvcEditConfigRet { int TaskID; }; // 查询终端系统变量 // [StructName("ViewVarR")] struct RvcViewSysVarReq { int TaskID; }; // [StructName("ViewVarA")] struct RvcViewSysVarRet { int TaskID; char VarName[32]; // 变量名称 char VarValue; // 变量值 }; // 手工回滚 //[StructName("RollbakR")] struct RvcRollbackReq { int TaskID; // 任务号 }; //[StructName("RollbakA")] struct RvcRollbackRet { int TaskID; // 任务号 }; // 重启机器 //[StructName("RestOR")] struct RvcRestartMachineReq { int TaskID; // 任务号 }; //[StructName("RestOA")] struct RvcRestartMachineRet { int TaskID; // 任务号 }; // 重启Shell //[StructName("RestSR")] struct RvcRestartShellReq { int TaskID; // 任务号 }; //[StructName("RestSA")] struct RvcRestartShellRet { int TaskID; // 任务号 }; // 删除RunInfo日志 struct RvcDelRunInfoLogReq { int TaskID; // 任务号 char logName[128]; }; struct RvcDelRunInfoLogRet { int TaskID; // 任务号 }; // 查询当前活动版本 //[StructName("GetVerR")] struct RvcGetActiveVerReq { int TaskID; // 任务号 }; //[StructName("GetVerA")] struct RvcGetActiveVerRet { int TaskID; // 任务号 char Version[32]; // 活动版本 }; // 查询实体配置文件 //[StructName("VRunCfgR")] struct RvcViewRunCfgReq { int TaskID; // 任务号 char ConfigName[32]; // 配置文件 }; //[StructName("VRunCfgA")] struct RvcViewRunCfgRet { int TaskID; // 任务号 char ConfigData[0]; // 配置文件(变长字段) }; // 查询实体配置文件 //[StructName("VPkgLogR")] struct RvcViewInstallLogReq { int TaskID; // 任务号 char InstallLog[32]; // 配置文件 }; //[StructName("VPkgLogA")] struct RvcViewInstallLogRet { int TaskID; // 任务号 char LogData[0]; // 配置文件(变长字段) }; /// /// 导出系统日志 /// //[StructName("EvtLogR")] struct RvcUploadEventLogReq { RvcUploadEventLogReq() :TaskID(0), evtName(0), duration(0), startTime(0), endTime(0), reversed1(0), StartPos(0), MaxRetBytes(0) { ZeroMemory(cusEvtFileName, sizeof(cusEvtFileName)); ZeroMemory(evtSrcEventName, sizeof(evtSrcEventName)); ZeroMemory(reversed2, sizeof(reversed2)); ZeroMemory(UploadFile, sizeof(UploadFile)); } int TaskID; // 任务号 unsigned short evtName; //0x0000:不筛选,0x0001:应用程序,0x0002:安全,0x0004:Setup,0x0008:系统,0x0100:自定义,0x00FF:全部类型(不包括自定义) unsigned short evtLevel; //0x0000:不筛选,0x0001:错误,0x0002:警告,0x0004:信息,0x0008:审计成功,0x0010:审计失败,0x00FF:全部类型 unsigned short duration; //0x0000:任何时间,0x0001: 近1小时,0x0002:近12小时,0x0003:近1天,0x0004:近7天,0x0005:近30天,0x000F:自定义 unsigned long long startTime; //当 duration == 0x000F 时有效,如下两项有效,startTime存储筛选的开始时间,endTime存储筛选的结束时间,具体到秒,需满足endTime >= startTime unsigned long long endTime; char cusEvtFileName[260]; //当 evtName == 0x0100 时有效,存储 日志名称 char evtSrcEventName[260]; //存储事件日志来源,一般应用程序名称,比较常用的应该是“Application Error”,不指定请置为NULL或“” int reversed1; //保留字段 char reversed2[260]; char UploadFile[128]; // 第一次传入指定日志文件名, 续传时传入上传后保存文件名 long long StartPos; // 起始位移,0表示从头开始 long long MaxRetBytes; // 最大返回字节数 }; //[StructName("EvtLogA")] struct RvcUploadEventLogRet { int TaskID; // 任务号 char UploadFile[128]; // 导出后文件名 long long ZipFileLen; // 压缩后长度 long long StartPos; // 起始位移,0表示从头开始 long long NextPos; // 下次开始位移,如果为0表示已结束 char LogData[0]; // 日志内容(变长字段) }; /// /// 通过日期导出日志 /// //[StructName("ULogBDR")] struct RvcUploadLogByDateReq { int TaskID; // 任务号 char ViewDate[10]; // 查看对应日期的日志,空表示当天,如"20131218" char UploadFile[128]; // 第一次传入指定日志文件名, 续传时传入上传后保存文件名 long long StartPos; // 起始位移,0表示从头开始 long long MaxRetBytes; // 最大返回字节数 }; //[StructName("ULogBDA")] struct RvcUploadLogByDateRet { int TaskID; // 任务号 char UploadFile[128]; // 导出后文件名 long long ZipFileLen; // 压缩后长度 long long StartPos; // 起始位移,0表示从头开始 long long NextPos; // 下次开始位移,如果为0表示已结束 char LogData[0]; // 日志内容(变长字段) }; /// /// 上传日志 /// //[StructName("UpldLogR")] struct RvcUploadLogReq { int TaskID; // 任务号 char UploadFile[128]; // 第一次传入指定日志文件名, 续传时传入上传后保存文件名 long long StartPos; // 起始位移,0表示从头开始 long long MaxRetBytes; // 最大返回字节数 }; //[StructName("UpldLogA")] struct RvcUploadLogRet { int TaskID; // 任务号 char UploadFile[128]; // 导出后文件名 long long ZipFileLen; // 压缩后长度 long long StartPos; // 起始位移,0表示从头开始 long long NextPos; // 下次开始位移,如果为0表示已结束 char LogData[0]; // 日志内容(变长字段) }; /// /// 通过日期批量上传日志 /// //[StructName("ULogsBDR")] struct RvcBatchUploadLogsByDateReq { int TaskID; // 任务号 char ViewDate[10]; // 查看对应日期的日志,空表示当天,如"20131218" char UploadFile[1024]; // 批量导出日志名,以;分隔 char ZipFileName[128]; // 压缩文件包名 long long StartPos; // 起始位移,0表示从头开始 long long MaxRetBytes; // 最大返回字节数 }; struct RvcBatchUploadLogsByDateReq2 { int TaskID; // 任务号 char ViewDate[10]; // 查看对应日期的日志,空表示当天,如"20131218" char UploadFile[512]; // 批量导出日志名,以;分隔 char ZipFileName[128]; // 压缩文件包名 long long StartPos; // 起始位移,0表示从头开始 long long MaxRetBytes; // 最大返回字节数 }; //[StructName("ULogsBDA")] struct RvcBatchUploadLogsByDateRet { int TaskID; // 任务号 char ZipFileName[128]; // 压缩文件包名 long long ZipFileLen; // 压缩后长度 long long StartPos; // 起始位移,0表示从头开始 long long NextPos; // 下次开始位移,如果为0表示已结束 char LogData[0]; // 日志内容(变长字段) }; /// /// 批量上传日志 /// //[StructName("UpdLogsR")] struct RvcBatchUploadLogsReq { int TaskID; // 任务号 char UploadFile[1024]; // 批量导出日志名,以;分隔 char ZipFileName[128]; // 压缩文件包名 long long StartPos; // 起始位移,0表示从头开始 long long MaxRetBytes; // 最大返回字节数 }; struct RvcBatchUploadLogsReq2 { int TaskID; // 任务号 char UploadFile[512]; // 批量导出日志名,以;分隔 char ZipFileName[128]; // 压缩文件包名 long long StartPos; // 起始位移,0表示从头开始 long long MaxRetBytes; // 最大返回字节数 }; //[StructName("UpdLogsA")] struct RvcBatchUploadLogsRet { int TaskID; // 任务号 char ZipFileName[128]; // 压缩文件包名 long long ZipFileLen; // 压缩后长度 long long StartPos; // 起始位移,0表示从头开始 long long NextPos; // 下次开始位移,如果为0表示已结束 char LogData[0]; // 日志内容(变长字段) }; // 取消升级 // [StructName("CancUpgR")] struct RvcCancelUpgradeReq { int TaskID; // 任务号 char PackName[64]; // 包名称 }; // [StructName("CancUpgA")] struct RvcCancelUpgradeRet { int TaskID; // 任务号 }; #pragma pack() class CRemoteControllerCnn : public SpSecureClient { public: CRemoteControllerCnn(CEntityBase *pEntity, FSMBase *pFSM); ErrorCodeEnum SendCreateRemoteChannelReq(); private: ~CRemoteControllerCnn(void); void OnDisconnect(); void OnPkgAnswer(const CSmartPointer &pRecvPkg); bool GetHostIPAddr(BYTE addr[4]); ErrorCodeEnum EnterMonitorMode(); ErrorCodeEnum EnterMaintainMode(bool bLocalMaintain); ErrorCodeEnum EnterTerminalMode(int nRemotePort); ErrorCodeEnum HandleCreateRemoteChannelRet(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleEndRemoteModeReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleRestartShellReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleDelRunInfoLogReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleTest(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleRestartMachineReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleViewEntityStateReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleViewEntityConfigReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleViewDebugLogReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleOperateDiskReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleUploadEventLogReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleUploadLogByDateReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleBatchUploadLogsByDateReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleEnterMaintainModeReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleExitMaintainModeReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleUpgradePackReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleRollbackUpgradeReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleGetCurMaintainerReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleEnpowerMaintainerReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleTakeoverPowerReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleForceQuitMaintainReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleEditConfigReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleViewSysVarReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleViewEntityStateExReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleGetVersionReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleViewRunCfgReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleViewInstallLogReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleUploadLogReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum ZipFile(LPCTSTR lpszZipArchive, LPCTSTR lpszSrcFile); ErrorCodeEnum BatchZipFiles(LPCTSTR lpszZipArchive, const list &listSrcFiles); ErrorCodeEnum HandleBatchUploadLogsReq(const CSmartPointer &pRecvPkg); ErrorCodeEnum HandleCancelUpgradeReq(const CSmartPointer &pRecvPkg); private: FSMBase *m_pFSM; char m_chRemoteMode; // 当前模式: 初始状态N、监视O、维护M、终端控制T };