@desklink/host 0.5.3 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -17
- package/dist/engineProcess.d.ts +5 -0
- package/dist/engineProcess.d.ts.map +1 -1
- package/dist/engineProcess.js +5 -3
- package/dist/engineProcess.js.map +1 -1
- package/engine/Cargo.lock +6 -8
- package/engine/Cargo.toml +13 -1
- package/engine/src/clipboard.rs +0 -34
- package/engine/src/convert.rs +0 -170
- package/engine/src/cursor.rs +0 -23
- package/engine/src/input.rs +0 -65
- package/engine/src/input_mac.rs +0 -11
- package/engine/src/keeper.rs +0 -137
- package/engine/src/keymap.rs +0 -107
- package/engine/src/keymap_mac.rs +0 -25
- package/engine/src/mac.rs +0 -28
- package/engine/src/peer.rs +224 -0
- package/engine/src/portal.rs +0 -18
- package/engine/src/protocol.rs +0 -162
- package/engine/src/x11.rs +0 -13
- package/engine/vendor/rtc-ice/Cargo.toml +137 -0
- package/engine/vendor/rtc-ice/DESKLINK-PATCH.md +59 -0
- package/engine/vendor/rtc-ice/LICENSE-APACHE +201 -0
- package/engine/vendor/rtc-ice/LICENSE-MIT +21 -0
- package/engine/vendor/rtc-ice/README.md +30 -0
- package/engine/vendor/rtc-ice/examples/ping_pong.rs +376 -0
- package/engine/vendor/rtc-ice/src/agent/agent_config.rs +126 -0
- package/engine/vendor/rtc-ice/src/agent/agent_proto.rs +172 -0
- package/engine/vendor/rtc-ice/src/agent/agent_selector.rs +566 -0
- package/engine/vendor/rtc-ice/src/agent/agent_stats.rs +292 -0
- package/engine/vendor/rtc-ice/src/agent/agent_test.rs +3388 -0
- package/engine/vendor/rtc-ice/src/agent/mod.rs +1662 -0
- package/engine/vendor/rtc-ice/src/attributes/control/control_test.rs +168 -0
- package/engine/vendor/rtc-ice/src/attributes/control/mod.rs +142 -0
- package/engine/vendor/rtc-ice/src/attributes/mod.rs +6 -0
- package/engine/vendor/rtc-ice/src/attributes/priority/mod.rs +37 -0
- package/engine/vendor/rtc-ice/src/attributes/priority/priority_test.rs +39 -0
- package/engine/vendor/rtc-ice/src/attributes/use_candidate/mod.rs +33 -0
- package/engine/vendor/rtc-ice/src/attributes/use_candidate/use_candidate_test.rs +19 -0
- package/engine/vendor/rtc-ice/src/candidate/candidate_host.rs +53 -0
- package/engine/vendor/rtc-ice/src/candidate/candidate_pair.rs +215 -0
- package/engine/vendor/rtc-ice/src/candidate/candidate_pair_test.rs +201 -0
- package/engine/vendor/rtc-ice/src/candidate/candidate_peer_reflexive.rs +49 -0
- package/engine/vendor/rtc-ice/src/candidate/candidate_relay.rs +53 -0
- package/engine/vendor/rtc-ice/src/candidate/candidate_relay_test.rs +114 -0
- package/engine/vendor/rtc-ice/src/candidate/candidate_server_reflexive.rs +53 -0
- package/engine/vendor/rtc-ice/src/candidate/candidate_server_reflexive_test.rs +91 -0
- package/engine/vendor/rtc-ice/src/candidate/candidate_test.rs +540 -0
- package/engine/vendor/rtc-ice/src/candidate/mod.rs +679 -0
- package/engine/vendor/rtc-ice/src/lib.rs +85 -0
- package/engine/vendor/rtc-ice/src/mdns/mdns_test.rs +150 -0
- package/engine/vendor/rtc-ice/src/mdns/mod.rs +69 -0
- package/engine/vendor/rtc-ice/src/network_type/mod.rs +162 -0
- package/engine/vendor/rtc-ice/src/network_type/network_type_test.rs +95 -0
- package/engine/vendor/rtc-ice/src/rand/mod.rs +91 -0
- package/engine/vendor/rtc-ice/src/rand/rand_test.rs +115 -0
- package/engine/vendor/rtc-ice/src/state/mod.rs +106 -0
- package/engine/vendor/rtc-ice/src/state/state_test.rs +46 -0
- package/engine/vendor/rtc-ice/src/stats/mod.rs +166 -0
- package/engine/vendor/rtc-ice/src/tcp_type/mod.rs +47 -0
- package/engine/vendor/rtc-ice/src/tcp_type/tcp_type_test.rs +18 -0
- package/engine/vendor/rtc-ice/src/url/mod.rs +266 -0
- package/engine/vendor/rtc-ice/src/url/url_test.rs +142 -0
- package/package.json +8 -3
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<p align="center">
|
|
4
4
|
<a href="https://www.npmjs.com/package/@desklink/host"><img alt="npm" src="https://img.shields.io/npm/v/@desklink/host?style=flat&label=npm" /></a>
|
|
5
5
|
<a href="https://github.com/umeranjum17/desklink/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/umeranjum17/desklink/ci.yml?style=flat&branch=main" /></a>
|
|
6
|
-
<a href="LICENSE"><img alt="Apache 2.0" src="https://img.shields.io/badge/license-Apache--2.0-666?style=flat" /></a>
|
|
6
|
+
<a href="https://github.com/umeranjum17/desklink/blob/main/packages/desktop-host/LICENSE"><img alt="Apache 2.0" src="https://img.shields.io/badge/license-Apache--2.0-666?style=flat" /></a>
|
|
7
7
|
<img alt="Linux and macOS (preview)" src="https://img.shields.io/badge/Linux%20%7C%20macOS%20%28preview%29-111?style=flat" />
|
|
8
8
|
</p>
|
|
9
9
|
|
|
@@ -59,7 +59,7 @@ The engine supports Linux desktop sessions, and macOS (preview) desktop sessions
|
|
|
59
59
|
- **Clipboard** explicitly, in both directions, only when asked. It is never
|
|
60
60
|
polled and never used as a hidden way to type. On Wayland, writes require
|
|
61
61
|
`wl-copy` from `wl-clipboard`; macOS uses the plain-text general pasteboard.
|
|
62
|
-
X11 uses the session's selected display; see the [clipboard protocol](docs/PROTOCOL.md#clipboard-over-the-local-protocol)
|
|
62
|
+
X11 uses the session's selected display; see the [clipboard protocol](https://github.com/umeranjum17/desklink/blob/main/packages/desktop-host/docs/PROTOCOL.md#clipboard-over-the-local-protocol)
|
|
63
63
|
for supported targets, transfer limits and selection lifetime.
|
|
64
64
|
|
|
65
65
|
## What it deliberately does not do
|
|
@@ -76,7 +76,7 @@ The engine supports Linux desktop sessions, and macOS (preview) desktop sessions
|
|
|
76
76
|
The npm badge tracks the registry version. npm installs the matching optional
|
|
77
77
|
engine package: `@desklink/host-linux-x64-gnu` or `@desklink/host-darwin-arm64`.
|
|
78
78
|
Supported platforms: Linux x64 with glibc 2.36 or newer and macOS arm64 (preview).
|
|
79
|
-
See the [changelog](
|
|
79
|
+
See the [changelog](https://github.com/umeranjum17/desklink/blob/main/CHANGELOG.md) for release changes.
|
|
80
80
|
|
|
81
81
|
```sh
|
|
82
82
|
npm install @desklink/host
|
|
@@ -178,7 +178,7 @@ Homebrew libvpx, then follow
|
|
|
178
178
|
For a source build, `DESKLINK_VPX_STATIC_DIR` is the libvpx install prefix
|
|
179
179
|
(containing `include/` and `lib/libvpx.a`), not its `lib/` directory.
|
|
180
180
|
The app-bundled signed harness is for local TCC qualification, not npm
|
|
181
|
-
installation. See the [macOS protocol](docs/PROTOCOL.md#macos).
|
|
181
|
+
installation. See the [macOS protocol](https://github.com/umeranjum17/desklink/blob/main/packages/desktop-host/docs/PROTOCOL.md#macos).
|
|
182
182
|
|
|
183
183
|
Point `DESKLINK_ENGINE` at a binary built elsewhere if you have one. (`MUXR_DESKLINK_ENGINE` still works as a deprecated fallback and will be removed in a later release.) The
|
|
184
184
|
package never searches `PATH` for a same-named program: "a binary called
|
|
@@ -221,10 +221,9 @@ install:
|
|
|
221
221
|
|
|
222
222
|
These are build prerequisites, not additional runtime requirements for the
|
|
223
223
|
prebuilt package; in particular, libxcb is not a prebuilt runtime requirement.
|
|
224
|
-
Nothing is downloaded by the build itself.
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
installed. Only a Linux machine with all of them compiles and tests the crate.
|
|
224
|
+
Nothing is downloaded by the build itself. `cargo test --manifest-path
|
|
225
|
+
engine/Cargo.toml` needs all of these installed; only a Linux machine with them
|
|
226
|
+
compiles and tests the crate.
|
|
228
227
|
On macOS the source build does not use these Linux native libraries or shims;
|
|
229
228
|
run `cargo test --bin desklink-host --manifest-path engine/Cargo.toml` for its
|
|
230
229
|
binary tests (the full test command also builds a Linux-only example).
|
|
@@ -301,7 +300,7 @@ A compositor without that protocol still captures, cursor hidden, and says so
|
|
|
301
300
|
in `cursor.limitation`. X11 reports positions even on still
|
|
302
301
|
frames and already captures root pixels without a cursor. macOS, Windows, and consumer-encoded
|
|
303
302
|
sources return `cursor-unavailable` for hidden requests. Omitting the option
|
|
304
|
-
preserves existing behavior. See [the cursor protocol](docs/PROTOCOL.md#cursor-free-capture).
|
|
303
|
+
preserves existing behavior. See [the cursor protocol](https://github.com/umeranjum17/desklink/blob/main/packages/desktop-host/docs/PROTOCOL.md#cursor-free-capture).
|
|
305
304
|
|
|
306
305
|
`myChannel` is the application's own authenticated connection, whatever that is.
|
|
307
306
|
There is no second identity system, no pairing ceremony and no account: the
|
|
@@ -309,7 +308,7 @@ engine trusts the consumer's pairing. A paired consumer gets all available
|
|
|
309
308
|
view, input and clipboard access; missing input or clipboard backends fail per
|
|
310
309
|
action.
|
|
311
310
|
For the application's pairing, identity and signaling transport, see the
|
|
312
|
-
[BYOKit integration guidance](
|
|
311
|
+
[BYOKit integration guidance](https://github.com/umeranjum17/desklink/blob/main/README.md#why-desklink-exists).
|
|
313
312
|
|
|
314
313
|
### If you have no channel of your own
|
|
315
314
|
|
|
@@ -437,14 +436,23 @@ The package smoke instead uses `npm pack` on this checkout's host package as a
|
|
|
437
436
|
registry stand-in, without Docker or a native build. `check-install.sh` installs
|
|
438
437
|
the current platform's host and engine tarballs into an empty project and checks both installed versions. On Linux it uses a clean container with no Rust toolchain, display or `/dev/uinput`, and checks the typed missing-library error before installing runtime libraries. On macOS it uses a temporary project. Both checks resolve the prebuilt engine, perform the protocol handshake and probe capabilities without opening a capture session.
|
|
439
438
|
|
|
440
|
-
Publishing is
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
439
|
+
Publishing is automatic. Merging a version bump to `main` runs
|
|
440
|
+
`.github/workflows/release.yml`: the test, build, build-pack and per-OS engine
|
|
441
|
+
jobs gate a publish job that releases every package whose exact version is not
|
|
442
|
+
yet on npm, in dependency order — the engine platform packages first, then
|
|
443
|
+
`@desklink/host` immediately after the engine packages it pins, then
|
|
444
|
+
`@desklink/axi` gated on the host (not the reverse), then
|
|
445
|
+
`@desklink/react-native` — all with `--provenance`. A version lockstep check
|
|
446
|
+
fails the workflow when `@desklink/host`, `@desklink/react-native` and
|
|
447
|
+
`@desklink/axi` disagree, so a half-bump never reaches publish. One package's
|
|
448
|
+
failure never stops the others, but the job ends red and every hold or failure
|
|
449
|
+
names the package and version.
|
|
450
|
+
The workflow uses trusted publishing (OIDC) and no npm token. Re-runs skip
|
|
451
|
+
versions already published.
|
|
452
|
+
|
|
453
|
+
`release/publish.mjs` is an older manual upload of the `pack.mjs` tarballs. It
|
|
454
|
+
is not the release route. `--dry-run` still checks that tarball set:
|
|
446
455
|
|
|
447
456
|
```sh
|
|
448
457
|
node packages/desktop-host/release/publish.mjs --dry-run
|
|
449
|
-
node packages/desktop-host/release/publish.mjs
|
|
450
458
|
```
|
package/dist/engineProcess.d.ts
CHANGED
|
@@ -7,6 +7,11 @@ export interface EngineClientOptions {
|
|
|
7
7
|
* own, longer one to `openSession`.
|
|
8
8
|
*/
|
|
9
9
|
requestTimeoutMs?: number;
|
|
10
|
+
/**
|
|
11
|
+
* Push consumer, called with every event as it arrives. Supplying it turns
|
|
12
|
+
* off the `drainEvents` queue, so events are not retained for a reader that
|
|
13
|
+
* never comes.
|
|
14
|
+
*/
|
|
10
15
|
onEvent?: (event: EngineEvent) => void;
|
|
11
16
|
/** Called when the engine process goes away, with whatever it said first. */
|
|
12
17
|
onExit?: (detail: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineProcess.d.ts","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,aAAa,EAEb,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACtB,MAAM,eAAe,CAAC;AAEvB,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,aAAa,GAAG,IAAI,CASlG;AAQD,MAAM,WAAW,mBAAmB;IAChC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC;IAClF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;GAMG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO;IAiCP,mEAAmE;WACtD,KAAK,CACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,mBAAwB,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACrC,OAAO,CAAC,YAAY,CAAC;IA4BxB,OAAO,CAAC,UAAU;
|
|
1
|
+
{"version":3,"file":"engineProcess.d.ts","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,aAAa,EAEb,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACtB,MAAM,eAAe,CAAC;AAEvB,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,aAAa,GAAG,IAAI,CASlG;AAQD,MAAM,WAAW,mBAAmB;IAChC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC;IAClF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;GAMG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO;IAiCP,mEAAmE;WACtD,KAAK,CACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,mBAAwB,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACrC,OAAO,CAAC,YAAY,CAAC;IA4BxB,OAAO,CAAC,UAAU;IAkClB;;;;;;OAMG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,SAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;IAgBpG,YAAY,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAI3C;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiBpF,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAQhG,YAAY,CACR,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,aAAa,EAAE,MAAM,GAAG,IAAI,GAC7B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAUjC,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAIlC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAI/E,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAI9E,6EAA6E;IAC7E,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAW5E,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAI7D,qDAAqD;IACrD,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IAU9C,OAAO,CAAC,mBAAmB;IAM3B;;;;;;;;;OASG;IACH,OAAO,CAAC,OAAO;IAUT,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB9B"}
|
package/dist/engineProcess.js
CHANGED
|
@@ -108,9 +108,11 @@ export class EngineClient {
|
|
|
108
108
|
}
|
|
109
109
|
if (typeof parsed.event === 'string') {
|
|
110
110
|
const event = parsed;
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
|
|
111
|
+
// A consumer that passed `onEvent` is fed every event as it arrives
|
|
112
|
+
// and never reads the queue; retaining them would grow it without
|
|
113
|
+
// bound. The queue exists only for the pull-based `drainEvents`
|
|
114
|
+
// consumer, which opts in by omitting `onEvent`.
|
|
115
|
+
if (options.onEvent === undefined)
|
|
114
116
|
this.queue.push(event);
|
|
115
117
|
options.onEvent?.(event);
|
|
116
118
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineProcess.js","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engineProcess.js","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"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"}
|
package/engine/Cargo.lock
CHANGED
|
@@ -536,7 +536,7 @@ checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
|
|
|
536
536
|
|
|
537
537
|
[[package]]
|
|
538
538
|
name = "desklink-host"
|
|
539
|
-
version = "0.5.
|
|
539
|
+
version = "0.5.4"
|
|
540
540
|
dependencies = [
|
|
541
541
|
"anyhow",
|
|
542
542
|
"ashpd",
|
|
@@ -1942,8 +1942,6 @@ dependencies = [
|
|
|
1942
1942
|
[[package]]
|
|
1943
1943
|
name = "rtc-ice"
|
|
1944
1944
|
version = "0.21.0"
|
|
1945
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1946
|
-
checksum = "4f437cc58721fdb3f0a2ab8b90660d3c19ea2817bc4e2117b2d80f3f6cfba5f3"
|
|
1947
1945
|
dependencies = [
|
|
1948
1946
|
"bytes",
|
|
1949
1947
|
"crc",
|
|
@@ -2024,9 +2022,9 @@ dependencies = [
|
|
|
2024
2022
|
|
|
2025
2023
|
[[package]]
|
|
2026
2024
|
name = "rtc-sctp"
|
|
2027
|
-
version = "0.21.
|
|
2025
|
+
version = "0.21.1"
|
|
2028
2026
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2029
|
-
checksum = "
|
|
2027
|
+
checksum = "2eb430b379d90e7984306036d1646454a26b300c9c3256009eb8f7e0615e90b9"
|
|
2030
2028
|
dependencies = [
|
|
2031
2029
|
"bytes",
|
|
2032
2030
|
"crc32c",
|
|
@@ -2051,9 +2049,9 @@ dependencies = [
|
|
|
2051
2049
|
|
|
2052
2050
|
[[package]]
|
|
2053
2051
|
name = "rtc-shared"
|
|
2054
|
-
version = "0.21.
|
|
2052
|
+
version = "0.21.1"
|
|
2055
2053
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2056
|
-
checksum = "
|
|
2054
|
+
checksum = "1250e81796ac6d3d67bd04ecdb891b8371ff97c8a2ce0a5a1c1321f2e12b657b"
|
|
2057
2055
|
dependencies = [
|
|
2058
2056
|
"bitflags 1.3.2",
|
|
2059
2057
|
"bytes",
|
|
@@ -2426,7 +2424,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
2426
2424
|
checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
|
|
2427
2425
|
dependencies = [
|
|
2428
2426
|
"fastrand",
|
|
2429
|
-
"getrandom 0.4
|
|
2427
|
+
"getrandom 0.3.4",
|
|
2430
2428
|
"once_cell",
|
|
2431
2429
|
"rustix",
|
|
2432
2430
|
"windows-sys 0.61.2",
|
package/engine/Cargo.toml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "desklink-host"
|
|
3
|
-
version = "0.5.
|
|
3
|
+
version = "0.5.4"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
rust-version = "1.97.1"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -21,6 +21,10 @@ anyhow = "1"
|
|
|
21
21
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "io-util", "io-std", "sync", "time", "signal"] }
|
|
22
22
|
libc = "0.2"
|
|
23
23
|
bytes = "1"
|
|
24
|
+
# rtc-sctp 0.21.1 is required through this stack: 0.21.0 replaces an
|
|
25
|
+
# expired-but-unhandled T3 retransmission deadline, so the data channel stalls
|
|
26
|
+
# on the new nominated pair after an ICE restart and the client reopens the
|
|
27
|
+
# session. Cargo.lock pins 0.21.1; drop the pin when a later release carries it.
|
|
24
28
|
webrtc = { version = "0.21", default-features = false, features = ["runtime-tokio", "crypto-ring"] }
|
|
25
29
|
rtc = { version = "0.21", default-features = false, features = ["crypto-ring"] }
|
|
26
30
|
log = "0.4"
|
|
@@ -64,3 +68,11 @@ cc = "1"
|
|
|
64
68
|
[profile.release]
|
|
65
69
|
lto = "thin"
|
|
66
70
|
opt-level = 2
|
|
71
|
+
|
|
72
|
+
# The engine needs an ICE restart that does not interrupt media already flowing
|
|
73
|
+
# on the current selected pair (roam persistence, < 200 ms gap). rtc-ice 0.21.0
|
|
74
|
+
# clears the selected pair and every candidate pair in `Agent::apply_restart`,
|
|
75
|
+
# and exposes no setting to keep them, so a patched copy is vendored here. See
|
|
76
|
+
# vendor/rtc-ice/DESKLINK-PATCH.md for what changed and how to drop it.
|
|
77
|
+
[patch.crates-io]
|
|
78
|
+
rtc-ice = { path = "vendor/rtc-ice" }
|
package/engine/src/clipboard.rs
CHANGED
|
@@ -270,37 +270,3 @@ pub fn x11_read(display: &str) -> Result<(String, bool)> {
|
|
|
270
270
|
std::thread::sleep(std::time::Duration::from_millis(5));
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
|
-
|
|
274
|
-
#[cfg(test)]
|
|
275
|
-
mod tests {
|
|
276
|
-
use super::*;
|
|
277
|
-
|
|
278
|
-
#[test]
|
|
279
|
-
fn an_oversized_clipboard_is_cut_cleanly_and_reported() {
|
|
280
|
-
let mut raw = vec![b'a'; 4];
|
|
281
|
-
raw.extend_from_slice("\u{e9}".as_bytes());
|
|
282
|
-
raw.extend_from_slice(b"zzzz");
|
|
283
|
-
let (text, truncated) =
|
|
284
|
-
bounded_text(&raw, 5).expect("a character-boundary cut is valid text");
|
|
285
|
-
assert!(truncated, "a cut past the limit must be reported");
|
|
286
|
-
assert_eq!(
|
|
287
|
-
text, "aaaa",
|
|
288
|
-
"the partial character is dropped, not invented"
|
|
289
|
-
);
|
|
290
|
-
|
|
291
|
-
// A byte that is not valid UTF-8 before the cut is not a partial
|
|
292
|
-
// character; the whole read is refused.
|
|
293
|
-
let mut invalid = vec![b'a'; 4];
|
|
294
|
-
invalid.push(0xff);
|
|
295
|
-
invalid.extend_from_slice(b"zzzz");
|
|
296
|
-
assert!(bounded_text(&invalid, 5).is_err());
|
|
297
|
-
|
|
298
|
-
let (text, truncated) = bounded_text(b"hello", 5).unwrap();
|
|
299
|
-
assert!(!truncated);
|
|
300
|
-
assert_eq!(text, "hello");
|
|
301
|
-
|
|
302
|
-
let (text, truncated) = bounded_text(b"hello world", 5).unwrap();
|
|
303
|
-
assert!(truncated);
|
|
304
|
-
assert_eq!(text, "hello");
|
|
305
|
-
}
|
|
306
|
-
}
|
package/engine/src/convert.rs
CHANGED
|
@@ -408,173 +408,3 @@ fn pack(
|
|
|
408
408
|
(*u, *v) = chroma(sum(0), sum(1), sum(2));
|
|
409
409
|
}
|
|
410
410
|
}
|
|
411
|
-
|
|
412
|
-
#[cfg(test)]
|
|
413
|
-
mod tests {
|
|
414
|
-
use super::*;
|
|
415
|
-
|
|
416
|
-
#[test]
|
|
417
|
-
fn downscale_keeps_average_colour_and_plane_sizes() {
|
|
418
|
-
// 4x4 opaque red desktop in BGRx, downscaled to 2x2.
|
|
419
|
-
let mut src = vec![0u8; 4 * 16];
|
|
420
|
-
for px in src.chunks_exact_mut(4) {
|
|
421
|
-
px[0] = 0; // B
|
|
422
|
-
px[1] = 0; // G
|
|
423
|
-
px[2] = 255; // R
|
|
424
|
-
px[3] = 255; // X
|
|
425
|
-
}
|
|
426
|
-
let out = to_i420(&src, 4, 4, 16, PixelFormat::Bgrx, 2, 2).unwrap();
|
|
427
|
-
assert_eq!(out.data.len(), 4 + 2 * 1);
|
|
428
|
-
assert!(
|
|
429
|
-
out.y_plane().iter().all(|&y| y > 70),
|
|
430
|
-
"red luma should be high"
|
|
431
|
-
);
|
|
432
|
-
assert!(out.u_plane().iter().all(|&u| u < 128), "red has low Cb");
|
|
433
|
-
assert!(out.v_plane().iter().all(|&v| v > 200), "red has high Cr");
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
#[test]
|
|
437
|
-
fn odd_destination_is_clamped_to_whole_chroma_blocks() {
|
|
438
|
-
let src = vec![255u8; 4 * 16];
|
|
439
|
-
let out = to_i420(&src, 4, 4, 16, PixelFormat::Bgrx, 3, 3).unwrap();
|
|
440
|
-
assert_eq!((out.width, out.height), (2, 2));
|
|
441
|
-
assert_eq!(out.data.len(), 4 + 2 * 1);
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
#[test]
|
|
445
|
-
fn a_stream_a_few_pixels_off_the_encoders_size_is_converted_to_exactly_that_size() {
|
|
446
|
-
// A fractional-scaled display reports one size to the portal and
|
|
447
|
-
// streams another; the encoder only accepts its own.
|
|
448
|
-
let src = vec![200u8; 4 * 1704 * 1066];
|
|
449
|
-
let out = to_i420(&src, 1704, 1066, 1704 * 4, PixelFormat::Bgrx, 1706, 1066).unwrap();
|
|
450
|
-
assert_eq!((out.width, out.height), (1706, 1066));
|
|
451
|
-
let out = to_i420(&src, 1704, 1066, 1704 * 4, PixelFormat::Bgrx, 1702, 1064).unwrap();
|
|
452
|
-
assert_eq!((out.width, out.height), (1702, 1064));
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
#[test]
|
|
456
|
-
fn still_pixels_keep_exact_source_colours_before_encoding() {
|
|
457
|
-
let src = [1, 2, 3, 0, 4, 5, 6, 0];
|
|
458
|
-
assert_eq!(
|
|
459
|
-
to_bgrx(&src, 2, 1, 8, PixelFormat::Bgrx, 2, 1).unwrap(),
|
|
460
|
-
src
|
|
461
|
-
);
|
|
462
|
-
assert_eq!(
|
|
463
|
-
to_bgrx(&src, 2, 1, 8, PixelFormat::Rgbx, 2, 1).unwrap(),
|
|
464
|
-
[3, 2, 1, 255, 6, 5, 4, 255]
|
|
465
|
-
);
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
/// The per-pixel conversion this module used to run, kept as the definition
|
|
469
|
-
/// the fast paths must reproduce bit for bit.
|
|
470
|
-
fn reference(
|
|
471
|
-
src: &[u8],
|
|
472
|
-
sw: usize,
|
|
473
|
-
sh: usize,
|
|
474
|
-
stride: usize,
|
|
475
|
-
format: PixelFormat,
|
|
476
|
-
dw: usize,
|
|
477
|
-
dh: usize,
|
|
478
|
-
) -> Vec<u8> {
|
|
479
|
-
let (bpp, o) = layout(format).unwrap();
|
|
480
|
-
let rgb = |x: usize, y: usize| {
|
|
481
|
-
let p = &src[y * stride + x * bpp..];
|
|
482
|
-
(p[o[0]] as i32, p[o[1]] as i32, p[o[2]] as i32)
|
|
483
|
-
};
|
|
484
|
-
let sample = |dx: usize, dy: usize| {
|
|
485
|
-
let x0 = dx * sw / dw;
|
|
486
|
-
let x1 = ((dx + 1) * sw).div_ceil(dw).clamp(x0 + 1, sw);
|
|
487
|
-
let y0 = dy * sh / dh;
|
|
488
|
-
let y1 = ((dy + 1) * sh).div_ceil(dh).clamp(y0 + 1, sh);
|
|
489
|
-
let (mut r, mut g, mut b) = (0, 0, 0);
|
|
490
|
-
for y in y0..y1 {
|
|
491
|
-
for x in x0..x1 {
|
|
492
|
-
let p = rgb(x, y);
|
|
493
|
-
(r, g, b) = (r + p.0, g + p.1, b + p.2);
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
let n = ((x1 - x0) * (y1 - y0)) as i32;
|
|
497
|
-
(r / n, g / n, b / n)
|
|
498
|
-
};
|
|
499
|
-
let (mut y, mut u, mut v) = (vec![0; dw * dh], vec![], vec![]);
|
|
500
|
-
for cy in 0..dh / 2 {
|
|
501
|
-
for cx in 0..dw / 2 {
|
|
502
|
-
let px = [(0, 0), (1, 0), (0, 1), (1, 1)]
|
|
503
|
-
.map(|(i, j)| (cx * 2 + i, cy * 2 + j, sample(cx * 2 + i, cy * 2 + j)));
|
|
504
|
-
for (x, yy, p) in px {
|
|
505
|
-
y[yy * dw + x] = luma(p.0, p.1, p.2);
|
|
506
|
-
}
|
|
507
|
-
let s = |f: fn(&(i32, i32, i32)) -> i32| {
|
|
508
|
-
(px.iter().map(|p| f(&p.2)).sum::<i32>() + 2) >> 2
|
|
509
|
-
};
|
|
510
|
-
let (cu, cv) = chroma(s(|p| p.0), s(|p| p.1), s(|p| p.2));
|
|
511
|
-
u.push(cu);
|
|
512
|
-
v.push(cv);
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
[y, u, v].concat()
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
#[test]
|
|
519
|
-
fn every_path_matches_the_per_pixel_definition_exactly() {
|
|
520
|
-
let mut seed = 0x9e3779b9u32;
|
|
521
|
-
let mut noise = |n: usize| {
|
|
522
|
-
(0..n)
|
|
523
|
-
.map(|_| {
|
|
524
|
-
seed ^= seed << 13;
|
|
525
|
-
seed ^= seed >> 17;
|
|
526
|
-
seed ^= seed << 5;
|
|
527
|
-
seed as u8
|
|
528
|
-
})
|
|
529
|
-
.collect::<Vec<u8>>()
|
|
530
|
-
};
|
|
531
|
-
let formats = [
|
|
532
|
-
PixelFormat::Bgrx,
|
|
533
|
-
PixelFormat::Rgba,
|
|
534
|
-
PixelFormat::Bgr,
|
|
535
|
-
PixelFormat::Rgb,
|
|
536
|
-
];
|
|
537
|
-
// Native, a few pixels off, box downscales, and boxes near and past the
|
|
538
|
-
// largest area the reciprocal table covers.
|
|
539
|
-
for (sw, sh, dw, dh) in [
|
|
540
|
-
(256, 126, 4, 2),
|
|
541
|
-
(400, 200, 4, 2),
|
|
542
|
-
(64, 36, 64, 36),
|
|
543
|
-
(67, 41, 66, 40),
|
|
544
|
-
(100, 60, 38, 22),
|
|
545
|
-
(90, 50, 92, 50),
|
|
546
|
-
(33, 17, 8, 6),
|
|
547
|
-
] {
|
|
548
|
-
for format in formats {
|
|
549
|
-
let bpp = layout(format).unwrap().0;
|
|
550
|
-
let stride = sw * bpp + 12;
|
|
551
|
-
let src = noise(stride * sh);
|
|
552
|
-
let fast = to_i420(&src, sw, sh, stride, format, dw, dh).unwrap();
|
|
553
|
-
assert!(
|
|
554
|
-
fast.data == reference(&src, sw, sh, stride, format, dw & !1, dh & !1),
|
|
555
|
-
"{format:?} {sw}x{sh} -> {dw}x{dh}"
|
|
556
|
-
);
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
#[test]
|
|
562
|
-
fn padded_bgra_rows_remain_aligned_in_stills_and_video() {
|
|
563
|
-
// ScreenCaptureKit pads 3420 BGRA pixels from 13680 to 13696 bytes/row.
|
|
564
|
-
let src = [
|
|
565
|
-
0, 0, 255, 255, 0, 0, 255, 255, 0, 255, 0, 0, // red row + green padding
|
|
566
|
-
255, 0, 0, 255, 255, 0, 0, 255, 0, 255, 0, 0, // blue row + green padding
|
|
567
|
-
];
|
|
568
|
-
assert_eq!(
|
|
569
|
-
to_bgrx(&src, 2, 2, 12, PixelFormat::Bgra, 2, 2).unwrap(),
|
|
570
|
-
[src[0..8].to_vec(), src[12..20].to_vec()].concat()
|
|
571
|
-
);
|
|
572
|
-
let video = to_i420(&src, 2, 2, 12, PixelFormat::Bgra, 2, 2).unwrap();
|
|
573
|
-
assert_eq!(video.y_plane(), &[82, 82, 41, 41]);
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
#[test]
|
|
577
|
-
fn unsupported_format_is_reported_not_guessed() {
|
|
578
|
-
assert!(to_i420(&vec![0u8; 64], 4, 4, 16, PixelFormat::Unsupported, 2, 2).is_none());
|
|
579
|
-
}
|
|
580
|
-
}
|
package/engine/src/cursor.rs
CHANGED
|
@@ -32,26 +32,3 @@ impl Reporter {
|
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
#[cfg(test)]
|
|
37
|
-
mod tests {
|
|
38
|
-
use super::*;
|
|
39
|
-
#[test]
|
|
40
|
-
fn reports_initial_motion_and_visibility_but_not_unchanged_polls() {
|
|
41
|
-
let (tx, rx) = std::sync::mpsc::channel();
|
|
42
|
-
let mut reporter = Reporter::new(Box::new(move |p| {
|
|
43
|
-
tx.send(p).unwrap();
|
|
44
|
-
}));
|
|
45
|
-
reporter.update(10, 20, true);
|
|
46
|
-
reporter.update(10, 20, true);
|
|
47
|
-
reporter.update(30, 40, true);
|
|
48
|
-
reporter.update(30, 40, false);
|
|
49
|
-
let notices: Vec<_> = rx.try_iter().collect();
|
|
50
|
-
assert_eq!(notices.len(), 3);
|
|
51
|
-
assert_eq!((notices[1].x, notices[1].y), (30, 40));
|
|
52
|
-
assert!(!notices[2].visible);
|
|
53
|
-
assert!(notices
|
|
54
|
-
.windows(2)
|
|
55
|
-
.all(|p| p[0].timestamp_us <= p[1].timestamp_us));
|
|
56
|
-
}
|
|
57
|
-
}
|
package/engine/src/input.rs
CHANGED
|
@@ -300,68 +300,3 @@ impl Drop for InputDevices {
|
|
|
300
300
|
}
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
|
-
|
|
304
|
-
#[cfg(test)]
|
|
305
|
-
mod tests {
|
|
306
|
-
use super::*;
|
|
307
|
-
|
|
308
|
-
#[test]
|
|
309
|
-
fn button_numbers_map_to_the_expected_pointer_buttons() {
|
|
310
|
-
assert_eq!(Button::from_number(1), Button::Left);
|
|
311
|
-
assert_eq!(Button::from_number(2), Button::Middle);
|
|
312
|
-
assert_eq!(Button::from_number(3), Button::Right);
|
|
313
|
-
assert_eq!(Button::from_number(9), Button::Left);
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
#[test]
|
|
317
|
-
fn held_state_releases_exactly_what_this_session_pressed() {
|
|
318
|
-
let mut held = HeldState::default();
|
|
319
|
-
held.key(29, true); // left ctrl
|
|
320
|
-
held.key(46, true); // c
|
|
321
|
-
held.button(Button::Left, true);
|
|
322
|
-
// A repeat press is the same press, not a second one, so the plan still
|
|
323
|
-
// releases it exactly once.
|
|
324
|
-
held.key(29, true);
|
|
325
|
-
|
|
326
|
-
let (buttons, keys) = held.release_plan();
|
|
327
|
-
assert_eq!(buttons, vec![Button::Left]);
|
|
328
|
-
assert_eq!(keys, vec![29, 46]);
|
|
329
|
-
assert!(
|
|
330
|
-
held.release_plan().1.is_empty(),
|
|
331
|
-
"releasing twice releases nothing"
|
|
332
|
-
);
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
#[test]
|
|
336
|
-
fn an_explicit_release_leaves_only_what_is_still_pressed() {
|
|
337
|
-
let mut held = HeldState::default();
|
|
338
|
-
held.key(29, true);
|
|
339
|
-
held.key(46, true);
|
|
340
|
-
held.key(46, false);
|
|
341
|
-
let (buttons, keys) = held.release_plan();
|
|
342
|
-
assert!(buttons.is_empty());
|
|
343
|
-
assert_eq!(keys, vec![29]);
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
/// Proving the backend is really available here is the point: if this host
|
|
347
|
-
/// cannot create the devices, the engine must say so rather than offer a
|
|
348
|
-
/// control surface that does nothing.
|
|
349
|
-
#[test]
|
|
350
|
-
fn this_host_can_create_and_destroy_the_virtual_devices() {
|
|
351
|
-
// This touches the real desktop when uinput is writable. Ordinary
|
|
352
|
-
// suites must never create devices on the owner's active session.
|
|
353
|
-
if std::env::var("DESKLINK_TEST_UINPUT").as_deref() != Ok("1") {
|
|
354
|
-
return;
|
|
355
|
-
}
|
|
356
|
-
match InputDevices::create(2560, 1440) {
|
|
357
|
-
Ok(_devices) => {}
|
|
358
|
-
Err(error) => {
|
|
359
|
-
let unavailable = probe().unwrap_err();
|
|
360
|
-
assert!(
|
|
361
|
-
error.to_string().contains(&unavailable.reason),
|
|
362
|
-
"a creation failure must be the reported availability problem"
|
|
363
|
-
);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
package/engine/src/input_mac.rs
CHANGED
|
@@ -299,14 +299,3 @@ impl InputDevices {
|
|
|
299
299
|
}
|
|
300
300
|
}
|
|
301
301
|
}
|
|
302
|
-
|
|
303
|
-
#[cfg(test)]
|
|
304
|
-
mod tests {
|
|
305
|
-
use super::*;
|
|
306
|
-
|
|
307
|
-
#[test]
|
|
308
|
-
fn command_key_uses_quartz_command_flag() {
|
|
309
|
-
assert_eq!(modifier_flag(keycode::LEFT_META), 0x100000);
|
|
310
|
-
assert_eq!(modifier_flag(0), 0);
|
|
311
|
-
}
|
|
312
|
-
}
|