Refactor rdpdr client#12750
Merged
ibeckermayer merged 151 commits intowindows-desktop-directory-sharingfrom Jun 25, 2022
Merged
Refactor rdpdr client#12750ibeckermayer merged 151 commits intowindows-desktop-directory-sharingfrom
ibeckermayer merged 151 commits intowindows-desktop-directory-sharingfrom
Conversation
added 30 commits
March 31, 2022 15:35
…and cliprdr::Client's have the vchan::Client as a field.
…o trigger it by right-clicking, however it isn't working. One reason is that the vchannel PDU header isn't being added (see rdpdr::encode_message for how that's added to other messages). Noticing that made me notice that there is another cliprdr function for breaking outgoing messages into chunks that should be refactored into vchan to do that work + add the necessary vchan headers. This is a checkpoint commit while I go attend to that.
…lient parses the DeviceCreateRequest that's immediately sent back
…ugh in most cases, no need to neurotically add every bit of the documentation text to the code itself
zmb3
approved these changes
Jun 13, 2022
Collaborator
zmb3
left a comment
There was a problem hiding this comment.
Approving as all of my comments are stylistic, but I hope you'll address them 😄
| } | ||
| case tdp.SharedDirectoryCreateResponse: | ||
| if c.cfg.AllowDirectorySharing { | ||
| if err != nil { |
Collaborator
There was a problem hiding this comment.
What error is this checking?
| if res.fso.file_type == FileType::Directory { | ||
| if rdp_req.create_disposition == flags::CreateDisposition::FILE_CREATE { | ||
| // https://github.com/FreeRDP/FreeRDP/blob/511444a65e7aa2f537c5e531fa68157a50c1bd4d/channels/drive/client/drive_file.c#L221 | ||
| // ERROR_ALREADY_EXISTS --> STATUS_OBJECT_NAME_COLLISION: https://github.com/FreeRDP/FreeRDP/blob/511444a65e7aa2f537c5e531fa68157a50c1bd4d/channels/drive/client/drive_main.c#L102 |
Collaborator
There was a problem hiding this comment.
What to these x --> y comments mean?
Contributor
Author
There was a problem hiding this comment.
The line above them points to the corollary code in FreeRDP where x is set (as a FreeRDP-type error), and the line itself points to the code in RDP where x is converted to y, the actual RDP code that's sent by FreeRDP. Its basically documenting how I determined which NTSTATUS to send back. Probably unnecessary to leave in, deleted.
| // If the file already exists, replace it with the given file. If it does not, create the given file. | ||
| } else if rdp_req.create_disposition == flags::CreateDisposition::FILE_OPEN { | ||
| // If the file already exists, open it instead of creating a new file. If it does not, fail the request and do not create a new file. | ||
| if res.err_code == TdpErrCode::Nil { |
Collaborator
There was a problem hiding this comment.
I tend to prefer match over a large if/else chain
added 14 commits
June 14, 2022 17:42
ibeckermayer
pushed a commit
that referenced
this pull request
Jul 6, 2022
ibeckermayer
pushed a commit
that referenced
this pull request
Jul 13, 2022
ibeckermayer
pushed a commit
that referenced
this pull request
Aug 23, 2022
* `IRP_MJ_CREATE` (#12665) * `IRP_MJ_QUERY_INFORMATION` (#12717) * `IRP_MJ_CLOSE` (#12729) * Refactor rdpdr client (#12750) * Adding logic for `FILE_SUPERSEDE` (#12829) * Improve `process_irp_create` (#12830) * adds return statements that got lost in a merge * `IRP_MJ_DIRECTORY_CONTROL` (#12870) * `FileFullDirectoryInformation` (#12908) * Improve `ClientDriveQueryDirectoryResponse.encode()` (#12912) * `IRP_MJ_QUERY_VOLUME_INFORMATION` (#13071) * Fix Shared Directory Request handling when feature is disabled (#13439) * IRP_MJ_READ, IRP_MJ_WRITE, and IRP_MJ_SET_INFORMATION (#13995) * Adds constants for sizing calculations (#14051) Co-authored-by: Łukasz Kozłowski <lukasz.kozlowski@goteleport.com> Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>
ibeckermayer
pushed a commit
that referenced
this pull request
Aug 23, 2022
* `IRP_MJ_CREATE` (#12665) * `IRP_MJ_QUERY_INFORMATION` (#12717) * `IRP_MJ_CLOSE` (#12729) * Refactor rdpdr client (#12750) * Adding logic for `FILE_SUPERSEDE` (#12829) * Improve `process_irp_create` (#12830) * adds return statements that got lost in a merge * `IRP_MJ_DIRECTORY_CONTROL` (#12870) * `FileFullDirectoryInformation` (#12908) * Improve `ClientDriveQueryDirectoryResponse.encode()` (#12912) * `IRP_MJ_QUERY_VOLUME_INFORMATION` (#13071) * Fix Shared Directory Request handling when feature is disabled (#13439) * IRP_MJ_READ, IRP_MJ_WRITE, and IRP_MJ_SET_INFORMATION (#13995) * Adds constants for sizing calculations (#14051) Co-authored-by: Łukasz Kozłowski <lukasz.kozlowski@goteleport.com> Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>
ibeckermayer
pushed a commit
that referenced
this pull request
Sep 7, 2022
…ring) (#15770) * Windows Desktop Directory Sharing (#13630) * `IRP_MJ_CREATE` (#12665) * `IRP_MJ_QUERY_INFORMATION` (#12717) * `IRP_MJ_CLOSE` (#12729) * Refactor rdpdr client (#12750) * Adding logic for `FILE_SUPERSEDE` (#12829) * Improve `process_irp_create` (#12830) * adds return statements that got lost in a merge * `IRP_MJ_DIRECTORY_CONTROL` (#12870) * `FileFullDirectoryInformation` (#12908) * Improve `ClientDriveQueryDirectoryResponse.encode()` (#12912) * `IRP_MJ_QUERY_VOLUME_INFORMATION` (#13071) * Fix Shared Directory Request handling when feature is disabled (#13439) * IRP_MJ_READ, IRP_MJ_WRITE, and IRP_MJ_SET_INFORMATION (#13995) * Adds constants for sizing calculations (#14051) Co-authored-by: Łukasz Kozłowski <lukasz.kozlowski@goteleport.com> Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com> * `UnixPath` and `WindowsPath` (#14267) * `SharedDirectoryMoveRequest` and `SharedDirectoryMoveResponse` (#14959) * `SharedDirectoryCreateResponse` update (#15289) * Fix `process_irp_set_information` (#15364) * Sanitize Rust Debug Logs (#15743) * updates rdp-rs ref to include licensing changes * Updates rdp-rs ref and fixes Cargo Co-authored-by: Łukasz Kozłowski <lukasz.kozlowski@goteleport.com> Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This is primarily a refactor. Before, all the logic for handling each major function was in the
matchstatement inhandle_device_io_request, now the relevant bit of code looks likewith the bulk of the logic copied into the
process_irp_*'s. Also adds some more consistent debugging logging.