Enable support for large pointers
The cursor-handling code already handles larger pointer sizes. This advertises that rdesktop has the capability to handle large cursors and adjusts the maximum size of fragmented packets to suit the large cursor requirements. Solves issue #173.
This commit is contained in:
parent
276ea5e16b
commit
99f5925cce
@ -57,7 +57,7 @@
|
||||
|
||||
#define FASTPATH_OUTPUT_COMPRESSION_USED (0x2 << 6)
|
||||
|
||||
#define RDESKTOP_FASTPATH_MULTIFRAGMENT_MAX_SIZE 32767
|
||||
#define RDESKTOP_FASTPATH_MULTIFRAGMENT_MAX_SIZE 65535
|
||||
|
||||
/* ISO PDU codes */
|
||||
enum ISO_PDU_CODE
|
||||
@ -383,6 +383,9 @@ enum RDP_INPUT_DEVICE
|
||||
#define RDP_CAPSET_MULTIFRAGMENTUPDATE 26
|
||||
#define RDP_CAPLEN_MULTIFRAGMENTUPDATE 8
|
||||
|
||||
#define RDP_CAPSET_LARGE_POINTER 27
|
||||
#define RDP_CAPLEN_LARGE_POINTER 6
|
||||
|
||||
#define RDP_SOURCE "MSTSC"
|
||||
|
||||
/* Logon flags */
|
||||
@ -745,3 +748,5 @@ enum RDP_PDU_REDIRECT_FLAGS
|
||||
/* [MS-RDPBCGR] 2.2.7.2.5 */
|
||||
#define FONTSUPPORT_FONTLIST 0x0001
|
||||
|
||||
/* [MS-RDPBCGR] 2.2.7.2.7 */
|
||||
#define LARGE_POINTER_FLAG_96x96 1
|
||||
|
23
rdp.c
23
rdp.c
@ -941,6 +941,16 @@ rdp_out_ts_multifragmentupdate_capabilityset(STREAM s)
|
||||
out_uint32_le(s, RDESKTOP_FASTPATH_MULTIFRAGMENT_MAX_SIZE); /* MaxRequestSize */
|
||||
}
|
||||
|
||||
static void
|
||||
rdp_out_ts_large_pointer_capabilityset(STREAM s)
|
||||
{
|
||||
uint16 flags = LARGE_POINTER_FLAG_96x96;
|
||||
|
||||
out_uint16_le(s, RDP_CAPSET_LARGE_POINTER);
|
||||
out_uint16_le(s, RDP_CAPLEN_LARGE_POINTER);
|
||||
out_uint16_le(s, flags); /* largePointerSupportFlags */
|
||||
}
|
||||
|
||||
#define RDP5_FLAG 0x0030
|
||||
/* Send a confirm active PDU */
|
||||
static void
|
||||
@ -962,6 +972,7 @@ rdp_send_confirm_active(void)
|
||||
RDP_CAPLEN_SOUND +
|
||||
RDP_CAPLEN_GLYPHCACHE +
|
||||
RDP_CAPLEN_MULTIFRAGMENTUPDATE +
|
||||
RDP_CAPLEN_LARGE_POINTER +
|
||||
4 /* w2k fix, sessionid */ ;
|
||||
|
||||
if (g_rdp_version >= RDP_V5)
|
||||
@ -987,7 +998,7 @@ rdp_send_confirm_active(void)
|
||||
out_uint16_le(s, caplen);
|
||||
|
||||
out_uint8p(s, RDP_SOURCE, sizeof(RDP_SOURCE));
|
||||
out_uint16_le(s, 15); /* num_caps */
|
||||
out_uint16_le(s, 16); /* num_caps */
|
||||
out_uint8s(s, 2); /* pad */
|
||||
|
||||
rdp_out_ts_general_capabilityset(s);
|
||||
@ -1014,6 +1025,7 @@ rdp_send_confirm_active(void)
|
||||
rdp_out_ts_font_capabilityset(s);
|
||||
rdp_out_ts_glyphcache_capabilityset(s);
|
||||
rdp_out_ts_multifragmentupdate_capabilityset(s);
|
||||
rdp_out_ts_large_pointer_capabilityset(s);
|
||||
|
||||
s_mark_end(s);
|
||||
sec_send(s, sec_flags);
|
||||
@ -1171,11 +1183,10 @@ process_colour_pointer_common(STREAM s, int bpp)
|
||||
in_uint16_le(s, datalen);
|
||||
in_uint8p(s, data, datalen);
|
||||
in_uint8p(s, mask, masklen);
|
||||
if ((width != 32) || (height != 32))
|
||||
{
|
||||
logger(Protocol, Warning, "process_colour_pointer_common(), width %d height %d",
|
||||
width, height);
|
||||
}
|
||||
|
||||
logger(Protocol, Debug,
|
||||
"process_colour_pointer_common(), new pointer %d with width %d and height %d",
|
||||
cache_idx, width, height);
|
||||
|
||||
/* keep hotspot within cursor bounding box */
|
||||
x = MIN(x, width - 1);
|
||||
|
Loading…
Reference in New Issue
Block a user