* Both web and desktop clients check for X.224 negotiation failure data
in RDCleanPath error responses before falling back to generic errors
* When X.224 Connection Confirm failure is found, convert to specific
NegotiationFailure error type instead of generic RDCleanPath error
* Enable clients to show meaningful error messages like "CredSSP
authentication required" instead of generic connection failures
* Maintain backward compatibility - existing proxies sending empty
x224_connection_pdu continue working as before
* Helper for proxies creating an RDCleanPath error with server response
When the system clipboard updates, we receive an `Updated` event. Then
we try to open it, but we can get `AccessDenied` error because the
clipboard may still be locked for another window (like _Notepad_). To
handle this, we have special logic that attempts to open the clipboard
in the event of such errors.
The problem is that nothing in the code actually sets the
`ClipboardAccessDenied` error to be able to run the retrieval logic.
This PR fixes it.
- Update tokio-tungstenite to latest
- Fix the dependencies
- Move the top-level documentation into a README.md that we re-include
in the source code
- Re-order the imports using the nightly formater
- Audit the unwraps and remove them
- Fix the UTF-16 string length computation
This lint warns on each `macro_use` attribute on an extern crate. Such a
way of importing macros from a crate is being phased out. Instead of it,
we should directly import the needed macro using `use` import.
This adds a working state to connect with the ironrdp-client CLI against
a server behind a microsoft remote desktop gateway.
During my testing this was robust enough to work with sessions for more
than 30 minutes.
CLI Flags and prompts are implemented and can be mixed, so the following
would prompt only for 2 passwords:
> ironrdp-client --gw-user username@domain --gw-endpoint rdp.gw.host:443
-u username@domain rdp.internal.host
[MS-TSGU]
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-tsgu/0007d661-a86d-4e8f-89f7-7f77f8824188
* This implements a MVP (in terms of recentness) state needed to connect
through microsoft rdp gateway.
* This only supports the HTTPS protocol with Websocket (and not the
legacy HTTP, HTTP-RPC or UDP protocols).
* This does not implement reconnection/reauthentication.
* This only supports basic auth.
Mostly looking for rough initial feedback (e.g. in terms of if there are
parts that dont align with projects architecture or other areas needing
major rework) as well as if the implemented scope would be considered
complete enough to land this in the first place.
Adds a general NegotiationFailure to IronErrorKind so that web embedders
can handle failures that occur during protocol negotiation, before
authentication.
Changes:
- RDP errors during the negotiation phase become
IronErrorKind.NegotiationError
- User-friendly RDP negotiation error messages to ironrdp-connector
- Update TypeScript definitions
### Changes
- Make dvc named pipe proxy cross-platform (Unix implementation via
`tokio::net::unix::UnixStream`)
- Removed unsafe code for Windows implementation, switched to
`tokio::net::windows::named_pipe`
### Testing
This feature can be used in the [same
way](https://github.com/Devolutions/IronRDP/pull/791) as on Windows,
however instead of GUI test app there is new basic
[CLI](https://github.com/Devolutions/now-proto/pull/31) app