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
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);
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: