diff --git a/ReadMe.md b/ReadMe.md index 067e0f0..835c33d 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -357,6 +357,35 @@ nohup ./server_linux_amd64 --port 6543 --http-port 9001 > yama.log 2>&1 & ## 更新日志 +### v1.3.5 (2026.5.31) + +**硬件编码扩展(H.264 / AV1)& 多客户许可证生产化 & FRP 子级自动化** + +**新功能:** +- **客户端硬件编码**:新增 FFmpeg 路径的 `CFFmpegH264Encoder` / `CFFmpegAV1Encoder`,可调用 NVENC / Quick Sync / AMF 等 GPU 编码器;`EncoderFactory` 运行时自动优选 +- **静屏跳编码**:捕获层比对前后帧,完全相同时跳过编码与传输——硬件编码器在静屏不再被强行喂入相同帧 +- **菜单驱动的压缩 / 解压**:自定义文件 + 文件夹选择器(`ZstaPickerDlg`),可从远程主机直接选混合目录树打包或解压到目标路径 +- **下级主控自动起 frp client**:上级签发 V2 授权时一并下发 frp 配置,子级主控启动即接通中继链路,无需人工配 `frpc.toml` +- **合规可裁剪构建**:`DISABLE_X264` / `DISABLE_FFMPEG` 编译开关,可在不动源码的前提下产出完全不带 x264 / FFmpeg 的二进制,配套 `LICENSE-THIRD-PARTY.txt` + +**改进:** +- **多客户许可证服务端硬化**:`licenses.ini` hot-path 互斥锁 + 30s 节流,写频从 0.6 → 0.07 次/秒(外推 100 在线:~160 → ~3.3 次/秒);闭环了"预设续期配额消失"的 read-modify-write 竞态 +- **`licenses.ini` IP 列表 4KB 截断修复**:分段写入避免溢出尾部被永久丢弃 +- **导入 SN 按 `BindType` 严格校验**:避免离线版 / 在线版 / 试用版 SN 串库 +- **客户端 SCLoader 大瘦身**:移除一万行硬编码 stub(`SCLoader.cpp`),改用主控运行时下发 DLL 注入 +- **客户端 logger 优雅退出**:进程退出刷出队列里的日志并记录退出信号 +- **IOCPClient 早期数据包防护**:`setManagerCallBack` 之前抵达的包不再触发空回调崩溃 +- **多显示器光标位置修正 & MJPEG 录制翻转修复**:trace cursor 跨屏坐标系修正;MJPEG 上下颠倒回放修正 + 编码失败 0 字节 AVI 残留清理 +- **FRP `privilegeKey` 改用 UTC 时间戳**:跨时区主控 / 中继 / 客户端不再因本地时区让 frp auth 失效 +- **Linux 客户端 `install.sh` / `uninstall.sh`**:补齐一键部署 / 卸载脚本 +- **Go 服务端构建管线**:`build.ps1` / `build.cmd` 把 Go 主控纳入主构建 +- **Release / Download 链接全量迁移到 Gitea**:v1.3.4+ 不再发到 GitHub + +**Bug 修复:** +- Web 文件管理触屏双击不稳:触摸阈值放宽防误判拖拽 + 两次 `click` 模拟物理双击;修复跨平台文件夹重命名 / 点击无响应 +- 向 sub-master 发送 AUTH 时密码生成路径错误,下级始终认证失败 +- 试用 SN 误进入 V2 / V1 授权下发分支 + ### v1.3.4 (2026.5.20) **Go 主控 & 全平台主控闭环 & Linux/macOS 客户端剪贴板** diff --git a/ReadMe_EN.md b/ReadMe_EN.md index d62ff64..ab8a328 100644 --- a/ReadMe_EN.md +++ b/ReadMe_EN.md @@ -357,6 +357,35 @@ Valid : 2026-02-01 to 2028-02-01 ## Changelog +### v1.3.5 (2026.5.31) + +**Hardware encoding expansion (H.264 / AV1) & multi-tenant license hardening & FRP sub-master automation** + +**New features:** +- **Client hardware encoding**: new `CFFmpegH264Encoder` / `CFFmpegAV1Encoder` on the FFmpeg path, driving NVENC / Quick Sync / AMF GPU encoders; `EncoderFactory` picks the best available encoder at runtime +- **Skip-encode on identical frames**: capture layer compares consecutive frames and skips both encode and transmit when the picture is static — hardware encoders no longer get fed duplicate frames during idle desktops +- **Menu-driven compress / extract**: custom file + folder picker (`ZstaPickerDlg`) lets you select a mixed directory tree on the remote host to zip up, or extract an archive to a target path +- **Auto-launch frp client for sub-masters**: when upstream issues a V2 license, frp config is shipped alongside it; the sub-master connects to the relay automatically with no manual `frpc.toml` +- **Compliance-tailorable build**: `DISABLE_X264` / `DISABLE_FFMPEG` build flags produce binaries with zero x264 / FFmpeg dependency without touching source; paired with `LICENSE-THIRD-PARTY.txt` + +**Improvements:** +- **Multi-tenant license server hardening**: `licenses.ini` hot path now has a recursive mutex + 30s throttle; write rate dropped from 0.6 → 0.07/sec (extrapolated to 100 online targets: ~160 → ~3.3 writes/sec). Closes the read-modify-write race that caused "preset renewal quota silently disappears" +- **`licenses.ini` IP list 4KB truncation fix**: segmented writes prevent the tail of large IP histories from being silently dropped by `WritePrivateProfileString`'s 4KB single-value cap +- **`BindType` enforced on SN import**: offline / online / trial SNs can no longer be cross-imported into the wrong bucket +- **Client SCLoader slim-down**: removed `SCLoader.cpp` (10K lines of hard-coded stub); the client now uses the DLL delivered by the master at runtime +- **Client logger graceful shutdown**: drains queued log lines on exit and records the exit signal — after a restart you still have the last 1-2 seconds of context +- **IOCPClient early-packet guard**: packets that arrive before `setManagerCallBack` no longer trigger a null-callback crash (startup race) +- **Multi-monitor trace-cursor position fix & MJPEG playback flip fix**: trace cursor coordinates corrected for cross-monitor capture; MJPEG upside-down playback fixed and 0-byte AVI residue removed on encoder-open failure +- **FRP `privilegeKey` switched to UTC**: master / relay / client across different time zones no longer reject each other's frp auth because of local-time skew +- **Linux client `install.sh` / `uninstall.sh`**: one-shot install / uninstall scripts, on par with macOS +- **Go server build pipeline**: `build.ps1` / `build.cmd` now build the Go master as part of the main build +- **Release / Download links migrated to Gitea**: v1.3.4+ is no longer published to GitHub + +**Bug fixes:** +- Web file manager touch double-click unreliability: move threshold widened to avoid spurious drag detection, plus two sequential `click` events (20ms apart) instead of the non-standard `dblclick` — fixes folder rename / unresponsive clicks on Windows, Linux, and macOS +- AUTH packet to sub-master used the wrong password generation path, causing sub-masters to fail authentication every time +- Trial SN was being routed through the V2 / V1 license-issue branch + ### v1.3.4 (2026.5.20) **Go master & full-platform master loop & Linux/macOS clipboard** diff --git a/ReadMe_TW.md b/ReadMe_TW.md index c5d46f8..635a090 100644 --- a/ReadMe_TW.md +++ b/ReadMe_TW.md @@ -357,6 +357,35 @@ nohup ./server_linux_amd64 --port 6543 --http-port 9001 > yama.log 2>&1 & ## 更新日誌 +### v1.3.5 (2026.5.31) + +**硬體編碼擴充(H.264 / AV1)& 多客戶授權生產化 & FRP 子級自動化** + +**新功能:** +- **用戶端硬體編碼**:新增 FFmpeg 路徑的 `CFFmpegH264Encoder` / `CFFmpegAV1Encoder`,可呼叫 NVENC / Quick Sync / AMF 等 GPU 編碼器;`EncoderFactory` 執行時自動優選 +- **靜畫跳編碼**:擷取層比對前後影格,完全相同時跳過編碼與傳輸——硬體編碼器在靜畫時不再被強行餵入相同影格 +- **選單驅動的壓縮 / 解壓**:自訂檔案 + 資料夾選擇器(`ZstaPickerDlg`),可從遠端主機直接選混合目錄樹打包或解壓到目標路徑 +- **下級主控自動啟動 frp client**:上級簽發 V2 授權時一併下發 frp 設定,子級主控啟動即接通中繼鏈路,無需人工設定 `frpc.toml` +- **合規可裁剪建置**:`DISABLE_X264` / `DISABLE_FFMPEG` 編譯開關,可在不動原始碼的前提下產出完全不含 x264 / FFmpeg 的二進位,搭配 `LICENSE-THIRD-PARTY.txt` + +**改進:** +- **多客戶授權伺服端硬化**:`licenses.ini` hot-path 互斥鎖 + 30s 節流,寫入頻率從 0.6 → 0.07 次/秒(外推 100 在線:~160 → ~3.3 次/秒);閉環「預設續期配額消失」的 read-modify-write 競態 +- **`licenses.ini` IP 清單 4KB 截斷修復**:分段寫入避免溢出尾部被永久丟棄 +- **匯入 SN 按 `BindType` 嚴格校驗**:避免離線版 / 連線版 / 試用版 SN 串庫 +- **用戶端 SCLoader 大瘦身**:移除一萬行硬編碼 stub(`SCLoader.cpp`),改用主控執行時下發 DLL 注入 +- **用戶端 logger 優雅退出**:程序結束時刷出佇列裡的日誌並記錄退出訊號 +- **IOCPClient 早期封包防護**:`setManagerCallBack` 之前抵達的封包不再觸發空回呼崩潰 +- **多顯示器游標位置修正 & MJPEG 錄製翻轉修復**:trace cursor 跨螢幕座標系修正;MJPEG 上下顛倒回放修正 + 編碼失敗 0 位元組 AVI 殘留清理 +- **FRP `privilegeKey` 改用 UTC 時間戳**:跨時區主控 / 中繼 / 用戶端不再因本地時區讓 frp auth 失效 +- **Linux 用戶端 `install.sh` / `uninstall.sh`**:補齊一鍵部署 / 解除安裝指令稿 +- **Go 伺服端建置管線**:`build.ps1` / `build.cmd` 把 Go 主控納入主建置流程 +- **Release / Download 連結全面遷移到 Gitea**:v1.3.4+ 不再發行到 GitHub + +**Bug 修復:** +- Web 檔案管理觸控雙擊不穩:觸控閾值放寬避免誤判拖曳 + 兩次 `click` 模擬實體雙擊;修復跨平台資料夾重新命名 / 點擊無回應 +- 向 sub-master 發送 AUTH 時密碼產生路徑錯誤,下級始終認證失敗 +- 試用 SN 誤進入 V2 / V1 授權下發分支 + ### v1.3.4 (2026.5.20) **Go 主控 & 全平台主控閉環 & Linux/macOS 用戶端剪貼簿** diff --git a/client/Script.rc b/client/Script.rc index a17c76d..f77bbd7 100644 --- a/client/Script.rc +++ b/client/Script.rc @@ -88,7 +88,7 @@ IDR_WAVE WAVE "Res\\msg.wav" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,3,4 + FILEVERSION 1,0,3,5 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG @@ -106,7 +106,7 @@ BEGIN BEGIN VALUE "CompanyName", "FUCK THE UNIVERSE" VALUE "FileDescription", "A GHOST" - VALUE "FileVersion", "1.0.3.4" + VALUE "FileVersion", "1.0.3.5" VALUE "InternalName", "ServerDll.dll" VALUE "LegalCopyright", "Copyright (C) 2019-2026" VALUE "OriginalFilename", "ServerDll.dll" diff --git a/client/TestRun.rc b/client/TestRun.rc index 8e9f86b..3068810 100644 Binary files a/client/TestRun.rc and b/client/TestRun.rc differ diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index d051386..cc03445 100644 Binary files a/server/2015Remote/2015Remote.rc and b/server/2015Remote/2015Remote.rc differ diff --git a/server/2015Remote/UIBranding.h b/server/2015Remote/UIBranding.h index 66c09a1..982fe94 100644 --- a/server/2015Remote/UIBranding.h +++ b/server/2015Remote/UIBranding.h @@ -46,7 +46,7 @@ // 程序版本号 [建议格式: X.Y.Z] // 影响:关于对话框、标题栏 -#define BRAND_VERSION "1.3.4" +#define BRAND_VERSION "1.3.5" // 启动画面名称 [建议大写,更有 Logo 感] // 影响:启动画面 Logo 文字(大号艺术字体渲染) diff --git a/server/go/cmd/winres/icon.png b/server/go/cmd/winres/icon.png new file mode 100644 index 0000000..c5882b6 Binary files /dev/null and b/server/go/cmd/winres/icon.png differ diff --git a/server/go/cmd/winres/winres.json b/server/go/cmd/winres/winres.json new file mode 100644 index 0000000..e25a83f --- /dev/null +++ b/server/go/cmd/winres/winres.json @@ -0,0 +1,60 @@ +{ + "RT_GROUP_ICON": { + "APP": { + "0000": [ + "icon.png" + ] + } + }, + "RT_MANIFEST": { + "#1": { + "0409": { + "identity": { + "name": "YAMA Go Server", + "version": "1.0.0" + }, + "description": "YAMA Go Server", + "minimum-os": "win7", + "execution-level": "as invoker", + "ui-access": false, + "auto-elevate": false, + "dpi-awareness": "system", + "disable-theming": false, + "disable-window-filtering": false, + "high-resolution-scrolling-aware": false, + "ultra-high-resolution-scrolling-aware": false, + "long-path-aware": false, + "printer-driver-isolation": false, + "gdi-scaling": false, + "segment-heap": false, + "use-common-controls-v6": true + } + } + }, + "RT_VERSION": { + "#1": { + "0000": { + "fixed": { + "file_version": "1.0.0.0", + "product_version": "1.0.0.0" + }, + "info": { + "0409": { + "Comments": "YAMA Go Remote Desktop Server", + "CompanyName": "SimpleRemoter", + "FileDescription": "YAMA Go Remote Desktop Server", + "FileVersion": "1.0.0", + "InternalName": "YamaGo.exe", + "LegalCopyright": "Copyright © 2026 YAMA", + "LegalTrademarks": "", + "OriginalFilename": "YamaGo.exe", + "PrivateBuild": "", + "ProductName": "YAMA Go Server", + "ProductVersion": "1.0.0", + "SpecialBuild": "" + } + } + } + } + } +} \ No newline at end of file