From e3340a110a3b01756b8e67531395a33b40a17d37 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Fri, 4 Feb 2005 13:01:14 +0000 Subject: [PATCH] Parse some input PDUs, and change bitmap outputs to follow the mouse. --- proto.h | 2 +- rdp.c | 9 +-------- rdpsrv.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/proto.h b/proto.h index d2cf92a..fa41088 100644 --- a/proto.h +++ b/proto.h @@ -75,7 +75,7 @@ BOOL rdp_main_loop(void); BOOL rdp_connect(char *server, uint32 flags, char *domain, char *password, char *command, char *directory); void rdp_disconnect(void); -void rdp_send_bitmap_update(void); +void rdp_send_bitmap_update(unsigned x, unsigned y); /* rdpdr.c */ void rdpdr_send_connect(void); void rdpdr_send_name(void); diff --git a/rdp.c b/rdp.c index 44c57d4..cd2f7c9 100644 --- a/rdp.c +++ b/rdp.c @@ -148,16 +148,9 @@ rdp_in_unistr(STREAM s, char *string, int len) s->p += len; } -void rdp_send_bitmap_update(void) +void rdp_send_bitmap_update(unsigned x, unsigned y) { STREAM s; - static unsigned int x = 1, y = 1; - - x += 2; - if (x > 300) { - x = 2; - y += 2; - } s = rdp_init_data(11*2 + 2*2*3); out_uint16_le(s, RDP_UPDATE_BITMAP); diff --git a/rdpsrv.c b/rdpsrv.c index 02628bf..e97515b 100644 --- a/rdpsrv.c +++ b/rdpsrv.c @@ -58,6 +58,49 @@ int create_server_socket() return server_sock; } +void handle_input_pdu(STREAM s) +{ + uint32 time; + uint16 message_type, device_flags, param1, param2; + uint16 num_events; + int i; + + in_uint16_le(s, num_events); // number of events + in_uint8s(s, 2); // pad + + for (i = 0; i < num_events; ++i) { + rdp_recv_input(s, &time, &message_type, &device_flags, ¶m1, ¶m2); + printf("Input event at time %u\n", time); + + switch (message_type) { + case RDP_INPUT_SYNCHRONIZE: + printf("- Type: Synchronize (ignored)\n"); + break; + case RDP_INPUT_CODEPOINT: + printf("- Type: Codepoint (ignored)\n"); + break; + case RDP_INPUT_VIRTKEY: + printf("- Type: Virtual key (ignored)\n"); + break; + case RDP_INPUT_SCANCODE: + printf("- Type: Scancode (ignored)\n"); + break; + case RDP_INPUT_MOUSE: + printf("- Type: Mouse\n"); + printf("- Device flags: %x\n", device_flags); + printf("- Position: (%u,%u)\n", param1, param2); + + // debug + rdp_send_bitmap_update(param1, param2); + + break; + default: + printf("- Unknown type %x\n", message_type); + break; + } + printf("\n"); + } +} int serve_client() { @@ -82,7 +125,7 @@ int serve_client() switch (data_pdu_type) { case RDP_DATA_PDU_INPUT: printf("Input PDU\n"); - rdp_send_bitmap_update(); + handle_input_pdu(s); break; default: printf("Unknown data PDU type %u\n", data_pdu_type); -- 2.39.2