ReactOS  0.4.14-dev-337-gf981a68
rdesktop.h
Go to the documentation of this file.
1 /*
2  rdesktop: A Remote Desktop Protocol client.
3  Master include file
4  Copyright (C) Matthew Chapman 1999-2005
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License along
17  with this program; if not, write to the Free Software Foundation, Inc.,
18  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 */
20 
21 #ifndef WIN32_LEAN_AND_MEAN
22 #define WIN32_LEAN_AND_MEAN
23 #endif
24 
25 #include <windows.h>
26 #include <winsock2.h>
27 #include <cchannel.h>
28 
29 #if 0
30 #include <stdlib.h>
31 #include <stdio.h>
32 #include <string.h>
33 #include <dirent.h>
34 #include <sys/time.h>
35 #ifdef HAVE_SYS_SELECT_H
36 #include <sys/select.h>
37 #else
38 #include <sys/types.h>
39 #include <unistd.h>
40 #endif
41 #include <limits.h> /* PATH_MAX */
42 
43 /* FIXME FIXME */
44 #include <windows.h>
45 #include <X11/Xlib.h>
46 #include <X11/Xatom.h>
47 /* FIXME FIXME */
48 #endif
49 
50 // TODO
51 #include <openssl/rc4.h>
52 #include <openssl/md5.h>
53 #include <openssl/sha.h>
54 #include <openssl/bn.h>
55 #include <openssl/x509v3.h>
56 
57 #define VERSION "1.4.1"
58 
59 #ifdef WITH_DEBUG
60 #define DEBUG(args) printf args;
61 #else
62 #define DEBUG(args)
63 #endif
64 
65 #ifdef WITH_DEBUG_KBD
66 #define DEBUG_KBD(args) printf args;
67 #else
68 #define DEBUG_KBD(args)
69 #endif
70 
71 #ifdef WITH_DEBUG_RDP5
72 #define DEBUG_RDP5(args) printf args;
73 #else
74 #define DEBUG_RDP5(args)
75 #endif
76 
77 #ifdef WITH_DEBUG_CLIPBOARD
78 #define DEBUG_CLIPBOARD(args) printf args;
79 #else
80 #define DEBUG_CLIPBOARD(args)
81 #endif
82 
83 #ifdef WITH_DEBUG_CHANNEL
84 #define DEBUG_CHANNEL(args) printf args;
85 #else
86 #define DEBUG_CHANNEL(args)
87 #endif
88 
89 #define STRNCPY(dst,src,n) { strncpy(dst,src,n-1); dst[n-1] = 0; }
90 
91 #ifndef MIN
92 #define MIN(x,y) (((x) < (y)) ? (x) : (y))
93 #endif
94 
95 #ifndef MAX
96 #define MAX(x,y) (((x) > (y)) ? (x) : (y))
97 #endif
98 
99 /* timeval macros */
100 #ifndef timerisset
101 #define timerisset(tvp)\
102  ((tvp)->tv_sec || (tvp)->tv_usec)
103 #endif
104 #ifndef timercmp
105 #define timercmp(tvp, uvp, cmp)\
106  ((tvp)->tv_sec cmp (uvp)->tv_sec ||\
107  (tvp)->tv_sec == (uvp)->tv_sec &&\
108  (tvp)->tv_usec cmp (uvp)->tv_usec)
109 #endif
110 #ifndef timerclear
111 #define timerclear(tvp)\
112  ((tvp)->tv_sec = (tvp)->tv_usec = 0)
113 #endif
114 
115 /* If configure does not define the endianess, try
116  to find it out */
117 #if !defined(L_ENDIAN) && !defined(B_ENDIAN)
118 #if __BYTE_ORDER == __LITTLE_ENDIAN
119 #define L_ENDIAN
120 #elif __BYTE_ORDER == __BIG_ENDIAN
121 #define B_ENDIAN
122 #else
123 #error Unknown endianness. Edit rdesktop.h.
124 #endif
125 #endif /* B_ENDIAN, L_ENDIAN from configure */
126 
127 /* No need for alignment on x86 and amd64 */
128 #if !defined(NEED_ALIGN)
129 #if !(defined(__x86__) || defined(__x86_64__) || \
130  defined(__AMD64__) || defined(_M_IX86) || \
131  defined(__i386__))
132 #define NEED_ALIGN
133 #endif
134 #endif
135 
136 struct rdpclient;
137 typedef struct rdpclient RDPCLIENT;
138 
139 #include "parse.h"
140 #include "constants.h"
141 #include "types.h"
142 #include "orders.h"
143 
144 #if 0
145 /* Used to store incoming io request, until they are ready to be completed */
146 /* using a linked list ensures that they are processed in the right order, */
147 /* if multiple ios are being done on the same fd */
148 struct async_iorequest
149 {
150  uint32 fd, major, minor, offset, device, id, length, partial_len;
151  long timeout, /* Total timeout */
152  itv_timeout; /* Interval timeout (between serial characters) */
153  uint8 *buffer;
154  DEVICE_FNS *fns;
155 
156  struct async_iorequest *next; /* next element in list */
157 };
158 #endif
159 
160 struct bmpcache_entry
161 {
164  sint16 next;
165 };
166 
167 /* holds the whole state of the RDP client */
168 struct rdpclient
169 {
170  /* channels.c */
171  CHANNEL_DEF channel_defs[CHANNEL_MAX_COUNT];
172  unsigned int num_channels;
173 
174  /* licence.c */
178 
179  /* mcs.c */
181 
182  /* mppc.c */
184 
185  /* pstcache.c */
186  int pstcache_fd[8];
189 
190  /* rdesktop.c */
192  unsigned int keylayout;
196 
197  int width;
198  int height;
206  BOOL desktop_save; /* desktop save order */
207  BOOL polygon_ellipse_orders; /* polygon / ellipse orders */
211 
212  /* Session Directory redirection */
214  wchar_t * redirect_server;
215  wchar_t * redirect_domain;
216  wchar_t * redirect_password;
217  wchar_t * redirect_username;
220 
221  /* rdp.c */
224 
225  /* secure.c */
227 
228  /* tcp.c */
230 
231  /* cache.c */
232  struct cache_
233  {
234  struct bmpcache_entry bmpcache[3][0xa00];
236 
237  int bmpcache_lru[3];
238  int bmpcache_mru[3];
240 
243  uint8 deskcache[0x38400 * 4];
245  }
246  cache;
247 
248  /* licence.c */
249  struct licence_
250  {
251  uint8 key[16];
253  }
254  licence;
255 
256  /* orders.c */
257  struct orders_
258  {
260  }
261  orders;
262 
263  /* rdp.c */
264  struct rdp_
265  {
267 
268 #if WITH_DEBUG
269  uint32 packetno;
270 #endif
271 
272 #ifdef HAVE_ICONV
273  BOOL iconv_works;
274 #endif
275  }
276  rdp;
277 
278  /* secure.c */
279  struct secure_
280  {
286 
293 
294  /* These values must be available to reset state - Session Directory */
297  }
298  secure;
299 
300  /* tcp.c */
301  struct tcp_
302  {
304  struct stream in;
305  struct stream out;
307  }
308  tcp;
309 };
310 
311 #ifndef MAKE_PROTO
312 #include "proto.h"
313 #endif
uint8 encrypt_update_key[16]
Definition: rdesktop.h:291
BOOL bitmap_cache_precache
Definition: rdesktop.h:203
sint16 next
Definition: cache.c:45
struct bmpcache_entry bmpcache[3][0xa00]
Definition: rdesktop.h:234
struct stream out
Definition: rdesktop.h:305
unsigned int uint32
Definition: types.h:32
wchar_t * redirect_password
Definition: rdesktop.h:216
uint16 server_rdp_version
Definition: rdesktop.h:226
DATABLOB textcache[256]
Definition: rdesktop.h:242
GLintptr offset
Definition: glext.h:5920
HBITMAP volatile_bc[3]
Definition: rdesktop.h:235
BOOL licence_issued
Definition: rdesktop.h:177
int pstcache_fd[8]
Definition: rdesktop.h:186
int keyboard_subtype
Definition: rdesktop.h:194
#define SEC_MAX_MODULUS_SIZE
Definition: constants.h:93
GLuint buffer
Definition: glext.h:5915
uint8 sign_key[16]
Definition: rdesktop.h:252
BOOL desktop_save
Definition: rdesktop.h:206
static int fd
Definition: io.c:51
uint8 deskcache[0x38400 *4]
Definition: rdesktop.h:243
HICON HCURSOR
Definition: windef.h:284
uint32 rdp_shareid
Definition: rdesktop.h:223
HCURSOR cursorcache[0x20]
Definition: rdesktop.h:244
Definition: cache.c:41
GLbitfield GLuint64 timeout
Definition: glext.h:7164
BOOL bitmap_cache
Definition: rdesktop.h:201
BOOL packet_encryption
Definition: rdesktop.h:205
sint16 previous
Definition: cache.c:44
int keyboard_type
Definition: rdesktop.h:193
unsigned int keylayout
Definition: rdesktop.h:192
unsigned int BOOL
Definition: ntddk_ex.h:94
Definition: devices.h:37
RC4_KEY rc4_encrypt_key
Definition: rdesktop.h:283
int current_status
Definition: rdesktop.h:266
FONTGLYPH fontcache[12][256]
Definition: rdesktop.h:241
static const WCHAR RSA[]
Definition: oid.c:1223
int bmpcache_mru[3]
Definition: rdesktop.h:238
RDPCOMP mppc_dict
Definition: rdesktop.h:183
BOOL redirect
Definition: rdesktop.h:213
struct rdpclient::cache_ cache
int width
Definition: rdesktop.h:197
BOOL console_session
Definition: rdesktop.h:209
BOOL pstcache_enumerated
Definition: rdesktop.h:188
uint16 mcs_userid
Definition: rdesktop.h:180
unsigned int num_channels
Definition: rdesktop.h:172
int bmpcache_lru[3]
Definition: rdesktop.h:237
uint8 encrypt_key[16]
Definition: rdesktop.h:289
wchar_t * redirect_username
Definition: rdesktop.h:217
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
BOOL encryption
Definition: rdesktop.h:204
struct rdpclient::rdp_ rdp
int keyboard_functionkeys
Definition: rdesktop.h:195
unsigned char uint8
Definition: types.h:28
HBITMAP bitmap
Definition: rdesktop.h:162
struct rdpclient::orders_ orders
char * licence_username
Definition: rdesktop.h:175
char * redirect_cookie
Definition: rdesktop.h:218
RC4_KEY rc4_decrypt_key
Definition: rdesktop.h:282
BOOL use_rdp5
Definition: rdesktop.h:208
Definition: parse.h:22
int tcp_port_rdp
Definition: rdesktop.h:229
uint8 sign_key[16]
Definition: rdesktop.h:287
RDP_ORDER_STATE order_state
Definition: rdesktop.h:259
signed short sint16
Definition: types.h:31
struct rdpclient::tcp_ tcp
struct rdpclient::secure_ secure
uint8 decrypt_key[16]
Definition: rdesktop.h:288
#define MAX_COMPUTERNAME_LENGTH
Definition: winbase.h:240
static unsigned __int64 next
Definition: rand_nt.c:6
GLuint in
Definition: glext.h:9616
unsigned short uint16
Definition: types.h:30
uint32 redirect_flags
Definition: rdesktop.h:219
#define major(rdev)
Definition: propsheet.cpp:916
int server_depth
Definition: rdesktop.h:199
char licence_hostname[MAX_COMPUTERNAME_LENGTH+1]
Definition: rdesktop.h:176
uint32 server_public_key_len
Definition: rdesktop.h:285
uint8 * next_packet
Definition: rdesktop.h:222
int height
Definition: rdesktop.h:198
struct rdpclient::licence_ licence
GLenum GLuint id
Definition: glext.h:5579
BOOL polygon_ellipse_orders
Definition: rdesktop.h:207
#define minor(rdev)
Definition: propsheet.cpp:917
int disconnect_reason
Definition: rdesktop.h:191
uint8 crypted_random[SEC_MAX_MODULUS_SIZE]
Definition: rdesktop.h:292
BOOL bitmap_cache_persist_enable
Definition: rdesktop.h:202
RSA * server_public_key
Definition: rdesktop.h:284
UINT_PTR SOCKET
Definition: winsock.h:47
static HBITMAP
Definition: button.c:44
uint8 decrypt_update_key[16]
Definition: rdesktop.h:290
wchar_t * redirect_server
Definition: rdesktop.h:214
int pstcache_Bpp
Definition: rdesktop.h:187
CHANNEL_DEF channel_defs[CHANNEL_MAX_COUNT]
Definition: rdesktop.h:171
BOOL bitmap_compression
Definition: rdesktop.h:200
long connection_timeout
Definition: rdesktop.h:306
uint32 rdp5_performanceflags
Definition: rdesktop.h:210
wchar_t * redirect_domain
Definition: rdesktop.h:215
int bmpcache_count[3]
Definition: rdesktop.h:239
Definition: path.c:42