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>
31#include <winpr/sspi.h>
32#include <winpr/ntlm.h>
33#include <winpr/winsock.h>
34#include <winpr/secapi.h>
41 typedef BOOL (*psPeerContextNew)(freerdp_peer* peer, rdpContext* context);
42 typedef void (*psPeerContextFree)(freerdp_peer* peer, rdpContext* context);
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,
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);
68 typedef BOOL (*psPeerRemoteCredentials)(freerdp_peer* peer,
KERB_TICKET_LOGON* logonCreds,
71 typedef BOOL (*psPeerCapabilities)(freerdp_peer* peer);
72 typedef BOOL (*psPeerPostConnect)(freerdp_peer* peer);
73 typedef BOOL (*psPeerActivate)(freerdp_peer* peer);
86 typedef BOOL (*psPeerLogon)(freerdp_peer* peer,
const SEC_WINNT_AUTH_IDENTITY* identity,
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);
94 typedef BOOL (*psPeerSendChannelData)(freerdp_peer* peer, UINT16 channelId,
const BYTE* data,
96 typedef BOOL (*psPeerSendChannelPacket)(freerdp_peer* client, UINT16 channelId,
97 size_t totalSize, UINT32 flags,
const BYTE* data,
99 typedef BOOL (*psPeerReceiveChannelData)(freerdp_peer* peer, UINT16 channelId,
const BYTE* data,
100 size_t size, UINT32 flags,
size_t totalSize);
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,
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);
116 LICENSE_CB_INTERNAL_ERROR,
118 LICENSE_CB_IN_PROGRESS,
121 } LicenseCallbackResult;
123 typedef LicenseCallbackResult (*psPeerLicenseCallback)(freerdp_peer* peer,
wStream* s);
127 ALIGN64 rdpContext* context;
130 ALIGN64
char hostname[50];
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;)
141 ALIGN64
void* ContextExtra;
142 ALIGN64
size_t ContextSize;
143 ALIGN64 psPeerContextNew ContextNew;
144 ALIGN64 psPeerContextFree ContextFree;
146 ALIGN64 psPeerInitialize Initialize;
147#if defined(WITH_FREERDP_DEPRECATED)
148 WINPR_DEPRECATED_VAR(
"Use freerdp_peer::GetEventHandle instead",
149 ALIGN64 psPeerGetFileDescriptor GetFileDescriptor;)
153 ALIGN64 psPeerGetEventHandle GetEventHandle;
154 ALIGN64 psPeerGetReceiveEventHandle GetReceiveEventHandle;
155 ALIGN64 psPeerCheckFileDescriptor CheckFileDescriptor;
156 ALIGN64 psPeerClose Close;
157 ALIGN64 psPeerDisconnect Disconnect;
159 ALIGN64 psPeerCapabilities Capabilities;
160 ALIGN64 psPeerPostConnect PostConnect;
161 ALIGN64 psPeerActivate Activate;
162 ALIGN64 psPeerLogon Logon;
164 ALIGN64 psPeerSendServerRedirection SendServerRedirection;
166 ALIGN64 psPeerSendChannelData SendChannelData;
167 ALIGN64 psPeerReceiveChannelData ReceiveChannelData;
169 ALIGN64 psPeerVirtualChannelOpen VirtualChannelOpen;
170 ALIGN64 psPeerVirtualChannelClose VirtualChannelClose;
171 ALIGN64 psPeerVirtualChannelRead VirtualChannelRead;
172 ALIGN64 psPeerVirtualChannelWrite VirtualChannelWrite;
173 ALIGN64 psPeerVirtualChannelGetData VirtualChannelGetData;
174 ALIGN64 psPeerVirtualChannelSetData VirtualChannelSetData;
177 ALIGN64 UINT32 ack_frame_id;
179 ALIGN64 BOOL connected;
180 ALIGN64 BOOL activated;
181 ALIGN64 BOOL authenticated;
182 ALIGN64 SEC_WINNT_AUTH_IDENTITY identity;
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;)
196 ALIGN64 psPeerLicenseCallback LicenseCallback;
198 ALIGN64 psPeerSendChannelPacket SendChannelPacket;
211 ALIGN64 psPeerReachedState ReachedState;
212 ALIGN64 psSspiNtlmHashCallback SspiNtlmHashCallback;
221 FREERDP_API
void freerdp_peer_context_free(freerdp_peer* client);
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);
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);
229 FREERDP_API
void freerdp_peer_free(freerdp_peer* client);
231 WINPR_ATTR_MALLOC(freerdp_peer_free, 1)
233 FREERDP_API freerdp_peer* freerdp_peer_new(
int sockfd);
235 FREERDP_API BOOL freerdp_peer_set_local_and_hostname(freerdp_peer* client,
236 const struct sockaddr_storage* peer_addr);
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 ...