#if WITH_DEBUG
DEBUG(("RDP packet #%d, (type %x, length %u)\n", ++g_packetno, *type, length));
- hexdump(g_next_packet, length);
+ //hexdump(g_next_packet, length);
#endif /* */
g_next_packet += length;
}
/* Initialise an RDP data packet */
-static STREAM
+STREAM
rdp_init_data(int maxlen)
{
STREAM s;
}
/* Send an RDP data packet */
-static void
+void
rdp_send_data(STREAM s, uint8 data_pdu_type)
{
uint16 length;
s->p += len;
}
+void rdp_send_bitmap_update(unsigned x, unsigned y, unsigned width, unsigned height, unsigned char *data)
+{
+ STREAM s;
+
+ s = rdp_init_data(11*2 + width*height*3);
+ out_uint16_le(s, RDP_UPDATE_BITMAP);
+ out_uint16_le(s, 1); // one update
+ out_uint16_le(s, x); // left, top, right, bottom
+ out_uint16_le(s, y);
+ out_uint16_le(s, x+width);
+ out_uint16_le(s, y+height);
+ out_uint16_le(s, width); // width, height
+ out_uint16_le(s, height);
+ out_uint16_le(s, 24); // bpp
+ out_uint16_le(s, 0); // no compression
+ out_uint16_le(s, width*height*3); // bufsize
+
+ out_uint8p(s, data, width*height*3);
+
+ s_mark_end(s);
+ rdp_send_data(s, RDP_DATA_PDU_UPDATE);
+}
+
+
void
rdp_get_logon_info(STREAM s)
{
rdp_send_data(s, RDP_DATA_PDU_SYNCHRONISE);
}
-/* Send a single input event */
+/* Receive a single input event */
void
-rdp_send_input(uint32 time, uint16 message_type, uint16 device_flags, uint16 param1, uint16 param2)
+rdp_recv_input(STREAM s, uint32 *time, uint16 *message_type, uint16 *device_flags, uint16 *param1, uint16 *param2)
{
- STREAM s;
-
- s = rdp_init_data(16);
-
- out_uint16_le(s, 1); /* number of events */
- out_uint16(s, 0); /* pad */
-
- out_uint32_le(s, time);
- out_uint16_le(s, message_type);
- out_uint16_le(s, device_flags);
- out_uint16_le(s, param1);
- out_uint16_le(s, param2);
-
- s_mark_end(s);
- rdp_send_data(s, RDP_DATA_PDU_INPUT);
+ in_uint32_le(s, *time);
+ in_uint16_le(s, *message_type);
+ in_uint16_le(s, *device_flags);
+ in_uint16_le(s, *param1);
+ in_uint16_le(s, *param2);
}
/* Disconnect from the RDP layer */