#pragma once // MCP 工具实现共享的内部辅助函数。 // // 这些函数原先都定义在 McpServer.cpp 的匿名命名空间里;主机管理 / 连接管理 // 工具族(McpMachine.cpp)需要复用同一套 JSON、host id 解析与编码转换逻辑, // 故抽出到独立编译单元,由 McpServer.cpp 与 McpMachine.cpp 共同引用。 // // 约定:函数语义与实现与抽取前完全一致(McpServer.cpp 通过 using-directive // 引入,调用点不变),不做行为改动。 #include #include "jsoncpp/json.h" #include #include class CMy2015RemoteDlg; class context; namespace McpInternal { // Json::Value → 紧凑 JSON 字符串 std::string JsonToString(const Json::Value& v); // JSON-RPC 2.0 成功 / 错误响应 std::string BuildResult(const Json::Value& id, const Json::Value& result); std::string BuildError(const Json::Value& id, int code, const std::string& msg); // 仅 ASCII 小写化;不区分大小写的子串匹配 std::string ToLowerAscii(const std::string& s); bool ContainsCI(const std::string& haystack, const std::string& needle); // 入参读取 std::string JsonStrField(const Json::Value& v, const char* key); bool IsDigits(const std::string& s); std::string GetStringArg(const Json::Value& args, const char* key); bool GetIntArg(const Json::Value& args, const char* key, int& out); bool ReadUInt64(const Json::Value& v, uint64_t& out); bool ReadUInt64Arg(const Json::Value& args, const char* key, uint64_t& out); // 解析 id 入参(必填、纯数字)为 uint64;非法返回 false 并写 err。 bool ParseHostIdArg(const Json::Value& args, uint64_t& out, std::string& err); // 在 m_HostList 中按 clientID 找在线主 context(锁内遍历 m_cs)。 context* FindMainContext(CMy2015RemoteDlg* parent, uint64_t id); // 有界 strlen:p 最多可读 avail 字节,返回 n < avail 表示遇到 '\0'。 size_t BoundedStrlen(const char* p, size_t avail); // 编码转换:任意代码页 → UTF-8(输出 JSON 用);UTF-8 → 目标代码页(下发客户端用)。 std::string ToUtf8(const char* s, UINT cp); std::string ToAnsi(const std::string& utf8, UINT cp); // 写操作审计:PostMessageA(WM_SHOWERRORMSG) 落到服务端消息/审计日志(不可关闭)。 void AuditManageAction(CMy2015RemoteDlg* parent, uint64_t devId, const std::string& tool, const std::string& detail); } // namespace McpInternal