22#include <freerdp/config.h>
25#include <winpr/assert.h>
26#include <winpr/stream.h>
28#include "rdpgfx_common.h"
43 if (!Stream_CheckAndLogRequiredLengthWLog(log, s, 8))
44 return ERROR_INVALID_DATA;
46 Stream_Read_UINT16(s, header->cmdId);
47 Stream_Read_UINT16(s, header->flags);
48 Stream_Read_UINT32(s, header->pduLength);
50 if (header->pduLength < 8)
52 WLog_Print(log, WLOG_ERROR,
"header->pduLength %u less than 8!", header->pduLength);
53 return ERROR_INVALID_DATA;
56 const size_t size = (header->pduLength - 8ull);
57 if (!Stream_CheckAndLogRequiredLengthWLog(log, s, size))
58 return ERROR_INVALID_DATA;
60 *pPacketLength = size;
75 if (!Stream_EnsureRemainingCapacity(s, 8))
76 return CHANNEL_RC_NO_MEMORY;
77 Stream_Write_UINT16(s, header->cmdId);
78 Stream_Write_UINT16(s, header->flags);
79 Stream_Write_UINT32(s, header->pduLength);
93 if (!Stream_CheckAndLogRequiredLengthWLog(log, s, 4))
94 return ERROR_INVALID_DATA;
96 Stream_Read_UINT16(s, pt16->x);
97 Stream_Read_UINT16(s, pt16->y);
109 WINPR_ASSERT(point16);
111 if (!Stream_EnsureRemainingCapacity(s, 4))
112 return CHANNEL_RC_NO_MEMORY;
114 Stream_Write_UINT16(s, point16->x);
115 Stream_Write_UINT16(s, point16->y);
116 return CHANNEL_RC_OK;
127 WINPR_ASSERT(rect16);
129 if (!Stream_CheckAndLogRequiredLengthWLog(log, s, 8))
130 return ERROR_INVALID_DATA;
132 Stream_Read_UINT16(s, rect16->left);
133 Stream_Read_UINT16(s, rect16->top);
134 Stream_Read_UINT16(s, rect16->right);
135 Stream_Read_UINT16(s, rect16->bottom);
136 if (rect16->left >= rect16->right)
137 return ERROR_INVALID_DATA;
138 if (rect16->top >= rect16->bottom)
139 return ERROR_INVALID_DATA;
140 return CHANNEL_RC_OK;
151 WINPR_ASSERT(rect16);
153 if (!Stream_EnsureRemainingCapacity(s, 8))
154 return CHANNEL_RC_NO_MEMORY;
156 Stream_Write_UINT16(s, rect16->left);
157 Stream_Write_UINT16(s, rect16->top);
158 Stream_Write_UINT16(s, rect16->right);
159 Stream_Write_UINT16(s, rect16->bottom);
160 return CHANNEL_RC_OK;
171 WINPR_ASSERT(color32);
173 if (!Stream_CheckAndLogRequiredLengthWLog(log, s, 4))
174 return ERROR_INVALID_DATA;
176 Stream_Read_UINT8(s, color32->B);
177 Stream_Read_UINT8(s, color32->G);
178 Stream_Read_UINT8(s, color32->R);
179 Stream_Read_UINT8(s, color32->XA);
180 return CHANNEL_RC_OK;
191 WINPR_ASSERT(color32);
193 if (!Stream_EnsureRemainingCapacity(s, 4))
194 return CHANNEL_RC_NO_MEMORY;
196 Stream_Write_UINT8(s, color32->B);
197 Stream_Write_UINT8(s, color32->G);
198 Stream_Write_UINT8(s, color32->R);
199 Stream_Write_UINT8(s, color32->XA);
200 return CHANNEL_RC_OK;