mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-29 16:56:25 +00:00
hbb_common 7dc56d6..d9895ff, one commit: tokio-tungstenite and tungstenite up from 0.26 to rustdesk-org's rustdesk-patches-0.29 branches. The tungstenite fork grows the read buffer a read_buffer_size chunk at a time as bytes arrive, where upstream reserved the whole length a frame header declared. It is pinned here at the workspace root, the one place cargo reads [patch], so hbb_common's copy and tokio-tungstenite's resolve to the same one. The lockfile moves only those two crates and drops utf-8, which 0.29 no longer pulls. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab
292 lines
12 KiB
TOML
292 lines
12 KiB
TOML
[package]
|
|
name = "rustdesk"
|
|
version = "1.5.0"
|
|
authors = ["rustdesk <info@rustdesk.com>"]
|
|
edition = "2021"
|
|
build= "build.rs"
|
|
description = "RustDesk Remote Desktop"
|
|
default-run = "rustdesk"
|
|
rust-version = "1.75"
|
|
|
|
[lib]
|
|
name = "librustdesk"
|
|
crate-type = ["cdylib", "staticlib", "rlib"]
|
|
|
|
[[bin]]
|
|
name = "naming"
|
|
path = "src/naming.rs"
|
|
|
|
[[bin]]
|
|
name = "service"
|
|
path = "src/service.rs"
|
|
|
|
[features]
|
|
inline = []
|
|
use_samplerate = ["samplerate", "libsamplerate-sys"]
|
|
use_rubato = ["rubato"]
|
|
use_dasp = ["dasp"]
|
|
flutter = ["flutter_rust_bridge"]
|
|
default = ["use_dasp"]
|
|
hwcodec = ["scrap/hwcodec"]
|
|
vram = ["scrap/vram"]
|
|
mediacodec = ["scrap/mediacodec"]
|
|
drm = ["scrap/drm"]
|
|
# The display wake, as its OWN compile gate on top of `drm`. Everything else in the drm backend
|
|
# READS (it captures a scanout); the wake WRITES, injecting one synthetic pointer event from the
|
|
# root service so a compositor that idle-disabled its outputs re-enables them. That is a different
|
|
# kind of operation and deserves a switch that can remove it from the binary entirely, without
|
|
# giving up DRM capture: `--features drm` builds the capture path with no wake code compiled in.
|
|
drm-wake = ["drm"]
|
|
linux-pkg-config = ["magnum-opus/linux-pkg-config", "scrap/linux-pkg-config"]
|
|
unix-file-copy-paste = [
|
|
"dep:x11-clipboard",
|
|
"dep:x11rb",
|
|
"dep:percent-encoding",
|
|
"dep:once_cell",
|
|
"clipboard/unix-file-copy-paste",
|
|
]
|
|
screencapturekit = ["cpal/screencapturekit"]
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[dependencies]
|
|
async-trait = "0.1"
|
|
scrap = { path = "libs/scrap", features = ["wayland"] }
|
|
hbb_common = { path = "libs/hbb_common", features = ["webrtc"] }
|
|
base = { path = "libs/base" }
|
|
serde_derive = "1.0"
|
|
serde = "1.0"
|
|
serde_json = "1.0"
|
|
serde_repr = "0.1"
|
|
cfg-if = "1.0"
|
|
lazy_static = "1.4"
|
|
sha2 = "0.10"
|
|
repng = "0.2"
|
|
zstd = "0.13"
|
|
parity-tokio-ipc = { git = "https://github.com/rustdesk-org/parity-tokio-ipc" }
|
|
magnum-opus = { git = "https://github.com/rustdesk-org/magnum-opus" }
|
|
dasp = { version = "0.11", features = ["signal", "interpolate-linear", "interpolate"], optional = true }
|
|
rubato = { version = "0.12", optional = true }
|
|
samplerate = { version = "0.2", optional = true }
|
|
libsamplerate-sys = { version = "0.1.12", optional = true }
|
|
uuid = { version = "1.3", features = ["v4"] }
|
|
num_cpus = "1.15"
|
|
bytes = { version = "1.4", features = ["serde"] }
|
|
default-net = "0.14"
|
|
wol-rs = "1.0"
|
|
flutter_rust_bridge = { version = "=1.80", features = ["uuid"], optional = true}
|
|
errno = "0.3"
|
|
rdev = { git = "https://github.com/rustdesk-org/rdev" }
|
|
url = { version = "2.3", features = ["serde"] }
|
|
crossbeam-queue = "0.3"
|
|
hex = "0.4"
|
|
chrono = "0.4"
|
|
cidr-utils = "0.5"
|
|
fon = "0.6"
|
|
shutdown_hooks = "0.1"
|
|
totp-rs = { version = "5.4", default-features = false, features = ["gen_secret", "otpauth"] }
|
|
stunclient = "0.4"
|
|
kcp-sys= { git = "https://github.com/rustdesk-org/kcp-sys", branch = "rustdesk-patches" }
|
|
reqwest = { version = "0.12", features = ["blocking", "socks", "json", "native-tls", "rustls-tls", "rustls-tls-native-roots", "gzip", "zstd"], default-features=false }
|
|
|
|
[target.'cfg(not(target_os = "linux"))'.dependencies]
|
|
# https://github.com/rustdesk/rustdesk/discussions/10197, not use cpal on linux
|
|
cpal = { git = "https://github.com/rustdesk-org/cpal", branch = "osx-screencapturekit" }
|
|
ringbuf = "0.3"
|
|
|
|
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
|
|
mac_address = "1.1"
|
|
sciter-rs = { git = "https://github.com/rustdesk-org/rust-sciter", branch = "dyn" }
|
|
sys-locale = "0.3"
|
|
enigo = { path = "libs/enigo", features = [ "with_serde" ] }
|
|
clipboard = { path = "libs/clipboard" }
|
|
ctrlc = "3.2"
|
|
# arboard = { version = "3.4", features = ["wayland-data-control"] }
|
|
arboard = { git = "https://github.com/rustdesk-org/arboard", features = ["wayland-data-control"] }
|
|
clipboard-master = { git = "https://github.com/rustdesk-org/clipboard-master" }
|
|
portable-pty = { git = "https://github.com/rustdesk-org/wezterm", branch = "rustdesk/pty_based_0.8.1", package = "portable-pty" }
|
|
|
|
system_shutdown = "4.0"
|
|
qrcode-generator = "4.1"
|
|
|
|
[target.'cfg(target_os = "windows")'.dependencies]
|
|
winapi = { version = "0.3", features = [
|
|
"winuser",
|
|
"wincrypt",
|
|
"shellscalingapi",
|
|
"pdh",
|
|
"synchapi",
|
|
"memoryapi",
|
|
"shellapi",
|
|
"devguid",
|
|
"setupapi",
|
|
"cguid",
|
|
"cfgmgr32",
|
|
"ioapiset",
|
|
"winspool",
|
|
] }
|
|
windows = { version = "0.61", features = [
|
|
"Win32",
|
|
"Win32_Foundation",
|
|
"Win32_Security",
|
|
"Win32_Security_Authorization",
|
|
"Win32_Storage_FileSystem",
|
|
"Win32_System",
|
|
"Win32_System_Com",
|
|
"Win32_System_Diagnostics",
|
|
"Win32_System_Diagnostics_ToolHelp",
|
|
"Win32_System_Environment",
|
|
"Win32_System_IO",
|
|
"Win32_System_Memory",
|
|
"Win32_System_Pipes",
|
|
"Win32_System_Registry",
|
|
"Win32_System_SystemInformation",
|
|
"Win32_System_Threading",
|
|
"Win32_UI_Shell",
|
|
"Win32_UI_WindowsAndMessaging",
|
|
] }
|
|
winreg = "0.11"
|
|
windows-service = "0.6"
|
|
virtual_display = { path = "libs/virtual_display" }
|
|
remote_printer = { path = "libs/remote_printer" }
|
|
impersonate_system = { git = "https://github.com/rustdesk-org/impersonate-system" }
|
|
shared_memory = "0.12"
|
|
tauri-winrt-notification = "0.1"
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies]
|
|
objc = "0.2"
|
|
cocoa = "0.24"
|
|
dispatch = "0.2"
|
|
core-foundation = "0.9"
|
|
core-graphics = "0.22"
|
|
include_dir = "0.7"
|
|
fruitbasket = "0.10"
|
|
objc_id = "0.1"
|
|
# If we use piet "0.7" here, we must also update core-graphics to "0.24".
|
|
piet = "0.6"
|
|
piet-coregraphics = "0.6"
|
|
foreign-types = "0.3"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))'.dependencies]
|
|
tray-icon = { git = "https://github.com/tauri-apps/tray-icon", version = "0.21.3" }
|
|
tao = { git = "https://github.com/rustdesk-org/tao", branch = "dev" }
|
|
image = "0.24"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "linux"))'.dependencies]
|
|
keepawake = { git = "https://github.com/rustdesk-org/keepawake-rs" }
|
|
|
|
[target.'cfg(any(target_os = "windows", target_os = "linux"))'.dependencies]
|
|
wallpaper = { git = "https://github.com/rustdesk-org/wallpaper.rs" }
|
|
tiny-skia = "0.11"
|
|
softbuffer = "0.4"
|
|
fontdb = "0.23"
|
|
bytemuck = "1.23"
|
|
ttf-parser = "0.25"
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
libxdo-sys = "0.11"
|
|
psimple = { package = "libpulse-simple-binding", version = "2.27" }
|
|
pulse = { package = "libpulse-binding", version = "2.27" }
|
|
rust-pulsectl = { git = "https://github.com/rustdesk-org/pulsectl" }
|
|
async-process = "1.7"
|
|
evdev = { git="https://github.com/rustdesk-org/evdev" }
|
|
dbus = "0.9"
|
|
dbus-crossroads = "0.5"
|
|
x11-clipboard = {git="https://github.com/clslaid/x11-clipboard", branch = "feat/store-batch", optional = true}
|
|
x11rb = {version = "0.12", features = ["all-extensions"], optional = true}
|
|
percent-encoding = {version = "2.3", optional = true}
|
|
once_cell = {version = "1.18", optional = true}
|
|
nix = { version = "0.29", features = ["term", "process"]}
|
|
gtk = "0.18"
|
|
termios = "0.3"
|
|
terminfo = "0.8"
|
|
winit = "0.30"
|
|
|
|
[target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies]
|
|
openssl = { version = "0.10", features = ["vendored"] }
|
|
|
|
[target.'cfg(target_os = "android")'.dependencies]
|
|
android_logger = "0.13"
|
|
jni = "0.21"
|
|
android-wakelock = { git = "https://github.com/rustdesk-org/android-wakelock" }
|
|
|
|
[workspace]
|
|
members = ["libs/scrap", "libs/hbb_common", "libs/base", "libs/enigo", "libs/clipboard", "libs/virtual_display", "libs/virtual_display/dylib", "libs/portable", "libs/remote_printer"]
|
|
exclude = ["vdi/host"]
|
|
|
|
# Patch libxdo-sys to use a stub implementation that doesn't require libxdo
|
|
# This allows building and running on systems without libxdo installed (e.g., Wayland-only)
|
|
[patch.crates-io]
|
|
libxdo-sys = { path = "libs/libxdo-sys-stub" }
|
|
# Upstream reserves a frame's whole declared length as soon as its header is in, so a header alone
|
|
# buys an allocation the size it names, bounded only by max_frame_size. This fork grows the read
|
|
# buffer one read_buffer_size chunk at a time as the bytes actually arrive. Patched rather than
|
|
# depended on directly, so tokio-tungstenite's own tungstenite resolves to the same copy.
|
|
tungstenite = { git = "https://github.com/rustdesk-org/tungstenite-rs", rev = "efce47e5364f00a63302cf07ab1fb13ded478914" }
|
|
# One branch off upstream v0.13.0, the tag whose crate versions match this stack.
|
|
# webrtc-util: reads the Windows adapter list's IPv6 addresses as host-order u16 groups, so every
|
|
# one comes out byte-swapped, fails to bind, and ICE gathers no IPv6 host candidate on Windows;
|
|
# and names every Windows adapter "" with no mask, so ICE cannot tell one adapter's addresses
|
|
# from another's; and lays the adapter struct out in nested parts, whose padding on x64 shifts
|
|
# every field after OperStatus, Ipv6IfIndex first.
|
|
# webrtc-ice: best effort, one IPv6 host candidate per interface and prefix - the one the OS
|
|
# sends from when that is one of the group's, else all of them - since the stable address beside
|
|
# the temporary one is an identifier that outlives every rotation and that nothing else this
|
|
# machine sends out ever shows.
|
|
# webrtc-sctp: RFC 4960's 1s RTO floor makes a single loss cost 1-3s on a link whose RTT is 24-64ms,
|
|
# and fast retransmit cannot cover a request/response exchange; INITIAL_MTU 1228 also fragments on
|
|
# IPv6; and its AIMD pins a lossy long-haul link to MSS/(RTT*sqrt(p)), so a switch sends without
|
|
# a congestion window, as KCP does - on by default, `allow-webrtc-congestion-control` opts back in.
|
|
# Sending that way, a reordering window keeps a chunk that is merely late from being resent on a
|
|
# path that jitters, every DATA chunk asks for its SACK at once so a lost tail is back within an
|
|
# RTT at KCP's RTO floors, and bundles of small chunks stay within the MTU. A T3-rtx resends
|
|
# everything outstanding when it packs into four packets and otherwise probes with one and lets
|
|
# the SACK settle the rest (F-RTO), timed from the latest send, so a stall no longer resends the
|
|
# whole backlog behind itself while a short lost tail still comes back at once. A DATA chunk
|
|
# received again is listed in the SACK, which never happened - the sender widens its reordering
|
|
# window on that - and the SACK keeps to the MTU too, the lowest gap blocks first.
|
|
# Pinned by rev, not branch: a fork branch can be rewritten out from under the lockfile.
|
|
# webrtc: SettingEngine cannot reach the ICE agent's max_binding_requests, which decides how
|
|
# long the answerer keeps checking a pair that has not answered yet.
|
|
webrtc = { git = "https://github.com/rustdesk-org/webrtc", rev = "49c89bd8d30e6e62e4c1a96cee38fdc11f79ef63" }
|
|
webrtc-util = { git = "https://github.com/rustdesk-org/webrtc", rev = "49c89bd8d30e6e62e4c1a96cee38fdc11f79ef63" }
|
|
webrtc-sctp = { git = "https://github.com/rustdesk-org/webrtc", rev = "49c89bd8d30e6e62e4c1a96cee38fdc11f79ef63" }
|
|
|
|
[package.metadata.winres]
|
|
LegalCopyright = "Copyright © 2026 Purslane Tech Pte. Ltd. All rights reserved."
|
|
ProductName = "RustDesk"
|
|
FileDescription = "RustDesk Remote Desktop"
|
|
OriginalFilename = "rustdesk.exe"
|
|
|
|
[target.'cfg(target_os="windows")'.build-dependencies]
|
|
winres = "0.1"
|
|
winapi = { version = "0.3", features = [ "winnt", "pdh", "synchapi" ] }
|
|
|
|
[build-dependencies]
|
|
cc = "1.0"
|
|
hbb_common = { path = "libs/hbb_common" }
|
|
os-version = "0.2"
|
|
|
|
[dev-dependencies]
|
|
hound = "3.5"
|
|
docopt = "1.1"
|
|
tokio = { version = "1.44", features = ["test-util"] }
|
|
|
|
[package.metadata.bundle]
|
|
name = "RustDesk"
|
|
identifier = "com.carriez.rustdesk"
|
|
icon = ["res/32x32.png", "res/128x128.png", "res/128x128@2x.png"]
|
|
osx_minimum_system_version = "10.14"
|
|
|
|
#https://github.com/johnthagen/min-sized-rust
|
|
[profile.release]
|
|
lto = true
|
|
codegen-units = 1
|
|
panic = 'abort'
|
|
strip = true
|
|
#opt-level = 'z' # only have smaller size after strip
|
|
rpath = true
|
|
|
|
[profile.dev]
|
|
debug = 1
|