FreeRDP
Loading...
Searching...
No Matches
tcp.h
1
21#ifndef FREERDP_LIB_CORE_TCP_H
22#define FREERDP_LIB_CORE_TCP_H
23
24#include <winpr/windows.h>
25
26#include <freerdp/types.h>
27#include <freerdp/settings.h>
28#include <freerdp/freerdp.h>
29#include <freerdp/api.h>
30#include <freerdp/transport_io.h>
31
32#include <winpr/crt.h>
33#include <winpr/synch.h>
34#include <winpr/stream.h>
35#include <winpr/winsock.h>
36#include <winpr/crypto.h>
37
38#include <openssl/bio.h>
39
40#include <freerdp/utils/ringbuffer.h>
41
42#define BIO_TYPE_TSG 65
43#define BIO_TYPE_SIMPLE 66
44#define BIO_TYPE_BUFFERED 67
45#define BIO_TYPE_NAMEDPIPE 69
46
47#define BIO_C_SET_SOCKET 1101
48#define BIO_C_GET_SOCKET 1102
49#define BIO_C_GET_EVENT 1103
50#define BIO_C_SET_NONBLOCK 1104
51#define BIO_C_READ_BLOCKED 1105
52#define BIO_C_WRITE_BLOCKED 1106
53#define BIO_C_WAIT_READ 1107
54#define BIO_C_WAIT_WRITE 1108
55#define BIO_C_SET_HANDLE 1109
56
57WINPR_ATTR_NODISCARD
58static inline long BIO_set_socket(BIO* b, SOCKET s, long c)
59{
60 return BIO_ctrl(b, BIO_C_SET_SOCKET, c, (void*)(intptr_t)s);
61}
62
63static inline long BIO_get_socket(BIO* b, SOCKET* c)
64{
65 return BIO_ctrl(b, BIO_C_GET_SOCKET, 0, c);
66}
67
68static inline long BIO_get_event(BIO* b, HANDLE* c)
69{
70 return BIO_ctrl(b, BIO_C_GET_EVENT, 0, (void*)c);
71}
72
73static inline long BIO_set_handle(BIO* b, HANDLE h)
74{
75 return BIO_ctrl(b, BIO_C_SET_HANDLE, 0, h);
76}
77
78static inline long BIO_set_nonblock(BIO* b, long c)
79{
80 return BIO_ctrl(b, BIO_C_SET_NONBLOCK, c, nullptr);
81}
82
83WINPR_ATTR_NODISCARD
84static inline long BIO_read_blocked(BIO* b)
85{
86 return BIO_ctrl(b, BIO_C_READ_BLOCKED, 0, nullptr);
87}
88
89WINPR_ATTR_NODISCARD
90static inline long BIO_write_blocked(BIO* b)
91{
92 return BIO_ctrl(b, BIO_C_WRITE_BLOCKED, 0, nullptr);
93}
94
95static inline long BIO_wait_read(BIO* b, long c)
96{
97 return BIO_ctrl(b, BIO_C_WAIT_READ, c, nullptr);
98}
99
100WINPR_ATTR_NODISCARD
101static inline long BIO_wait_write(BIO* b, long c)
102{
103 return BIO_ctrl(b, BIO_C_WAIT_WRITE, c, nullptr);
104}
105
106WINPR_ATTR_NODISCARD
107FREERDP_LOCAL BIO_METHOD* BIO_s_simple_socket(void);
108
109WINPR_ATTR_NODISCARD
110FREERDP_LOCAL BIO_METHOD* BIO_s_buffered_socket(void);
111
112WINPR_ATTR_NODISCARD
113FREERDP_LOCAL BOOL freerdp_tcp_set_keep_alive_mode(const rdpSettings* settings, int sockfd);
114
115WINPR_ATTR_NODISCARD
116FREERDP_LOCAL int freerdp_tcp_connect(rdpContext* context, const char* hostname, int port,
117 DWORD timeout);
118
119WINPR_ATTR_NODISCARD
120FREERDP_LOCAL int freerdp_tcp_default_connect(rdpContext* context, rdpSettings* settings,
121 const char* hostname, int port, DWORD timeout);
122
123WINPR_ATTR_NODISCARD
124FREERDP_LOCAL rdpTransportLayer*
125freerdp_tcp_connect_layer(rdpContext* context, const char* hostname, int port, DWORD timeout);
126
127WINPR_ATTR_MALLOC(free, 1)
128WINPR_ATTR_NODISCARD
129FREERDP_LOCAL char* freerdp_tcp_get_peer_address(SOCKET sockfd);
130
131WINPR_ATTR_NODISCARD
132FREERDP_LOCAL struct addrinfo* freerdp_tcp_resolve_host(const char* hostname, int port,
133 int ai_flags);
134
135WINPR_ATTR_NODISCARD
136FREERDP_LOCAL char* freerdp_tcp_address_to_string(const struct sockaddr_storage* addr, BOOL* pIPv6);
137
138FREERDP_LOCAL BOOL freerdp_tcp_set_nodelay(wLog* log, DWORD level, int sockfd);
139
140#endif /* FREERDP_LIB_CORE_TCP_H */