Rabbit Remote Control 0.1.0-bate14
Loading...
Searching...
No Matches
ClipboardFreeRDP.h
1// Author: Kang Lin <kl222@126.com>
2
3#pragma once
4
5#include <QObject>
6#include <QVector>
7#include <QLoggingCategory>
8#include <QList>
9#include "ClipboardMimeData.h"
10#include "freerdp/client/cliprdr.h"
11#include "winpr/clipboard.h"
12
13class CBackendFreeRDP;
14class CClipboardFreeRDP : public QObject
15{
16 Q_OBJECT
17public:
18 explicit CClipboardFreeRDP(CBackendFreeRDP *parent = nullptr);
19 virtual ~CClipboardFreeRDP();
20
21 int Init(CliprdrClientContext *context, bool bEnable);
22 int UnInit(CliprdrClientContext* context, bool bEnable);
23
24 static UINT cb_cliprdr_server_capabilities(CliprdrClientContext* context,
25 const CLIPRDR_CAPABILITIES* capabilities);
26
27 static UINT cb_cliprdr_server_format_list(CliprdrClientContext* context,
28 const CLIPRDR_FORMAT_LIST* formatList);
29 static UINT
30 cb_cliprdr_server_format_list_response(CliprdrClientContext* context,
31 const CLIPRDR_FORMAT_LIST_RESPONSE* formatListResponse);
32
33 static UINT
34 cb_cliprdr_server_format_data_response(CliprdrClientContext* context,
35 const CLIPRDR_FORMAT_DATA_RESPONSE* formatDataResponse);
36 static UINT
37 cb_cliprdr_server_file_contents_request(CliprdrClientContext* context,
38 const CLIPRDR_FILE_CONTENTS_REQUEST* fileContentsRequest);
39 static UINT
40 cb_cliprdr_server_file_contents_response(CliprdrClientContext* context,
41 const CLIPRDR_FILE_CONTENTS_RESPONSE* fileContentsResponse);
42
44 static UINT cb_cliprdr_monitor_ready(CliprdrClientContext* context,
45 const CLIPRDR_MONITOR_READY* monitorReady);
46 static UINT SendClientFormatList(CliprdrClientContext *context);
47
49 static UINT
50 cb_cliprdr_server_format_data_request(CliprdrClientContext* context,
51 const CLIPRDR_FORMAT_DATA_REQUEST* formatDataRequest);
52 static UINT SendFormatDataResponse(CliprdrClientContext* context,
53 const BYTE* data, size_t size);
54public Q_SLOTS:
55 static UINT slotSendFormatDataRequest(CliprdrClientContext* context,
56 UINT32 formatId);
57
58public:
60 static UINT SendFileContentsFailure(CliprdrClientContext* context,
61 const CLIPRDR_FILE_CONTENTS_REQUEST* fileContentsRequest);
62 UINT ServerFileSizeRequest(
63 const CLIPRDR_FILE_CONTENTS_REQUEST* fileContentsRequest);
64 UINT ServerFileRangeRequest(
65 const CLIPRDR_FILE_CONTENTS_REQUEST* fileContentsRequest);
66 static UINT cb_clipboard_file_size_success(wClipboardDelegate* delegate,
67 const wClipboardFileSizeRequest* request,
68 UINT64 fileSize);
69 static UINT cb_clipboard_file_size_failure(
70 wClipboardDelegate* delegate,
71 const wClipboardFileSizeRequest* request,
72 UINT errorCode);
73 static UINT cb_clipboard_file_range_success(
74 wClipboardDelegate* delegate,
75 const wClipboardFileRangeRequest* request,
76 const BYTE* data, UINT32 size);
77 static UINT cb_clipboard_file_range_failure(
78 wClipboardDelegate* delegate,
79 const wClipboardFileRangeRequest* request,
80 UINT errorCode);
81 static BOOL cbIsFileNameComponentValid(LPCWSTR lpFileName);
82
83public Q_SLOTS:
84 virtual void slotClipBoardChanged();
85
86Q_SIGNALS:
93 void sigServerFormatData(const BYTE* pData, UINT32 nLen,
94 UINT32 formatId);
95 void sigServerFileContentsRespose(UINT32 streamId, QByteArray& data);
96
97private:
98 CBackendFreeRDP* m_pConnect;
99 CliprdrClientContext* m_pCliprdrClientContext;
100 friend CClipboardMimeData;
101 QList<qint32> m_lstClipboardMimeDataId;
102 wClipboard* m_pClipboard; // Clipboard interface provided by winpr
103 // Client request format data
104 UINT32 m_RequestFormatId;
105
106 // File
107 UINT32 m_FileCapabilityFlags;
108 bool m_bFileSupported; // Whether is server support file
109 BOOL m_bFileFormatsRegistered;
110};
void sigServerFormatData(const BYTE *pData, UINT32 nLen, UINT32 formatId)
Notify clipboard get data from server.