FreeRDP
Loading...
Searching...
No Matches
transport_io.h
1
22#ifndef FREERDP_TRANSPORT_IO_H
23#define FREERDP_TRANSPORT_IO_H
24
25#include <winpr/stream.h>
26
27#include <freerdp/api.h>
28#include <freerdp/types.h>
29#include <freerdp/settings.h>
30
31#ifdef __cplusplus
32extern "C"
33{
34#endif
35
47 typedef int (*pTransportLayerRead)(void* userContext, void* data, int bytes);
48
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);
64
68 typedef struct
69 {
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]; /* Reserve some space for ABI compatibility */
78
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,
86 DWORD* length);
96 typedef BOOL (*pTransportSetBlockingMode)(rdpTransport* transport, BOOL blocking);
97 typedef rdpTransportLayer* (*pTransportConnectLayer)(rdpTransport* transport,
98 const char* hostname, int port,
99 DWORD timeout);
100
109 typedef BOOL (*pTransportAttachLayer)(rdpTransport* transport, rdpTransportLayer* layer);
110
112 {
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; /* Reads a whole PDU from the transport */
119 WINPR_ATTR_NODISCARD pTransportRWFkt WritePdu; /* Writes a whole PDU to the transport */
120 WINPR_ATTR_NODISCARD pTransportRead ReadBytes; /* Reads up to a requested amount of bytes */
121 WINPR_ATTR_NODISCARD pTransportGetPublicKey GetPublicKey;
122 WINPR_ATTR_NODISCARD pTransportSetBlockingMode SetBlockingMode;
123 WINPR_ATTR_NODISCARD pTransportConnectLayer ConnectLayer;
124 WINPR_ATTR_NODISCARD pTransportAttachLayer AttachLayer;
125 UINT64 reserved[64 - 12]; /* Reserve some space for ABI compatibility */
126 };
127 typedef struct rdp_transport_io rdpTransportIo;
128
129 WINPR_ATTR_NODISCARD
130 FREERDP_API BOOL freerdp_io_callback_set_event(rdpContext* context, BOOL set);
131
132 WINPR_ATTR_NODISCARD
133 FREERDP_API const rdpTransportIo* freerdp_get_io_callbacks(rdpContext* context);
134
135 WINPR_ATTR_NODISCARD
136 FREERDP_API BOOL freerdp_set_io_callbacks(rdpContext* context,
137 const rdpTransportIo* io_callbacks);
138
139 WINPR_ATTR_NODISCARD
140 FREERDP_API BOOL freerdp_set_io_callback_context(rdpContext* context, void* usercontext);
141
142 WINPR_ATTR_NODISCARD
143 FREERDP_API void* freerdp_get_io_callback_context(rdpContext* context);
144
145 /* PDU parser.
146 * incomplete: FALSE if the whole PDU is available, TRUE otherwise
147 * Return: 0 -> PDU header incomplete
148 * >0 -> PDU header complete, length of PDU.
149 * <0 -> Abort, an error occurred
150 */
151 WINPR_ATTR_NODISCARD
152 FREERDP_API SSIZE_T transport_parse_pdu(rdpTransport* transport, wStream* s, BOOL* incomplete);
153
154 WINPR_ATTR_NODISCARD
155 FREERDP_API rdpContext* transport_get_context(rdpTransport* transport);
156
157 WINPR_ATTR_NODISCARD
158 FREERDP_API rdpTransport* freerdp_get_transport(rdpContext* context);
159
165 FREERDP_API void transport_layer_free(rdpTransportLayer* layer);
166
178 WINPR_ATTR_MALLOC(transport_layer_free, 1)
179 WINPR_ATTR_NODISCARD
180 FREERDP_API rdpTransportLayer* transport_layer_new(rdpTransport* transport, size_t contextSize);
181
182#ifdef __cplusplus
183}
184#endif
185
186#endif /* FREERDP_TRANSPORT_IO_H */
WINPR_ATTR_NODISCARD pTransportConnectLayer ConnectLayer
UINT64 reserved[64 - 12]
WINPR_ATTR_NODISCARD pTransportSetBlockingMode SetBlockingMode
WINPR_ATTR_NODISCARD pTransportAttachLayer AttachLayer