static BOOL gcc_write_server_network_data(wStream* s, rdpMcs* mcs);
static void gcc_write_client_cluster_data(wStream* s, rdpMcs* mcs);
static BOOL gcc_read_client_monitor_data(wStream* s, rdpMcs* mcs, UINT16 blockLength);
-static void gcc_write_client_monitor_data(wStream* s, rdpMcs* mcs);
+static BOOL gcc_write_client_monitor_data(wStream* s, rdpMcs* mcs);
static BOOL gcc_read_client_monitor_extended_data(wStream* s, rdpMcs* mcs, UINT16 blockLength);
-static void gcc_write_client_monitor_extended_data(wStream* s, rdpMcs* mcs);
+static BOOL gcc_write_client_monitor_extended_data(wStream* s, rdpMcs* mcs);
static BOOL gcc_read_client_message_channel_data(wStream* s, rdpMcs* mcs, UINT16 blockLength);
static void gcc_write_client_message_channel_data(wStream* s, rdpMcs* mcs);
static BOOL gcc_read_server_message_channel_data(wStream* s, rdpMcs* mcs);
return TRUE;
}
-void gcc_write_client_data_blocks(wStream* s, rdpMcs* mcs)
+BOOL gcc_write_client_data_blocks(wStream* s, rdpMcs* mcs)
{
rdpSettings* settings = mcs->settings;
gcc_write_client_core_data(s, mcs);
{
if (settings->UseMultimon && !settings->SpanMonitors)
{
- gcc_write_client_monitor_data(s, mcs);
- gcc_write_client_monitor_extended_data(s, mcs);
+ if (!gcc_write_client_monitor_data(s, mcs))
+ return FALSE;
+
+ if (!gcc_write_client_monitor_extended_data(s, mcs))
+ return FALSE;
}
gcc_write_client_message_channel_data(s, mcs);
if (settings->ForceMultimon)
{
WLog_ERR(TAG, "Sending multi monitor information anyway (may break connectivity!)");
- gcc_write_client_monitor_data(s, mcs);
- gcc_write_client_monitor_extended_data(s, mcs);
+ if (!gcc_write_client_monitor_data(s, mcs))
+ return FALSE;
+
+ if (!gcc_write_client_monitor_extended_data(s, mcs))
+ return FALSE;
}
else
{
}
}
}
+
+ return TRUE;
}
BOOL gcc_read_server_data_blocks(wStream* s, rdpMcs* mcs, int length)
* @param settings rdp settings
*/
-void gcc_write_client_monitor_data(wStream* s, rdpMcs* mcs)
+BOOL gcc_write_client_monitor_data(wStream* s, rdpMcs* mcs)
{
UINT32 i;
UINT16 length;
if (settings->MonitorCount > 1)
{
length = (20 * settings->MonitorCount) + 12;
+ if (!Stream_EnsureRemainingCapacity(s, length))
+ return FALSE;
+
gcc_write_user_data_header(s, CS_MONITOR, length);
Stream_Write_UINT32(s, 0); /* flags */
Stream_Write_UINT32(s, settings->MonitorCount); /* monitorCount */
Stream_Write_UINT32(s, flags); /* flags */
}
}
+
+ return TRUE;
}
BOOL gcc_read_client_monitor_extended_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
return TRUE;
}
-void gcc_write_client_monitor_extended_data(wStream* s, rdpMcs* mcs)
+BOOL gcc_write_client_monitor_extended_data(wStream* s, rdpMcs* mcs)
{
UINT32 i;
UINT16 length;
if (settings->HasMonitorAttributes)
{
length = (20 * settings->MonitorCount) + 16;
+ if (!Stream_EnsureRemainingCapacity(s, length))
+ return FALSE;
+
gcc_write_user_data_header(s, CS_MONITOR_EX, length);
Stream_Write_UINT32(s, 0); /* flags */
Stream_Write_UINT32(s, 20); /* monitorAttributeSize */
settings->MonitorDefArray[i].attributes.deviceScaleFactor); /* deviceScaleFactor */
}
}
+
+ return TRUE;
}
/**