FreeRDP
Loading...
Searching...
No Matches
include/freerdp/peer.h
1
20#ifndef FREERDP_PEER_H
21#define FREERDP_PEER_H
22
23#include <freerdp/api.h>
24#include <freerdp/types.h>
25#include <freerdp/settings.h>
26#include <freerdp/input.h>
27#include <freerdp/update.h>
28#include <freerdp/autodetect.h>
29#include <freerdp/redirection.h>
30
31#include <winpr/sspi.h>
32#include <winpr/ntlm.h>
33#include <winpr/winsock.h>
34#include <winpr/secapi.h>
35
36#ifdef __cplusplus
37extern "C"
38{
39#endif
40
41 typedef BOOL (*psPeerContextNew)(freerdp_peer* peer, rdpContext* context);
42 typedef void (*psPeerContextFree)(freerdp_peer* peer, rdpContext* context);
43
44 typedef BOOL (*psPeerInitialize)(freerdp_peer* peer);
45#if defined(WITH_FREERDP_DEPRECATED)
46 WINPR_DEPRECATED_VAR("Use psPeerGetEventHandle instead",
47 typedef BOOL (*psPeerGetFileDescriptor)(freerdp_peer* peer, void** rfds,
48 int* rcount);)
49#endif
50 typedef HANDLE (*psPeerGetEventHandle)(freerdp_peer* peer);
51 typedef DWORD (*psPeerGetEventHandles)(freerdp_peer* peer, HANDLE* events, DWORD count);
52 typedef HANDLE (*psPeerGetReceiveEventHandle)(freerdp_peer* peer);
53 typedef BOOL (*psPeerCheckFileDescriptor)(freerdp_peer* peer);
54 typedef BOOL (*psPeerIsWriteBlocked)(freerdp_peer* peer);
55 typedef int (*psPeerDrainOutputBuffer)(freerdp_peer* peer);
56 typedef BOOL (*psPeerHasMoreToRead)(freerdp_peer* peer);
57 typedef BOOL (*psPeerClose)(freerdp_peer* peer);
58 typedef void (*psPeerDisconnect)(freerdp_peer* peer);
59
68 typedef BOOL (*psPeerRemoteCredentials)(freerdp_peer* peer, KERB_TICKET_LOGON* logonCreds,
70
71 typedef BOOL (*psPeerCapabilities)(freerdp_peer* peer);
72 typedef BOOL (*psPeerPostConnect)(freerdp_peer* peer);
73 typedef BOOL (*psPeerActivate)(freerdp_peer* peer);
74
86 typedef BOOL (*psPeerLogon)(freerdp_peer* peer, const SEC_WINNT_AUTH_IDENTITY* identity,
87 BOOL automatic);
88
89 typedef BOOL (*psPeerSendServerRedirection)(freerdp_peer* peer,
90 const rdpRedirection* redirection);
91 typedef BOOL (*psPeerAdjustMonitorsLayout)(freerdp_peer* peer);
92 typedef BOOL (*psPeerClientCapabilities)(freerdp_peer* peer);
93
94 typedef BOOL (*psPeerSendChannelData)(freerdp_peer* peer, UINT16 channelId, const BYTE* data,
95 size_t size);
96 typedef BOOL (*psPeerSendChannelPacket)(freerdp_peer* client, UINT16 channelId,
97 size_t totalSize, UINT32 flags, const BYTE* data,
98 size_t chunkSize);
99 typedef BOOL (*psPeerReceiveChannelData)(freerdp_peer* peer, UINT16 channelId, const BYTE* data,
100 size_t size, UINT32 flags, size_t totalSize);
101
102 typedef HANDLE (*psPeerVirtualChannelOpen)(freerdp_peer* peer, const char* name, UINT32 flags);
103 typedef BOOL (*psPeerVirtualChannelClose)(freerdp_peer* peer, HANDLE hChannel);
104 typedef int (*psPeerVirtualChannelRead)(freerdp_peer* peer, HANDLE hChannel, BYTE* buffer,
105 UINT32 length);
106 typedef int (*psPeerVirtualChannelWrite)(freerdp_peer* peer, HANDLE hChannel,
107 const BYTE* buffer, UINT32 length);
108 typedef void* (*psPeerVirtualChannelGetData)(freerdp_peer* peer, HANDLE hChannel);
109 typedef int (*psPeerVirtualChannelSetData)(freerdp_peer* peer, HANDLE hChannel, void* data);
110 typedef BOOL (*psPeerSetState)(freerdp_peer* peer, CONNECTION_STATE state);
111 typedef BOOL (*psPeerReachedState)(freerdp_peer* peer, CONNECTION_STATE state);
112
114 typedef enum
115 {
116 LICENSE_CB_INTERNAL_ERROR,
117 LICENSE_CB_ABORT,
118 LICENSE_CB_IN_PROGRESS,
120 LICENSE_CB_COMPLETED
121 } LicenseCallbackResult;
122
123 typedef LicenseCallbackResult (*psPeerLicenseCallback)(freerdp_peer* peer, wStream* s);
124
126 {
127 ALIGN64 rdpContext* context;
128
129 ALIGN64 int sockfd;
130 ALIGN64 char hostname[50];
131
132#if defined(WITH_FREERDP_DEPRECATED)
133 WINPR_DEPRECATED_VAR("Use rdpContext::update instead", ALIGN64 rdpUpdate* update;)
134 WINPR_DEPRECATED_VAR("Use rdpContext::settings instead", ALIGN64 rdpSettings* settings;)
135 WINPR_DEPRECATED_VAR("Use rdpContext::autodetect instead",
136 ALIGN64 rdpAutoDetect* autodetect;)
137#else
138 UINT64 reservedX[3];
139#endif
140
141 ALIGN64 void* ContextExtra;
142 ALIGN64 size_t ContextSize;
143 ALIGN64 psPeerContextNew ContextNew;
144 ALIGN64 psPeerContextFree ContextFree;
145
146 ALIGN64 psPeerInitialize Initialize;
147#if defined(WITH_FREERDP_DEPRECATED)
148 WINPR_DEPRECATED_VAR("Use freerdp_peer::GetEventHandle instead",
149 ALIGN64 psPeerGetFileDescriptor GetFileDescriptor;)
150#else
151 UINT64 reserved;
152#endif
153 ALIGN64 psPeerGetEventHandle GetEventHandle;
154 ALIGN64 psPeerGetReceiveEventHandle GetReceiveEventHandle;
155 ALIGN64 psPeerCheckFileDescriptor CheckFileDescriptor;
156 ALIGN64 psPeerClose Close;
157 ALIGN64 psPeerDisconnect Disconnect;
158
159 ALIGN64 psPeerCapabilities Capabilities;
160 ALIGN64 psPeerPostConnect PostConnect;
161 ALIGN64 psPeerActivate Activate;
162 ALIGN64 psPeerLogon Logon;
163
164 ALIGN64 psPeerSendServerRedirection SendServerRedirection;
165
166 ALIGN64 psPeerSendChannelData SendChannelData;
167 ALIGN64 psPeerReceiveChannelData ReceiveChannelData;
168
169 ALIGN64 psPeerVirtualChannelOpen VirtualChannelOpen;
170 ALIGN64 psPeerVirtualChannelClose VirtualChannelClose;
171 ALIGN64 psPeerVirtualChannelRead VirtualChannelRead;
172 ALIGN64 psPeerVirtualChannelWrite VirtualChannelWrite;
173 ALIGN64 psPeerVirtualChannelGetData VirtualChannelGetData;
174 ALIGN64 psPeerVirtualChannelSetData VirtualChannelSetData;
175
176 ALIGN64 int pId;
177 ALIGN64 UINT32 ack_frame_id;
178 ALIGN64 BOOL local;
179 ALIGN64 BOOL connected;
180 ALIGN64 BOOL activated;
181 ALIGN64 BOOL authenticated;
182 ALIGN64 SEC_WINNT_AUTH_IDENTITY identity;
183
184 ALIGN64 psPeerIsWriteBlocked IsWriteBlocked;
185 ALIGN64 psPeerDrainOutputBuffer DrainOutputBuffer;
186 ALIGN64 psPeerHasMoreToRead HasMoreToRead;
187 ALIGN64 psPeerGetEventHandles GetEventHandles;
188 ALIGN64 psPeerAdjustMonitorsLayout AdjustMonitorsLayout;
189 ALIGN64 psPeerClientCapabilities ClientCapabilities;
190#if defined(WITH_FREERDP_DEPRECATED)
191 WINPR_DEPRECATED_VAR("Use freerdp_peer::SspiNtlmHashCallback instead",
192 ALIGN64 psPeerComputeNtlmHash ComputeNtlmHash;)
193#else
194 UINT64 reserved2;
195#endif
196 ALIGN64 psPeerLicenseCallback LicenseCallback;
197
198 ALIGN64 psPeerSendChannelPacket SendChannelPacket;
199
210 ALIGN64 psPeerSetState SetState;
211 ALIGN64 psPeerReachedState ReachedState;
212 ALIGN64 psSspiNtlmHashCallback SspiNtlmHashCallback;
218 ALIGN64 psPeerRemoteCredentials RemoteCredentials;
219 };
220
221 FREERDP_API void freerdp_peer_context_free(freerdp_peer* client);
222
223 FREERDP_API BOOL freerdp_peer_context_new(freerdp_peer* client);
224 FREERDP_API BOOL freerdp_peer_context_new_ex(freerdp_peer* client, const rdpSettings* settings);
225
226 FREERDP_API const char* freerdp_peer_os_major_type_string(freerdp_peer* client);
227 FREERDP_API const char* freerdp_peer_os_minor_type_string(freerdp_peer* client);
228
229 FREERDP_API void freerdp_peer_free(freerdp_peer* client);
230
231 WINPR_ATTR_MALLOC(freerdp_peer_free, 1)
232 WINPR_ATTR_NODISCARD
233 FREERDP_API freerdp_peer* freerdp_peer_new(int sockfd);
234
235 FREERDP_API BOOL freerdp_peer_set_local_and_hostname(freerdp_peer* client,
236 const struct sockaddr_storage* peer_addr);
237
238#ifdef __cplusplus
239}
240#endif
241
242#endif /* FREERDP_PEER_H */
ALIGN64 psPeerSetState SetState
SetState Function pointer allowing to manually set the state of the internal state machine.
ALIGN64 psPeerRemoteCredentials RemoteCredentials
RemoteCredentials Function pointer that will be called when remote credentials guard are used by the ...