server: update: call update_check_flush whenever using the reused update buffer
This commit is contained in:
parent
ab3a096353
commit
9e47fd76db
@ -2267,14 +2267,15 @@ BOOL update_send_new_or_existing_window(rdpContext* context, const WINDOW_ORDER_
|
|||||||
wStream* s;
|
wStream* s;
|
||||||
rdpUpdate* update = context->update;
|
rdpUpdate* update = context->update;
|
||||||
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
||||||
UINT16 orderSize;
|
UINT16 orderSize = update_calculate_new_or_existing_window(orderInfo, stateOrder);
|
||||||
|
|
||||||
|
update_check_flush(context, orderSize);
|
||||||
|
|
||||||
s = update->us;
|
s = update->us;
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
orderSize = update_calculate_new_or_existing_window(orderInfo, stateOrder);
|
|
||||||
|
|
||||||
if (!Stream_EnsureRemainingCapacity(s, orderSize))
|
if (!Stream_EnsureRemainingCapacity(s, orderSize))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@ -2437,14 +2438,16 @@ BOOL update_send_window_icon(rdpContext* context, const WINDOW_ORDER_INFO* order
|
|||||||
wStream* s;
|
wStream* s;
|
||||||
rdpUpdate* update = context->update;
|
rdpUpdate* update = context->update;
|
||||||
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
||||||
UINT16 orderSize;
|
|
||||||
ICON_INFO* iconInfo = iconOrder->iconInfo;
|
ICON_INFO* iconInfo = iconOrder->iconInfo;
|
||||||
|
UINT16 orderSize = update_calculate_window_icon_order(orderInfo, iconOrder);
|
||||||
|
|
||||||
|
update_check_flush(context, orderSize);
|
||||||
|
|
||||||
s = update->us;
|
s = update->us;
|
||||||
|
|
||||||
if (!s || !iconInfo)
|
if (!s || !iconInfo)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
orderSize = update_calculate_window_icon_order(orderInfo, iconOrder);
|
|
||||||
if (!Stream_EnsureRemainingCapacity(s, orderSize))
|
if (!Stream_EnsureRemainingCapacity(s, orderSize))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@ -2488,8 +2491,10 @@ BOOL update_send_window_cached_icon(rdpContext* context, const WINDOW_ORDER_INFO
|
|||||||
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
||||||
UINT16 orderSize = 14;
|
UINT16 orderSize = 14;
|
||||||
CACHED_ICON_INFO cachedIcon = cachedIconOrder->cachedIcon;
|
CACHED_ICON_INFO cachedIcon = cachedIconOrder->cachedIcon;
|
||||||
s = update->us;
|
|
||||||
|
|
||||||
|
update_check_flush(context, orderSize);
|
||||||
|
|
||||||
|
s = update->us;
|
||||||
if (!s)
|
if (!s)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@ -2514,6 +2519,8 @@ BOOL update_send_window_delete(rdpContext* context, const WINDOW_ORDER_INFO* ord
|
|||||||
rdpUpdate* update = context->update;
|
rdpUpdate* update = context->update;
|
||||||
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
||||||
UINT16 orderSize = 11;
|
UINT16 orderSize = 11;
|
||||||
|
update_check_flush(context, orderSize);
|
||||||
|
|
||||||
s = update->us;
|
s = update->us;
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
@ -2580,16 +2587,16 @@ BOOL update_send_new_or_existing_notification_icons(rdpContext* context,
|
|||||||
wStream* s;
|
wStream* s;
|
||||||
rdpUpdate* update = context->update;
|
rdpUpdate* update = context->update;
|
||||||
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
||||||
UINT16 orderSize;
|
|
||||||
BOOL versionFieldPresent = FALSE;
|
BOOL versionFieldPresent = FALSE;
|
||||||
|
UINT16 orderSize =
|
||||||
|
update_calculate_new_or_existing_notification_icons_order(orderInfo, iconStateOrder);
|
||||||
|
|
||||||
|
update_check_flush(context, orderSize);
|
||||||
|
|
||||||
s = update->us;
|
s = update->us;
|
||||||
if (!s)
|
if (!s)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
orderSize =
|
|
||||||
update_calculate_new_or_existing_notification_icons_order(orderInfo, iconStateOrder);
|
|
||||||
|
|
||||||
if (!Stream_EnsureRemainingCapacity(s, orderSize))
|
if (!Stream_EnsureRemainingCapacity(s, orderSize))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@ -2693,6 +2700,8 @@ BOOL update_send_notify_icon_delete(rdpContext* context, const WINDOW_ORDER_INFO
|
|||||||
rdpUpdate* update = context->update;
|
rdpUpdate* update = context->update;
|
||||||
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
||||||
UINT16 orderSize = 15;
|
UINT16 orderSize = 15;
|
||||||
|
update_check_flush(context, orderSize);
|
||||||
|
|
||||||
s = update->us;
|
s = update->us;
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
@ -2708,6 +2717,24 @@ BOOL update_send_notify_icon_delete(rdpContext* context, const WINDOW_ORDER_INFO
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static UINT16 update_calculate_monitored_desktop(const WINDOW_ORDER_INFO* orderInfo,
|
||||||
|
const MONITORED_DESKTOP_ORDER* monitoredDesktop)
|
||||||
|
{
|
||||||
|
UINT16 orderSize = 7;
|
||||||
|
|
||||||
|
if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_DESKTOP_ACTIVE_WND)
|
||||||
|
{
|
||||||
|
orderSize += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_DESKTOP_ZORDER)
|
||||||
|
{
|
||||||
|
orderSize += 1 + (4 * monitoredDesktop->numWindowIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
return orderSize;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL update_send_monitored_desktop(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo,
|
BOOL update_send_monitored_desktop(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo,
|
||||||
const MONITORED_DESKTOP_ORDER* monitoredDesktop)
|
const MONITORED_DESKTOP_ORDER* monitoredDesktop)
|
||||||
{
|
{
|
||||||
@ -2715,42 +2742,34 @@ BOOL update_send_monitored_desktop(rdpContext* context, const WINDOW_ORDER_INFO*
|
|||||||
wStream* s;
|
wStream* s;
|
||||||
rdpUpdate* update = context->update;
|
rdpUpdate* update = context->update;
|
||||||
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
||||||
UINT16 orderSize = 7;
|
UINT16 orderSize = update_calculate_monitored_desktop(orderInfo, monitoredDesktop);
|
||||||
size_t orderSizePos, orderEndPos;
|
update_check_flush(context, orderSize);
|
||||||
|
|
||||||
s = update->us;
|
s = update->us;
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
Stream_Write_UINT8(s, controlFlags); /* Header (1 byte) */
|
Stream_Write_UINT8(s, controlFlags); /* Header (1 byte) */
|
||||||
orderSizePos = Stream_GetPosition(s);
|
Stream_Write_UINT16(s, orderSize); /* OrderSize (2 bytes) */
|
||||||
Stream_Seek_UINT16(s); /* OrderSize (2 bytes) */
|
|
||||||
Stream_Write_UINT32(s, orderInfo->fieldFlags); /* FieldsPresentFlags (4 bytes) */
|
Stream_Write_UINT32(s, orderInfo->fieldFlags); /* FieldsPresentFlags (4 bytes) */
|
||||||
|
|
||||||
if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_DESKTOP_ACTIVE_WND)
|
if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_DESKTOP_ACTIVE_WND)
|
||||||
{
|
{
|
||||||
Stream_Write_UINT32(s, monitoredDesktop->activeWindowId); /* activeWindowId (4 bytes) */
|
Stream_Write_UINT32(s, monitoredDesktop->activeWindowId); /* activeWindowId (4 bytes) */
|
||||||
orderSize += 4;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_DESKTOP_ZORDER)
|
if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_DESKTOP_ZORDER)
|
||||||
{
|
{
|
||||||
Stream_Write_UINT8(s, monitoredDesktop->numWindowIds); /* numWindowIds (1 byte) */
|
Stream_Write_UINT8(s, monitoredDesktop->numWindowIds); /* numWindowIds (1 byte) */
|
||||||
orderSize += 1;
|
|
||||||
|
|
||||||
/* windowIds */
|
/* windowIds */
|
||||||
for (i = 0; i < (int)monitoredDesktop->numWindowIds; i++)
|
for (i = 0; i < (int)monitoredDesktop->numWindowIds; i++)
|
||||||
{
|
{
|
||||||
Stream_Write_UINT32(s, monitoredDesktop->windowIds[i]);
|
Stream_Write_UINT32(s, monitoredDesktop->windowIds[i]);
|
||||||
orderSize += 4;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Write size */
|
|
||||||
orderEndPos = Stream_GetPosition(s);
|
|
||||||
Stream_SetPosition(s, orderSizePos);
|
|
||||||
Stream_Write_UINT16(s, orderSize);
|
|
||||||
Stream_SetPosition(s, orderEndPos);
|
|
||||||
update->numberOrders++;
|
update->numberOrders++;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -2761,6 +2780,8 @@ BOOL update_send_non_monitored_desktop(rdpContext* context, const WINDOW_ORDER_I
|
|||||||
rdpUpdate* update = context->update;
|
rdpUpdate* update = context->update;
|
||||||
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
BYTE controlFlags = ORDER_SECONDARY | (ORDER_TYPE_WINDOW << 2);
|
||||||
UINT16 orderSize = 7;
|
UINT16 orderSize = 7;
|
||||||
|
update_check_flush(context, orderSize);
|
||||||
|
|
||||||
s = update->us;
|
s = update->us;
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
|
Loading…
Reference in New Issue
Block a user