Repository navigation
Expand file tree
/
Copy pathCargo.toml
More file actions
161 lines (150 loc) · 8.87 KB
/
Copy pathCargo.toml
File metadata and controls
161 lines (150 loc) · 8.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
[package]
name = "macrdp"
version = "0.9.11"
edition = "2021"
description = "Native RDP server for macOS"
license = "MIT OR Apache-2.0"
publish = false
[[bin]]
name = "macrdp"
path = "src/main.rs"
[dependencies]
# Async runtime
tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "io-util", "signal", "sync", "time"] }
# Logging / errors / config
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
anyhow = "1"
thiserror = "1"
clap = { version = "4", features = ["derive"] }
async-trait = "0.1"
bytes = "1"
rpassword = "7"
libc = "0.2"
image = { version = "0.25", default-features = false, features = ["png"] }
zeroize = "1"
rubato = "0.16" # 48 kHz SCK capture -> 44.1 kHz output, advertised to client
# TLS for RDP security layer
rustls = "0.23"
tokio-rustls = "0.26"
rcgen = "0.13" # self-signed cert for first-run / dev
rustls-pemfile = "2" # read persisted cert.pem / key.pem on subsequent runs
x509-cert = { version = "0.2", default-features = false }
der = "0.7"
# RDP protocol — ironrdp is split into many sub-crates; add only what you use.
ironrdp = "0.17"
ironrdp-server = { version = "0.13", features = ["egfx", "multitransport"] } # patched locally — see [patch.crates-io] below
ironrdp-acceptor = "0.10"
ironrdp-pdu = "0.9"
# MS-RDPEDISP monitor-layout PDU types (read-only use: CaptureDisplay::request_layout
# decodes the client's live-resize request). The DVC processor itself is already
# wired up unconditionally inside vendor/ironrdp-server; this just gets us the PDU
# accessors (DisplayControlMonitorLayout::monitors()).
ironrdp-displaycontrol = "0.8"
# CSPRNG for the Server Auto-Reconnect Cookie random bits (already in the tree
# via rustls/aws-lc-rs); a direct dep so the base build doesn't rely on the
# multitransport feature for it.
getrandom = "0.2"
ironrdp-cliprdr = "0.7"
ironrdp-core = "0.2"
ironrdp-rdpsnd = "0.9"
# RDPDR drive redirection (gated at runtime by --enable-drive-redirection).
# Vendored locally for the server-direction encode/decode halves — see
# vendor/ironrdp-rdpdr/CLAUDE.md.
ironrdp-rdpdr = "0.7"
# EGFX / H.264 video pipeline (gated at runtime by --enable-h264).
ironrdp-egfx = "0.3"
ironrdp-dvc = "0.8"
ironrdp-svc = "0.8"
nfsserve = "0.11.0"
# Test-only: drive a real IronRDP client through the connect/negotiation
# handshake against our own server over an in-memory stream (see
# src/conn_test.rs). Both are redirected to the pinned git rev by the
# [patch.crates-io] section below, same as the runtime ironrdp-* deps.
[dev-dependencies]
ironrdp-connector = "0.10"
ironrdp-tokio = "0.10"
# For the UDP multitransport loopback test: decode the listener's SYN+ACK reply.
ironrdp-rdpeudp = { path = "vendor/ironrdp-rdpeudp" }
[build-dependencies]
# Compile the USB-redirection Obj-C shim (src/usb_redirect/usb_spike.m) on macOS.
cc = "1"
# macOS-only: screen capture + input synthesis
[target.'cfg(target_os = "macos")'.dependencies]
core-graphics = { version = "0.24", features = ["highsierra"] }
core-foundation = "0.10"
# ScreenCaptureKit bindings — verify the crate name/version against crates.io;
# alternatives: `screencapturekit`, or direct `objc2`/`objc2-screen-capture-kit`.
objc2 = "0.5"
objc2-foundation = { version = "0.2", features = ["NSURL", "NSString", "NSBundle", "NSError", "NSDictionary", "NSNotification", "NSFileCoordinator", "NSFilePresenter", "NSOperation", "block2"] }
block2 = "0.5"
objc2-app-kit = { version = "0.2", features = ["NSCursor", "NSImage", "NSImageRep", "NSBitmapImageRep", "NSGraphics", "NSGraphicsContext", "NSPasteboard", "NSPasteboardItem", "NSWorkspace", "NSRunningApplication", "libc"] }
screencapturekit = { version = "2.1", features = ["async"] }
# All ironrdp-* crates pinned to a specific upstream commit. The published
# 0.x crates lag main by enough that several features we need (file
# clipboard via SendFileContents{Request,Response}, the EGFX virtual channel
# for AVC/H.264, etc.) only exist on `master`. The pinned commit is bumped
# manually so the build is reproducible.
#
# `ironrdp-server` is the one exception — it stays vendored locally because
# our wave-drop fix isn't merged upstream yet (PR
# https://github.com/Devolutions/IronRDP/pull/1276). Our vendored 0.10.0
# compiles against the patched (master) sibling crates because upstream hasn't
# bumped the inter-crate version numbers since 0.10.0 was released. Once the
# wave-drop PR merges, drop the vendor block and add `ironrdp-server` to the
# git pin list below.
[patch.crates-io]
ironrdp-server = { path = "vendor/ironrdp-server" }
# ironrdp-acceptor is vendored (same upstream rev as the git pins below) for
# the honor-client-desktop-size divergence — serve the resolution the client
# requests. See vendor/ironrdp-acceptor/CLAUDE.md.
ironrdp-acceptor = { path = "vendor/ironrdp-acceptor" }
# ironrdp-rdpdr is vendored (same upstream rev) for the server-direction RDPDR
# encode/decode halves the client-oriented upstream crate lacks. See
# vendor/ironrdp-rdpdr/CLAUDE.md.
ironrdp-rdpdr = { path = "vendor/ironrdp-rdpdr" }
# ironrdp-dvc is vendored (same upstream rev) for server-side MS-RDPEDYC Soft-Sync
# support — moving dynamic virtual channels (EGFX) onto the UDP multitransport
# tunnel. Upstream is client-oriented and errors on the server-inbound
# SoftSyncResponse. See vendor/ironrdp-dvc/CLAUDE.md.
ironrdp-dvc = { path = "vendor/ironrdp-dvc" }
# ironrdp-rdpeusb: FORK RETIRED at the a5d1c682 pin bump — all four vendored
# divergences merged upstream (div1 #1418 SupportedUsbVer newtype + USB_32, div2
# #1513 usb_device match, div3 #1420 UsbConfigDesc.trailing, div4 #1321 completion
# guards). Upstream is publish=false (git-workspace crate), so it stays a git-pin
# rather than a crates.io version. vendor/ironrdp-rdpeusb/ was DELETED at the bump.
ironrdp-rdpeusb = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
# ironrdp-str isn't depended on directly by macrdp, but the git
# ironrdp-rdpeusb names it as a crates.io dep (it's a git-workspace crate, never
# published); pin it to the same git rev so it resolves + unifies with the copy
# the other ironrdp crates pull transitively. (Same shape as ironrdp-error above.)
ironrdp-str = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
# ironrdp-error isn't depended on directly by macrdp, but the vendored
# ironrdp-rdpdr names it as a crates.io dep; pin it to the same git rev as the
# rest so it unifies with the copy the other ironrdp crates pull transitively.
ironrdp-error = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-ainput = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-async = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-cliprdr = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-connector = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-core = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-displaycontrol = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-egfx = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-graphics = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-pdu = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-rdpsnd = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-svc = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
ironrdp-tokio = { git = "https://github.com/Devolutions/IronRDP.git", rev = "a5d1c682fd1f65287f6f5727bdead2aef7a2bea7" }
# The git-pinned ironrdp crates above (egfx, displaycontrol, echo, …) depend on
# ironrdp-dvc as a path dep WITHIN the git workspace, so the [patch.crates-io]
# redirect above doesn't reach them — without this they'd pull the git
# ironrdp-dvc while vendored ironrdp-server pulls the vendored one, giving two
# incompatible versions (trait mismatch). Patch the git source too so every
# consumer resolves to the single vendored copy.
[patch."https://github.com/Devolutions/IronRDP.git"]
ironrdp-dvc = { path = "vendor/ironrdp-dvc" }
[profile.release]
lto = "thin"
codegen-units = 1
strip = "symbols"