From d599129218e388c74b42a92a2ff432d28f34fc62 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Fri, 4 Feb 2005 16:50:17 +0000 Subject: [PATCH] Try to send VNC pointer events on RDP input PDUs. --- rdpsrv.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/rdpsrv.c b/rdpsrv.c index 1bf41d7..1718dc1 100644 --- a/rdpsrv.c +++ b/rdpsrv.c @@ -59,12 +59,14 @@ int create_server_socket() return server_sock; } -void handle_input_pdu(STREAM s) +void handle_input_pdu(STREAM s, int vnc_sock) { uint32 time; uint16 message_type, device_flags, param1, param2; uint16 num_events; int i; + char buf[256]; + static int mouse1_down = 0, mouse2_down = 0; in_uint16_le(s, num_events); // number of events in_uint8s(s, 2); // pad @@ -91,6 +93,19 @@ void handle_input_pdu(STREAM s) printf("- Device flags: %x\n", device_flags); printf("- Position: (%u,%u)\n", param1, param2); + if (device_flags & MOUSE_FLAG_BUTTON1) + mouse1_down = (device_flags & MOUSE_FLAG_DOWN) ? 0x01 : 0; + if (device_flags & MOUSE_FLAG_BUTTON2) + mouse2_down = (device_flags & MOUSE_FLAG_DOWN) ? 0x02 : 0; + + buf[0] = 5; // message type + buf[1] = mouse1_down | mouse2_down; // button mask + buf[2] = param1 >> 8; + buf[3] = param1 & 0xff; + buf[4] = param2 >> 8; + buf[5] = param2 & 0xff; + write(vnc_sock, buf, 6); + break; default: printf("- Unknown type %x\n", message_type); @@ -280,8 +295,7 @@ int serve_client() switch (data_pdu_type) { case RDP_DATA_PDU_INPUT: - printf("Input PDU\n"); - handle_input_pdu(s); + handle_input_pdu(s, vnc_sock); listen_on_vnc = 1; break; default: -- 2.39.2