From 8a0fec5e66e88926d2d1b57cc74a70119e23147c Mon Sep 17 00:00:00 2001 From: speidy Date: Fri, 2 Dec 2016 06:55:53 -0500 Subject: [PATCH 1/9] o send RFX tiles as stream (Stream Surface Bits Command) o silent frame ack logging o support surface commands in capsets o fix some wrong constants --- common/xrdp_constants.h | 20 +++++++++++------- libxrdp/libxrdp.c | 6 +++--- libxrdp/xrdp_caps.c | 47 +++++++++++++++++++++++++++++++++++------ xrdp/xrdp_mm.c | 2 +- 4 files changed, 57 insertions(+), 18 deletions(-) diff --git a/common/xrdp_constants.h b/common/xrdp_constants.h index 7dcb3064..d5f7a8a8 100644 --- a/common/xrdp_constants.h +++ b/common/xrdp_constants.h @@ -538,9 +538,9 @@ #define COMPDESK_NOT_SUPPORTED 0x0000 #define COMPDESK_SUPPORTED 0x0001 -#define SURCMDS_SETSURFACEBITS 0x00000002 -#define SURCMDS_FRAMEMARKER 0x00000010 -#define SURCMDS_STREAMSUFRACEBITS 0x00000040 +#define SURFCMDS_SETSURFACEBITS 0x00000002 +#define SURFCMDS_FRAMEMARKER 0x00000010 +#define SURFCMDS_STREAMSUFRACEBITS 0x00000040 /* CODEC_GUID_NSCODEC CA8D1BB9-000F-154F-589FAE2D1A87E2D6 */ #define XR_CODEC_GUID_NSCODEC \ @@ -550,6 +550,10 @@ #define XR_CODEC_GUID_REMOTEFX \ "\x12\x2F\x77\x76\x72\xBD\x63\x44\xAF\xB3\xB7\x3C\x9C\x6F\x78\x86" +/* CODEC_GUID_IMAGE_REMOTEFX 2744CCD4-9D8A-4E74-803C-0ECBEEA19C54 */ +#define XR_CODEC_GUID_IMAGE_REMOTEFX \ + "\xD4\xCC\x44\x27\x8A\x9D\x74\x4E\x80\x3C\x0E\xCB\xEE\xA1\x9C\x54" + /* CODEC_GUID_JPEG 1BAF4CE6-9EED-430C-869ACB8B37B66237 */ #define XR_CODEC_GUID_JPEG \ "\xE6\x4C\xAF\x1B\xED\x9E\x0C\x43\x86\x9A\xCB\x8B\x37\xB6\x62\x37" @@ -562,13 +566,13 @@ #define XR_CODEC_GUID_H264 \ "\x48\x32\x36\x34\x00\x00\x10\x00\x80\x00\x00\xAA\x00\x38\x9B\x71" -#define RDP_CAPSET_SURFCMDS 0x1c -#define RDP_CAPLEN_SURFCMDS 0x0c -#define RDP_CAPSET_BMPCODECS 0x1d -#define RDP_CAPLEN_BMPCODECS 0x1c +#define RDP_CAPSET_SURFCMDS 0x1C +#define RDP_CAPLEN_SURFCMDS 0x0C +#define RDP_CAPSET_BMPCODECS 0x1D +#define RDP_CAPLEN_BMPCODECS 0x1C #define RDP_CAPSET_COMPDESK 0x19 #define RDP_CAPLEN_COMPDESK 0x06 -#define RDP_CAPSET_LPOINTER 0x27 +#define RDP_CAPSET_LPOINTER 0x1B #define RDP_CAPLEN_LPOINTER 0x06 /* fastpath input */ diff --git a/libxrdp/libxrdp.c b/libxrdp/libxrdp.c index c3763bf5..a9375ba6 100644 --- a/libxrdp/libxrdp.c +++ b/libxrdp/libxrdp.c @@ -1332,13 +1332,13 @@ libxrdp_fastpath_send_surface(struct xrdp_session *session, s->rdp_hdr = s->sec_hdr + sec_bytes; s->end = data_pad + pad_bytes + data_bytes; s->p = s->data + (rdp_bytes + sec_bytes); - /* TS_SURFCMD_SET_SURF_BITS */ - out_uint16_le(s, 0x0001); /* CMDTYPE_SET_SURFACE_BITS */ + /* TS_SURFCMD_STREAM_SURF_BITS */ + out_uint16_le(s, 0x0006); /* CMDTYPE_STREAM_SURFACE_BITS */ out_uint16_le(s, destLeft); out_uint16_le(s, destTop); out_uint16_le(s, destRight); out_uint16_le(s, destBottom); - /* TS_ BITMAP_DATA_EX */ + /* TS_BITMAP_DATA_EX */ out_uint8(s, bpp); out_uint8(s, 0); out_uint8(s, 0); diff --git a/libxrdp/xrdp_caps.c b/libxrdp/xrdp_caps.c index 8d5250d5..3c5af034 100644 --- a/libxrdp/xrdp_caps.c +++ b/libxrdp/xrdp_caps.c @@ -466,7 +466,7 @@ xrdp_caps_process_codecs(struct xrdp_rdp *self, struct stream *s, int len) } else if (g_memcmp(codec_guid, XR_CODEC_GUID_REMOTEFX, 16) == 0) { - g_writeln("xrdp_caps_process_codecs: rfx codec id %d prop len %d", + g_writeln("xrdp_caps_process_codecs: RemoteFX, codec id %d prop len %d", codec_id, codec_properties_length); self->client_info.rfx_codec_id = codec_id; i1 = MIN(64, codec_properties_length); @@ -533,6 +533,20 @@ xrdp_caps_process_frame_ack(struct xrdp_rdp *self, struct stream *s, int len) return 0; } +/*****************************************************************************/ +static int APP_CC +xrdp_caps_process_surface_cmds(struct xrdp_rdp *self, struct stream *s, int len) +{ + int cmdFlags; + g_writeln("xrdp_caps_process_surface_cmds:"); + + in_uint32_le(s, cmdFlags); + in_uint8s(s, 4); /* reserved */ + + g_writeln(" cmdFlags 0x%08x", cmdFlags); + return 0; +} + /*****************************************************************************/ int APP_CC xrdp_caps_process_confirm_active(struct xrdp_rdp *self, struct stream *s) @@ -659,6 +673,9 @@ xrdp_caps_process_confirm_active(struct xrdp_rdp *self, struct stream *s) case 0x001E: /* CAPSSETTYPE_FRAME_ACKNOWLEDGE */ xrdp_caps_process_frame_ack(self, s, len); break; + case RDP_CAPSET_SURFCMDS: /* CAPSETTYPE_SURFACE_COMMANDS */ + xrdp_caps_process_surface_cmds(self, s, len); + break; default: g_writeln("unknown in xrdp_caps_process_confirm_active %d", type); break; @@ -827,7 +844,7 @@ xrdp_caps_send_demand_active(struct xrdp_rdp *self) codec_caps_count++; out_uint8a(s, XR_CODEC_GUID_NSCODEC, 16); out_uint8(s, 1); /* codec id, must be 1 */ - out_uint16_le(s, 3); + out_uint16_le(s, 3); /* codecPropertiesLength */ out_uint8(s, 0x01); /* fAllowDynamicFidelity */ out_uint8(s, 0x01); /* fAllowSubsampling */ out_uint8(s, 0x03); /* colorLossLevel */ @@ -835,14 +852,20 @@ xrdp_caps_send_demand_active(struct xrdp_rdp *self) codec_caps_count++; out_uint8a(s, XR_CODEC_GUID_REMOTEFX, 16); out_uint8(s, 0); /* codec id, client sets */ - out_uint16_le(s, 256); - out_uint8s(s, 256); + out_uint16_le(s, 4); /* codecPropertiesLength */ + out_uint32_le(s, 0); /* reserved */ + /* image remotefx */ + codec_caps_count++; + out_uint8a(s, XR_CODEC_GUID_IMAGE_REMOTEFX, 16); + out_uint8(s, 0); /* codec id, client sets */ + out_uint16_le(s, 4); /* codecPropertiesLength */ + out_uint32_le(s, 0); /* reserved */ /* jpeg */ codec_caps_count++; out_uint8a(s, XR_CODEC_GUID_JPEG, 16); out_uint8(s, 0); /* codec id, client sets */ - out_uint16_le(s, 1); /* ext length */ - out_uint8(s, 75); + out_uint16_le(s, 4); /* codecPropertiesLength */ + out_uint32_le(s, 0); /* reserved */ /* calculate and set size and count */ codec_caps_size = (int)(s->p - codec_caps_size_ptr); codec_caps_size += 2; /* 2 bytes for RDP_CAPSET_BMPCODECS above */ @@ -919,6 +942,18 @@ xrdp_caps_send_demand_active(struct xrdp_rdp *self) out_uint16_le(s, 8); out_uint32_le(s, 2); /* 2 frames in flight */ + /* surface commands */ + if (self->client_info.use_fast_path & 1) /* surface commands requires fastpath output */ + { + caps_count++; + out_uint16_le(s, RDP_CAPSET_SURFCMDS); /* CAPSETTYPE_SURFACE_COMMANDS */ + out_uint16_le(s, RDP_CAPLEN_SURFCMDS); /* lengthCapability */ + out_uint32_le(s, (SURFCMDS_SETSURFACEBITS | + SURFCMDS_FRAMEMARKER | + SURFCMDS_STREAMSUFRACEBITS)); /* cmdFlags */ + out_uint32_le(s, 0); /* reserved */ + } + out_uint8s(s, 4); /* pad */ s_mark_end(s); diff --git a/xrdp/xrdp_mm.c b/xrdp/xrdp_mm.c index 715a18fc..07c69327 100644 --- a/xrdp/xrdp_mm.c +++ b/xrdp/xrdp_mm.c @@ -2291,7 +2291,7 @@ xrdp_mm_frame_ack(struct xrdp_mm *self, int frame_id) { int ex; - LLOGLN(0, ("xrdp_mm_frame_ack:")); + LLOGLN(10, ("xrdp_mm_frame_ack:")); self->encoder->frame_id_client = frame_id; if (self->wm->client_info->use_frame_acks == 0) { From bf07c205712902764901060d77794b890aa84e6a Mon Sep 17 00:00:00 2001 From: speidy Date: Thu, 8 Dec 2016 19:04:11 -0500 Subject: [PATCH 2/9] no logic change, indent only --- libxrdp/xrdp_caps.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/libxrdp/xrdp_caps.c b/libxrdp/xrdp_caps.c index 3c5af034..9c50c0b4 100644 --- a/libxrdp/xrdp_caps.c +++ b/libxrdp/xrdp_caps.c @@ -539,12 +539,10 @@ xrdp_caps_process_surface_cmds(struct xrdp_rdp *self, struct stream *s, int len) { int cmdFlags; g_writeln("xrdp_caps_process_surface_cmds:"); - - in_uint32_le(s, cmdFlags); - in_uint8s(s, 4); /* reserved */ - - g_writeln(" cmdFlags 0x%08x", cmdFlags); - return 0; + in_uint32_le(s, cmdFlags); + in_uint8s(s, 4); /* reserved */ + g_writeln(" cmdFlags 0x%08x", cmdFlags); + return 0; } /*****************************************************************************/ From bb8b85759d8bf5dc0c9df41fa63bf5a4bc5a889e Mon Sep 17 00:00:00 2001 From: speidy Date: Thu, 8 Dec 2016 19:06:36 -0500 Subject: [PATCH 3/9] xrdp_encoder: remove temporary workaround for RFX to avoid mstsc --- xrdp/xrdp_encoder.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/xrdp/xrdp_encoder.c b/xrdp/xrdp_encoder.c index 643fe0aa..7f5ace1e 100644 --- a/xrdp/xrdp_encoder.c +++ b/xrdp/xrdp_encoder.c @@ -58,11 +58,6 @@ xrdp_encoder_create(struct xrdp_mm *mm) client_info = mm->wm->client_info; - if (client_info->client_os_major != OSMAJORTYPE_UNIX) - { - /* temp workaround to avoid black screen in non-supported clients */ - return 0; - } if (client_info->mcs_connection_type != 6) /* LAN */ { return 0; From 1ef5c2412c07b108bcf5d2984d576578ffb83ef8 Mon Sep 17 00:00:00 2001 From: speidy Date: Sat, 10 Dec 2016 02:14:50 -0500 Subject: [PATCH 4/9] xrdp_caps: fix jpeg codec properties --- libxrdp/xrdp_caps.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libxrdp/xrdp_caps.c b/libxrdp/xrdp_caps.c index 9c50c0b4..9d3352f2 100644 --- a/libxrdp/xrdp_caps.c +++ b/libxrdp/xrdp_caps.c @@ -862,8 +862,8 @@ xrdp_caps_send_demand_active(struct xrdp_rdp *self) codec_caps_count++; out_uint8a(s, XR_CODEC_GUID_JPEG, 16); out_uint8(s, 0); /* codec id, client sets */ - out_uint16_le(s, 4); /* codecPropertiesLength */ - out_uint32_le(s, 0); /* reserved */ + out_uint16_le(s, 1); /* codecPropertiesLength */ + out_uint8(s, 75); /* jpeg compression ratio */ /* calculate and set size and count */ codec_caps_size = (int)(s->p - codec_caps_size_ptr); codec_caps_size += 2; /* 2 bytes for RDP_CAPSET_BMPCODECS above */ From d6a470e9730f56d582243b9585cc51a630467d8d Mon Sep 17 00:00:00 2001 From: speidy Date: Tue, 13 Dec 2016 14:31:27 -0500 Subject: [PATCH 5/9] libxrdp: improve messages --- libxrdp/libxrdp.c | 2 +- libxrdp/xrdp_caps.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libxrdp/libxrdp.c b/libxrdp/libxrdp.c index a9375ba6..2d59621a 100644 --- a/libxrdp/libxrdp.c +++ b/libxrdp/libxrdp.c @@ -1333,7 +1333,7 @@ libxrdp_fastpath_send_surface(struct xrdp_session *session, s->end = data_pad + pad_bytes + data_bytes; s->p = s->data + (rdp_bytes + sec_bytes); /* TS_SURFCMD_STREAM_SURF_BITS */ - out_uint16_le(s, 0x0006); /* CMDTYPE_STREAM_SURFACE_BITS */ + out_uint16_le(s, CMDTYPE_STREAM_SURFACE_BITS); out_uint16_le(s, destLeft); out_uint16_le(s, destTop); out_uint16_le(s, destRight); diff --git a/libxrdp/xrdp_caps.c b/libxrdp/xrdp_caps.c index 9d3352f2..4db1da5e 100644 --- a/libxrdp/xrdp_caps.c +++ b/libxrdp/xrdp_caps.c @@ -457,7 +457,7 @@ xrdp_caps_process_codecs(struct xrdp_rdp *self, struct stream *s, int len) if (g_memcmp(codec_guid, XR_CODEC_GUID_NSCODEC, 16) == 0) { - g_writeln("xrdp_caps_process_codecs: nscodec codec id %d prop len %d", + g_writeln("xrdp_caps_process_codecs: nscodec, codec id %d, properties len %d", codec_id, codec_properties_length); self->client_info.ns_codec_id = codec_id; i1 = MIN(64, codec_properties_length); @@ -466,7 +466,7 @@ xrdp_caps_process_codecs(struct xrdp_rdp *self, struct stream *s, int len) } else if (g_memcmp(codec_guid, XR_CODEC_GUID_REMOTEFX, 16) == 0) { - g_writeln("xrdp_caps_process_codecs: RemoteFX, codec id %d prop len %d", + g_writeln("xrdp_caps_process_codecs: RemoteFX, codec id %d, properites len %d", codec_id, codec_properties_length); self->client_info.rfx_codec_id = codec_id; i1 = MIN(64, codec_properties_length); @@ -475,7 +475,7 @@ xrdp_caps_process_codecs(struct xrdp_rdp *self, struct stream *s, int len) } else if (g_memcmp(codec_guid, XR_CODEC_GUID_JPEG, 16) == 0) { - g_writeln("xrdp_caps_process_codecs: jpeg codec id %d prop len %d", + g_writeln("xrdp_caps_process_codecs: jpeg, codec id %d, properties len %d", codec_id, codec_properties_length); self->client_info.jpeg_codec_id = codec_id; i1 = MIN(64, codec_properties_length); @@ -492,7 +492,7 @@ xrdp_caps_process_codecs(struct xrdp_rdp *self, struct stream *s, int len) } else if (g_memcmp(codec_guid, XR_CODEC_GUID_H264, 16) == 0) { - g_writeln("xrdp_caps_process_codecs: h264 codec id %d prop len %d", + g_writeln("xrdp_caps_process_codecs: h264, codec id %d, properties len %d", codec_id, codec_properties_length); self->client_info.h264_codec_id = codec_id; i1 = MIN(64, codec_properties_length); @@ -941,7 +941,7 @@ xrdp_caps_send_demand_active(struct xrdp_rdp *self) out_uint32_le(s, 2); /* 2 frames in flight */ /* surface commands */ - if (self->client_info.use_fast_path & 1) /* surface commands requires fastpath output */ + if (self->client_info.use_fast_path & 1) /* surface commands require fastpath output */ { caps_count++; out_uint16_le(s, RDP_CAPSET_SURFCMDS); /* CAPSETTYPE_SURFACE_COMMANDS */ From 5e39bb1f87d3d01b360f03cc81f65f03dd3d6e87 Mon Sep 17 00:00:00 2001 From: speidy Date: Tue, 13 Dec 2016 15:05:39 -0500 Subject: [PATCH 6/9] libxrdp: caps, group caps require fastpath output, use FASTPATH_OUTPUT_SUPPORTED constant --- common/xrdp_constants.h | 3 +++ libxrdp/xrdp_caps.c | 18 ++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/common/xrdp_constants.h b/common/xrdp_constants.h index d5f7a8a8..73fd95d7 100644 --- a/common/xrdp_constants.h +++ b/common/xrdp_constants.h @@ -283,6 +283,9 @@ #define RDP_CAPSET_VIRCHAN 20 #define RDP_CAPLEN_VIRCHAN 0x08 +#define RDP_CAPSET_MULTIFRAGMENT 0x001A +#define RDP_CAPLEN_MULTIFRAGMENT 0x08 + #define RDP_SOURCE "MSTSC" /* Logon flags */ diff --git a/libxrdp/xrdp_caps.c b/libxrdp/xrdp_caps.c index 4db1da5e..9a240d4f 100644 --- a/libxrdp/xrdp_caps.c +++ b/libxrdp/xrdp_caps.c @@ -926,23 +926,21 @@ xrdp_caps_send_demand_active(struct xrdp_rdp *self) out_uint16_le(s, 5); out_uint8(s, 0); /* client sets */ - if (self->client_info.use_fast_path & 1) /* fastpath output on */ + if (self->client_info.use_fast_path & FASTPATH_OUTPUT_SUPPORTED) /* fastpath output on */ { + /* multifragment update */ caps_count++; out_uint16_le(s, 0x001A); /* 26 CAPSETTYPE_MULTIFRAGMENTUPDATE */ out_uint16_le(s, 8); out_uint32_le(s, 3 * 1024 * 1024); /* 3MB */ - } - /* frame acks */ - caps_count++; - out_uint16_le(s, 0x001E); /* CAPSETTYPE_FRAME_ACKNOWLEDGE */ - out_uint16_le(s, 8); - out_uint32_le(s, 2); /* 2 frames in flight */ + /* frame acks */ + caps_count++; + out_uint16_le(s, 0x001E); /* CAPSETTYPE_FRAME_ACKNOWLEDGE */ + out_uint16_le(s, 8); + out_uint32_le(s, 2); /* 2 frames in flight */ - /* surface commands */ - if (self->client_info.use_fast_path & 1) /* surface commands require fastpath output */ - { + /* surface commands */ caps_count++; out_uint16_le(s, RDP_CAPSET_SURFCMDS); /* CAPSETTYPE_SURFACE_COMMANDS */ out_uint16_le(s, RDP_CAPLEN_SURFCMDS); /* lengthCapability */ From 917aadd2d1a9b0e7373948ab9f52dcb9b93032e0 Mon Sep 17 00:00:00 2001 From: speidy Date: Tue, 13 Dec 2016 18:18:34 -0500 Subject: [PATCH 7/9] libxrdp: more constants --- common/xrdp_constants.h | 3 +++ libxrdp/xrdp_caps.c | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/common/xrdp_constants.h b/common/xrdp_constants.h index 82b4c059..6b89a0dc 100644 --- a/common/xrdp_constants.h +++ b/common/xrdp_constants.h @@ -287,6 +287,9 @@ #define RDP_CAPSET_MULTIFRAGMENT 0x001A #define RDP_CAPLEN_MULTIFRAGMENT 0x08 +#define RDP_CAPSET_FRAME_ACKNOWLEDGE 0x001E +#define RDP_CAPLEN_FRAME_ACKNOWLEDGE 0x08 + #define RDP_SOURCE "MSTSC" /* Logon flags */ diff --git a/libxrdp/xrdp_caps.c b/libxrdp/xrdp_caps.c index 237370e9..26a6eebc 100644 --- a/libxrdp/xrdp_caps.c +++ b/libxrdp/xrdp_caps.c @@ -926,14 +926,14 @@ xrdp_caps_send_demand_active(struct xrdp_rdp *self) { /* multifragment update */ caps_count++; - out_uint16_le(s, 0x001A); /* 26 CAPSETTYPE_MULTIFRAGMENTUPDATE */ - out_uint16_le(s, 8); + out_uint16_le(s, RDP_CAPSET_MULTIFRAGMENT); /* 26 CAPSETTYPE_MULTIFRAGMENTUPDATE */ + out_uint16_le(s, RDP_CAPLEN_MULTIFRAGMENT); out_uint32_le(s, 3 * 1024 * 1024); /* 3MB */ /* frame acks */ caps_count++; - out_uint16_le(s, 0x001E); /* CAPSETTYPE_FRAME_ACKNOWLEDGE */ - out_uint16_le(s, 8); + out_uint16_le(s, RDP_CAPSET_FRAME_ACKNOWLEDGE); /* CAPSETTYPE_FRAME_ACKNOWLEDGE */ + out_uint16_le(s, RDP_CAPLEN_FRAME_ACKNOWLEDGE); out_uint32_le(s, 2); /* 2 frames in flight */ /* surface commands */ From a614b60157ba0904dce275d9b76af7f42b3aa182 Mon Sep 17 00:00:00 2001 From: speidy Date: Tue, 13 Dec 2016 18:19:32 -0500 Subject: [PATCH 8/9] lixrdp: typo fix --- libxrdp/xrdp_caps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libxrdp/xrdp_caps.c b/libxrdp/xrdp_caps.c index 26a6eebc..a8b9344f 100644 --- a/libxrdp/xrdp_caps.c +++ b/libxrdp/xrdp_caps.c @@ -466,7 +466,7 @@ xrdp_caps_process_codecs(struct xrdp_rdp *self, struct stream *s, int len) } else if (g_memcmp(codec_guid, XR_CODEC_GUID_REMOTEFX, 16) == 0) { - g_writeln("xrdp_caps_process_codecs: RemoteFX, codec id %d, properites len %d", + g_writeln("xrdp_caps_process_codecs: RemoteFX, codec id %d, properties len %d", codec_id, codec_properties_length); self->client_info.rfx_codec_id = codec_id; i1 = MIN(64, codec_properties_length); From 469735404432b19bab7b9b5cf5eda2ce21a6a136 Mon Sep 17 00:00:00 2001 From: speidy Date: Tue, 13 Dec 2016 19:35:56 -0500 Subject: [PATCH 9/9] xrdp_constants: move CAPSET constants to their place --- common/xrdp_constants.h | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/common/xrdp_constants.h b/common/xrdp_constants.h index 6b89a0dc..41c4a5ee 100644 --- a/common/xrdp_constants.h +++ b/common/xrdp_constants.h @@ -290,6 +290,18 @@ #define RDP_CAPSET_FRAME_ACKNOWLEDGE 0x001E #define RDP_CAPLEN_FRAME_ACKNOWLEDGE 0x08 +#define RDP_CAPSET_SURFCMDS 0x1C +#define RDP_CAPLEN_SURFCMDS 0x0C + +#define RDP_CAPSET_BMPCODECS 0x1D +#define RDP_CAPLEN_BMPCODECS 0x1C + +#define RDP_CAPSET_COMPDESK 0x19 +#define RDP_CAPLEN_COMPDESK 0x06 + +#define RDP_CAPSET_LPOINTER 0x1B +#define RDP_CAPLEN_LPOINTER 0x06 + #define RDP_SOURCE "MSTSC" /* Logon flags */ @@ -573,15 +585,6 @@ #define XR_CODEC_GUID_H264 \ "\x48\x32\x36\x34\x00\x00\x10\x00\x80\x00\x00\xAA\x00\x38\x9B\x71" -#define RDP_CAPSET_SURFCMDS 0x1C -#define RDP_CAPLEN_SURFCMDS 0x0C -#define RDP_CAPSET_BMPCODECS 0x1D -#define RDP_CAPLEN_BMPCODECS 0x1C -#define RDP_CAPSET_COMPDESK 0x19 -#define RDP_CAPLEN_COMPDESK 0x06 -#define RDP_CAPSET_LPOINTER 0x1B -#define RDP_CAPLEN_LPOINTER 0x06 - /* fastpath input */ #define FASTPATH_INPUT_SECURE_CHECKSUM 0x1 #define FASTPATH_INPUT_ENCRYPTED 0x2