forked from unom/punktfunk
The workspace pinned `ring` everywhere because aws-lc-sys 0.41.0 failed to C-compile on the Windows CI runner. Re-tested on that runner (.133) with aws-lc-sys 0.44.0: the `params.c` cl.exe failure does not reproduce under MSVC 14.44, and rustls's `aws_lc_rs` feature turns on `aws-lc-rs/prebuilt-nasm`, so no NASM is needed on the box either. That unblocks post-quantum TLS: `prefer-post-quantum` offers X25519MLKEM768 first on every TLS 1.3 handshake (mgmt API, native control plane, QUIC), which ring cannot do — it has no ML-KEM. Classical curves stay in the list, so older clients still connect. rustls, quinn, rcgen and tokio-rustls each select a backend independently, so all four had to move together; a single dissenter pulls a second crypto stack in via feature unification. The direct `ring` users (ed25519 in pf-update-check, SHA-256 in the Windows updater) moved to aws-lc-rs, whose API is ring-compatible. `ring` does NOT leave the tree: ureq 2 names `features = ["ring"]` in its own rustls dependency line and cargo features are additive, so no dependent can switch it off. Two backends compiled in means rustls refuses to infer one, and anything built via `ClientConfig::builder()` panics instead of picking — which is what ureq's default agent does on its first HTTPS request. `tls::install_default_provider()` makes the choice explicit; it runs at each binary's entry point and defensively in pf-client-core, which several binaries link. Dropping ring entirely needs the ureq 2 -> 3 upgrade (36 call sites), deliberately left out of this change. Verified on macOS: pf-update-check 32, punktfunk-core 385, c_abi 1 (the last with LIBRARY_PATH=/opt/homebrew/opt/opus/lib) — aws-lc-sys links into the C ABI harness, so the Swift/Kotlin embedders keep working. cargo fmt --all --check clean.
66 lines
3.2 KiB
TOML
66 lines
3.2 KiB
TOML
# Shared clipboard (plan §W6 shape, design/clipboard-and-file-transfer.md §4): the host-side
|
|
# session-clipboard backends — `ext-data-control-v1` (KWin/wlroots/Sway/Hyprland) and Mutter's
|
|
# *direct* `org.gnome.Mutter.RemoteDesktop.Session` clipboard on Linux, the Win32 clipboard
|
|
# (delayed rendering) on Windows — behind one `HostClipboard`, plus the backend-agnostic session
|
|
# coordinator bridging it to the QUIC clipboard plane. The wire protocol and the client half live
|
|
# in `punktfunk-core`; the orchestrator consumes only the portable facade (policy / `ClipCoordCmd` /
|
|
# `start`), so it stays free of platform cfg.
|
|
[package]
|
|
name = "pf-clipboard"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license = "MIT OR Apache-2.0"
|
|
description = "punktfunk host shared clipboard: per-OS session-clipboard backends behind one HostClipboard + the QUIC clipboard-plane coordinator."
|
|
publish = false
|
|
|
|
[dependencies]
|
|
punktfunk-core = { path = "../punktfunk-core", features = ["quic"] }
|
|
anyhow = "1"
|
|
tracing = "0.1"
|
|
# Backend features mirror punktfunk-core's quinn exactly — quinn's default `rustls-ring` would
|
|
# drag a second crypto stack into every build that links this crate.
|
|
quinn = { version = "0.11", default-features = false, features = [
|
|
"log",
|
|
"platform-verifier",
|
|
"runtime-tokio",
|
|
"rustls-aws-lc-rs",
|
|
"bloom",
|
|
] }
|
|
tokio = { version = "1", features = ["rt", "rt-multi-thread", "sync", "time", "macros"] }
|
|
# CF_DIB <-> PNG conversion (winfmt) - most Windows apps paste bitmaps, not the "PNG" format.
|
|
# Unconditional (not windows-gated) so winfmt's pure-conversion unit tests run on every host.
|
|
image = { version = "0.25", default-features = false, features = ["png", "bmp", "jpeg", "gif"] }
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
# Mutter's direct RemoteDesktop clipboard is raw D-Bus via `ashpd::zbus` — NOT the xdg
|
|
# `org.freedesktop.portal.Clipboard`, which needs an interactive grant a headless host can't
|
|
# answer. Reusing ashpd's zbus re-export keeps one zbus version across the workspace.
|
|
ashpd = "0.13"
|
|
futures-util = "0.3"
|
|
# Raw fd plumbing on the paste pipes: `pipe2(O_CLOEXEC)` + `poll` on the data-control receive
|
|
# side, `fcntl` un-nonblocking on Mutter's transfer fd.
|
|
libc = "0.2"
|
|
wayland-client = "0.31"
|
|
# `staging`: `ext_data_control_v1` (the session-clipboard protocol) ships in the staging set.
|
|
wayland-protocols = { version = "0.32", features = ["client", "staging"] }
|
|
|
|
[target.'cfg(target_os = "windows")'.dependencies]
|
|
# The Win32 clipboard on a hidden message-loop window: `WM_CLIPBOARDUPDATE` listener + OLE
|
|
# delayed rendering (`WM_RENDERFORMAT`) for text / CF_HTML / RTF / PNG.
|
|
windows = { version = "0.62", features = [
|
|
"Win32_Foundation",
|
|
# WNDCLASSW/RegisterClassW reference HBRUSH/HICON/HCURSOR, so windows-rs only generates
|
|
# them with the Gdi feature on. The host build got it via workspace feature-unification;
|
|
# a standalone `cargo check -p pf-clipboard` didn't (E0432) — declare it honestly.
|
|
"Win32_Graphics_Gdi",
|
|
"Win32_System_DataExchange",
|
|
"Win32_System_LibraryLoader",
|
|
"Win32_System_Memory",
|
|
"Win32_System_Ole",
|
|
"Win32_UI_WindowsAndMessaging",
|
|
] }
|
|
|
|
[lints]
|
|
workspace = true
|