[core,gcc] use static substream for client data
This commit is contained in:
parent
b69c259967
commit
40dd43cb01
@ -84,8 +84,8 @@ static HIGH_COLOR_DEPTH ColorDepthToHighColor(UINT32 bpp)
|
||||
}
|
||||
}
|
||||
|
||||
static BOOL gcc_read_client_cluster_data(wStream* s, rdpMcs* mcs, UINT16 blockLength);
|
||||
static BOOL gcc_read_client_core_data(wStream* s, rdpMcs* mcs, UINT16 blockLength);
|
||||
static BOOL gcc_read_client_cluster_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_read_client_core_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_read_client_data_blocks(wStream* s, rdpMcs* mcs, UINT16 length);
|
||||
static BOOL gcc_read_server_data_blocks(wStream* s, rdpMcs* mcs, UINT16 length);
|
||||
static BOOL gcc_read_user_data_header(wStream* s, UINT16* type, UINT16* length);
|
||||
@ -94,25 +94,24 @@ static BOOL gcc_write_user_data_header(wStream* s, UINT16 type, UINT16 length);
|
||||
static BOOL gcc_write_client_core_data(wStream* s, const rdpMcs* mcs);
|
||||
static BOOL gcc_read_server_core_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_write_server_core_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_read_client_security_data(wStream* s, rdpMcs* mcs, UINT16 blockLength);
|
||||
static BOOL gcc_read_client_security_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_write_client_security_data(wStream* s, const rdpMcs* mcs);
|
||||
static BOOL gcc_read_server_security_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_write_server_security_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_read_client_network_data(wStream* s, rdpMcs* mcs, UINT16 blockLength);
|
||||
static BOOL gcc_read_client_network_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_write_client_network_data(wStream* s, const rdpMcs* mcs);
|
||||
static BOOL gcc_read_server_network_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_write_server_network_data(wStream* s, const rdpMcs* mcs);
|
||||
static BOOL gcc_write_client_cluster_data(wStream* s, const rdpMcs* mcs);
|
||||
static BOOL gcc_read_client_monitor_data(wStream* s, rdpMcs* mcs, UINT16 blockLength);
|
||||
static BOOL gcc_read_client_monitor_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_write_client_monitor_data(wStream* s, const rdpMcs* mcs);
|
||||
static BOOL gcc_read_client_monitor_extended_data(wStream* s, rdpMcs* mcs, UINT16 blockLength);
|
||||
static BOOL gcc_read_client_monitor_extended_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_write_client_monitor_extended_data(wStream* s, const rdpMcs* mcs);
|
||||
static BOOL gcc_read_client_message_channel_data(wStream* s, rdpMcs* mcs, UINT16 blockLength);
|
||||
static BOOL gcc_read_client_message_channel_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_write_client_message_channel_data(wStream* s, const rdpMcs* mcs);
|
||||
static BOOL gcc_read_server_message_channel_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_write_server_message_channel_data(wStream* s, const rdpMcs* mcs);
|
||||
static BOOL gcc_read_client_multitransport_channel_data(wStream* s, rdpMcs* mcs,
|
||||
UINT16 blockLength);
|
||||
static BOOL gcc_read_client_multitransport_channel_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_write_client_multitransport_channel_data(wStream* s, const rdpMcs* mcs);
|
||||
static BOOL gcc_read_server_multitransport_channel_data(wStream* s, rdpMcs* mcs);
|
||||
static BOOL gcc_write_server_multitransport_channel_data(wStream* s, const rdpMcs* mcs);
|
||||
@ -563,6 +562,7 @@ BOOL gcc_read_client_data_blocks(wStream* s, rdpMcs* mcs, UINT16 length)
|
||||
WINPR_ASSERT(mcs);
|
||||
while (length > 0)
|
||||
{
|
||||
wStream sbuffer = { 0 };
|
||||
UINT16 type;
|
||||
UINT16 blockLength;
|
||||
size_t endPos;
|
||||
@ -574,60 +574,63 @@ BOOL gcc_read_client_data_blocks(wStream* s, rdpMcs* mcs, UINT16 length)
|
||||
if (!Stream_CheckAndLogRequiredLength(TAG, s, (size_t)(blockLength - 4)))
|
||||
return FALSE;
|
||||
|
||||
wStream* sub = Stream_StaticConstInit(&sbuffer, Stream_Pointer(s), blockLength - 4);
|
||||
WINPR_ASSERT(sub);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case CS_CORE:
|
||||
if (!gcc_read_client_core_data(s, mcs, blockLength - 4))
|
||||
if (!gcc_read_client_core_data(sub, mcs))
|
||||
return FALSE;
|
||||
|
||||
break;
|
||||
|
||||
case CS_SECURITY:
|
||||
if (!gcc_read_client_security_data(s, mcs, blockLength - 4))
|
||||
if (!gcc_read_client_security_data(sub, mcs))
|
||||
return FALSE;
|
||||
|
||||
break;
|
||||
|
||||
case CS_NET:
|
||||
if (!gcc_read_client_network_data(s, mcs, blockLength - 4))
|
||||
if (!gcc_read_client_network_data(sub, mcs))
|
||||
return FALSE;
|
||||
|
||||
break;
|
||||
|
||||
case CS_CLUSTER:
|
||||
if (!gcc_read_client_cluster_data(s, mcs, blockLength - 4))
|
||||
if (!gcc_read_client_cluster_data(sub, mcs))
|
||||
return FALSE;
|
||||
|
||||
break;
|
||||
|
||||
case CS_MONITOR:
|
||||
if (!gcc_read_client_monitor_data(s, mcs, blockLength - 4))
|
||||
if (!gcc_read_client_monitor_data(sub, mcs))
|
||||
return FALSE;
|
||||
|
||||
break;
|
||||
|
||||
case CS_MCS_MSGCHANNEL:
|
||||
if (!gcc_read_client_message_channel_data(s, mcs, blockLength - 4))
|
||||
if (!gcc_read_client_message_channel_data(sub, mcs))
|
||||
return FALSE;
|
||||
|
||||
break;
|
||||
|
||||
case CS_MONITOR_EX:
|
||||
if (!gcc_read_client_monitor_extended_data(s, mcs, blockLength - 4))
|
||||
if (!gcc_read_client_monitor_extended_data(sub, mcs))
|
||||
return FALSE;
|
||||
|
||||
break;
|
||||
|
||||
case 0xC009:
|
||||
case CS_MULTITRANSPORT:
|
||||
if (!gcc_read_client_multitransport_channel_data(s, mcs, blockLength - 4))
|
||||
if (!gcc_read_client_multitransport_channel_data(sub, mcs))
|
||||
return FALSE;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
WLog_ERR(TAG, "Unknown GCC client data block: 0x%04" PRIX16 "", type);
|
||||
winpr_HexDump(TAG, WLOG_TRACE, Stream_Pointer(s), blockLength - 4);
|
||||
winpr_HexDump(TAG, WLOG_TRACE, Stream_Pointer(sub), Stream_GetRemainingLength(sub));
|
||||
Stream_Seek(s, blockLength - 4);
|
||||
break;
|
||||
}
|
||||
@ -1094,7 +1097,7 @@ static BOOL updateEarlyServerCaps(rdpSettings* settings, UINT32 earlyCapabilityF
|
||||
* @return \b TRUE for success, \b FALSE otherwise
|
||||
*/
|
||||
|
||||
BOOL gcc_read_client_core_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
|
||||
BOOL gcc_read_client_core_data(wStream* s, rdpMcs* mcs)
|
||||
{
|
||||
char buffer[2048] = { 0 };
|
||||
char strbuffer[130] = { 0 };
|
||||
@ -1110,6 +1113,7 @@ BOOL gcc_read_client_core_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
|
||||
WINPR_ASSERT(s);
|
||||
WINPR_ASSERT(settings);
|
||||
|
||||
size_t blockLength = Stream_GetRemainingLength(s);
|
||||
/* Length of all required fields, until imeFileName */
|
||||
if (blockLength < 128)
|
||||
return FALSE;
|
||||
@ -1489,13 +1493,14 @@ BOOL gcc_write_server_core_data(wStream* s, rdpMcs* mcs)
|
||||
* @return \b TRUE for success, \b FALSE otherwise
|
||||
*/
|
||||
|
||||
BOOL gcc_read_client_security_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
|
||||
BOOL gcc_read_client_security_data(wStream* s, rdpMcs* mcs)
|
||||
{
|
||||
rdpSettings* settings = mcs_get_settings(mcs);
|
||||
|
||||
WINPR_ASSERT(s);
|
||||
WINPR_ASSERT(settings);
|
||||
|
||||
const size_t blockLength = Stream_GetRemainingLength(s);
|
||||
if (blockLength < 8)
|
||||
return FALSE;
|
||||
|
||||
@ -1904,12 +1909,14 @@ BOOL gcc_write_server_security_data(wStream* s, rdpMcs* mcs)
|
||||
* @return \b TRUE for success, \b FALSE otherwise
|
||||
*/
|
||||
|
||||
BOOL gcc_read_client_network_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
|
||||
BOOL gcc_read_client_network_data(wStream* s, rdpMcs* mcs)
|
||||
{
|
||||
UINT32 i;
|
||||
|
||||
WINPR_ASSERT(s);
|
||||
WINPR_ASSERT(mcs);
|
||||
|
||||
const size_t blockLength = Stream_GetRemainingLength(s);
|
||||
if (blockLength < 4)
|
||||
return FALSE;
|
||||
|
||||
@ -2058,7 +2065,7 @@ BOOL gcc_write_server_network_data(wStream* s, const rdpMcs* mcs)
|
||||
* @return \b TRUE for success, \b FALSE otherwise
|
||||
*/
|
||||
|
||||
BOOL gcc_read_client_cluster_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
|
||||
BOOL gcc_read_client_cluster_data(wStream* s, rdpMcs* mcs)
|
||||
{
|
||||
char buffer[128] = { 0 };
|
||||
UINT32 redirectedSessionId;
|
||||
@ -2067,6 +2074,7 @@ BOOL gcc_read_client_cluster_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
|
||||
WINPR_ASSERT(s);
|
||||
WINPR_ASSERT(settings);
|
||||
|
||||
const size_t blockLength = Stream_GetRemainingLength(s);
|
||||
if (blockLength < 8)
|
||||
return FALSE;
|
||||
|
||||
@ -2150,7 +2158,7 @@ BOOL gcc_write_client_cluster_data(wStream* s, const rdpMcs* mcs)
|
||||
* @return \b TRUE for success, \b FALSE otherwise
|
||||
*/
|
||||
|
||||
BOOL gcc_read_client_monitor_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
|
||||
BOOL gcc_read_client_monitor_data(wStream* s, rdpMcs* mcs)
|
||||
{
|
||||
UINT32 index;
|
||||
UINT32 monitorCount;
|
||||
@ -2159,6 +2167,7 @@ BOOL gcc_read_client_monitor_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
|
||||
WINPR_ASSERT(s);
|
||||
WINPR_ASSERT(settings);
|
||||
|
||||
const size_t blockLength = Stream_GetRemainingLength(s);
|
||||
if (blockLength < 8)
|
||||
return FALSE;
|
||||
|
||||
@ -2271,7 +2280,7 @@ BOOL gcc_write_client_monitor_data(wStream* s, const rdpMcs* mcs)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL gcc_read_client_monitor_extended_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
|
||||
BOOL gcc_read_client_monitor_extended_data(wStream* s, rdpMcs* mcs)
|
||||
{
|
||||
UINT32 index;
|
||||
UINT32 monitorCount;
|
||||
@ -2281,6 +2290,7 @@ BOOL gcc_read_client_monitor_extended_data(wStream* s, rdpMcs* mcs, UINT16 block
|
||||
WINPR_ASSERT(s);
|
||||
WINPR_ASSERT(settings);
|
||||
|
||||
const size_t blockLength = Stream_GetRemainingLength(s);
|
||||
if (blockLength < 12)
|
||||
return FALSE;
|
||||
|
||||
@ -2352,10 +2362,12 @@ BOOL gcc_write_client_monitor_extended_data(wStream* s, const rdpMcs* mcs)
|
||||
* @return \b TRUE for success, \b FALSE otherwise
|
||||
*/
|
||||
|
||||
BOOL gcc_read_client_message_channel_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
|
||||
BOOL gcc_read_client_message_channel_data(wStream* s, rdpMcs* mcs)
|
||||
{
|
||||
WINPR_ASSERT(s);
|
||||
WINPR_ASSERT(mcs);
|
||||
|
||||
const size_t blockLength = Stream_GetRemainingLength(s);
|
||||
if (blockLength < 4)
|
||||
return FALSE;
|
||||
|
||||
@ -2428,12 +2440,14 @@ BOOL gcc_write_server_message_channel_data(wStream* s, const rdpMcs* mcs)
|
||||
* @return \b TRUE for success, \b FALSE otherwise
|
||||
*/
|
||||
|
||||
BOOL gcc_read_client_multitransport_channel_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
|
||||
BOOL gcc_read_client_multitransport_channel_data(wStream* s, rdpMcs* mcs)
|
||||
{
|
||||
rdpSettings* settings = mcs_get_settings(mcs);
|
||||
|
||||
WINPR_ASSERT(s);
|
||||
WINPR_ASSERT(settings);
|
||||
|
||||
const size_t blockLength = Stream_GetRemainingLength(s);
|
||||
if (blockLength < 4)
|
||||
return FALSE;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user