X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=rdp.c;h=56a0f7c90e09ac84cb2993563c869f725a073f62;hb=f6cb05500f5c71cbb069daeb26edd5879fd17a99;hp=eafd3d0da7fae6e2506951723366e64fcd9c8355;hpb=108dfcdf9ffdb01149173feacc2592a8a359be74;p=rdpsrv diff --git a/rdp.c b/rdp.c index eafd3d0..56a0f7c 100644 --- a/rdp.c +++ b/rdp.c @@ -72,7 +72,7 @@ rdp_recv(uint8 * type) #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; @@ -80,7 +80,7 @@ rdp_recv(uint8 * type) } /* Initialise an RDP data packet */ -static STREAM +STREAM rdp_init_data(int maxlen) { STREAM s; @@ -92,7 +92,7 @@ rdp_init_data(int maxlen) } /* Send an RDP data packet */ -static void +void rdp_send_data(STREAM s, uint8 data_pdu_type) { uint16 length; @@ -148,6 +148,30 @@ rdp_in_unistr(STREAM s, char *string, int len) 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) { @@ -215,25 +239,15 @@ rdp_send_synchronise(void) 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 */