[gnome-remote-desktop] rdp: Allow submitting clipDataIds for FileContentsRequests



commit 45afc12feb7a59db83fdacabee53053a23a7e2d2
Author: Pascal Nowack <Pascal Nowack gmx de>
Date:   Sat Feb 27 14:01:46 2021 +0100

    rdp: Allow submitting clipDataIds for FileContentsRequests
    
    This is a requirement for the locking implementation for client-to-
    server file transfer.

 src/grd-clipboard-rdp.c      | 13 ++++++++++---
 src/grd-clipboard-rdp.h      |  8 ++++++--
 src/grd-rdp-fuse-clipboard.c |  6 ++++--
 3 files changed, 20 insertions(+), 7 deletions(-)
---
diff --git a/src/grd-clipboard-rdp.c b/src/grd-clipboard-rdp.c
index 2c62ad8..49df9e0 100644
--- a/src/grd-clipboard-rdp.c
+++ b/src/grd-clipboard-rdp.c
@@ -473,7 +473,9 @@ get_remote_format_data (GrdClipboardRdp *clipboard_rdp,
 void
 grd_clipboard_rdp_request_remote_file_size_async (GrdClipboardRdp *clipboard_rdp,
                                                   uint32_t         stream_id,
-                                                  uint32_t         list_index)
+                                                  uint32_t         list_index,
+                                                  gboolean         has_clip_data_id,
+                                                  uint32_t         clip_data_id)
 {
   CliprdrServerContext *cliprdr_context = clipboard_rdp->cliprdr_context;
   CLIPRDR_FILE_CONTENTS_REQUEST file_contents_request = {0};
@@ -483,6 +485,8 @@ grd_clipboard_rdp_request_remote_file_size_async (GrdClipboardRdp *clipboard_rdp
   file_contents_request.listIndex = list_index;
   file_contents_request.dwFlags = FILECONTENTS_SIZE;
   file_contents_request.cbRequested = 0x8;
+  file_contents_request.haveClipDataId = has_clip_data_id;
+  file_contents_request.clipDataId = clip_data_id;
 
   cliprdr_context->ServerFileContentsRequest (cliprdr_context,
                                               &file_contents_request);
@@ -493,7 +497,9 @@ grd_clipboard_rdp_request_remote_file_range_async (GrdClipboardRdp *clipboard_rd
                                                    uint32_t         stream_id,
                                                    uint32_t         list_index,
                                                    uint64_t         offset,
-                                                   uint32_t         requested_size)
+                                                   uint32_t         requested_size,
+                                                   gboolean         has_clip_data_id,
+                                                   uint32_t         clip_data_id)
 {
   CliprdrServerContext *cliprdr_context = clipboard_rdp->cliprdr_context;
   CLIPRDR_FILE_CONTENTS_REQUEST file_contents_request = {0};
@@ -505,7 +511,8 @@ grd_clipboard_rdp_request_remote_file_range_async (GrdClipboardRdp *clipboard_rd
   file_contents_request.nPositionLow = offset & 0xFFFFFFFF;
   file_contents_request.nPositionHigh = offset >> 32 & 0xFFFFFFFF;
   file_contents_request.cbRequested = requested_size;
-  file_contents_request.haveClipDataId = FALSE;
+  file_contents_request.haveClipDataId = has_clip_data_id;
+  file_contents_request.clipDataId = clip_data_id;
 
   cliprdr_context->ServerFileContentsRequest (cliprdr_context,
                                               &file_contents_request);
diff --git a/src/grd-clipboard-rdp.h b/src/grd-clipboard-rdp.h
index a832c56..8db6c8b 100644
--- a/src/grd-clipboard-rdp.h
+++ b/src/grd-clipboard-rdp.h
@@ -36,12 +36,16 @@ GrdClipboardRdp *grd_clipboard_rdp_new (GrdSessionRdp *session_rdp,
 
 void grd_clipboard_rdp_request_remote_file_size_async (GrdClipboardRdp *clipboard_rdp,
                                                        uint32_t         stream_id,
-                                                       uint32_t         list_index);
+                                                       uint32_t         list_index,
+                                                       gboolean         has_clip_data_id,
+                                                       uint32_t         clip_data_id);
 
 void grd_clipboard_rdp_request_remote_file_range_async (GrdClipboardRdp *clipboard_rdp,
                                                         uint32_t         stream_id,
                                                         uint32_t         list_index,
                                                         uint64_t         offset,
-                                                        uint32_t         requested_size);
+                                                        uint32_t         requested_size,
+                                                        gboolean         has_clip_data_id,
+                                                        uint32_t         clip_data_id);
 
 #endif /* GRD_CLIPBOARD_RDP_H */
diff --git a/src/grd-rdp-fuse-clipboard.c b/src/grd-rdp-fuse-clipboard.c
index 9b0c1a2..9449704 100644
--- a/src/grd-rdp-fuse-clipboard.c
+++ b/src/grd-rdp-fuse-clipboard.c
@@ -489,7 +489,8 @@ request_file_size_async (GrdRdpFuseClipboard       *rdp_fuse_clipboard,
            " %u", fuse_file->filename, rdp_fuse_request->stream_id);
   grd_clipboard_rdp_request_remote_file_size_async (clipboard_rdp,
                                                     rdp_fuse_request->stream_id,
-                                                    fuse_file->list_idx);
+                                                    fuse_file->list_idx,
+                                                    FALSE, 0);
 }
 
 static void
@@ -517,7 +518,8 @@ request_file_range_async (GrdRdpFuseClipboard *rdp_fuse_clipboard,
   grd_clipboard_rdp_request_remote_file_range_async (clipboard_rdp,
                                                      rdp_fuse_request->stream_id,
                                                      fuse_file->list_idx,
-                                                     offset, requested_size);
+                                                     offset, requested_size,
+                                                     FALSE, 0);
 }
 
 static FuseFile *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]