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 typedef BOOL (*psPeerLogon)(freerdp_peer* peer, const SEC_WINNT_AUTH_IDENTITY* identity,
75 BOOL automatic);
76 typedef BOOL (*psPeerSendServerRedirection)(freerdp_peer* peer,
77 const rdpRedirection* redirection);
78 typedef BOOL (*psPeerAdjustMonitorsLayout)(freerdp_peer* peer);
79 typedef BOOL (*psPeerClientCapabilities)(freerdp_peer* peer);
80
81 typedef BOOL (*psPeerSendChannelData)(freerdp_peer* peer, UINT16 channelId, const BYTE* data,
82 size_t size);
83 typedef BOOL (*psPeerSendChannelPacket)(freerdp_peer* client, UINT16 channelId,
84 size_t totalSize, UINT32 flags, const BYTE* data,
85 size_t chunkSize);
86 typedef BOOL (*psPeerReceiveChannelData)(freerdp_peer* peer, UINT16 channelId, const BYTE* data,
87 size_t size, UINT32 flags, size_t totalSize);
88
89 typedef HANDLE (*psPeerVirtualChannelOpen)(freerdp_peer* peer, const char* name, UINT32 flags);
90 typedef BOOL (*psPeerVirtualChannelClose)(freerdp_peer* peer, HANDLE hChannel);
91 typedef int (*psPeerVirtualChannelRead)(freerdp_peer* peer, HANDLE hChannel, BYTE* buffer,
92 UINT32 length);
93 typedef int (*psPeerVirtualChannelWrite)(freerdp_peer* peer, HANDLE hChannel,
94 const BYTE* buffer, UINT32 length);
95 typedef void* (*psPeerVirtualChannelGetData)(freerdp_peer* peer, HANDLE hChannel);
96 typedef int (*psPeerVirtualChannelSetData)(freerdp_peer* peer, HANDLE hChannel, void* data);
97 typedef BOOL (*psPeerSetState)(freerdp_peer* peer, CONNECTION_STATE state);
98 typedef BOOL (*psPeerReachedState)(freerdp_peer* peer, CONNECTION_STATE state);
99
101 typedef enum
102 {
103 LICENSE_CB_INTERNAL_ERROR,
104 LICENSE_CB_ABORT,
105 LICENSE_CB_IN_PROGRESS,
107 LICENSE_CB_COMPLETED
108 } LicenseCallbackResult;
109
110 typedef LicenseCallbackResult (*psPeerLicenseCallback)(freerdp_peer* peer, wStream* s);
111
113 {
114 ALIGN64 rdpContext* context;
115
116 ALIGN64 int sockfd;
117 ALIGN64 char hostname[50];
118
119#if defined(WITH_FREERDP_DEPRECATED)
120 WINPR_DEPRECATED_VAR("Use rdpContext::update instead", ALIGN64 rdpUpdate* update;)
121 WINPR_DEPRECATED_VAR("Use rdpContext::settings instead", ALIGN64 rdpSettings* settings;)
122 WINPR_DEPRECATED_VAR("Use rdpContext::autodetect instead",
123 ALIGN64 rdpAutoDetect* autodetect;)
124#else
125 UINT64 reservedX[3];
126#endif
127
128 ALIGN64 void* ContextExtra;
129 ALIGN64 size_t ContextSize;
130 ALIGN64 psPeerContextNew ContextNew;
131 ALIGN64 psPeerContextFree ContextFree;
132
133 ALIGN64 psPeerInitialize Initialize;
134#if defined(WITH_FREERDP_DEPRECATED)
135 WINPR_DEPRECATED_VAR("Use freerdp_peer::GetEventHandle instead",
136 ALIGN64 psPeerGetFileDescriptor GetFileDescriptor;)
137#else
138 UINT64 reserved;
139#endif
140 ALIGN64 psPeerGetEventHandle GetEventHandle;
141 ALIGN64 psPeerGetReceiveEventHandle GetReceiveEventHandle;
142 ALIGN64 psPeerCheckFileDescriptor CheckFileDescriptor;
143 ALIGN64 psPeerClose Close;
144 ALIGN64 psPeerDisconnect Disconnect;
145
146 ALIGN64 psPeerCapabilities Capabilities;
147 ALIGN64 psPeerPostConnect PostConnect;
148 ALIGN64 psPeerActivate Activate;
149 ALIGN64 psPeerLogon Logon;
150
151 ALIGN64 psPeerSendServerRedirection SendServerRedirection;
152
153 ALIGN64 psPeerSendChannelData SendChannelData;
154 ALIGN64 psPeerReceiveChannelData ReceiveChannelData;
155
156 ALIGN64 psPeerVirtualChannelOpen VirtualChannelOpen;
157 ALIGN64 psPeerVirtualChannelClose VirtualChannelClose;
158 ALIGN64 psPeerVirtualChannelRead VirtualChannelRead;
159 ALIGN64 psPeerVirtualChannelWrite VirtualChannelWrite;
160 ALIGN64 psPeerVirtualChannelGetData VirtualChannelGetData;
161 ALIGN64 psPeerVirtualChannelSetData VirtualChannelSetData;
162
163 ALIGN64 int pId;
164 ALIGN64 UINT32 ack_frame_id;
165 ALIGN64 BOOL local;
166 ALIGN64 BOOL connected;
167 ALIGN64 BOOL activated;
168 ALIGN64 BOOL authenticated;
169 ALIGN64 SEC_WINNT_AUTH_IDENTITY identity;
170
171 ALIGN64 psPeerIsWriteBlocked IsWriteBlocked;
172 ALIGN64 psPeerDrainOutputBuffer DrainOutputBuffer;
173 ALIGN64 psPeerHasMoreToRead HasMoreToRead;
174 ALIGN64 psPeerGetEventHandles GetEventHandles;
175 ALIGN64 psPeerAdjustMonitorsLayout AdjustMonitorsLayout;
176 ALIGN64 psPeerClientCapabilities ClientCapabilities;
177#if defined(WITH_FREERDP_DEPRECATED)
178 WINPR_DEPRECATED_VAR("Use freerdp_peer::SspiNtlmHashCallback instead",
179 ALIGN64 psPeerComputeNtlmHash ComputeNtlmHash;)
180#else
181 UINT64 reserved2;
182#endif
183 ALIGN64 psPeerLicenseCallback LicenseCallback;
184
185 ALIGN64 psPeerSendChannelPacket SendChannelPacket;
186
197 ALIGN64 psPeerSetState SetState;
198 ALIGN64 psPeerReachedState ReachedState;
199 ALIGN64 psSspiNtlmHashCallback SspiNtlmHashCallback;
205 ALIGN64 psPeerRemoteCredentials RemoteCredentials;
206 };
207
208 FREERDP_API void freerdp_peer_context_free(freerdp_peer* client);
209
210 FREERDP_API BOOL freerdp_peer_context_new(freerdp_peer* client);
211 FREERDP_API BOOL freerdp_peer_context_new_ex(freerdp_peer* client, const rdpSettings* settings);
212
213 FREERDP_API const char* freerdp_peer_os_major_type_string(freerdp_peer* client);
214 FREERDP_API const char* freerdp_peer_os_minor_type_string(freerdp_peer* client);
215
216 FREERDP_API void freerdp_peer_free(freerdp_peer* client);
217
218 WINPR_ATTR_MALLOC(freerdp_peer_free, 1)
219 FREERDP_API freerdp_peer* freerdp_peer_new(int sockfd);
220
221 FREERDP_API BOOL freerdp_peer_set_local_and_hostname(freerdp_peer* client,
222 const struct sockaddr_storage* peer_addr);
223
224#ifdef __cplusplus
225}
226#endif
227
228#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 ...