void rdp_process_bitmap_capset(rdpRdp * rdp, STREAM s) { uint16 preferredBitsPerPixel; uint16 desktopWidth; uint16 desktopHeight; uint16 desktopResizeFlag; uint16 bitmapCompressionFlag; uint8 drawingFlags; /* * preferredBitsPerPixel (2 bytes): * A 16-bit, unsigned integer. Color depth of the remote session. In RDP 4.0 and 5.0, * this field MUST be set to 8 (even for a 16-color session) */ in_uint16_le(s, preferredBitsPerPixel); /* preferredBitsPerPixel */ in_uint8s(s, 6); /* Ignore receive1BitPerPixel, receive4BitPerPixel, receive8BitPerPixel */ in_uint16_le(s, desktopWidth); /* desktopWidth */ in_uint16_le(s, desktopHeight); /* desktopHeight */ in_uint8s(s, 2); /* pad */ in_uint16_le(s, desktopResizeFlag); /* desktopResizeFlag */ in_uint16_le(s, bitmapCompressionFlag); /* bitmapCompressionFlag */ in_uint8s(s, 1); /* Ignore highColorFlags */ in_uint8(s, drawingFlags); /* drawingFlags */ /* * The server may limit depth and change the size of the desktop (for * example when shadowing another session). */ if (rdp->settings->server_depth != preferredBitsPerPixel) { ui_warning(rdp->inst, "Remote desktop does not support color depth %d; falling back to %d\n", rdp->settings->server_depth, preferredBitsPerPixel); rdp->settings->server_depth = preferredBitsPerPixel; ui_resize_window(rdp->inst); } if (rdp->settings->width != desktopWidth || rdp->settings->height != desktopHeight) { ui_warning(rdp->inst, "Remote desktop changed from %dx%d to %dx%d.\n", rdp->settings->width, rdp->settings->height, desktopWidth, desktopHeight); rdp->settings->width = desktopWidth; rdp->settings->height = desktopHeight; ui_resize_window(rdp->inst); } }
/* initialise the persistent bitmap cache */ RD_BOOL pstcache_init(rdpPcache * pcache, uint8 cache_id) { int fd; char filename[256]; if (pcache->pstcache_enumerated) return True; pcache->pstcache_fd[cache_id] = 0; if (!(pcache->rdp->settings->bitmap_cache && pcache->rdp->settings->bitmap_cache_persist_enable)) return False; if (!rd_pstcache_mkdir()) { DEBUG("failed to get/make cache directory!\n"); return False; } pcache->pstcache_Bpp = (pcache->rdp->settings->server_depth + 7) / 8; sprintf(filename, "cache/pstcache_%d_%d", cache_id, pcache->pstcache_Bpp); DEBUG("persistent bitmap cache file: %s\n", filename); fd = rd_open_file(filename); if (fd == -1) return False; if (!rd_lock_file(fd, 0, 0)) { ui_warning(pcache->rdp->inst, "Persistent bitmap caching is disabled. (The file is already in use)\n"); rd_close_file(fd); return False; } pcache->pstcache_fd[cache_id] = fd; return True; }