22#include <freerdp/config.h>
25#include <winpr/assert.h>
26#include <winpr/stream.h>
28#include "rdpgfx_common.h"
40 if (!Stream_CheckAndLogRequiredLengthWLog(log, s, 8))
41 return CHANNEL_RC_NO_MEMORY;
43 Stream_Read_UINT16(s, header->cmdId);
44 Stream_Read_UINT16(s, header->flags);
45 Stream_Read_UINT32(s, header->pduLength);
47 if (header->pduLength < 8)
49 WLog_Print(log, WLOG_ERROR,
"header->pduLength %u less than 8!", header->pduLength);
50 return ERROR_INVALID_DATA;
52 if (!Stream_CheckAndLogRequiredLengthWLog(log, s, (header->pduLength - 8)))
53 return ERROR_INVALID_DATA;
68 if (!Stream_EnsureRemainingCapacity(s, 8))
69 return CHANNEL_RC_NO_MEMORY;
70 Stream_Write_UINT16(s, header->cmdId);
71 Stream_Write_UINT16(s, header->flags);
72 Stream_Write_UINT32(s, header->pduLength);
86 if (!Stream_CheckAndLogRequiredLengthWLog(log, s, 4))
87 return ERROR_INVALID_DATA;
89 Stream_Read_UINT16(s, pt16->x);
90 Stream_Read_UINT16(s, pt16->y);
102 WINPR_ASSERT(point16);
104 if (!Stream_EnsureRemainingCapacity(s, 4))
105 return CHANNEL_RC_NO_MEMORY;
107 Stream_Write_UINT16(s, point16->x);
108 Stream_Write_UINT16(s, point16->y);
109 return CHANNEL_RC_OK;
120 WINPR_ASSERT(rect16);
122 if (!Stream_CheckAndLogRequiredLengthWLog(log, s, 8))
123 return ERROR_INVALID_DATA;
125 Stream_Read_UINT16(s, rect16->left);
126 Stream_Read_UINT16(s, rect16->top);
127 Stream_Read_UINT16(s, rect16->right);
128 Stream_Read_UINT16(s, rect16->bottom);
129 if (rect16->left >= rect16->right)
130 return ERROR_INVALID_DATA;
131 if (rect16->top >= rect16->bottom)
132 return ERROR_INVALID_DATA;
133 return CHANNEL_RC_OK;
144 WINPR_ASSERT(rect16);
146 if (!Stream_EnsureRemainingCapacity(s, 8))
147 return CHANNEL_RC_NO_MEMORY;
149 Stream_Write_UINT16(s, rect16->left);
150 Stream_Write_UINT16(s, rect16->top);
151 Stream_Write_UINT16(s, rect16->right);
152 Stream_Write_UINT16(s, rect16->bottom);
153 return CHANNEL_RC_OK;
164 WINPR_ASSERT(color32);
166 if (!Stream_CheckAndLogRequiredLengthWLog(log, s, 4))
167 return ERROR_INVALID_DATA;
169 Stream_Read_UINT8(s, color32->B);
170 Stream_Read_UINT8(s, color32->G);
171 Stream_Read_UINT8(s, color32->R);
172 Stream_Read_UINT8(s, color32->XA);
173 return CHANNEL_RC_OK;
184 WINPR_ASSERT(color32);
186 if (!Stream_EnsureRemainingCapacity(s, 4))
187 return CHANNEL_RC_NO_MEMORY;
189 Stream_Write_UINT8(s, color32->B);
190 Stream_Write_UINT8(s, color32->G);
191 Stream_Write_UINT8(s, color32->R);
192 Stream_Write_UINT8(s, color32->XA);
193 return CHANNEL_RC_OK;