drdynvc: Improve dynamic channel support

The dynamic channel handler in xrdp_channel.c is updated to allow
the procs `data_first` pointer to be NULL. If this is done, the
channel handler performs all the dechunking necessary for the channel,
and only complete data PDUs are passed to procs 'data' callback.

This facility is applied to the dynamic channels supported by xrdp_mm.c.
The incoming callbacks for these channels now provide complete support
for the specification in [MS-RDPEDYC]. The existing channels were
incomplete in these respects:
1) The "Microsoft::Windows::RDS::Graphics" channel handler did not
   support incoming PDUs between 1591 and 1600 bytes. The specification
   calls for these to be sent as a single DATA_FIRST PDU.
2) The "Microsoft::Windows::RDS::DisplayControl" channel handler did
   not support incoming PDUs over 1590 bytes.
This commit is contained in:
matt335672
2026-08-07 12:04:36 +01:00
parent f745c9152d
commit 63afb676e6
7 changed files with 242 additions and 164 deletions
+3
View File
@@ -87,6 +87,9 @@
#define XRDP_MAX_BITMAP_CACHE_IDX 2000
#define XRDP_BITMAP_CACHE_ENTRIES 2048
/* Max number of dynamic channels we support */
#define DRDYNVC_CHANNEL_COUNT 256
/*
* Constants come from ITU-T Recommendations
*/