Commit 6d0b1bb (Feat: Add privilege column) inserted ONLINELIST_PRIVILEGE
at enum value 9, shifting INSTALLTIME from 9→10 and PATH from 12→13.
However, FileUpload_Lib (SimplePlugins) is compiled against a separate
copy of context.h that still uses the old enum values. Since
HostInfo.cpp's SaveClientMapData uses OLD enum values to read
sClientInfo[], it was reading privilegeStr for InstallTime and client
type for ProgramPath — corrupting the history host database.
Fix: move ONLINELIST_PRIVILEGE to value 16 (just before MAX), restoring
all original enum values (INSTALLTIME=9, PATH=12, etc.) so the
pre-built library can continue reading correct data without recompilation.
The 'permission' column now appears as the rightmost column in the
online host list instead of between 'version' and 'install time'.
Co-Authored-By: DeepSeek V4 Pro
80 lines
3.0 KiB
C++
80 lines
3.0 KiB
C++
#pragma once
|
||
|
||
#include "common/header.h"
|
||
#include "common/commands.h"
|
||
#include <atlstr.h>
|
||
|
||
enum {
|
||
ONLINELIST_IP = 0, // IP的列顺序
|
||
ONLINELIST_ADDR, // 地址
|
||
ONLINELIST_LOCATION, // 地理位置
|
||
ONLINELIST_COMPUTER_NAME, // 计算机名/备注
|
||
ONLINELIST_OS, // 操作系统
|
||
ONLINELIST_CPU, // CPU
|
||
ONLINELIST_VIDEO, // 摄像头(有无)
|
||
ONLINELIST_PING, // PING(对方的网速)
|
||
ONLINELIST_VERSION, // 版本信息
|
||
ONLINELIST_INSTALLTIME, // 安装时间
|
||
ONLINELIST_LOGINTIME, // 活动窗口
|
||
ONLINELIST_CLIENTTYPE, // 客户端类型
|
||
ONLINELIST_PATH, // 文件路径
|
||
ONLINELIST_PUBIP,
|
||
ONLINELIST_STARTTIME,
|
||
ONLINELIST_CAPABILITIES, // 客户端能力位
|
||
ONLINELIST_PRIVILEGE, // 权限级别 (SYSTEM/Admin/User)
|
||
ONLINELIST_MAX,
|
||
};
|
||
|
||
class context
|
||
{
|
||
public:
|
||
// 纯虚函数
|
||
virtual VOID InitMember(SOCKET s, VOID* svr) = 0;
|
||
virtual BOOL Send2Client(PBYTE szBuffer, ULONG ulOriginalLength) = 0;
|
||
virtual CString GetClientData(int index)const = 0;
|
||
virtual void GetAdditionalData(CString(&s)[RES_MAX]) const = 0;
|
||
virtual CString GetAdditionalData(int index) const = 0;
|
||
virtual uint64_t GetClientID() const = 0;
|
||
virtual std::string GetPeerName() const = 0;
|
||
virtual int GetPort() const = 0;
|
||
virtual std::string GetProtocol() const = 0;
|
||
virtual int GetServerPort() const = 0;
|
||
virtual FlagType GetFlagType() const = 0;
|
||
virtual std::string GetGroupName() const = 0;
|
||
virtual uint64_t GetAliveTime()const = 0;
|
||
virtual void SetLastHeartbeat(uint64_t time) = 0;
|
||
virtual uint64_t GetLastHeartbeat() = 0;
|
||
virtual void CancelIO() = 0;
|
||
virtual std::string GetMasterID() const = 0;
|
||
public:
|
||
virtual ~context() {}
|
||
virtual void Destroy() {}
|
||
virtual BOOL IsLogin() const
|
||
{
|
||
return TRUE;
|
||
}
|
||
virtual void SetGroupName(const std::string& group) {}
|
||
|
||
// 检查客户端是否支持 V2 文件传输
|
||
bool SupportsFileV2() const {
|
||
CString caps = GetClientData(ONLINELIST_CAPABILITIES);
|
||
if (caps.IsEmpty()) return false;
|
||
return (strtoul(caps.GetString(), nullptr, 16) & CLIENT_CAP_V2) != 0;
|
||
}
|
||
|
||
// 检查客户端是否使用 UTF-8 协议字符串编码。
|
||
// 无此能力位的老客户端:服务端按 CP_ACP(CP936,覆盖 95% 的简中/英语 ASCII 老客户端)解读。
|
||
bool SupportsUtf8() const {
|
||
CString caps = GetClientData(ONLINELIST_CAPABILITIES);
|
||
if (caps.IsEmpty()) return false;
|
||
return (strtoul(caps.GetString(), nullptr, 16) & CLIENT_CAP_UTF8) != 0;
|
||
}
|
||
|
||
// 检查客户端是否支持屏幕预览(双击主机时拉缩略图)。
|
||
bool SupportsScreenPreview() const {
|
||
CString caps = GetClientData(ONLINELIST_CAPABILITIES);
|
||
if (caps.IsEmpty()) return false;
|
||
return (strtoul(caps.GetString(), nullptr, 16) & CLIENT_CAP_SCREEN_PREVIEW) != 0;
|
||
}
|
||
};
|