FreeRDP/include/freerdp/client
Pascal Nowack d7d3055b5f X11/cliprdr: Rework server to client clipboard handling
The purpose of clipboard data locking is to make the other peer
retaining the current file list until a pending paste operation is done,
even though the clipboard selection changed.
As it may be difficult to determine, when a lock is needed, imitate the
same behaviour as mstsc:
When the server side supports clipboard data locking, always attempt to
lock the file list on the server regardless of what is advertised in a
FormatList PDU.
The Lock Clipboard Data PDU can even be already sent, before the
Format List Response PDU is sent.
This is also what mstsc, does: First, lock the new (potential) file
list, then unlock the file list, when the pending paste operation is
done.
So, rework the current clipboard implementation in that direction.

Since the implementation for timeouts for old file lists is a bit hard,
for now always force unlock pending locks, when the selection changes.
However, timeouts for old file lists can still be added in the future.

The reworked clipboard handling is done with the help of three hash
tables:

1. The inode table: This hash table manages all inodes for each file.
   The keys in this table are the inodes themselves, while the values
   the files and directories and their attributes (file size, last write
   time, etc.).
2. The clipdata table: This table manages the locks for each file list.
   The keys in this table represent the clip data id and the values the
   clip data entries, which have a reference to the clip data dir, a
   directory containing the whole selection, and some helper attributes,
   like the clip data id itself.
3. The request table: Every file size or file range request is managed
   here. When a FileContentsRequest is made, its stream id with the
   respective details are added to this table. When a response is
   received, these details can then be easily looked up here.
2023-07-20 11:36:11 +02:00
..
utils Moved headers to appropriate places 2022-02-24 08:52:25 +01:00
ainput.h [includes] improved c++ guards 2023-03-15 08:22:23 +01:00
audin.h [includes] untangled circular includes 2023-03-15 08:22:23 +01:00
channels.h [includes] untangled circular includes 2023-03-15 08:22:23 +01:00
client_cliprdr_file.h X11/cliprdr: Rework server to client clipboard handling 2023-07-20 11:36:11 +02:00
cliprdr.h [includes] untangled circular includes 2023-03-15 08:22:23 +01:00
cmdline.h [includes] untangled circular includes 2023-03-15 08:22:23 +01:00
disp.h [includes] improved c++ guards 2023-03-15 08:22:23 +01:00
drdynvc.h [includes] improved c++ guards 2023-03-15 08:22:23 +01:00
encomsp.h [includes] improved c++ guards 2023-03-15 08:22:23 +01:00
file.h [includes] untangled circular includes 2023-03-15 08:22:23 +01:00
geometry.h [includes] improved c++ guards 2023-03-15 08:22:23 +01:00
printer.h [includes] improved c++ guards 2023-03-15 08:22:23 +01:00
rail.h Added new rail orders textscaleinfo and caretblinkrate 2022-06-29 11:41:45 +02:00
rdpei.h [channels,rdpei] add variadic argument calls 2023-06-26 11:22:32 +02:00
rdpgfx.h [includes] untangled circular includes 2023-03-15 08:22:23 +01:00
rdpsnd.h [includes] untangled circular includes 2023-03-15 08:22:23 +01:00
remdesk.h [includes] improved c++ guards 2023-03-15 08:22:23 +01:00
sshagent.h [includes] untangled circular includes 2023-03-15 08:22:23 +01:00
tsmf.h [includes] improved c++ guards 2023-03-15 08:22:23 +01:00
video.h Unify struct definitions (#7633) 2022-02-14 14:59:22 +01:00