summaryrefslogtreecommitdiffstats
path: root/libxrdp/xrdp_orders.c
diff options
context:
space:
mode:
authorJay Sorg <jay.sorg@gmail.com>2012-05-20 21:14:15 -0700
committerJay Sorg <jay.sorg@gmail.com>2012-05-20 21:14:15 -0700
commitd88291c9ddc4abc81ae68897faaafcc91f6a6e86 (patch)
tree74eccdb284fed0ffd7c9d6493745652e51808fc9 /libxrdp/xrdp_orders.c
parentaa3fad894db4e9b02999b229eb7e63fd8e91bdf6 (diff)
downloadxrdp-proprietary-d88291c9ddc4abc81ae68897faaafcc91f6a6e86.tar.gz
xrdp-proprietary-d88291c9ddc4abc81ae68897faaafcc91f6a6e86.zip
-xorg: work on off screen bitmaps
Diffstat (limited to 'libxrdp/xrdp_orders.c')
-rw-r--r--libxrdp/xrdp_orders.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/libxrdp/xrdp_orders.c b/libxrdp/xrdp_orders.c
index 5acd42b0..4a36e112 100644
--- a/libxrdp/xrdp_orders.c
+++ b/libxrdp/xrdp_orders.c
@@ -1971,21 +1971,45 @@ xrdp_orders_send_brush(struct xrdp_orders* self, int width, int height,
/* send an off screen bitmap entry */
int APP_CC
xrdp_orders_send_create_os_surface(struct xrdp_orders* self, int id,
- int width, int height)
+ int width, int height, int num_del_list,
+ int* del_list)
{
int order_flags;
int cache_id;
+ int flags;
+ int index;
+ int bytes;
- //g_writeln("xrdp_orders_send_create_os_surface:");
- xrdp_orders_check(self, 7);
+ bytes = 7;
+ if (num_del_list > 0)
+ {
+ bytes += 2;
+ bytes += num_del_list * 2;
+ }
+ xrdp_orders_check(self, bytes);
self->order_count++;
order_flags = RDP_ORDER_SECONDARY;
order_flags |= 1 << 2; /* type RDP_ORDER_ALTSEC_CREATE_OFFSCR_BITMAP */
out_uint8(self->out_s, order_flags);
cache_id = id & 0x7fff;
- out_uint16_le(self->out_s, cache_id);
+ flags = cache_id;
+ if (num_del_list > 0)
+ {
+ flags |= 0x8000;
+ }
+ out_uint16_le(self->out_s, flags);
out_uint16_le(self->out_s, width);
out_uint16_le(self->out_s, height);
+ if (num_del_list > 0)
+ {
+ /* delete list */
+ out_uint16_le(self->out_s, num_del_list);
+ for (index = 0; index < num_del_list; index++)
+ {
+ cache_id = del_list[index] & 0x7fff;
+ out_uint16_le(self->out_s, cache_id);
+ }
+ }
return 0;
}
@@ -1997,7 +2021,6 @@ xrdp_orders_send_switch_os_surface(struct xrdp_orders* self, int id)
int order_flags;
int cache_id;
- //g_writeln("xrdp_orders_send_switch_os_surface:");
xrdp_orders_check(self, 3);
self->order_count++;
order_flags = RDP_ORDER_SECONDARY;