--- sourceforge.net/trunk/rdesktop/rdp.c 2004/03/15 14:49:12 637 +++ sourceforge.net/trunk/rdesktop/rdp.c 2004/04/15 22:03:24 654 @@ -409,7 +409,7 @@ out_uint16_le(s, RDP_CAPSET_BITMAP); out_uint16_le(s, RDP_CAPLEN_BITMAP); - out_uint16_le(s, 8); /* Preferred BPP */ + out_uint16_le(s, g_server_bpp); /* Preferred BPP */ out_uint16_le(s, 1); /* Receive 1 BPP */ out_uint16_le(s, 1); /* Receive 4 BPP */ out_uint16_le(s, 1); /* Receive 8 BPP */ @@ -618,9 +618,35 @@ process_demand_active(STREAM s) { uint8 type; + uint16 i; + uint16 p_bpp; in_uint32_le(s, g_rdp_shareid); + /* scan for prefered bpp */ + while (s_check_rem(s, 6)) + { + in_uint16_le(s, i); + if (i == RDP_CAPSET_BITMAP) + { + in_uint16_le(s, i); + if (i == RDP_CAPLEN_BITMAP) + { + in_uint16_le(s, p_bpp); + if (p_bpp == 8 || p_bpp == 15 || p_bpp == 16 || p_bpp == 24) + { + if (p_bpp < g_server_bpp) + { + warning("Server limited colour depth to %d bits\n", p_bpp); + g_server_bpp = p_bpp; + } + break; + } + } + } + } + + DEBUG(("DEMAND_ACTIVE(id=0x%x)\n", g_rdp_shareid)); rdp_send_confirm_active(); @@ -754,13 +780,6 @@ DEBUG(("BITMAP_UPDATE(l=%d,t=%d,r=%d,b=%d,w=%d,h=%d,Bpp=%d,cmp=%d)\n", left, top, right, bottom, width, height, Bpp, compress)); - /* Server may limit bpp - this is how we find out */ - if (g_server_bpp != bpp) - { - warning("Server limited colour depth to %d bits\n", bpp); - g_server_bpp = bpp; - } - if (!compress) { int y;