ReactOS 0.4.16-dev-311-g9382aa2
rdesktop-core-tester.cpp
Go to the documentation of this file.
1#include "stdafx.h"
2
3#include <zmouse.h>
4
5#include "rdesktop/rdesktop.h"
6#include "rdesktop/proto.h"
7
8extern "C"
9{
10 /* ==== BEGIN POOP ==== */
11 // Temporary implementations of stuff we totally positively need to make the Real Thing happy
12 /* produce a hex dump */
13 void
14 hexdump(unsigned char *p, unsigned int len)
15 {
16 unsigned char *line = p;
17 int i, thisline;
18 unsigned int offset = 0;
19
20 while (offset < len)
21 {
22 printf("%04x ", offset);
23 thisline = len - offset;
24 if (thisline > 16)
25 thisline = 16;
26
27 for (i = 0; i < thisline; i++)
28 printf("%02x ", line[i]);
29
30 for (; i < 16; i++)
31 printf(" ");
32
33 for (i = 0; i < thisline; i++)
34 printf("%c", (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.');
35
36 printf("\n");
37 offset += thisline;
38 line += thisline;
39 }
40 }
41
43 {
44 memcpy(random, "12345678901234567890123456789012", 32);
45 }
46
47 /* report an error */
48 void
49 error(char *format, ...)
50 {
51 va_list ap;
52
53 fprintf(stderr, "ERROR: ");
54
57 va_end(ap);
58 }
59
60 /* report a warning */
61 void
62 warning(char *format, ...)
63 {
64 va_list ap;
65
66 fprintf(stderr, "WARNING: ");
67
70 va_end(ap);
71 }
72
73 /* report an unimplemented protocol feature */
74 void
75 unimpl(char *format, ...)
76 {
77 va_list ap;
78
79 fprintf(stderr, "NOT IMPLEMENTED: ");
80
83 va_end(ap);
84 }
85
86 /* Create the bitmap cache directory */
87 BOOL
89 {
90 char *home;
91 char bmpcache_dir[256];
92
93 home = getenv("HOME");
94
95 if (home == NULL)
96 return False;
97
98 sprintf(bmpcache_dir, "%s/%s", home, ".rdesktop");
99
100 if ((_mkdir(bmpcache_dir) == -1) && errno != EEXIST)
101 {
102 perror(bmpcache_dir);
103 return False;
104 }
105
106 sprintf(bmpcache_dir, "%s/%s", home, ".rdesktop/cache");
107
108 if ((_mkdir(bmpcache_dir) == -1) && errno != EEXIST)
109 {
110 perror(bmpcache_dir);
111 return False;
112 }
113
114 return True;
115 }
116
117 /* open a file in the .rdesktop directory */
118 int
120 {
121 char *home;
122 char fn[256];
123 int fd;
124
125 home = getenv("HOME");
126 if (home == NULL)
127 return -1;
128 sprintf(fn, "%s/.rdesktop/%s", home, filename);
129 fd = _open(fn, _O_RDWR | _O_CREAT, 0);
130 if (fd == -1)
131 perror(fn);
132 return fd;
133 }
134
135 /* close file */
136 void
138 {
139 _close(fd);
140 }
141
142 /* read from file*/
143 int
144 rd_read_file(int fd, void *ptr, int len)
145 {
146 return _read(fd, ptr, len);
147 }
148
149 /* write to file */
150 int
151 rd_write_file(int fd, void *ptr, int len)
152 {
153 return _write(fd, ptr, len);
154 }
155
156 /* move file pointer */
157 int
159 {
160 return _lseek(fd, offset, SEEK_SET);
161 }
162
163 /* do a write lock on a file */
164 BOOL
165 rd_lock_file(int fd, int start, int len)
166 {
167 // TODOOO...
168 return False;
169 }
170
171 int
172 load_licence(RDPCLIENT * This, unsigned char **data)
173 {
174 return -1;
175 }
176
177 void
178 save_licence(RDPCLIENT * This, unsigned char *data, int length)
179 {
180 }
181
182 /* ==== END POOP ==== */
183
184 /* ==== UI ==== */
185 // Globals are totally teh evil, but cut me some slack here
191
192};
193
194static
195void
197{
199
200 if(value < 0)
202 else
204
205 if(value < 0)
206 value = - value;
207
208 for(int click = 0; click < value; click += WHEEL_DELTA)
210}
211
212static
216{
217 // BUGBUG: LongToPtr & PtrToLong will break on Win64
218
220
221 switch(uMsg)
222 {
223 case WM_CLOSE:
225 break;
226
227 // FIXME: temporary
228 case WM_DESTROY:
230 break;
231
232 /* Initialization */
233 case WM_CREATE:
234 This = static_cast<RDPCLIENT *>(reinterpret_cast<LPCREATESTRUCT>(lparam)->lpCreateParams);
236 break;
237
238 /* Painting */
239 case WM_PRINTCLIENT:
240 if(wparam == 0)
241 break;
242
243 case WM_PAINT:
244 {
245 HDC hdc = (HDC)wparam;
246
247 // A DC was provided: print the whole client area into it
248 if(hdc)
249 {
250 RECT rc;
251 GetClientRect(hwnd, &rc);
252 BitBlt(hdc, 0, 0, rc.right, rc.bottom, hdcBuffer, 0, 0, SRCCOPY);
253 }
254 // Otherwise, we're refreshing to screen
255 else
256 {
257 PAINTSTRUCT ps;
258 hdc = BeginPaint(hwnd, &ps);
259
260 BitBlt
261 (
262 hdc,
263 ps.rcPaint.left,
264 ps.rcPaint.top,
265 ps.rcPaint.right - ps.rcPaint.left,
266 ps.rcPaint.bottom - ps.rcPaint.top,
267 hdcBuffer,
268 ps.rcPaint.left,
269 ps.rcPaint.top,
270 SRCCOPY
271 );
272
273 EndPaint(hwnd, &ps);
274 }
275 }
276
277 break;
278
279 /* Keyboard stuff */
280 case WM_SYSKEYDOWN:
281 case WM_KEYDOWN:
283 break;
284
285 case WM_SYSKEYUP:
286 case WM_KEYUP:
288 break;
289
290 /* Mouse stuff */
291 // Cursor shape
292 case WM_SETCURSOR:
293 if(LOWORD(lparam) == HTCLIENT)
294 {
295 //SetCursor(hcursor);
296 return TRUE;
297 }
298
299 break;
300
301 // Movement
302 case WM_MOUSEMOVE:
303 //if(This->sendmotion || wparam & (MK_LBUTTON | MK_RBUTTON | MK_MBUTTON | MK_XBUTTON1 | MK_XBUTTON2))
305
306 break;
307
308 // Buttons
309 // TODO: X buttons
310 case WM_LBUTTONDOWN:
312 break;
313
314 case WM_RBUTTONDOWN:
316 break;
317
318 case WM_MBUTTONDOWN:
320 break;
321
322 case WM_LBUTTONUP:
324 break;
325
326 case WM_RBUTTONUP:
328 break;
329
330 case WM_MBUTTONUP:
332 break;
333
334 // Wheel
335 case WM_MOUSEWHEEL:
337 break;
338
339 default:
340 /* Registered messages */
341 // Z-Mouse wheel support - you know, just in case
342 if(uMsg == wmZMouseWheel)
343 {
345 break;
346 }
347
348 /* Unhandled messages */
349 return DefWindowProc(hwnd, uMsg, wparam, lparam);
350 }
351
352 return 0;
353}
354
355static
356DWORD
357WINAPI
359(
360 LPVOID lpArgument
361)
362{
363 RDPCLIENT * This = static_cast<RDPCLIENT *>(lpArgument);
364
368
370
371 rdp_connect(This, "10.0.0.3", flags, L"Administrator", L"", L"", L"", L"", hostname, "");
372 //rdp_connect(This, "192.168.7.232", flags, "", "", "", "");
373
375
376 BITMAPINFO bmi;
377 bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader);
378 bmi.bmiHeader.biWidth = This->width;
379 bmi.bmiHeader.biHeight = This->height;
380 bmi.bmiHeader.biPlanes = 1;
381 bmi.bmiHeader.biBitCount = This->server_depth;
383 bmi.bmiHeader.biSizeImage = 0;
386 bmi.bmiHeader.biClrUsed = 0; // TODO! palette displays
387 bmi.bmiHeader.biClrImportant = 0; // TODO! palette displays
388
390
392
393#if 0
394 rcClip.left = 0;
395 rcClip.top = 0;
396 rcClip.right = This->width + 1;
397 rcClip.bottom = This->height + 1;
398#endif
399
402
404 // TODO: handle redirection
405 // EVENT: OnDisconnect
406
407 SendMessage(hwnd, WM_CLOSE, 0, 0);
408
409 return 0;
410}
411
412/* Virtual channel stuff */
413extern "C" void channel_process(RDPCLIENT * This, STREAM s, uint16 mcs_channel)
414{
415}
416
418
419typedef struct CHANNEL_HANDLE_
420{
423}
425
426static
427UINT
428VCAPITYPE
430(
431 LPVOID * ppInitHandle,
432 PCHANNEL_DEF pChannel,
433 INT channelCount,
434 ULONG versionRequested,
435 PCHANNEL_INIT_EVENT_FN pChannelInitEventProc
436)
437{
438 if(channelCount <= 0)
439 return CHANNEL_RC_BAD_CHANNEL;
440
441 if(ppInitHandle == NULL)
442 return CHANNEL_RC_BAD_INIT_HANDLE;
443
444 if(pChannel == NULL)
445 return CHANNEL_RC_BAD_CHANNEL;
446
447 if(pChannelInitEventProc == NULL)
448 return CHANNEL_RC_BAD_PROC;
449
451
452 if(This == NULL)
453 return CHANNEL_RC_NOT_IN_VIRTUALCHANNELENTRY;
454
455 if(This->num_channels + channelCount > CHANNEL_MAX_COUNT)
456 return CHANNEL_RC_TOO_MANY_CHANNELS;
457
458 for(INT i = 0; i < channelCount; ++ i)
459 {
460 if(strlen(pChannel[i].name) > CHANNEL_NAME_LEN)
461 return CHANNEL_RC_BAD_CHANNEL;
462 }
463
464 memcpy(This->channel_defs + This->num_channels, pChannel, sizeof(*pChannel) * channelCount);
465
466#if 0 // TODO
467 for(INT i = 0; i < channelCount; ++ i)
468 {
469 pChannel[i].options |= CHANNEL_OPTION_INITIALIZED;
470
471 int j = This->num_channels + i;
472 This->channel_data[j].opened = 0;
473 This->channel_data[j].pChannelInitEventProc = pChannelInitEventProc;
474 This->channel_data[j].pChannelOpenEventProc = NULL;
475 }
476#endif
477
478 This->num_channels += channelCount;
479
480 *ppInitHandle = This;
481
482 return CHANNEL_RC_OK;
483}
484
485UINT
486VCAPITYPE
488(
489 LPVOID pInitHandle,
490 LPDWORD pOpenHandle,
491 PCHAR pChannelName,
492 PCHANNEL_OPEN_EVENT_FN pChannelOpenEventProc
493)
494{
495 if(pInitHandle == NULL)
496 return CHANNEL_RC_BAD_INIT_HANDLE;
497
498 if(pOpenHandle == NULL)
499 return CHANNEL_RC_BAD_CHANNEL_HANDLE;
500
501 if(pChannelName == NULL)
502 return CHANNEL_RC_UNKNOWN_CHANNEL_NAME;
503
504 if(pChannelOpenEventProc == NULL)
505 return CHANNEL_RC_BAD_PROC;
506
507 RDPCLIENT * This = (RDPCLIENT *)pInitHandle;
508
509#if 0 // TODO
510 for(unsigned i = 0; i < This->num_channels; ++ i)
511 {
512 if(strcmp(pChannelName, This->channel_defs[i].name) == 0)
513 {
514 if(This->channel_data[i].opened)
515 return CHANNEL_RC_ALREADY_OPEN;
516
517 This->channel_data[i].opened = 1;
518 This->channel_data[i].pChannelOpenEventProc = pChannelOpenEventProc;
519
520 // TODO: allocate a handle here
521 *pOpenHandle = 0;
522
523 break;
524 }
525 }
526#endif
527
528 return CHANNEL_RC_OK;
529}
530
532(
533 DWORD openHandle
534)
535{
536 // TODO: channel handle management
537 return CHANNEL_RC_BAD_CHANNEL_HANDLE;
538}
539
541(
542 DWORD openHandle,
545 LPVOID pUserData
546)
547{
548 // TODO
549 return CHANNEL_RC_BAD_CHANNEL_HANDLE;
550}
551
552int wmain()
553{
554 WSADATA wsd;
555 WSAStartup(MAKEWORD(2, 2), &wsd);
556
557 static RDPCLIENT This_; // NOTE: this is HUGE and would overflow the stack!
558 ZeroMemory(&This_, sizeof(This_));
559
560 RDPCLIENT * This = &This_;
561
562 /*
563 Threading model for MissTosca:
564 - main thread is the GUI thread. Message loop maintained by caller
565 - protocol I/O is handled in an I/O thread (or thread pool)
566 - extra threads maintained by virtual channel handlers. Virtual channel writes are thread-neutral
567
568 How we handle drawing: at the moment just an off-screen buffer we dump on-screen when asked to.
569 Still considering how to draw on-screen directly and *then* buffering off-screen (for example,
570 when running inside another remote session)
571 */
572
573 // FIXME: keyboard mess
574 This->keylayout = 0x409;
575 This->keyboard_type = 0x4;
576 This->keyboard_subtype = 0x0;
577 This->keyboard_functionkeys = 0xc;
578 This->width = 800;
579 This->height = 600;
580 This->server_depth = 24;
581 This->bitmap_compression = True;
582 //This->sendmotion = True;
583 This->bitmap_cache = True;
584 This->bitmap_cache_persist_enable = False;
585 This->bitmap_cache_precache = True;
586 This->encryption = True;
587 This->packet_encryption = True;
588 This->desktop_save = True;
589 This->polygon_ellipse_orders = False; // = True;
590 //This->fullscreen = False;
591 //This->grab_keyboard = True;
592 //This->hide_decorations = False;
593 This->use_rdp5 = True;
594 //This->rdpclip = True;
595 This->console_session = False;
596 //This->numlock_sync = False;
597 //This->seamless_rdp = False;
599 This->tcp_port_rdp = TCP_PORT_RDP;
600
601#define NOT_SET -1
602 This->cache.bmpcache_lru[0] = NOT_SET;
603 This->cache.bmpcache_lru[1] = NOT_SET;
604 This->cache.bmpcache_lru[2] = NOT_SET;
605 This->cache.bmpcache_mru[0] = NOT_SET;
606 This->cache.bmpcache_mru[1] = NOT_SET;
607 This->cache.bmpcache_mru[2] = NOT_SET;
608
609 This->rdp.current_status = 1;
610
611 //hcursor = NULL;
612
613 WNDCLASS wc;
614 ZeroMemory(&wc, sizeof(wc));
615
617 wc.hbrBackground = static_cast<HBRUSH>(GetStockObject(HOLLOW_BRUSH));
618 wc.lpszClassName = TEXT("MissTosca_Desktop");
619
620 wmZMouseWheel = RegisterWindowMessage(MSH_MOUSEWHEEL);
621
622 ATOM a = RegisterClass(&wc);
623
625 (
626 MAKEINTATOM(a),
627 NULL,
631 This->width,
632 This->height,
633 NULL,
634 NULL,
635 NULL,
636 This
637 );
638
639 // The righ time to start the protocol thread
642
643 // Your standard, garden variety message loop
644 MSG msg;
645
646 while(GetMessage(&msg, NULL, 0, 0))
647 {
650 }
651}
652
653// EOF
@ lparam
Definition: SystemMenu.c:31
@ wparam
Definition: SystemMenu.c:30
#define EEXIST
Definition: acclib.h:88
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char * va_list
Definition: acmsvcex.h:78
#define va_end(ap)
Definition: acmsvcex.h:90
#define va_start(ap, A)
Definition: acmsvcex.h:91
#define msg(x)
Definition: auth_time.c:54
#define RDP_KEYPRESS
Definition: constants.h:251
#define MOUSE_FLAG_BUTTON5
Definition: constants.h:259
#define MOUSE_FLAG_DOWN
Definition: constants.h:260
#define RDP_KEYRELEASE
Definition: constants.h:252
#define MOUSE_FLAG_BUTTON1
Definition: constants.h:255
#define TCP_PORT_RDP
Definition: constants.h:21
#define CHANNEL_OPTION_INITIALIZED
Definition: constants.h:431
#define MOUSE_FLAG_BUTTON2
Definition: constants.h:256
#define MOUSE_FLAG_BUTTON4
Definition: constants.h:258
#define MOUSE_FLAG_BUTTON3
Definition: constants.h:257
@ RDP_INPUT_SCANCODE
Definition: constants.h:234
@ RDP_INPUT_MOUSE
Definition: constants.h:235
#define KBD_FLAG_EXT
Definition: constants.h:240
#define MOUSE_FLAG_MOVE
Definition: constants.h:254
#define RDP_LOGON_NORMAL
Definition: precomp.h:24
void rdp_send_input(uint32 time, uint16 message_type, uint16 device_flags, uint16 param1, uint16 param2)
Definition: rdp.c:551
RD_BOOL rdp_connect(char *server, uint32 flags, char *domain, char *password, char *command, char *directory, RD_BOOL reconnect)
Definition: rdp.c:1742
void rdp_main_loop(RD_BOOL *deactivated, uint32 *ext_disc_reason)
Definition: rdp.c:1682
unsigned short uint16
Definition: types.h:30
unsigned int uint32
Definition: types.h:32
#define False
Definition: types.h:25
#define True
Definition: types.h:24
unsigned char uint8
Definition: types.h:28
char * hostname
Definition: ftp.c:88
static WSADATA wsd
Definition: adapter.c:10
#define PtrToLong(p)
Definition: basetsd.h:84
#define LongToPtr(l)
Definition: basetsd.h:91
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
Definition: compname.c:446
WORD ATOM
Definition: dimm.idl:113
_Check_return_ _CRTIMP int __cdecl _mkdir(_In_z_ const char *_Path)
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define _O_RDWR
Definition: cabinet.h:39
#define _O_CREAT
Definition: cabinet.h:46
#define CALLBACK
Definition: compat.h:35
LPVOID WINAPI TlsGetValue(IN DWORD Index)
Definition: thread.c:1240
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
Definition: startup.c:113
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:57
#define BI_RGB
Definition: precomp.h:56
DWORD dwThreadId
Definition: fdebug.c:31
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
#define printf
Definition: freeldr.h:97
GLuint start
Definition: gl.h:1545
GLdouble s
Definition: gl.h:2039
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLbitfield flags
Definition: glext.h:7161
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
GLintptr offset
Definition: glext.h:5920
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
_CRTIMP void __cdecl perror(_In_opt_z_ const char *_ErrMsg)
#define stderr
Definition: stdio.h:100
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_opt_ _CRTIMP int __cdecl vfprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format, va_list _ArgList)
_Check_return_ char *__cdecl getenv(_In_z_ const char *_VarName)
REFIID LPVOID DWORD_PTR dw
Definition: atlbase.h:40
const char * filename
Definition: ioapi.h:137
#define SEEK_SET
Definition: jmemansi.c:26
#define LOBYTE(W)
Definition: jmemdos.c:487
#define TEXT(s)
Definition: k32.h:26
#define error(str)
Definition: mkdosfs.c:1605
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define RDP5_NO_MENUANIMATIONS
Definition: constants.h:271
#define RDP_LOGON_COMPRESSION
Definition: constants.h:263
#define RDP5_NO_FULLWINDOWDRAG
Definition: constants.h:270
#define RDP5_NO_WALLPAPER
Definition: constants.h:269
#define RDP_LOGON_COMPRESSION2
Definition: constants.h:265
static PVOID ptr
Definition: dispmode.c:27
#define sprintf(buf, format,...)
Definition: sprintf.c:55
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
DWORD button
Definition: button.c:166
static HDC
Definition: imagelist.c:88
unsigned int UINT
Definition: ndis.h:50
HANDLE hThread
Definition: wizard.c:28
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
#define WS_POPUP
Definition: pedump.c:616
#define WS_VISIBLE
Definition: pedump.c:620
short SHORT
Definition: pedump.c:59
UINT wmZMouseWheel
static LRESULT CALLBACK mstsc_WndProc(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam)
BOOL rd_pstcache_mkdir(void)
UINT VCAPITYPE VirtualChannelClose(DWORD openHandle)
int load_licence(RDPCLIENT *This, unsigned char **data)
static void mstsc_mousewheel(RDPCLIENT *This, int value, LPARAM lparam)
HBITMAP hbmBuffer
int rd_write_file(int fd, void *ptr, int len)
BOOL rd_lock_file(int fd, int start, int len)
static UINT VCAPITYPE VirtualChannelInit(LPVOID *ppInitHandle, PCHANNEL_DEF pChannel, INT channelCount, ULONG versionRequested, PCHANNEL_INIT_EVENT_FN pChannelInitEventProc)
void save_licence(RDPCLIENT *This, unsigned char *data, int length)
UINT VCAPITYPE VirtualChannelOpen(LPVOID pInitHandle, LPDWORD pOpenHandle, PCHAR pChannelName, PCHANNEL_OPEN_EVENT_FN pChannelOpenEventProc)
int rd_read_file(int fd, void *ptr, int len)
#define NOT_SET
void rd_close_file(int fd)
void channel_process(RDPCLIENT *This, STREAM s, uint16 mcs_channel)
void unimpl(char *format,...)
DWORD tlsIndex
UINT VCAPITYPE VirtualChannelWrite(DWORD openHandle, LPVOID pData, ULONG dataLength, LPVOID pUserData)
struct CHANNEL_HANDLE_ CHANNEL_HANDLE
void hexdump(unsigned char *p, unsigned int len)
static DWORD WINAPI mstsc_ProtocolIOThread(LPVOID lpArgument)
PVOID pBuffer
int wmain()
int rd_lseek_file(int fd, int offset)
int rd_open_file(char *filename)
void generate_random(uint8 *random)
HDC hdcBuffer
#define WM_PRINTCLIENT
Definition: richedit.h:70
#define DefWindowProc
Definition: ros2win.h:31
#define random
Definition: rosdhcp.h:81
#define errno
Definition: errno.h:18
_Check_return_opt_ _CRTIMP int __cdecl _close(_In_ int _FileHandle)
_Check_return_opt_ _CRTIMP long __cdecl _lseek(_In_ int _FileHandle, _In_ long _Offset, _In_ int _Origin)
_CRTIMP int __cdecl _write(_In_ int _FileHandle, _In_reads_bytes_(_MaxCharCount) const void *_Buf, _In_ unsigned int _MaxCharCount)
_Check_return_ _CRTIMP int __cdecl _read(_In_ int _FileHandle, _Out_writes_bytes_(_MaxCharCount) void *_DstBuf, _In_ unsigned int _MaxCharCount)
_CRTIMP int __cdecl _open(const char *_Filename, int _OpenFlag,...)
Definition: file.c:2001
ULONG dataLength
Definition: scsi.h:3751
#define warning(s)
Definition: debug.h:83
static int fd
Definition: io.c:51
HBRUSH hbrBackground
Definition: winuser.h:3173
LPCSTR lpszClassName
Definition: winuser.h:3175
WNDPROC lpfnWndProc
Definition: winuser.h:3167
Definition: format.c:58
Definition: tftpd.h:38
Definition: parser.c:49
Definition: name.c:39
Definition: parse.h:23
ULONG biClrImportant
Definition: precomp.h:52
USHORT biBitCount
Definition: precomp.h:46
LONG biYPelsPerMeter
Definition: precomp.h:50
ULONG biCompression
Definition: precomp.h:47
LONG biXPelsPerMeter
Definition: precomp.h:49
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1476
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
int deactivated
Definition: svgawin.c:63
uint32 ext_disc_reason
Definition: svgawin.c:64
#define WHEEL_DELTA
Definition: treelist.c:99
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
#define GWLP_USERDATA
Definition: treelist.c:63
#define WM_MOUSEWHEEL
Definition: treelist.c:96
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
#define MAKEWORD(a, b)
Definition: typedefs.h:248
uint32_t * LPDWORD
Definition: typedefs.h:59
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
char * PCHAR
Definition: typedefs.h:51
Definition: pdh_main.c:94
static GLenum _GLUfuncptr fn
Definition: wgl_font.c:159
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:245
#define ZeroMemory
Definition: winbase.h:1737
#define MAKEINTATOM(i)
Definition: winbase.h:1488
#define MAX_COMPUTERNAME_LENGTH
Definition: winbase.h:269
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
void int int ULONGLONG int va_list * ap
Definition: winesup.h:36
#define DIB_RGB_COLORS
Definition: wingdi.h:367
HGDIOBJ WINAPI GetStockObject(_In_ int)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define HOLLOW_BRUSH
Definition: wingdi.h:899
#define SRCCOPY
Definition: wingdi.h:333
#define WM_PAINT
Definition: winuser.h:1623
#define WM_CLOSE
Definition: winuser.h:1624
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define WM_KEYUP
Definition: winuser.h:1719
#define WM_CREATE
Definition: winuser.h:1611
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WM_RBUTTONUP
Definition: winuser.h:1783
#define WM_MOUSEMOVE
Definition: winuser.h:1778
#define WM_LBUTTONDOWN
Definition: winuser.h:1779
#define CreateWindow
Definition: winuser.h:5766
#define WM_RBUTTONDOWN
Definition: winuser.h:1782
#define GetMessage
Definition: winuser.h:5802
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define RegisterWindowMessage
Definition: winuser.h:5852
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define HTCLIENT
Definition: winuser.h:2478
#define SendMessage
Definition: winuser.h:5855
#define WM_SYSKEYUP
Definition: winuser.h:1723
#define WM_LBUTTONUP
Definition: winuser.h:1780
LONG WINAPI GetMessageTime(void)
Definition: message.c:1361
#define CW_USEDEFAULT
Definition: winuser.h:225
#define WM_SETCURSOR
Definition: winuser.h:1639
#define RegisterClass
Definition: winuser.h:5848
#define WM_DESTROY
Definition: winuser.h:1612
#define WM_KEYDOWN
Definition: winuser.h:1718
#define DispatchMessage
Definition: winuser.h:5777
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define WM_MBUTTONUP
Definition: winuser.h:1786
BOOL WINAPI DestroyWindow(_In_ HWND)
#define WM_SYSKEYDOWN
Definition: winuser.h:1722
#define WM_MBUTTONDOWN
Definition: winuser.h:1785
__wchar_t WCHAR
Definition: xmlstorage.h:180