mirror of
https://github.com/Devolutions/IronRDP.git
synced 2025-07-07 17:45:01 +00:00
refactor: re-organize workspace (#101)
- Remove Tauri client. It was useful when initially prototyping the Web Component, but now it’s more of a maintenance burden. It’s notably not convenient to check in CI. Since we now have another native alternative that does not require any GPU (`ironrdp-client`), it’s probably a good time to part ways. - Move wasm package into the workspace. - Move Rust crates into a `crates` subfolder. - Introduce `xtask` crate for free-form automation.
This commit is contained in:
parent
4ad13df499
commit
710a51f24a
378 changed files with 1424 additions and 1814 deletions
2
.cargo/config.toml
Normal file
2
.cargo/config.toml
Normal file
|
@ -0,0 +1,2 @@
|
|||
[alias]
|
||||
xtask = "run --package xtask --"
|
11
.github/workflows/ci.yml
vendored
11
.github/workflows/ci.yml
vendored
|
@ -47,7 +47,8 @@ jobs:
|
|||
key: ${{ runner.os }}-lints-${{ hashFiles('Cargo.lock') }}
|
||||
|
||||
- name: Check clippy
|
||||
run: cargo clippy --workspace -- -D warnings
|
||||
# FIXME: run: cargo clippy --workspace -- -D warnings
|
||||
run: cargo clippy -- -D warnings
|
||||
|
||||
wasm:
|
||||
name: WASM target
|
||||
|
@ -63,15 +64,14 @@ jobs:
|
|||
path: |
|
||||
~/.cargo/registry/
|
||||
~/.cargo/git/
|
||||
./ffi/wasm/target/
|
||||
./target/
|
||||
key: ${{ runner.os }}-wasm-${{ hashFiles('ffi/wasm/Cargo.lock') }}
|
||||
|
||||
- name: Prepare runner
|
||||
run: sudo apt install wabt
|
||||
|
||||
- name: Check
|
||||
shell: pwsh
|
||||
run: ./ffi/wasm/check.ps1
|
||||
run: cargo xtask check wasm
|
||||
|
||||
tests:
|
||||
name: Tests [${{ matrix.os }}]
|
||||
|
@ -100,7 +100,8 @@ jobs:
|
|||
key: ${{ runner.os }}-tests-${{ hashFiles('Cargo.lock') }}
|
||||
|
||||
- name: Test [${{ matrix.os }}]
|
||||
run: cargo test --workspace
|
||||
# FIXME: run: cargo test --workspace
|
||||
run: cargo test
|
||||
|
||||
fuzz:
|
||||
name: Fuzzing
|
||||
|
|
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -1,6 +1,12 @@
|
|||
# Build artifacts
|
||||
/target
|
||||
|
||||
# Log files
|
||||
*.log
|
||||
|
||||
# Coverage
|
||||
/docs
|
||||
|
||||
# Editor/IDE files
|
||||
*~
|
||||
/tags
|
||||
|
|
486
Cargo.lock
generated
486
Cargo.lock
generated
|
@ -114,8 +114,8 @@ version = "0.4.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
"synstructure",
|
||||
]
|
||||
|
@ -126,8 +126,8 @@ version = "0.1.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -440,8 +440,8 @@ checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014"
|
|||
dependencies = [
|
||||
"heck",
|
||||
"proc-macro-error",
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -504,6 +504,26 @@ dependencies = [
|
|||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "console_error_panic_hook"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
|
||||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "console_log"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f"
|
||||
dependencies = [
|
||||
"log",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "const-oid"
|
||||
version = "0.7.1"
|
||||
|
@ -690,7 +710,7 @@ version = "0.1.26"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
|
||||
dependencies = [
|
||||
"quote 1.0.21",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -721,8 +741,8 @@ dependencies = [
|
|||
"cc",
|
||||
"codespan-reporting",
|
||||
"once_cell",
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"scratch",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
@ -739,8 +759,8 @@ version = "1.0.82"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a08a6e2fcc370a089ad3b4aaf54db3b1b4cee38ddabce5896b33eb693275f470"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -762,8 +782,8 @@ checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
|
|||
dependencies = [
|
||||
"fnv",
|
||||
"ident_case",
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"strsim",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
@ -775,7 +795,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"quote 1.0.21",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -839,8 +859,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "8ef71ddb5b3a1f53dee24817c8f70dfa1cb29e804c18d88c228d4bc9c86ee3b9"
|
||||
dependencies = [
|
||||
"proc-macro-error",
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -850,8 +870,8 @@ version = "2.2.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -911,8 +931,8 @@ version = "0.2.3"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -1068,8 +1088,8 @@ version = "0.2.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c8469d0d40519bc608ec6863f1cc88f3f1deee15913f2f3b3e573d81ed38cccc"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -1139,9 +1159,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "futures-channel"
|
||||
version = "0.3.25"
|
||||
version = "0.3.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
|
||||
checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
|
@ -1149,9 +1169,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "futures-core"
|
||||
version = "0.3.25"
|
||||
version = "0.3.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
|
||||
checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd"
|
||||
|
||||
[[package]]
|
||||
name = "futures-executor"
|
||||
|
@ -1166,32 +1186,32 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "futures-io"
|
||||
version = "0.3.25"
|
||||
version = "0.3.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
|
||||
checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91"
|
||||
|
||||
[[package]]
|
||||
name = "futures-macro"
|
||||
version = "0.3.25"
|
||||
version = "0.3.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
|
||||
checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "futures-sink"
|
||||
version = "0.3.25"
|
||||
version = "0.3.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
|
||||
checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2"
|
||||
|
||||
[[package]]
|
||||
name = "futures-task"
|
||||
version = "0.3.25"
|
||||
version = "0.3.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
|
||||
checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879"
|
||||
|
||||
[[package]]
|
||||
name = "futures-timer"
|
||||
|
@ -1201,9 +1221,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
|
|||
|
||||
[[package]]
|
||||
name = "futures-util"
|
||||
version = "0.3.25"
|
||||
version = "0.3.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
|
||||
checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
|
@ -1264,8 +1284,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
|
||||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"js-sys",
|
||||
"libc",
|
||||
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1279,6 +1301,39 @@ dependencies = [
|
|||
"xml-rs",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gloo-net"
|
||||
version = "0.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9902a044653b26b99f7e3693a42f171312d9be8b26b5697bd1e43ad1f8a35e10"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
"gloo-utils",
|
||||
"js-sys",
|
||||
"pin-project",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gloo-utils"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a8e8fc851e9c7b9852508bc6e3f690f452f474417e8545ec9857b7f7377036b5"
|
||||
dependencies = [
|
||||
"js-sys",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"wasm-bindgen",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glow"
|
||||
version = "0.11.2"
|
||||
|
@ -1623,11 +1678,11 @@ checksum = "f88c5561171189e69df9d98bcf18fd5f9558300f7ea7b801eb8a0fd748bd8745"
|
|||
|
||||
[[package]]
|
||||
name = "ironrdp"
|
||||
version = "0.4.2"
|
||||
version = "0.5.0"
|
||||
dependencies = [
|
||||
"ironrdp-core",
|
||||
"ironrdp-graphics",
|
||||
"ironrdp-input",
|
||||
"ironrdp-pdu",
|
||||
"ironrdp-session",
|
||||
]
|
||||
|
||||
|
@ -1645,6 +1700,7 @@ dependencies = [
|
|||
"inquire",
|
||||
"ironrdp",
|
||||
"ironrdp-input",
|
||||
"ironrdp-session",
|
||||
"log",
|
||||
"smallvec",
|
||||
"softbuffer",
|
||||
|
@ -1660,7 +1716,73 @@ dependencies = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-core"
|
||||
name = "ironrdp-client-glutin"
|
||||
version = "0.4.2"
|
||||
dependencies = [
|
||||
"async-native-tls",
|
||||
"chrono",
|
||||
"clap",
|
||||
"exitcode",
|
||||
"fern",
|
||||
"futures-util",
|
||||
"glutin",
|
||||
"ironrdp",
|
||||
"ironrdp-glutin-renderer",
|
||||
"ironrdp-session",
|
||||
"log",
|
||||
"sspi",
|
||||
"tokio",
|
||||
"tokio-rustls",
|
||||
"tokio-util",
|
||||
"x509-parser 0.14.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-glutin-renderer"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"glow",
|
||||
"glutin",
|
||||
"ironrdp",
|
||||
"log",
|
||||
"openh264",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-graphics"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"bit_field",
|
||||
"bitflags",
|
||||
"bitvec",
|
||||
"byteorder",
|
||||
"bytes",
|
||||
"hex-literal",
|
||||
"ironrdp-pdu",
|
||||
"lazy_static",
|
||||
"num-derive 0.3.3",
|
||||
"num-traits",
|
||||
"proptest",
|
||||
"rdp-rs",
|
||||
"rstest 0.16.0",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-input"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bitvec",
|
||||
"ironrdp-pdu",
|
||||
"proptest",
|
||||
"rstest 0.16.0",
|
||||
"smallvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-pdu"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"bit_field",
|
||||
|
@ -1680,56 +1802,11 @@ dependencies = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-graphics"
|
||||
version = "0.1.0"
|
||||
name = "ironrdp-pdu-generators"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"bit_field",
|
||||
"bitflags",
|
||||
"bitvec",
|
||||
"byteorder",
|
||||
"bytes",
|
||||
"hex-literal",
|
||||
"ironrdp-core",
|
||||
"lazy_static",
|
||||
"num-derive 0.3.3",
|
||||
"num-traits",
|
||||
"ironrdp-pdu",
|
||||
"proptest",
|
||||
"rdp-rs",
|
||||
"rstest 0.16.0",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-gui-client"
|
||||
version = "0.4.2"
|
||||
dependencies = [
|
||||
"async-native-tls",
|
||||
"chrono",
|
||||
"clap",
|
||||
"exitcode",
|
||||
"fern",
|
||||
"futures-util",
|
||||
"glutin",
|
||||
"ironrdp",
|
||||
"ironrdp-renderer",
|
||||
"log",
|
||||
"sspi",
|
||||
"tokio",
|
||||
"tokio-rustls",
|
||||
"tokio-util",
|
||||
"x509-parser 0.14.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-input"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bitvec",
|
||||
"ironrdp-core",
|
||||
"proptest",
|
||||
"rstest 0.16.0",
|
||||
"smallvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1743,18 +1820,6 @@ dependencies = [
|
|||
"rstest 0.15.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-renderer"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"glow",
|
||||
"glutin",
|
||||
"ironrdp",
|
||||
"log",
|
||||
"openh264",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-replay-client"
|
||||
version = "0.4.2"
|
||||
|
@ -1762,7 +1827,7 @@ dependencies = [
|
|||
"clap",
|
||||
"glutin",
|
||||
"ironrdp",
|
||||
"ironrdp-renderer",
|
||||
"ironrdp-glutin-renderer",
|
||||
"log",
|
||||
"simplelog",
|
||||
]
|
||||
|
@ -1777,8 +1842,8 @@ dependencies = [
|
|||
"byteorder",
|
||||
"bytes",
|
||||
"futures-util",
|
||||
"ironrdp-core",
|
||||
"ironrdp-graphics",
|
||||
"ironrdp-pdu",
|
||||
"ironrdp-rdcleanpath",
|
||||
"lazy_static",
|
||||
"log",
|
||||
|
@ -1801,15 +1866,48 @@ dependencies = [
|
|||
"byteorder",
|
||||
"bytes",
|
||||
"futures-util",
|
||||
"ironrdp-core",
|
||||
"ironrdp-graphics",
|
||||
"ironrdp-pdu",
|
||||
"ironrdp-session",
|
||||
"num-traits",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-session-generators"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"ironrdp-pdu-generators",
|
||||
"ironrdp-session",
|
||||
"proptest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-tls"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "ironrdp-web"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
"console_error_panic_hook",
|
||||
"console_log",
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
"getrandom 0.2.8",
|
||||
"gloo-net",
|
||||
"ironrdp",
|
||||
"ironrdp-session",
|
||||
"js-sys",
|
||||
"log",
|
||||
"smallvec",
|
||||
"sspi",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is-terminal"
|
||||
version = "0.4.0"
|
||||
|
@ -1891,9 +1989,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.137"
|
||||
version = "0.2.140"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
|
||||
checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
|
||||
|
||||
[[package]]
|
||||
name = "libloading"
|
||||
|
@ -2151,8 +2249,8 @@ checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c"
|
|||
dependencies = [
|
||||
"darling",
|
||||
"proc-macro-crate 1.2.1",
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -2301,8 +2399,8 @@ version = "0.3.3"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -2373,8 +2471,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d"
|
||||
dependencies = [
|
||||
"proc-macro-crate 0.1.5",
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -2385,8 +2483,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce"
|
||||
dependencies = [
|
||||
"proc-macro-crate 1.2.1",
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -2511,8 +2609,8 @@ version = "0.1.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -2736,6 +2834,32 @@ dependencies = [
|
|||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pico-args"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
|
||||
|
||||
[[package]]
|
||||
name = "pin-project"
|
||||
version = "1.0.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
|
||||
dependencies = [
|
||||
"pin-project-internal",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-internal"
|
||||
version = "1.0.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-lite"
|
||||
version = "0.2.9"
|
||||
|
@ -2842,8 +2966,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||
dependencies = [
|
||||
"proc-macro-error-attr",
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
"version_check",
|
||||
]
|
||||
|
@ -2854,8 +2978,8 @@ version = "1.0.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
|
@ -2870,9 +2994,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.47"
|
||||
version = "1.0.54"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
|
||||
checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
@ -2930,11 +3054,11 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.21"
|
||||
version = "1.0.26"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
|
||||
checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"proc-macro2 1.0.54",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -3217,8 +3341,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "5015e68a0685a95ade3eee617ff7101ab6a3fc689203101ca16ebc16f2b89c66"
|
||||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"rustc_version",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
@ -3230,8 +3354,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "7229b505ae0706e64f37ffc54a9c163e11022a6636d58fe1f3f52018257ff9f7"
|
||||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"rustc_version",
|
||||
"syn 1.0.104",
|
||||
"unicode-ident",
|
||||
|
@ -3463,8 +3587,8 @@ version = "1.0.154"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4fc80d722935453bcafdc2c9a73cd6fac4dc1938f0346035d84bf99fa9e33217"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -3673,9 +3797,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.4.7"
|
||||
version = "0.4.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
|
||||
checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"winapi",
|
||||
|
@ -3825,8 +3949,19 @@ version = "1.0.104"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ae548ec36cf198c0ef7710d3c230987c2d6d7bd98ad6edc0274462724c585ce"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
|
@ -3836,8 +3971,8 @@ version = "0.12.6"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
"unicode-xid 0.2.4",
|
||||
]
|
||||
|
@ -3886,8 +4021,8 @@ version = "1.0.38"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -4008,14 +4143,13 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
|
|||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.22.0"
|
||||
version = "1.27.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3"
|
||||
checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"bytes",
|
||||
"libc",
|
||||
"memchr",
|
||||
"mio",
|
||||
"num_cpus",
|
||||
"parking_lot",
|
||||
|
@ -4023,18 +4157,18 @@ dependencies = [
|
|||
"signal-hook-registry",
|
||||
"socket2",
|
||||
"tokio-macros",
|
||||
"winapi",
|
||||
"windows-sys 0.45.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-macros"
|
||||
version = "1.8.0"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
|
||||
checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"syn 1.0.104",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 2.0.11",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -4050,9 +4184,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "tokio-util"
|
||||
version = "0.7.4"
|
||||
version = "0.7.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
|
||||
checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"futures-core",
|
||||
|
@ -4096,8 +4230,8 @@ version = "0.1.23"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
]
|
||||
|
||||
|
@ -4327,8 +4461,8 @@ dependencies = [
|
|||
"bumpalo",
|
||||
"log",
|
||||
"once_cell",
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
@ -4351,7 +4485,7 @@ version = "0.2.83"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
|
||||
dependencies = [
|
||||
"quote 1.0.21",
|
||||
"quote 1.0.26",
|
||||
"wasm-bindgen-macro-support",
|
||||
]
|
||||
|
||||
|
@ -4361,8 +4495,8 @@ version = "0.2.83"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
"wasm-bindgen-backend",
|
||||
"wasm-bindgen-shared",
|
||||
|
@ -4468,8 +4602,8 @@ version = "0.29.5"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"xml-rs",
|
||||
]
|
||||
|
||||
|
@ -4479,9 +4613,9 @@ version = "0.30.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4834c14b3edf1d9986c83ca79b1e7e3afbe9874c7c144702f6467063259ce45d"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"proc-macro2 1.0.54",
|
||||
"quick-xml",
|
||||
"quote 1.0.21",
|
||||
"quote 1.0.26",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -4950,6 +5084,30 @@ version = "0.8.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
|
||||
|
||||
[[package]]
|
||||
name = "xshell"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "962c039b3a7b16cf4e9a4248397c6585c07547412e7d6a6e035389a802dcfe90"
|
||||
dependencies = [
|
||||
"xshell-macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "xshell-macros"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1dbabb1cbd15a1d6d12d9ed6b35cc6777d4af87ab3ba155ea37215f20beab80c"
|
||||
|
||||
[[package]]
|
||||
name = "xtask"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"pico-args",
|
||||
"xshell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "yansi"
|
||||
version = "0.5.1"
|
||||
|
@ -4977,8 +5135,8 @@ version = "1.3.3"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.47",
|
||||
"quote 1.0.21",
|
||||
"proc-macro2 1.0.54",
|
||||
"quote 1.0.26",
|
||||
"syn 1.0.104",
|
||||
"synstructure",
|
||||
]
|
||||
|
|
52
Cargo.toml
52
Cargo.toml
|
@ -1,15 +1,43 @@
|
|||
[package]
|
||||
name = "ironrdp"
|
||||
version = "0.5.0"
|
||||
edition = "2021"
|
||||
readme = "README.md"
|
||||
license = "MIT/Apache-2.0"
|
||||
homepage = "https://github.com/Devolutions/IronRDP"
|
||||
repository = "https://github.com/Devolutions/IronRDP"
|
||||
authors = ["Devolutions Inc. <infos@devolutions.net>"]
|
||||
description = "A Rust implementation of the Microsoft Remote Desktop Protocol (RDP)"
|
||||
keywords = ["rdp", "remote", "desktop", "protocol"]
|
||||
|
||||
[workspace]
|
||||
members = [
|
||||
"ironrdp",
|
||||
"ironrdp-core",
|
||||
"ironrdp-graphics",
|
||||
"ironrdp-input",
|
||||
"ironrdp-session",
|
||||
"ironrdp-session-async",
|
||||
"ironrdp-tls",
|
||||
"ironrdp-rdcleanpath",
|
||||
"ironrdp-renderer",
|
||||
"ironrdp-client",
|
||||
"ironrdp-client-glutin",
|
||||
"ironrdp-replay-client",
|
||||
"crates/*",
|
||||
"xtask",
|
||||
]
|
||||
default-members = [
|
||||
"crates/pdu",
|
||||
"crates/session",
|
||||
"crates/graphics",
|
||||
"crates/input",
|
||||
"crates/session-async",
|
||||
"crates/client",
|
||||
]
|
||||
|
||||
[profile.production]
|
||||
inherits = "release"
|
||||
lto = true
|
||||
|
||||
[profile.production-wasm]
|
||||
inherits = "release"
|
||||
opt-level = "s"
|
||||
lto = true
|
||||
|
||||
[features]
|
||||
default = []
|
||||
|
||||
[dependencies]
|
||||
ironrdp-pdu = { path = "crates/pdu" }
|
||||
ironrdp-session = { path = "crates/session" }
|
||||
ironrdp-graphics = { path = "crates/graphics" }
|
||||
ironrdp-input = { path = "crates/input" }
|
||||
|
|
57
README.md
57
README.md
|
@ -1,25 +1,10 @@
|
|||
# IronRDP
|
||||
|
||||
A Rust implementation of the Microsoft Remote Desktop Protocol, with a focus on security.
|
||||
A collection of Rust crates providing an implementation of the Microsoft Remote Desktop Protocol, with a focus on security.
|
||||
|
||||
## Architecture (Work In Progress…)
|
||||
## Demonstration
|
||||
|
||||
- `ironrdp`: meta crate re-exporting important crates
|
||||
- `ironrdp-core`: core, RDP protocol packets encoding and decoding.
|
||||
- `ironrdp-graphics`: image processing primitives and algorithms (ZGFX, DWT…).
|
||||
- `ironrdp-input`: helpers to build FastPathInput packets.
|
||||
- `ironrdp-session`: abstract state machine on top of `ironrdp-graphics`.
|
||||
- `ironrdp-session-async`: `Future`s built on top of `ironrdp-session`.
|
||||
- `ironrdp-tls`: TLS boilerplate common with most IronRDP clients.
|
||||
- `ironrdp-devolutions-gateway`: Devolutions Gateway extensions.
|
||||
- `ironrdp-renderer`: `glutin` primitives for OpenGL rendering.
|
||||
- `ironrdp-client`: Portable RDP client without GPU acceleration using softbuffer and winit for windowing.
|
||||
- `ironrdp-client-glutin`: GPU-accelerated RDP client using glutin.
|
||||
- `ironrdp-replay-client`: utility tool to replay RDP graphics pipeline for debugging purposes.
|
||||
- `iron-remote-gui`: core frontend ui used by both, iron-svelte-client and iron-tauri-client.
|
||||
- `iron-svelte-client`: web-based frontend using `Svelte` and `Material` frameworks).
|
||||
- `iron-tauri-client`: a native client built with Tauri. Frontend is using the `iron-web-client`/`iron-svelte-client` component.
|
||||
- `ffi/wasm`: WebAssembly high-level bindings targeting web browsers.
|
||||
https://user-images.githubusercontent.com/3809077/202049929-76f42471-aeb0-41da-9118-0dc6ea491bd2.mp4
|
||||
|
||||
## Video Codec Support
|
||||
|
||||
|
@ -50,7 +35,39 @@ Alternatively, you may change a few group policies using `gpedit.msc`:
|
|||
|
||||
5. Reboot.
|
||||
|
||||
## Demonstration
|
||||
## Architecture (Work In Progress…)
|
||||
|
||||
https://user-images.githubusercontent.com/3809077/202049929-76f42471-aeb0-41da-9118-0dc6ea491bd2.mp4
|
||||
- `ironrdp` (root package): meta crate re-exporting important crates,
|
||||
- `ironrdp-pdu` (`crates/pdu`): PDU encoding and decoding (no I/O, trivial to fuzz),
|
||||
- `ironrdp-graphics` (`crates/graphics`): image processing primitives (no I/O, trivial to fuzz),
|
||||
- `ironrdp-session` (`crates/session`): state machine to drive a complete VNC session (no I/O, not _too_ hard to fuzz),
|
||||
- `ironrdp-input` (`crates/input`): utilities to manage and build input packets (no I/O),
|
||||
- `ironrdp-session-async` (`crates/session-async`): provides `Future`s wrapping the session state machine conveniently,
|
||||
- `ironrdp-tls` (`crates/tls`): TLS boilerplate common with most IronRDP clients,
|
||||
- `ironrdp-rdcleanpath` (`crates/rdcleanpath`): RDCleanPath PDU structure used by IronRDP web client and Devolutions Gateway,
|
||||
- `ironrdp-client` (`crates/client`): Portable RDP client without GPU acceleration using softbuffer and winit for windowing,
|
||||
- `ironrdp-web` (`crates/web`): WebAssembly high-level bindings targeting web browsers,
|
||||
- `ironrdp-glutin-renderer` (`crates/glutin-renderer`): `glutin` primitives for OpenGL rendering,
|
||||
- `ironrdp-client-glutin` (`crates/client-glutin`): GPU-accelerated RDP client using glutin,
|
||||
- `ironrdp-replay-client` (`crates/replay-client`): utility tool to replay RDP graphics pipeline for debugging purposes,
|
||||
- `ironrdp-pdu-generators` (`crates/pdu-generators`): `proptest` generators for `ironrdp-pdu` types,
|
||||
- `ironrdp-session-generators` (`crates/session-generators`): `proptest` generators for `ironrdp-session` types,
|
||||
- `iron-remote-gui` (`web-client/iron-remote-gui`): core frontend UI used by `iron-svelte-client` as a Web Component,
|
||||
- `iron-svelte-client` (`web-client/iron-svelte-client`): web-based frontend using `Svelte` and `Material` frameworks,
|
||||
- and finally, `ironrdp-fuzz` (`fuzz`): fuzz targets for core crates.
|
||||
|
||||
## General design
|
||||
|
||||
- Avoid I/O wherever possible
|
||||
- Dependency injection when runtime information is necessary in core crates (no system call such as `gethostname`)
|
||||
- Keep non-portable code out of core crates
|
||||
- Make crate `no_std`-compatible wherever possible
|
||||
- Facilitate fuzzing
|
||||
- In libraries, provide concrete error types either hand-crafted or using `thiserror` crate
|
||||
- In binaries, use the convenient catch-all error type `anyhow::Error`
|
||||
- Free-form automation a-la `make` following [`cargo xtask`](https://github.com/matklad/cargo-xtask) specification
|
||||
|
||||
## Continuous integration
|
||||
|
||||
We use GitHub action and our workflows simply run `cargo xtask`.
|
||||
The expectation is that, if `cargo xtask ci` passes locally, the CI will be green as well.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[package]
|
||||
name = "ironrdp-gui-client"
|
||||
name = "ironrdp-client-glutin"
|
||||
version = "0.4.2"
|
||||
edition = "2021"
|
||||
readme = "README.md"
|
||||
|
@ -11,13 +11,14 @@ keywords = ["rdp", "client", "remote", "desktop", "protocol", "gfx", "rfx"]
|
|||
|
||||
[features]
|
||||
default = ["rustls"]
|
||||
rustls = ["dep:tokio-rustls", "ironrdp/rustls"]
|
||||
native-tls = ["dep:async-native-tls", "ironrdp/native-tls"]
|
||||
rustls = ["dep:tokio-rustls", "ironrdp-session/rustls"]
|
||||
native-tls = ["dep:async-native-tls", "ironrdp-session/native-tls"]
|
||||
|
||||
[dependencies]
|
||||
|
||||
# Protocol
|
||||
ironrdp = { path = "../ironrdp" }
|
||||
# Protocols
|
||||
ironrdp = { path = "../.." }
|
||||
ironrdp-session = { path = "../session" }
|
||||
sspi = { version = "0.8", features = ["network_client"] }
|
||||
|
||||
# CLI
|
||||
|
@ -43,4 +44,4 @@ chrono = "0.4.23"
|
|||
|
||||
# GUI
|
||||
glutin = "0.29"
|
||||
ironrdp-renderer = { path = "../ironrdp-renderer"}
|
||||
ironrdp-glutin-renderer = { path = "../glutin-renderer"}
|
|
@ -26,11 +26,11 @@ enum SecurityProtocol {
|
|||
}
|
||||
|
||||
impl SecurityProtocol {
|
||||
fn parse(security_protocol: SecurityProtocol) -> ironrdp::core::SecurityProtocol {
|
||||
fn parse(security_protocol: SecurityProtocol) -> ironrdp::pdu::SecurityProtocol {
|
||||
match security_protocol {
|
||||
SecurityProtocol::Ssl => ironrdp::core::SecurityProtocol::SSL,
|
||||
SecurityProtocol::Hybrid => ironrdp::core::SecurityProtocol::HYBRID,
|
||||
SecurityProtocol::HybridEx => ironrdp::core::SecurityProtocol::HYBRID_EX,
|
||||
SecurityProtocol::Ssl => ironrdp::pdu::SecurityProtocol::SSL,
|
||||
SecurityProtocol::Hybrid => ironrdp::pdu::SecurityProtocol::HYBRID,
|
||||
SecurityProtocol::HybridEx => ironrdp::pdu::SecurityProtocol::HYBRID_EX,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -47,15 +47,15 @@ enum KeyboardType {
|
|||
}
|
||||
|
||||
impl KeyboardType {
|
||||
fn parse(keyboard_type: KeyboardType) -> ironrdp::gcc::KeyboardType {
|
||||
fn parse(keyboard_type: KeyboardType) -> ironrdp::pdu::gcc::KeyboardType {
|
||||
match keyboard_type {
|
||||
KeyboardType::IbmEnhanced => ironrdp::gcc::KeyboardType::IbmEnhanced,
|
||||
KeyboardType::IbmPcAt => ironrdp::gcc::KeyboardType::IbmPcAt,
|
||||
KeyboardType::IbmPcXt => ironrdp::gcc::KeyboardType::IbmPcXt,
|
||||
KeyboardType::OlivettiIco => ironrdp::gcc::KeyboardType::OlivettiIco,
|
||||
KeyboardType::Nokia1050 => ironrdp::gcc::KeyboardType::Nokia1050,
|
||||
KeyboardType::Nokia9140 => ironrdp::gcc::KeyboardType::Nokia9140,
|
||||
KeyboardType::Japanese => ironrdp::gcc::KeyboardType::Japanese,
|
||||
KeyboardType::IbmEnhanced => ironrdp::pdu::gcc::KeyboardType::IbmEnhanced,
|
||||
KeyboardType::IbmPcAt => ironrdp::pdu::gcc::KeyboardType::IbmPcAt,
|
||||
KeyboardType::IbmPcXt => ironrdp::pdu::gcc::KeyboardType::IbmPcXt,
|
||||
KeyboardType::OlivettiIco => ironrdp::pdu::gcc::KeyboardType::OlivettiIco,
|
||||
KeyboardType::Nokia1050 => ironrdp::pdu::gcc::KeyboardType::Nokia1050,
|
||||
KeyboardType::Nokia9140 => ironrdp::pdu::gcc::KeyboardType::Nokia9140,
|
||||
KeyboardType::Japanese => ironrdp::pdu::gcc::KeyboardType::Japanese,
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,9 +6,9 @@ use std::sync::{self, Arc};
|
|||
use glutin::dpi::PhysicalPosition;
|
||||
use glutin::event::{Event, WindowEvent};
|
||||
use glutin::event_loop::ControlFlow;
|
||||
use ironrdp::dvc::gfx::ServerPdu;
|
||||
use ironrdp::pdu::dvc::gfx::ServerPdu;
|
||||
use ironrdp::session::{ErasedWriter, GfxHandler};
|
||||
use ironrdp_renderer::renderer::Renderer;
|
||||
use ironrdp_glutin_renderer::renderer::Renderer;
|
||||
use tokio::sync::Mutex;
|
||||
|
||||
use self::input::{handle_input_events, translate_input_event};
|
||||
|
@ -28,7 +28,7 @@ impl MessagePassingGfxHandler {
|
|||
}
|
||||
|
||||
impl GfxHandler for MessagePassingGfxHandler {
|
||||
fn on_message(&self, message: ServerPdu) -> Result<Option<ironrdp::dvc::gfx::ClientPdu>, RdpError> {
|
||||
fn on_message(&self, message: ServerPdu) -> Result<Option<ironrdp::pdu::dvc::gfx::ClientPdu>, RdpError> {
|
||||
self.channel.send(message).map_err(|e| RdpError::Send(e.to_string()))?;
|
||||
Ok(None)
|
||||
}
|
|
@ -4,10 +4,10 @@ use std::sync::Arc;
|
|||
use futures_util::AsyncWriteExt;
|
||||
use glutin::dpi::PhysicalPosition;
|
||||
use glutin::event::{ElementState, Event, WindowEvent};
|
||||
use ironrdp::core::input::fast_path::{FastPathInput, FastPathInputEvent, KeyboardFlags};
|
||||
use ironrdp::core::input::mouse::PointerFlags;
|
||||
use ironrdp::core::input::MousePdu;
|
||||
use ironrdp::core::PduParsing;
|
||||
use ironrdp::pdu::input::fast_path::{FastPathInput, FastPathInputEvent, KeyboardFlags};
|
||||
use ironrdp::pdu::input::mouse::PointerFlags;
|
||||
use ironrdp::pdu::input::MousePdu;
|
||||
use ironrdp::pdu::PduParsing;
|
||||
use ironrdp::session::ErasedWriter;
|
||||
use tokio::sync::Mutex;
|
||||
|
|
@ -9,8 +9,8 @@ use std::{io, process};
|
|||
|
||||
use futures_util::io::AsyncWriteExt as _;
|
||||
use gui::MessagePassingGfxHandler;
|
||||
use ironrdp::dvc::gfx::ServerPdu;
|
||||
use ironrdp::graphics::image_processing::PixelFormat;
|
||||
use ironrdp::pdu::dvc::gfx::ServerPdu;
|
||||
use ironrdp::session::connection_sequence::{process_connection_sequence, UpgradedStream};
|
||||
use ironrdp::session::image::DecodedImage;
|
||||
use ironrdp::session::{ActiveStageOutput, ActiveStageProcessor, ErasedWriter, RdpError};
|
|
@ -11,15 +11,16 @@ keywords = ["rdp", "client", "remote", "desktop", "protocol", "gfx", "rfx"]
|
|||
|
||||
[features]
|
||||
default = ["rustls"]
|
||||
rustls = ["dep:tokio-rustls", "ironrdp/rustls"]
|
||||
native-tls = ["dep:async-native-tls", "ironrdp/native-tls"]
|
||||
rustls = ["dep:tokio-rustls", "ironrdp-session/rustls"]
|
||||
native-tls = ["dep:async-native-tls", "ironrdp-session/native-tls"]
|
||||
|
||||
[dependencies]
|
||||
|
||||
# Protocol
|
||||
ironrdp = { path = "../ironrdp" }
|
||||
ironrdp-input = { path = "../ironrdp-input" }
|
||||
sspi = { version = "0.8.0", features = ["network_client"] } # TODO: enable dns_resolver at some point
|
||||
# Protocols
|
||||
ironrdp = { path = "../.." }
|
||||
ironrdp-input = { path = "../input" }
|
||||
ironrdp-session = { path = "../session" }
|
||||
sspi = { version = "0.8", features = ["network_client"] } # TODO: enable dns_resolver at some point
|
||||
|
||||
# GUI
|
||||
softbuffer = "0.2.0"
|
||||
|
@ -30,16 +31,18 @@ clap = { version = "4.0", features = ["derive", "cargo"] }
|
|||
exitcode = "1.1.2"
|
||||
inquire = "0.5.3"
|
||||
|
||||
# logging
|
||||
# Logging
|
||||
log = "0.4"
|
||||
fern = "0.6"
|
||||
tracing-subscriber = { version = "0.3.16", features = ["env-filter"] }
|
||||
tracing = "0.1.37"
|
||||
|
||||
# SSL
|
||||
x509-parser = "0.14"
|
||||
async-native-tls = { version = "0.4", default-features = false, features = [ "runtime-tokio" ], optional = true }
|
||||
tokio-rustls = { version = "0.23", features = ["dangerous_configuration"], optional = true }
|
||||
|
||||
# async, futures
|
||||
# Async, futures
|
||||
tokio = { version = "1", features = ["full"]}
|
||||
tokio-util = { version = "0.7.4", features = ["compat"] }
|
||||
futures-util = "0.3"
|
||||
|
@ -49,5 +52,3 @@ chrono = "0.4.23"
|
|||
whoami = "1.2.3"
|
||||
anyhow = "1.0.68"
|
||||
smallvec = "1.10.0"
|
||||
tracing-subscriber = { version = "0.3.16", features = ["env-filter"] }
|
||||
tracing = "0.1.37"
|
|
@ -26,11 +26,11 @@ enum SecurityProtocol {
|
|||
}
|
||||
|
||||
impl SecurityProtocol {
|
||||
fn parse(security_protocol: SecurityProtocol) -> ironrdp::core::SecurityProtocol {
|
||||
fn parse(security_protocol: SecurityProtocol) -> ironrdp::pdu::SecurityProtocol {
|
||||
match security_protocol {
|
||||
SecurityProtocol::Ssl => ironrdp::core::SecurityProtocol::SSL,
|
||||
SecurityProtocol::Hybrid => ironrdp::core::SecurityProtocol::HYBRID,
|
||||
SecurityProtocol::HybridEx => ironrdp::core::SecurityProtocol::HYBRID_EX,
|
||||
SecurityProtocol::Ssl => ironrdp::pdu::SecurityProtocol::SSL,
|
||||
SecurityProtocol::Hybrid => ironrdp::pdu::SecurityProtocol::HYBRID,
|
||||
SecurityProtocol::HybridEx => ironrdp::pdu::SecurityProtocol::HYBRID_EX,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -47,15 +47,15 @@ enum KeyboardType {
|
|||
}
|
||||
|
||||
impl KeyboardType {
|
||||
fn parse(keyboard_type: KeyboardType) -> ironrdp::gcc::KeyboardType {
|
||||
fn parse(keyboard_type: KeyboardType) -> ironrdp::pdu::gcc::KeyboardType {
|
||||
match keyboard_type {
|
||||
KeyboardType::IbmEnhanced => ironrdp::gcc::KeyboardType::IbmEnhanced,
|
||||
KeyboardType::IbmPcAt => ironrdp::gcc::KeyboardType::IbmPcAt,
|
||||
KeyboardType::IbmPcXt => ironrdp::gcc::KeyboardType::IbmPcXt,
|
||||
KeyboardType::OlivettiIco => ironrdp::gcc::KeyboardType::OlivettiIco,
|
||||
KeyboardType::Nokia1050 => ironrdp::gcc::KeyboardType::Nokia1050,
|
||||
KeyboardType::Nokia9140 => ironrdp::gcc::KeyboardType::Nokia9140,
|
||||
KeyboardType::Japanese => ironrdp::gcc::KeyboardType::Japanese,
|
||||
KeyboardType::IbmEnhanced => ironrdp::pdu::gcc::KeyboardType::IbmEnhanced,
|
||||
KeyboardType::IbmPcAt => ironrdp::pdu::gcc::KeyboardType::IbmPcAt,
|
||||
KeyboardType::IbmPcXt => ironrdp::pdu::gcc::KeyboardType::IbmPcXt,
|
||||
KeyboardType::OlivettiIco => ironrdp::pdu::gcc::KeyboardType::OlivettiIco,
|
||||
KeyboardType::Nokia1050 => ironrdp::pdu::gcc::KeyboardType::Nokia1050,
|
||||
KeyboardType::Nokia9140 => ironrdp::pdu::gcc::KeyboardType::Nokia9140,
|
||||
KeyboardType::Japanese => ironrdp::pdu::gcc::KeyboardType::Japanese,
|
||||
}
|
||||
}
|
||||
}
|
|
@ -261,7 +261,7 @@ impl GuiContext {
|
|||
|
||||
fn send_fast_path_events(
|
||||
input_event_sender: &mpsc::UnboundedSender<RdpInputEvent>,
|
||||
input_events: smallvec::SmallVec<[ironrdp::core::input::fast_path::FastPathInputEvent; 2]>,
|
||||
input_events: smallvec::SmallVec<[ironrdp::pdu::input::fast_path::FastPathInputEvent; 2]>,
|
||||
) {
|
||||
if !input_events.is_empty() {
|
||||
let _ = input_event_sender.send(RdpInputEvent::FastPath(input_events));
|
|
@ -1,15 +1,11 @@
|
|||
#[macro_use]
|
||||
extern crate log;
|
||||
|
||||
use std::fs::OpenOptions;
|
||||
|
||||
use anyhow::Context as _;
|
||||
use ironrdp_client::config::Config;
|
||||
use ironrdp_client::gui::GuiContext;
|
||||
use ironrdp_client::rdp::{RdpClient, RdpInputEvent};
|
||||
use tokio::runtime;
|
||||
use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt;
|
||||
use tracing_subscriber::EnvFilter;
|
||||
|
||||
fn main() -> anyhow::Result<()> {
|
||||
let mut config = Config::parse_args().context("CLI arguments parsing")?;
|
||||
|
@ -63,6 +59,11 @@ fn setup_logging(log_file: &str) -> Result<(), fern::InitError> {
|
|||
|
||||
// sspi-rs logging
|
||||
if let Ok(path) = std::env::var("SSPI_LOG_FILE") {
|
||||
use std::fs::OpenOptions;
|
||||
|
||||
use tracing_subscriber::prelude::*;
|
||||
use tracing_subscriber::EnvFilter;
|
||||
|
||||
let file = match OpenOptions::new().read(true).append(true).open(path) {
|
||||
Ok(file) => file,
|
||||
Err(e) => {
|
|
@ -1,6 +1,6 @@
|
|||
use futures_util::io::AsyncWriteExt as _;
|
||||
use ironrdp::core::input::fast_path::FastPathInputEvent;
|
||||
use ironrdp::graphics::image_processing::PixelFormat;
|
||||
use ironrdp::pdu::input::fast_path::FastPathInputEvent;
|
||||
use ironrdp::session::connection_sequence::{process_connection_sequence, Address};
|
||||
use ironrdp::session::image::DecodedImage;
|
||||
use ironrdp::session::{ActiveStageOutput, ActiveStageProcessor, RdpError};
|
||||
|
@ -143,8 +143,8 @@ async fn run_impl(
|
|||
return Ok(RdpControlFlow::ReconnectWithNewSize { width, height })
|
||||
},
|
||||
RdpInputEvent::FastPath(events) => {
|
||||
use ironrdp::core::input::fast_path::FastPathInput;
|
||||
use ironrdp::core::PduParsing as _;
|
||||
use ironrdp::pdu::input::fast_path::FastPathInput;
|
||||
use ironrdp::pdu::PduParsing as _;
|
||||
|
||||
trace!("Inputs: {events:?}");
|
||||
|
||||
|
@ -159,7 +159,7 @@ async fn run_impl(
|
|||
writer.write_all(&frame).await?;
|
||||
}
|
||||
RdpInputEvent::Close => {
|
||||
// TODO: should we send a connection close to server?
|
||||
// TODO: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/27915739-8f77-487e-9927-55008af7fd68
|
||||
break 'outer;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
[package]
|
||||
name = "ironrdp-renderer"
|
||||
name = "ironrdp-glutin-renderer"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
readme = "README.md"
|
||||
|
@ -8,13 +8,10 @@ homepage = "https://github.com/Devolutions/IronRDP"
|
|||
repository = "https://github.com/Devolutions/IronRDP"
|
||||
authors = ["Devolutions Inc. <infos@devolutions.net>"]
|
||||
|
||||
[lib]
|
||||
path = "src/lib.rs"
|
||||
|
||||
[dependencies]
|
||||
ironrdp = { path = "../.." }
|
||||
glow = "0.11"
|
||||
log = "0.4"
|
||||
thiserror = "1.0.38"
|
||||
ironrdp = { path = "../ironrdp" }
|
||||
glutin = { version = "0.29" }
|
||||
openh264 = { version = "0.3" }
|
|
@ -4,7 +4,7 @@ use std::slice::from_raw_parts;
|
|||
use std::sync::Arc;
|
||||
|
||||
use glow::*;
|
||||
use ironrdp::geometry::Rectangle;
|
||||
use ironrdp::pdu::geometry::Rectangle;
|
||||
|
||||
fn cast_as_bytes<T>(input: &[T]) -> &[u8] {
|
||||
unsafe { from_raw_parts(input.as_ptr() as *const u8, input.len() * size_of::<T>()) }
|
|
@ -7,10 +7,10 @@ use std::thread;
|
|||
use std::thread::JoinHandle;
|
||||
|
||||
use glutin::dpi::PhysicalSize;
|
||||
use ironrdp::dvc::gfx;
|
||||
use ironrdp::dvc::gfx::{Codec1Type, ServerPdu};
|
||||
use ironrdp::geometry::Rectangle;
|
||||
use ironrdp::PduParsing;
|
||||
use ironrdp::pdu::dvc::gfx;
|
||||
use ironrdp::pdu::dvc::gfx::{Codec1Type, ServerPdu};
|
||||
use ironrdp::pdu::geometry::Rectangle;
|
||||
use ironrdp::pdu::PduParsing;
|
||||
use log::info;
|
||||
use thiserror::Error;
|
||||
|
|
@ -3,12 +3,12 @@ use std::fmt::Debug;
|
|||
use std::sync::Arc;
|
||||
|
||||
use glow::Context;
|
||||
use ironrdp::core::dvc::gfx::{
|
||||
use ironrdp::pdu::dvc::gfx::{
|
||||
Avc420BitmapStream, Avc444BitmapStream, Codec1Type, CreateSurfacePdu, Encoding, GraphicsPipelineError, PixelFormat,
|
||||
WireToSurface1Pdu,
|
||||
};
|
||||
use ironrdp::core::PduBufferParsing;
|
||||
use ironrdp::geometry::Rectangle;
|
||||
use ironrdp::pdu::geometry::Rectangle;
|
||||
use ironrdp::pdu::PduBufferParsing;
|
||||
use log::error;
|
||||
use openh264::decoder::{DecodedYUV, Decoder};
|
||||
|
||||
|
@ -58,7 +58,7 @@ impl SurfaceDecoders {
|
|||
.get_mut(&pdu.surface_id)
|
||||
.ok_or(RendererError::InvalidSurfaceId(pdu.surface_id))?;
|
||||
match pdu.codec_id {
|
||||
ironrdp::dvc::gfx::Codec1Type::Avc420 => {
|
||||
ironrdp::pdu::dvc::gfx::Codec1Type::Avc420 => {
|
||||
let packet = Avc420BitmapStream::from_buffer_consume(&mut pdu.bitmap_data.as_slice())
|
||||
.map_err(GraphicsPipelineError::from)?;
|
||||
let yuv = decoder.decode(packet.data)?.ok_or(RendererError::DecodeError)?;
|
||||
|
@ -77,7 +77,7 @@ impl SurfaceDecoders {
|
|||
dimensions,
|
||||
})
|
||||
}
|
||||
ironrdp::dvc::gfx::Codec1Type::Avc444 | ironrdp::dvc::gfx::Codec1Type::Avc444v2 => {
|
||||
ironrdp::pdu::dvc::gfx::Codec1Type::Avc444 | ironrdp::pdu::dvc::gfx::Codec1Type::Avc444v2 => {
|
||||
let packet = Avc444BitmapStream::from_buffer_consume(&mut pdu.bitmap_data.as_slice())
|
||||
.map_err(GraphicsPipelineError::from)?;
|
||||
let yuv = decoder.decode(packet.stream1.data)?.ok_or(RendererError::DecodeError)?;
|
||||
|
@ -304,7 +304,7 @@ impl Surfaces {
|
|||
|
||||
pub(crate) fn map_surface_to_scaled_output(
|
||||
&mut self,
|
||||
pdu: ironrdp::dvc::gfx::MapSurfaceToScaledOutputPdu,
|
||||
pdu: ironrdp::pdu::dvc::gfx::MapSurfaceToScaledOutputPdu,
|
||||
) -> Result<()> {
|
||||
let surface = self.get_surface(pdu.surface_id)?;
|
||||
surface.set_location(Rectangle {
|
|
@ -9,7 +9,7 @@ repository = "https://github.com/Devolutions/IronRDP"
|
|||
authors = ["Devolutions Inc. <infos@devolutions.net>"]
|
||||
|
||||
[dependencies]
|
||||
ironrdp-core = { path = "../ironrdp-core" }
|
||||
ironrdp-pdu = { path = "../pdu" }
|
||||
num-traits = "0.2.15"
|
||||
num-derive = "0.3.3"
|
||||
byteorder = "1.4.3"
|
|
@ -1,4 +1,4 @@
|
|||
use ironrdp_core::utils::SplitTo as _;
|
||||
use ironrdp_pdu::utils::SplitTo as _;
|
||||
|
||||
pub fn decode(buffer: &mut [i16], temp_buffer: &mut [i16]) {
|
||||
decode_block(&mut buffer[3840..], temp_buffer, 8);
|
|
@ -1,7 +1,7 @@
|
|||
use std::io;
|
||||
|
||||
use byteorder::WriteBytesExt;
|
||||
use ironrdp_core::geometry::Rectangle;
|
||||
use ironrdp_pdu::geometry::Rectangle;
|
||||
use num_derive::ToPrimitive;
|
||||
use num_traits::ToPrimitive as _;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
use ironrdp_core::codecs::rfx::Quant;
|
||||
use ironrdp_pdu::codecs::rfx::Quant;
|
||||
|
||||
const FIRST_LEVEL_SIZE: usize = 1024;
|
||||
const SECOND_LEVEL_SIZE: usize = 256;
|
|
@ -1,6 +1,6 @@
|
|||
use std::cmp::{max, min};
|
||||
|
||||
use ironrdp_core::geometry::Rectangle;
|
||||
use ironrdp_pdu::geometry::Rectangle;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct Region {
|
|
@ -4,7 +4,7 @@ use std::io;
|
|||
use bitvec::field::BitField as _;
|
||||
use bitvec::order::Msb0;
|
||||
use bitvec::slice::BitSlice;
|
||||
use ironrdp_core::codecs::rfx::EntropyAlgorithm;
|
||||
use ironrdp_pdu::codecs::rfx::EntropyAlgorithm;
|
||||
use thiserror::Error;
|
||||
|
||||
use crate::utils::Bits;
|
|
@ -1,7 +1,7 @@
|
|||
use std::io;
|
||||
|
||||
use ironrdp_core::geometry::Rectangle;
|
||||
use ironrdp_graphics::image_processing::*;
|
||||
use ironrdp_pdu::geometry::Rectangle;
|
||||
use proptest::prelude::*;
|
||||
|
||||
fn bgra_to_rgba(input: &[u8], mut output: &mut [u8]) -> io::Result<()> {
|
|
@ -1,5 +1,5 @@
|
|||
use ironrdp_core::codecs::rfx::EntropyAlgorithm;
|
||||
use ironrdp_graphics::rlgr::*;
|
||||
use ironrdp_pdu::codecs::rfx::EntropyAlgorithm;
|
||||
|
||||
#[test]
|
||||
fn decode_works_with_rlgr3() {
|
|
@ -9,8 +9,8 @@ repository = "https://github.com/Devolutions/IronRDP"
|
|||
authors = ["Devolutions Inc. <infos@devolutions.net>"]
|
||||
|
||||
[dependencies]
|
||||
ironrdp-pdu = { path = "../pdu" }
|
||||
bitvec = "1.0.1"
|
||||
ironrdp-core = { path = "../ironrdp-core" }
|
||||
smallvec = "1.10.0"
|
||||
|
||||
[dev-dependencies]
|
|
@ -1,9 +1,9 @@
|
|||
use bitvec::array::BitArray;
|
||||
use bitvec::BitArr;
|
||||
use ironrdp_core::input::fast_path::{FastPathInputEvent, KeyboardFlags};
|
||||
use ironrdp_core::input::mouse::PointerFlags;
|
||||
use ironrdp_core::input::mouse_x::PointerXFlags;
|
||||
use ironrdp_core::input::{MousePdu, MouseXPdu};
|
||||
use ironrdp_pdu::input::fast_path::{FastPathInputEvent, KeyboardFlags};
|
||||
use ironrdp_pdu::input::mouse::PointerFlags;
|
||||
use ironrdp_pdu::input::mouse_x::PointerXFlags;
|
||||
use ironrdp_pdu::input::{MousePdu, MouseXPdu};
|
||||
use smallvec::SmallVec;
|
||||
|
||||
// TODO: unicode keyboard event support
|
||||
|
@ -345,7 +345,7 @@ impl Database {
|
|||
|
||||
/// Returns the RDP input event to send in order to synchronize lock keys.
|
||||
pub fn synchronize_event(scroll_lock: bool, num_lock: bool, caps_lock: bool, kana_lock: bool) -> FastPathInputEvent {
|
||||
use ironrdp_core::input::fast_path::SynchronizeFlags;
|
||||
use ironrdp_pdu::input::fast_path::SynchronizeFlags;
|
||||
|
||||
let mut flags = SynchronizeFlags::empty();
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
use ironrdp_core::input::fast_path::{FastPathInputEvent, KeyboardFlags, SynchronizeFlags};
|
||||
use ironrdp_core::input::mouse::PointerFlags;
|
||||
use ironrdp_core::input::mouse_x::PointerXFlags;
|
||||
use ironrdp_core::input::{MousePdu, MouseXPdu};
|
||||
use ironrdp_input::*;
|
||||
use ironrdp_pdu::input::fast_path::{FastPathInputEvent, KeyboardFlags, SynchronizeFlags};
|
||||
use ironrdp_pdu::input::mouse::PointerFlags;
|
||||
use ironrdp_pdu::input::mouse_x::PointerXFlags;
|
||||
use ironrdp_pdu::input::{MousePdu, MouseXPdu};
|
||||
use rstest::rstest;
|
||||
|
||||
enum MouseFlags {
|
|
@ -1,6 +1,6 @@
|
|||
use anyhow::{bail, ensure};
|
||||
use ironrdp_core::input::fast_path::{FastPathInputEvent, KeyboardFlags};
|
||||
use ironrdp_input::*;
|
||||
use ironrdp_pdu::input::fast_path::{FastPathInputEvent, KeyboardFlags};
|
||||
use proptest::collection::vec;
|
||||
use proptest::prelude::*;
|
||||
|
9
crates/pdu-generators/Cargo.toml
Normal file
9
crates/pdu-generators/Cargo.toml
Normal file
|
@ -0,0 +1,9 @@
|
|||
[package]
|
||||
name = "ironrdp-pdu-generators"
|
||||
version = "0.0.0"
|
||||
edition = "2021"
|
||||
publish = false
|
||||
|
||||
[dependencies]
|
||||
ironrdp-pdu = { path = "../pdu" }
|
||||
proptest = "1.1.0"
|
14
crates/pdu-generators/src/lib.rs
Normal file
14
crates/pdu-generators/src/lib.rs
Normal file
|
@ -0,0 +1,14 @@
|
|||
pub fn add(left: usize, right: usize) -> usize {
|
||||
left + right
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn it_works() {
|
||||
let result = add(2, 2);
|
||||
assert_eq!(result, 4);
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
[package]
|
||||
name = "ironrdp-core"
|
||||
name = "ironrdp-pdu"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
readme = "README.md"
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue