FreeRDP
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 
80 FREERDP_LOCAL void rts_generate_cookie(BYTE* cookie);
81 
82 FREERDP_LOCAL BOOL rts_write_pdu_auth3(wStream* s, const rpcconn_rpc_auth_3_hdr_t* auth);
83 FREERDP_LOCAL BOOL rts_write_pdu_bind(wStream* s, const rpcconn_bind_hdr_t* bind);
84 
85 FREERDP_LOCAL BOOL rts_read_pdu_header(wStream* s, rpcconn_hdr_t* header);
86 FREERDP_LOCAL BOOL rts_read_pdu_header_ex(wStream* s, rpcconn_hdr_t* header, BOOL silent);
87 FREERDP_LOCAL void rts_free_pdu_header(rpcconn_hdr_t* header, BOOL allocated);
88 
89 FREERDP_LOCAL BOOL rts_read_common_pdu_header(wStream* s, rpcconn_common_hdr_t* header,
90  BOOL ignoreErrors);
91 
92 FREERDP_LOCAL BOOL rts_command_length(UINT32 CommandType, wStream* s, size_t* length, BOOL silent);
93 
94 FREERDP_LOCAL BOOL rts_send_CONN_A1_pdu(rdpRpc* rpc);
95 FREERDP_LOCAL BOOL rts_recv_CONN_A3_pdu(rdpRpc* rpc, wStream* buffer);
96 
97 FREERDP_LOCAL BOOL rts_send_CONN_B1_pdu(rdpRpc* rpc);
98 
99 FREERDP_LOCAL BOOL rts_recv_CONN_C2_pdu(rdpRpc* rpc, wStream* buffer);
100 
101 FREERDP_LOCAL BOOL rts_send_OUT_R1_A3_pdu(rdpRpc* rpc);
102 
103 FREERDP_LOCAL BOOL rts_send_flow_control_ack_pdu(rdpRpc* rpc);
104 
105 FREERDP_LOCAL BOOL rts_recv_out_of_sequence_pdu(rdpRpc* rpc, wStream* buffer,
106  const rpcconn_hdr_t* header);
107 
108 FREERDP_LOCAL BOOL rts_recv_ping_pdu(rdpRpc* rpc, wStream* s);
109 
110 #define Stream_ConditionalCheckAndLogRequiredLength(tag, s, size, silent) \
111  rts_conditional_check_and_log(tag, s, size, silent, __func__, __FILE__, __LINE__)
112 
113 FREERDP_LOCAL BOOL rts_conditional_check_and_log(const char* tag, wStream* s, size_t size,
114  BOOL silent, const char* fkt, const char* file,
115  size_t line);
116 
117 #define Stream_ConditionalSafeSeek(s, size, silent) \
118  rts_conditional_safe_seek(s, size, silent, __func__, __FILE__, __LINE__)
119 
120 FREERDP_LOCAL BOOL rts_conditional_safe_seek(wStream* s, size_t size, BOOL silent, const char* fkt,
121  const char* file, size_t line);
122 
123 #endif /* FREERDP_LIB_CORE_GATEWAY_RTS_H */