22#ifndef FREERDP_TRANSPORT_IO_H
23#define FREERDP_TRANSPORT_IO_H
25#include <winpr/stream.h>
27#include <freerdp/api.h>
28#include <freerdp/types.h>
29#include <freerdp/settings.h>
47 typedef int (*pTransportLayerRead)(
void* userContext,
void* data,
int bytes);
60 typedef int (*pTransportLayerWrite)(
void* userContext,
const void* data,
int bytes);
61 typedef BOOL (*pTransportLayerFkt)(
void* userContext);
62 typedef BOOL (*pTransportLayerWait)(
void* userContext, BOOL waitWrite, DWORD timeout);
63 typedef HANDLE (*pTransportLayerGetEvent)(
void* userContext);
70 ALIGN64
void* userContext;
71 WINPR_ATTR_NODISCARD ALIGN64 pTransportLayerRead Read;
72 WINPR_ATTR_NODISCARD ALIGN64 pTransportLayerWrite Write;
73 ALIGN64 pTransportLayerFkt Close;
74 WINPR_ATTR_NODISCARD ALIGN64 pTransportLayerWait Wait;
75 WINPR_ATTR_NODISCARD ALIGN64 pTransportLayerGetEvent GetEvent;
76 UINT64 reserved[64 - 6];
79 typedef int (*pTCPConnect)(rdpContext* context, rdpSettings* settings,
const char* hostname,
80 int port, DWORD timeout);
81 typedef BOOL (*pTransportFkt)(rdpTransport* transport);
82 typedef BOOL (*pTransportAttach)(rdpTransport* transport,
int sockfd);
83 typedef int (*pTransportRWFkt)(rdpTransport* transport,
wStream* s);
84 typedef SSIZE_T (*pTransportRead)(rdpTransport* transport, BYTE* data,
size_t bytes);
85 typedef BOOL (*pTransportGetPublicKey)(rdpTransport* transport,
const BYTE** data,
96 typedef BOOL (*pTransportSetBlockingMode)(rdpTransport* transport, BOOL blocking);
98 const char* hostname,
int port,
109 typedef BOOL (*pTransportAttachLayer)(rdpTransport* transport,
rdpTransportLayer* layer);
113 WINPR_ATTR_NODISCARD pTCPConnect TCPConnect;
114 WINPR_ATTR_NODISCARD pTransportFkt TLSConnect;
115 WINPR_ATTR_NODISCARD pTransportFkt TLSAccept;
116 WINPR_ATTR_NODISCARD pTransportAttach TransportAttach;
117 WINPR_ATTR_NODISCARD pTransportFkt TransportDisconnect;
118 WINPR_ATTR_NODISCARD pTransportRWFkt ReadPdu;
119 WINPR_ATTR_NODISCARD pTransportRWFkt WritePdu;
120 WINPR_ATTR_NODISCARD pTransportRead ReadBytes;
121 WINPR_ATTR_NODISCARD pTransportGetPublicKey GetPublicKey;
130 FREERDP_API BOOL freerdp_io_callback_set_event(rdpContext* context, BOOL set);
133 FREERDP_API
const rdpTransportIo* freerdp_get_io_callbacks(rdpContext* context);
136 FREERDP_API BOOL freerdp_set_io_callbacks(rdpContext* context,
137 const rdpTransportIo* io_callbacks);
140 FREERDP_API BOOL freerdp_set_io_callback_context(rdpContext* context,
void* usercontext);
143 FREERDP_API
void* freerdp_get_io_callback_context(rdpContext* context);
152 FREERDP_API SSIZE_T transport_parse_pdu(rdpTransport* transport,
wStream* s, BOOL* incomplete);
155 FREERDP_API rdpContext* transport_get_context(rdpTransport* transport);
158 FREERDP_API rdpTransport* freerdp_get_transport(rdpContext* context);
178 WINPR_ATTR_MALLOC(transport_layer_free, 1)
180 FREERDP_API
rdpTransportLayer* transport_layer_new(rdpTransport* transport,
size_t contextSize);
WINPR_ATTR_NODISCARD pTransportConnectLayer ConnectLayer
WINPR_ATTR_NODISCARD pTransportSetBlockingMode SetBlockingMode
WINPR_ATTR_NODISCARD pTransportAttachLayer AttachLayer