Unify monitor processing logic.

There are two places where monitor descriptions are passed through the
RDP protocol:

- TS_UD_CS_MONITOR ([MS-RDPBCGR] 2.2.1.3.6 Client Monitor Data)
- DISPLAYCONTROL_PDU_TYPE_MONITOR_LAYOUT ([MS-RDPEDISP] 2.2.2.2)

The processing logic for both of them is similar enough that they should be unified.

Also update to define the constants for the maximum and minimum desktop width/height for monitors and total area.

Also a large number of clarifications for the constants and protocol
requirements.

Note that this is also the first step to making resizing work with the extension GFX channel as well as an important
foundational step to enable HiDPI compatibility.

Also some misc logging updates.
This commit is contained in:
Christopher Pitstick
2021-05-25 00:05:54 -04:00
parent f3c37e2694
commit 4a0db63be7
9 changed files with 607 additions and 217 deletions
+12
View File
@@ -359,6 +359,16 @@ int
xrdp_mcs_disconnect(struct xrdp_mcs *self);
/* xrdp_sec.c */
/*
These are return values for xrdp_sec_process_mcs_data_monitors
to clarify any reason for a non-zero response code.
*/
#define SEC_PROCESS_MONITORS_ERR 1
#define SEC_PROCESS_MONITORS_ERR_TOO_MANY_MONITORS 2
#define SEC_PROCESS_MONITORS_ERR_INVALID_DESKTOP 3
#define SEC_PROCESS_MONITORS_ERR_INVALID_MONITOR 4
struct xrdp_sec *
xrdp_sec_create(struct xrdp_rdp *owner, struct trans *trans);
void
@@ -383,6 +393,8 @@ int
xrdp_sec_incoming(struct xrdp_sec *self);
int
xrdp_sec_disconnect(struct xrdp_sec *self);
int
xrdp_sec_process_mcs_data_monitors(struct xrdp_sec *self, struct stream *s);
/* xrdp_rdp.c */
struct xrdp_rdp *