summaryrefslogtreecommitdiffstats
path: root/include/freerdp/server/cliprdr.h
blob: 77ebb008ff2c94d0b2ffe267711dee308897cd32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/**
 * FreeRDP: A Remote Desktop Protocol Implementation
 * Clipboard Virtual Channel Server Interface
 *
 * Copyright 2013 Marc-Andre Moreau <marcandre.moreau@gmail.com>
 * Copyright 2015 Thincast Technologies GmbH
 * Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef FREERDP_CHANNEL_CLIPRDR_SERVER_CLIPRDR_H
#define FREERDP_CHANNEL_CLIPRDR_SERVER_CLIPRDR_H

#include <freerdp/api.h>
#include <freerdp/types.h>
#include <freerdp/channels/wtsvc.h>

#include <freerdp/channels/cliprdr.h>
#include <freerdp/client/cliprdr.h>

#ifdef __cplusplus
extern "C"
{
#endif

	/**
	 * Server Interface
	 */

	typedef struct s_cliprdr_server_context CliprdrServerContext;

	typedef UINT (*psCliprdrOpen)(CliprdrServerContext* context);
	typedef UINT (*psCliprdrClose)(CliprdrServerContext* context);
	typedef UINT (*psCliprdrStart)(CliprdrServerContext* context);
	typedef UINT (*psCliprdrStop)(CliprdrServerContext* context);
	typedef HANDLE (*psCliprdrGetEventHandle)(CliprdrServerContext* context);
	typedef UINT (*psCliprdrCheckEventHandle)(CliprdrServerContext* context);

	typedef UINT (*psCliprdrServerCapabilities)(CliprdrServerContext* context,
	                                            const CLIPRDR_CAPABILITIES* capabilities);
	typedef UINT (*psCliprdrClientCapabilities)(CliprdrServerContext* context,
	                                            const CLIPRDR_CAPABILITIES* capabilities);
	typedef UINT (*psCliprdrMonitorReady)(CliprdrServerContext* context,
	                                      const CLIPRDR_MONITOR_READY* monitorReady);
	typedef UINT (*psCliprdrTempDirectory)(CliprdrServerContext* context,
	                                       const CLIPRDR_TEMP_DIRECTORY* tempDirectory);
	typedef UINT (*psCliprdrClientFormatList)(CliprdrServerContext* context,
	                                          const CLIPRDR_FORMAT_LIST* formatList);
	typedef UINT (*psCliprdrServerFormatList)(CliprdrServerContext* context,
	                                          const CLIPRDR_FORMAT_LIST* formatList);
	typedef UINT (*psCliprdrClientFormatListResponse)(
	    CliprdrServerContext* context, const CLIPRDR_FORMAT_LIST_RESPONSE* formatListResponse);
	typedef UINT (*psCliprdrServerFormatListResponse)(
	    CliprdrServerContext* context, const CLIPRDR_FORMAT_LIST_RESPONSE* formatListResponse);
	typedef UINT (*psCliprdrClientLockClipboardData)(
	    CliprdrServerContext* context, const CLIPRDR_LOCK_CLIPBOARD_DATA* lockClipboardData);
	typedef UINT (*psCliprdrServerLockClipboardData)(
	    CliprdrServerContext* context, const CLIPRDR_LOCK_CLIPBOARD_DATA* lockClipboardData);
	typedef UINT (*psCliprdrClientUnlockClipboardData)(
	    CliprdrServerContext* context, const CLIPRDR_UNLOCK_CLIPBOARD_DATA* unlockClipboardData);
	typedef UINT (*psCliprdrServerUnlockClipboardData)(
	    CliprdrServerContext* context, const CLIPRDR_UNLOCK_CLIPBOARD_DATA* unlockClipboardData);
	typedef UINT (*psCliprdrClientFormatDataRequest)(
	    CliprdrServerContext* context, const CLIPRDR_FORMAT_DATA_REQUEST* formatDataRequest);
	typedef UINT (*psCliprdrServerFormatDataRequest)(
	    CliprdrServerContext* context, const CLIPRDR_FORMAT_DATA_REQUEST* formatDataRequest);
	typedef UINT (*psCliprdrClientFormatDataResponse)(
	    CliprdrServerContext* context, const CLIPRDR_FORMAT_DATA_RESPONSE* formatDataResponse);
	typedef UINT (*psCliprdrServerFormatDataResponse)(
	    CliprdrServerContext* context, const CLIPRDR_FORMAT_DATA_RESPONSE* formatDataResponse);
	typedef UINT (*psCliprdrClientFileContentsRequest)(
	    CliprdrServerContext* context, const CLIPRDR_FILE_CONTENTS_REQUEST* fileContentsRequest);
	typedef UINT (*psCliprdrServerFileContentsRequest)(
	    CliprdrServerContext* context, const CLIPRDR_FILE_CONTENTS_REQUEST* fileContentsRequest);
	typedef UINT (*psCliprdrClientFileContentsResponse)(
	    CliprdrServerContext* context, const CLIPRDR_FILE_CONTENTS_RESPONSE* fileContentsResponse);
	typedef UINT (*psCliprdrServerFileContentsResponse)(
	    CliprdrServerContext* context, const CLIPRDR_FILE_CONTENTS_RESPONSE* fileContentsResponse);

	struct s_cliprdr_server_context
	{
		void* handle;
		void* custom;

		/* server clipboard capabilities - set by server - updated by the channel after client
		 * capability exchange */
		BOOL useLongFormatNames;
		BOOL streamFileClipEnabled;
		BOOL fileClipNoFilePaths;
		BOOL canLockClipData;

		psCliprdrOpen Open;
		psCliprdrClose Close;
		psCliprdrStart Start;
		psCliprdrStop Stop;
		psCliprdrGetEventHandle GetEventHandle;
		psCliprdrCheckEventHandle CheckEventHandle;

		psCliprdrServerCapabilities ServerCapabilities;
		psCliprdrClientCapabilities ClientCapabilities;
		psCliprdrMonitorReady MonitorReady;
		psCliprdrTempDirectory TempDirectory;
		psCliprdrClientFormatList ClientFormatList;
		psCliprdrServerFormatList ServerFormatList;
		psCliprdrClientFormatListResponse ClientFormatListResponse;
		psCliprdrServerFormatListResponse ServerFormatListResponse;
		psCliprdrClientLockClipboardData ClientLockClipboardData;
		psCliprdrServerLockClipboardData ServerLockClipboardData;
		psCliprdrClientUnlockClipboardData ClientUnlockClipboardData;
		psCliprdrServerUnlockClipboardData ServerUnlockClipboardData;
		psCliprdrClientFormatDataRequest ClientFormatDataRequest;
		psCliprdrServerFormatDataRequest ServerFormatDataRequest;
		psCliprdrClientFormatDataResponse ClientFormatDataResponse;
		psCliprdrServerFormatDataResponse ServerFormatDataResponse;
		psCliprdrClientFileContentsRequest ClientFileContentsRequest;
		psCliprdrServerFileContentsRequest ServerFileContentsRequest;
		psCliprdrClientFileContentsResponse ClientFileContentsResponse;
		psCliprdrServerFileContentsResponse ServerFileContentsResponse;

		rdpContext* rdpcontext;
		BOOL autoInitializationSequence;
		UINT32 lastRequestedFormatId;
		BOOL hasHugeFileSupport;
	};

	FREERDP_API void cliprdr_server_context_free(CliprdrServerContext* context);

	WINPR_ATTR_MALLOC(cliprdr_server_context_free, 1)
	FREERDP_API CliprdrServerContext* cliprdr_server_context_new(HANDLE vcm);

#ifdef __cplusplus
}
#endif

#endif /* FREERDP_CHANNEL_CLIPRDR_SERVER_CLIPRDR_H */