FreeRDP
Loading...
Searching...
No Matches
rts.h
1
20#ifndef FREERDP_LIB_CORE_GATEWAY_RTS_H
21#define FREERDP_LIB_CORE_GATEWAY_RTS_H
22
23#include <freerdp/config.h>
24
25#include <winpr/stream.h>
26
27#include <freerdp/api.h>
28#include <freerdp/types.h>
29#include <freerdp/log.h>
30
31#include "rpc.h"
32
33#define RTS_FLAG_NONE 0x0000
34#define RTS_FLAG_PING 0x0001
35#define RTS_FLAG_OTHER_CMD 0x0002
36#define RTS_FLAG_RECYCLE_CHANNEL 0x0004
37#define RTS_FLAG_IN_CHANNEL 0x0008
38#define RTS_FLAG_OUT_CHANNEL 0x0010
39#define RTS_FLAG_EOF 0x0020
40#define RTS_FLAG_ECHO 0x0040
41
42#define RTS_CMD_RECEIVE_WINDOW_SIZE 0x00000000
43#define RTS_CMD_FLOW_CONTROL_ACK 0x00000001
44#define RTS_CMD_CONNECTION_TIMEOUT 0x00000002
45#define RTS_CMD_COOKIE 0x00000003
46#define RTS_CMD_CHANNEL_LIFETIME 0x00000004
47#define RTS_CMD_CLIENT_KEEPALIVE 0x00000005
48#define RTS_CMD_VERSION 0x00000006
49#define RTS_CMD_EMPTY 0x00000007
50#define RTS_CMD_PADDING 0x00000008
51#define RTS_CMD_NEGATIVE_ANCE 0x00000009
52#define RTS_CMD_ANCE 0x0000000A
53#define RTS_CMD_CLIENT_ADDRESS 0x0000000B
54#define RTS_CMD_ASSOCIATION_GROUP_ID 0x0000000C
55#define RTS_CMD_DESTINATION 0x0000000D
56#define RTS_CMD_PING_TRAFFIC_SENT_NOTIFY 0x0000000E
57#define RTS_CMD_LAST_ID 0x0000000F
58
59#define RTS_CMD_RECEIVE_WINDOW_SIZE_LENGTH 0x00000004
60#define RTS_CMD_FLOW_CONTROL_ACK_LENGTH 0x00000018
61#define RTS_CMD_CONNECTION_TIMEOUT_LENGTH 0x00000004
62#define RTS_CMD_COOKIE_LENGTH 0x00000010
63#define RTS_CMD_CHANNEL_LIFETIME_LENGTH 0x00000004
64#define RTS_CMD_CLIENT_KEEPALIVE_LENGTH 0x00000004
65#define RTS_CMD_VERSION_LENGTH 0x00000004
66#define RTS_CMD_EMPTY_LENGTH 0x00000000
67#define RTS_CMD_PADDING_LENGTH 0x00000000 /* variable-size */
68#define RTS_CMD_NEGATIVE_ANCE_LENGTH 0x00000000
69#define RTS_CMD_ANCE_LENGTH 0x00000000
70#define RTS_CMD_CLIENT_ADDRESS_LENGTH 0x00000000 /* variable-size */
71#define RTS_CMD_ASSOCIATION_GROUP_ID_LENGTH 0x00000010
72#define RTS_CMD_DESTINATION_LENGTH 0x00000004
73#define RTS_CMD_PING_TRAFFIC_SENT_NOTIFY_LENGTH 0x00000004
74
75#define FDClient 0x00000000
76#define FDInProxy 0x00000001
77#define FDServer 0x00000002
78#define FDOutProxy 0x00000003
79
80FREERDP_LOCAL BOOL rts_generate_cookie(BYTE* cookie);
81
82WINPR_ATTR_NODISCARD
83FREERDP_LOCAL BOOL rts_write_pdu_auth3(wStream* s, const rpcconn_rpc_auth_3_hdr_t* auth);
84
85WINPR_ATTR_NODISCARD
86FREERDP_LOCAL BOOL rts_write_pdu_bind(wStream* s, const rpcconn_bind_hdr_t* bind);
87
88WINPR_ATTR_NODISCARD
89FREERDP_LOCAL BOOL rts_read_pdu_header(wStream* s, rpcconn_hdr_t* header);
90
91WINPR_ATTR_NODISCARD
92FREERDP_LOCAL BOOL rts_read_pdu_header_ex(wStream* s, rpcconn_hdr_t* header, BOOL silent);
93
94FREERDP_LOCAL void rts_free_pdu_header(rpcconn_hdr_t* header, BOOL allocated);
95
96typedef enum
97{
98 RTS_PDU_FAIL = -1,
99 RTS_PDU_INCOMPLETE = 0,
100 RTS_PDU_VALID = 1
101} rts_pdu_status_t;
102
103WINPR_ATTR_NODISCARD
104FREERDP_LOCAL rts_pdu_status_t rts_read_common_pdu_header(wStream* s, rpcconn_common_hdr_t* header,
105 BOOL ignoreErrors);
106
107WINPR_ATTR_NODISCARD
108FREERDP_LOCAL BOOL rts_command_length(UINT32 CommandType, wStream* s, size_t* length, BOOL silent);
109
110WINPR_ATTR_NODISCARD
111FREERDP_LOCAL BOOL rts_send_CONN_A1_pdu(rdpRpc* rpc);
112
113WINPR_ATTR_NODISCARD
114FREERDP_LOCAL BOOL rts_recv_CONN_A3_pdu(rdpRpc* rpc, wStream* buffer);
115
116WINPR_ATTR_NODISCARD
117FREERDP_LOCAL BOOL rts_send_CONN_B1_pdu(rdpRpc* rpc);
118
119WINPR_ATTR_NODISCARD
120FREERDP_LOCAL BOOL rts_recv_CONN_C2_pdu(rdpRpc* rpc, wStream* buffer);
121
122WINPR_ATTR_NODISCARD
123FREERDP_LOCAL BOOL rts_send_OUT_R1_A3_pdu(rdpRpc* rpc);
124
125WINPR_ATTR_NODISCARD
126FREERDP_LOCAL BOOL rts_send_flow_control_ack_pdu(rdpRpc* rpc);
127
128WINPR_ATTR_NODISCARD
129FREERDP_LOCAL BOOL rts_recv_out_of_sequence_pdu(rdpRpc* rpc, wStream* buffer,
130 const rpcconn_hdr_t* header);
131
132WINPR_ATTR_NODISCARD
133FREERDP_LOCAL BOOL rts_recv_ping_pdu(rdpRpc* rpc, wStream* s);
134
135#define Stream_ConditionalCheckAndLogRequiredLength(tag, s, size, silent) \
136 rts_conditional_check_and_log(tag, s, size, silent, __func__, __FILE__, __LINE__)
137
138WINPR_ATTR_NODISCARD
139FREERDP_LOCAL BOOL rts_conditional_check_and_log(const char* tag, wStream* s, size_t size,
140 BOOL silent, const char* fkt, const char* file,
141 size_t line);
142
143#define Stream_ConditionalSafeSeek(s, size, silent) \
144 rts_conditional_safe_seek(s, size, silent, __func__, __FILE__, __LINE__)
145
146WINPR_ATTR_NODISCARD
147FREERDP_LOCAL BOOL rts_conditional_safe_seek(wStream* s, size_t size, BOOL silent, const char* fkt,
148 const char* file, size_t line);
149
150#endif /* FREERDP_LIB_CORE_GATEWAY_RTS_H */