-
Notifications
You must be signed in to change notification settings - Fork 127
feat(dvc): add DVC named pipe proxy support #791
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
396df4a
feat(dvc): add DVC named pipe proxy support
pacmancoder 0f7f0df
feat(dvc): pre-review fixes
pacmancoder 9bc2cdc
refactor(dvc-proxy): refactoring after review
pacmancoder cc434ac
refactor(dvc-proxy): fixed incorrect line endings in ironrdp-dvc crate
pacmancoder 42707c5
feat(NowAgent): refactoring after review
pacmancoder 96fbc41
refactor: simplified dvc named pipe proxy .toml
pacmancoder 2569c8a
Update crates/ironrdp-dvc-pipe-proxy/src/windows/semaphore.rs
CBenoit 3d932a6
fix: updated Crago.lock
pacmancoder File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# Changelog | ||
|
||
All notable changes to this project will be documented in this file. | ||
|
||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), | ||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
[package] | ||
name = "ironrdp-dvc-pipe-proxy" | ||
version = "0.1.0" | ||
readme = "README.md" | ||
description = "DVC named pipe proxy for IronRDP" | ||
edition.workspace = true | ||
license.workspace = true | ||
homepage.workspace = true | ||
repository.workspace = true | ||
authors.workspace = true | ||
keywords.workspace = true | ||
categories.workspace = true | ||
|
||
[lib] | ||
doctest = false | ||
test = false | ||
|
||
[dependencies] | ||
ironrdp-core.path = "../ironrdp-core" | ||
ironrdp-dvc.path = "../ironrdp-dvc" | ||
ironrdp-pdu.path = "../ironrdp-pdu" | ||
ironrdp-svc.path = "../ironrdp-svc" | ||
|
||
tracing = { version = "0.1", features = ["log"] } | ||
|
||
|
||
[target.'cfg(windows)'.dependencies] | ||
widestring = "1" | ||
windows = { version = "0.61", features = [ | ||
"Win32_Foundation", | ||
"Win32_Security", | ||
"Win32_System_Threading", | ||
"Win32_Storage_FileSystem", | ||
"Win32_System_Pipes", | ||
"Win32_System_IO", | ||
] } | ||
|
||
|
||
[lints] | ||
workspace = true |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../../LICENSE-APACHE |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../../LICENSE-MIT |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
# IronRDP DVC pipe proxy | ||
|
||
This crate provides a Device Virtual Channel (DVC) handler for IronRDP, enabling proxying of RDP DVC | ||
traffic over a named pipe. | ||
|
||
It was originally designed to simplify custom DVC integration within Devolutions Remote Desktop | ||
Manager (RDM). By implementing a thin pipe proxy for target RDP clients (such as IronRDP, FreeRDP, | ||
mstsc, etc.), the main client logic can be centralized and reused across all supported clients via a | ||
named pipe. | ||
|
||
This approach allows you to implement your DVC logic in one place, making it easier to support | ||
multiple RDP clients without duplicating code. | ||
|
||
Additionally, this crate can be used for other scenarios, such as testing your own custom DVC | ||
channel client, without needing to patch or rebuild IronRDP itself. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
#![doc = include_str!("../README.md")] | ||
#![doc(html_logo_url = "https://cdnweb.devolutions.net/images/projects/devolutions/logos/devolutions-icon-shadow.svg")] | ||
|
||
#[macro_use] | ||
extern crate tracing; | ||
|
||
#[cfg(target_os = "windows")] | ||
mod windows; | ||
|
||
mod platform; | ||
|
||
pub use platform::DvcNamedPipeProxy; |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
note: It’s typically not ideal to use unbounded channels because there is no backpressure. You may consider a bounded channel and using async
send
orblocking_send
instead. The sender will have to wait if the queue is full, creating (typically) necessary backpressure when the target system is overloaded.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am re-using the already existing
RdpInputEvent
channel, which istokio::mpsc::Unbounded*
, I agree that we need to change that in follow-up