[core,gcc] use mcs_get_settings, make const correct

Use a common helper function to get (const correct) settings from rdpMcs
This commit is contained in:
Armin Novak 2022-12-12 12:17:18 +01:00 committed by David Fort
parent 917e392f1e
commit 8200536285
2 changed files with 89 additions and 169 deletions

View File

@ -42,11 +42,11 @@ 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_write_client_core_data(wStream* s, const rdpMcs* mcs);
static BOOL gcc_read_server_core_data(wStream* s, rdpMcs* mcs); static BOOL gcc_read_server_core_data(wStream* s, rdpMcs* mcs);
static BOOL gcc_write_server_core_data(wStream* s, const 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, UINT16 blockLength);
static BOOL gcc_write_client_security_data(wStream* s, const 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_read_server_security_data(wStream* s, rdpMcs* mcs);
static BOOL gcc_write_server_security_data(wStream* s, const 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, UINT16 blockLength);
static BOOL gcc_write_client_network_data(wStream* s, const 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_read_server_network_data(wStream* s, rdpMcs* mcs);
@ -66,6 +66,26 @@ static BOOL gcc_write_client_multitransport_channel_data(wStream* s, const rdpMc
static BOOL gcc_read_server_multitransport_channel_data(wStream* s, 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); static BOOL gcc_write_server_multitransport_channel_data(wStream* s, const rdpMcs* mcs);
static rdpSettings* mcs_get_settings(rdpMcs* mcs)
{
WINPR_ASSERT(mcs);
rdpContext* context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
return context->settings;
}
static const rdpSettings* mcs_get_const_settings(const rdpMcs* mcs)
{
WINPR_ASSERT(mcs);
const rdpContext* context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
return context->settings;
}
static void append(char* buffer, size_t size, const char* what) static void append(char* buffer, size_t size, const char* what)
{ {
winpr_str_append(what, buffer, size, "|"); winpr_str_append(what, buffer, size, "|");
@ -259,6 +279,8 @@ BOOL gcc_read_conference_create_request(wStream* s, rdpMcs* mcs)
BYTE number; BYTE number;
BYTE selection; BYTE selection;
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
/* ConnectData */ /* ConnectData */
if (!per_read_choice(s, &choice)) if (!per_read_choice(s, &choice))
return FALSE; return FALSE;
@ -319,6 +341,8 @@ BOOL gcc_read_conference_create_request(wStream* s, rdpMcs* mcs)
BOOL gcc_write_conference_create_request(wStream* s, wStream* userData) BOOL gcc_write_conference_create_request(wStream* s, wStream* userData)
{ {
WINPR_ASSERT(s);
WINPR_ASSERT(userData);
/* ConnectData */ /* ConnectData */
if (!per_write_choice(s, 0)) /* From Key select object (0) of type OBJECT_IDENTIFIER */ if (!per_write_choice(s, 0)) /* From Key select object (0) of type OBJECT_IDENTIFIER */
return FALSE; return FALSE;
@ -360,7 +384,8 @@ BOOL gcc_read_conference_create_response(wStream* s, rdpMcs* mcs)
BYTE result; BYTE result;
BYTE choice; BYTE choice;
BYTE number; BYTE number;
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
/* ConnectData */ /* ConnectData */
if (!per_read_choice(s, &choice) || !per_read_object_identifier(s, t124_02_98_oid)) if (!per_read_choice(s, &choice) || !per_read_object_identifier(s, t124_02_98_oid))
return FALSE; return FALSE;
@ -413,6 +438,8 @@ BOOL gcc_read_conference_create_response(wStream* s, rdpMcs* mcs)
BOOL gcc_write_conference_create_response(wStream* s, wStream* userData) BOOL gcc_write_conference_create_response(wStream* s, wStream* userData)
{ {
WINPR_ASSERT(s);
WINPR_ASSERT(userData);
/* ConnectData */ /* ConnectData */
if (!per_write_choice(s, 0)) if (!per_write_choice(s, 0))
return FALSE; return FALSE;
@ -451,6 +478,8 @@ BOOL gcc_write_conference_create_response(wStream* s, wStream* userData)
BOOL gcc_read_client_data_blocks(wStream* s, rdpMcs* mcs, UINT16 length) BOOL gcc_read_client_data_blocks(wStream* s, rdpMcs* mcs, UINT16 length)
{ {
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
while (length > 0) while (length > 0)
{ {
UINT16 type; UINT16 type;
@ -540,16 +569,9 @@ BOOL gcc_read_client_data_blocks(wStream* s, rdpMcs* mcs, UINT16 length)
BOOL gcc_write_client_data_blocks(wStream* s, const rdpMcs* mcs) BOOL gcc_write_client_data_blocks(wStream* s, const rdpMcs* mcs)
{ {
rdpContext* context; const rdpSettings* settings = mcs_get_const_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (!gcc_write_client_core_data(s, mcs) || !gcc_write_client_cluster_data(s, mcs) || if (!gcc_write_client_core_data(s, mcs) || !gcc_write_client_cluster_data(s, mcs) ||
@ -650,6 +672,9 @@ BOOL gcc_read_server_data_blocks(wStream* s, rdpMcs* mcs, UINT16 length)
UINT16 blockLength; UINT16 blockLength;
BYTE* holdp; BYTE* holdp;
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
while (offset < length) while (offset < length)
{ {
char buffer[64] = { 0 }; char buffer[64] = { 0 };
@ -740,8 +765,10 @@ BOOL gcc_read_server_data_blocks(wStream* s, rdpMcs* mcs, UINT16 length)
return TRUE; return TRUE;
} }
BOOL gcc_write_server_data_blocks(wStream* s, const rdpMcs* mcs) BOOL gcc_write_server_data_blocks(wStream* s, rdpMcs* mcs)
{ {
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
return gcc_write_server_core_data(s, mcs) && /* serverCoreData */ return gcc_write_server_core_data(s, mcs) && /* serverCoreData */
gcc_write_server_network_data(s, mcs) && /* serverNetworkData */ gcc_write_server_network_data(s, mcs) && /* serverNetworkData */
gcc_write_server_security_data(s, mcs) && /* serverSecurityData */ gcc_write_server_security_data(s, mcs) && /* serverSecurityData */
@ -753,6 +780,7 @@ BOOL gcc_write_server_data_blocks(wStream* s, const rdpMcs* mcs)
BOOL gcc_read_user_data_header(wStream* s, UINT16* type, UINT16* length) BOOL gcc_read_user_data_header(wStream* s, UINT16* type, UINT16* length)
{ {
WINPR_ASSERT(s);
if (!Stream_CheckAndLogRequiredLength(TAG, s, 4)) if (!Stream_CheckAndLogRequiredLength(TAG, s, 4))
return FALSE; return FALSE;
@ -775,6 +803,8 @@ BOOL gcc_read_user_data_header(wStream* s, UINT16* type, UINT16* length)
BOOL gcc_write_user_data_header(wStream* s, UINT16 type, UINT16 length) BOOL gcc_write_user_data_header(wStream* s, UINT16 type, UINT16 length)
{ {
WINPR_ASSERT(s);
if (!Stream_EnsureRemainingCapacity(s, 4 + length)) if (!Stream_EnsureRemainingCapacity(s, 4 + length))
return FALSE; return FALSE;
Stream_Write_UINT16(s, type); /* type */ Stream_Write_UINT16(s, type); /* type */
@ -886,16 +916,9 @@ BOOL gcc_read_client_core_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
UINT16 supportedColorDepths = 0; UINT16 supportedColorDepths = 0;
UINT32 serverSelectedProtocol = 0; UINT32 serverSelectedProtocol = 0;
UINT16 earlyCapabilityFlags = 0; UINT16 earlyCapabilityFlags = 0;
rdpContext* context; rdpSettings* settings = mcs_get_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
/* Length of all required fields, until imeFileName */ /* Length of all required fields, until imeFileName */
@ -1129,16 +1152,9 @@ BOOL gcc_write_client_core_data(wStream* s, const rdpMcs* mcs)
UINT16 earlyCapabilityFlags; UINT16 earlyCapabilityFlags;
WCHAR* clientDigProductId = NULL; WCHAR* clientDigProductId = NULL;
size_t clientDigProductIdLength; size_t clientDigProductIdLength;
rdpContext* context; const rdpSettings* settings = mcs_get_const_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (!gcc_write_user_data_header(s, CS_CORE, 234)) if (!gcc_write_user_data_header(s, CS_CORE, 234))
@ -1223,16 +1239,9 @@ BOOL gcc_write_client_core_data(wStream* s, const rdpMcs* mcs)
BOOL gcc_read_server_core_data(wStream* s, rdpMcs* mcs) BOOL gcc_read_server_core_data(wStream* s, rdpMcs* mcs)
{ {
UINT32 serverVersion; UINT32 serverVersion;
rdpContext* context; rdpSettings* settings = mcs_get_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (!Stream_CheckAndLogRequiredLength(TAG, s, 4)) if (!Stream_CheckAndLogRequiredLength(TAG, s, 4))
@ -1259,19 +1268,15 @@ BOOL gcc_read_server_core_data(wStream* s, rdpMcs* mcs)
settings->ConnectionType); settings->ConnectionType);
} }
BOOL gcc_write_server_core_data(wStream* s, const rdpMcs* mcs) /* TODO: This function modifies rdpMcs
* TODO: Split this out of this function
*/
BOOL gcc_write_server_core_data(wStream* s, rdpMcs* mcs)
{ {
UINT32 earlyCapabilityFlags; UINT32 earlyCapabilityFlags;
rdpContext* context; rdpSettings* settings = mcs_get_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (!gcc_write_user_data_header(s, SC_CORE, 16)) if (!gcc_write_user_data_header(s, SC_CORE, 16))
@ -1295,16 +1300,9 @@ BOOL gcc_write_server_core_data(wStream* s, const rdpMcs* mcs)
BOOL gcc_read_client_security_data(wStream* s, rdpMcs* mcs, UINT16 blockLength) BOOL gcc_read_client_security_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
{ {
rdpContext* context; rdpSettings* settings = mcs_get_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (blockLength < 8) if (blockLength < 8)
@ -1336,16 +1334,9 @@ BOOL gcc_read_client_security_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
BOOL gcc_write_client_security_data(wStream* s, const rdpMcs* mcs) BOOL gcc_write_client_security_data(wStream* s, const rdpMcs* mcs)
{ {
rdpContext* context; const rdpSettings* settings = mcs_get_const_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (!gcc_write_user_data_header(s, CS_SECURITY, 12)) if (!gcc_write_user_data_header(s, CS_SECURITY, 12))
@ -1371,16 +1362,9 @@ BOOL gcc_read_server_security_data(wStream* s, rdpMcs* mcs)
UINT32 length; UINT32 length;
BOOL validCryptoConfig = FALSE; BOOL validCryptoConfig = FALSE;
UINT32 serverEncryptionMethod; UINT32 serverEncryptionMethod;
rdpContext* context; rdpSettings* settings = mcs_get_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (!Stream_CheckAndLogRequiredLength(TAG, s, 8)) if (!Stream_CheckAndLogRequiredLength(TAG, s, 8))
@ -1552,23 +1536,19 @@ const BYTE tssk_privateExponent[] = {
const BYTE tssk_exponent[] = { 0x5b, 0x7b, 0x88, 0xc0 }; const BYTE tssk_exponent[] = { 0x5b, 0x7b, 0x88, 0xc0 };
BOOL gcc_write_server_security_data(wStream* s, const rdpMcs* mcs) /* TODO: This function does manipulate data in rdpMcs
* TODO: Split this out of this function
*/
BOOL gcc_write_server_security_data(wStream* s, rdpMcs* mcs)
{ {
BYTE* sigData; BYTE* sigData;
size_t expLen = 0, keyLen, sigDataLen; size_t expLen = 0, keyLen, sigDataLen;
BYTE encryptedSignature[TSSK_KEY_LENGTH]; BYTE encryptedSignature[TSSK_KEY_LENGTH] = { 0 };
BYTE signature[sizeof(initial_signature)]; BYTE signature[sizeof(initial_signature)] = { 0 };
UINT32 headerLen, serverRandomLen, serverCertLen, wPublicKeyBlobLen; UINT32 headerLen, serverRandomLen, serverCertLen, wPublicKeyBlobLen;
rdpContext* context; rdpSettings* settings = mcs_get_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
/** /**
@ -1799,6 +1779,8 @@ BOOL gcc_read_client_network_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
{ {
UINT32 i; UINT32 i;
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
if (blockLength < 4) if (blockLength < 4)
return FALSE; return FALSE;
@ -1848,7 +1830,8 @@ BOOL gcc_write_client_network_data(wStream* s, const rdpMcs* mcs)
{ {
UINT32 i; UINT32 i;
UINT16 length; UINT16 length;
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
if (mcs->channelCount > 0) if (mcs->channelCount > 0)
{ {
length = mcs->channelCount * 12 + 8; length = mcs->channelCount * 12 + 8;
@ -1875,7 +1858,8 @@ BOOL gcc_read_server_network_data(wStream* s, rdpMcs* mcs)
UINT16 MCSChannelId; UINT16 MCSChannelId;
UINT16 channelCount; UINT16 channelCount;
UINT32 parsedChannelCount; UINT32 parsedChannelCount;
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
if (!Stream_CheckAndLogRequiredLength(TAG, s, 4)) if (!Stream_CheckAndLogRequiredLength(TAG, s, 4))
return FALSE; return FALSE;
@ -1912,6 +1896,8 @@ BOOL gcc_read_server_network_data(wStream* s, rdpMcs* mcs)
BOOL gcc_write_server_network_data(wStream* s, const rdpMcs* mcs) BOOL gcc_write_server_network_data(wStream* s, const rdpMcs* mcs)
{ {
UINT32 i; UINT32 i;
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
const size_t payloadLen = 8 + mcs->channelCount * 2 + (mcs->channelCount % 2 == 1 ? 2 : 0); const size_t payloadLen = 8 + mcs->channelCount * 2 + (mcs->channelCount % 2 == 1 ? 2 : 0);
if (!gcc_write_user_data_header(s, SC_NET, payloadLen)) if (!gcc_write_user_data_header(s, SC_NET, payloadLen))
@ -1942,16 +1928,9 @@ BOOL gcc_write_server_network_data(wStream* s, const rdpMcs* mcs)
BOOL gcc_read_client_cluster_data(wStream* s, rdpMcs* mcs, UINT16 blockLength) BOOL gcc_read_client_cluster_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
{ {
UINT32 redirectedSessionId; UINT32 redirectedSessionId;
rdpContext* context; rdpSettings* settings = mcs_get_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (blockLength < 8) if (blockLength < 8)
@ -1988,16 +1967,9 @@ BOOL gcc_read_client_cluster_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
BOOL gcc_write_client_cluster_data(wStream* s, const rdpMcs* mcs) BOOL gcc_write_client_cluster_data(wStream* s, const rdpMcs* mcs)
{ {
UINT32 flags; UINT32 flags;
rdpContext* context; const rdpSettings* settings = mcs_get_const_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (!gcc_write_user_data_header(s, CS_CLUSTER, 12)) if (!gcc_write_user_data_header(s, CS_CLUSTER, 12))
@ -2026,16 +1998,9 @@ BOOL gcc_read_client_monitor_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
{ {
UINT32 index; UINT32 index;
UINT32 monitorCount; UINT32 monitorCount;
rdpContext* context; rdpSettings* settings = mcs_get_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (blockLength < 8) if (blockLength < 8)
@ -2098,16 +2063,9 @@ BOOL gcc_write_client_monitor_data(wStream* s, const rdpMcs* mcs)
UINT32 i; UINT32 i;
UINT16 length; UINT16 length;
INT32 baseX = 0, baseY = 0; INT32 baseX = 0, baseY = 0;
rdpContext* context; const rdpSettings* settings = mcs_get_const_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
WLog_DBG(TAG, "[%s] MonitorCount=%" PRIu32, __FUNCTION__, settings->MonitorCount); WLog_DBG(TAG, "[%s] MonitorCount=%" PRIu32, __FUNCTION__, settings->MonitorCount);
@ -2160,16 +2118,9 @@ BOOL gcc_read_client_monitor_extended_data(wStream* s, rdpMcs* mcs, UINT16 block
UINT32 index; UINT32 index;
UINT32 monitorCount; UINT32 monitorCount;
UINT32 monitorAttributeSize; UINT32 monitorAttributeSize;
rdpContext* context; rdpSettings* settings = mcs_get_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (blockLength < 12) if (blockLength < 12)
@ -2207,16 +2158,9 @@ BOOL gcc_write_client_monitor_extended_data(wStream* s, const rdpMcs* mcs)
{ {
UINT32 i; UINT32 i;
UINT16 length; UINT16 length;
rdpContext* context; const rdpSettings* settings = mcs_get_const_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (settings->HasMonitorAttributes) if (settings->HasMonitorAttributes)
@ -2250,6 +2194,8 @@ BOOL gcc_write_client_monitor_extended_data(wStream* s, const rdpMcs* mcs)
BOOL gcc_read_client_message_channel_data(wStream* s, rdpMcs* mcs, UINT16 blockLength) BOOL gcc_read_client_message_channel_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
{ {
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
if (blockLength < 4) if (blockLength < 4)
return FALSE; return FALSE;
@ -2267,18 +2213,11 @@ BOOL gcc_read_client_message_channel_data(wStream* s, rdpMcs* mcs, UINT16 blockL
BOOL gcc_write_client_message_channel_data(wStream* s, const rdpMcs* mcs) BOOL gcc_write_client_message_channel_data(wStream* s, const rdpMcs* mcs)
{ {
rdpContext* context; const rdpSettings* settings = mcs_get_const_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs); WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (freerdp_settings_get_bool(settings, FreeRDP_NetworkAutoDetect) || if (freerdp_settings_get_bool(settings, FreeRDP_NetworkAutoDetect) ||
settings->SupportHeartbeatPdu || settings->SupportMultitransport) settings->SupportHeartbeatPdu || settings->SupportMultitransport)
{ {
@ -2292,7 +2231,8 @@ BOOL gcc_write_client_message_channel_data(wStream* s, const rdpMcs* mcs)
BOOL gcc_read_server_message_channel_data(wStream* s, rdpMcs* mcs) BOOL gcc_read_server_message_channel_data(wStream* s, rdpMcs* mcs)
{ {
UINT16 MCSChannelId; UINT16 MCSChannelId;
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
if (!Stream_CheckAndLogRequiredLength(TAG, s, 2)) if (!Stream_CheckAndLogRequiredLength(TAG, s, 2))
return FALSE; return FALSE;
@ -2304,6 +2244,8 @@ BOOL gcc_read_server_message_channel_data(wStream* s, rdpMcs* mcs)
BOOL gcc_write_server_message_channel_data(wStream* s, const rdpMcs* mcs) BOOL gcc_write_server_message_channel_data(wStream* s, const rdpMcs* mcs)
{ {
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
if (mcs->messageChannelId == 0) if (mcs->messageChannelId == 0)
return TRUE; return TRUE;
@ -2323,18 +2265,10 @@ BOOL gcc_write_server_message_channel_data(wStream* s, const rdpMcs* mcs)
BOOL gcc_read_client_multitransport_channel_data(wStream* s, rdpMcs* mcs, UINT16 blockLength) BOOL gcc_read_client_multitransport_channel_data(wStream* s, rdpMcs* mcs, UINT16 blockLength)
{ {
rdpContext* context; rdpSettings* settings = mcs_get_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (blockLength < 4) if (blockLength < 4)
return FALSE; return FALSE;
@ -2351,18 +2285,10 @@ BOOL gcc_read_client_multitransport_channel_data(wStream* s, rdpMcs* mcs, UINT16
BOOL gcc_write_client_multitransport_channel_data(wStream* s, const rdpMcs* mcs) BOOL gcc_write_client_multitransport_channel_data(wStream* s, const rdpMcs* mcs)
{ {
rdpContext* context; const rdpSettings* settings = mcs_get_const_settings(mcs);
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (!gcc_write_user_data_header(s, CS_MULTITRANSPORT, 8)) if (!gcc_write_user_data_header(s, CS_MULTITRANSPORT, 8))
return FALSE; return FALSE;
Stream_Write_UINT32(s, settings->MultitransportFlags); /* flags */ Stream_Write_UINT32(s, settings->MultitransportFlags); /* flags */
@ -2371,19 +2297,9 @@ BOOL gcc_write_client_multitransport_channel_data(wStream* s, const rdpMcs* mcs)
BOOL gcc_read_server_multitransport_channel_data(wStream* s, rdpMcs* mcs) BOOL gcc_read_server_multitransport_channel_data(wStream* s, rdpMcs* mcs)
{ {
rdpSettings* settings = mcs_get_settings(mcs);
rdpContext* context;
rdpSettings* settings;
WINPR_ASSERT(s); WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
context = transport_get_context(mcs->transport);
WINPR_ASSERT(context);
settings = context->settings;
WINPR_ASSERT(settings); WINPR_ASSERT(settings);
if (!Stream_CheckAndLogRequiredLength(TAG, s, 4)) if (!Stream_CheckAndLogRequiredLength(TAG, s, 4))
return FALSE; return FALSE;
@ -2393,7 +2309,11 @@ BOOL gcc_read_server_multitransport_channel_data(wStream* s, rdpMcs* mcs)
BOOL gcc_write_server_multitransport_channel_data(wStream* s, const rdpMcs* mcs) BOOL gcc_write_server_multitransport_channel_data(wStream* s, const rdpMcs* mcs)
{ {
const rdpSettings* settings = mcs_get_const_settings(mcs);
UINT32 flags = 0; UINT32 flags = 0;
WINPR_ASSERT(s);
WINPR_ASSERT(settings);
if (!gcc_write_user_data_header(s, SC_MULTITRANSPORT, 8)) if (!gcc_write_user_data_header(s, SC_MULTITRANSPORT, 8))
return FALSE; return FALSE;
Stream_Write_UINT32(s, flags); /* flags (4 bytes) */ Stream_Write_UINT32(s, flags); /* flags (4 bytes) */

View File

@ -35,6 +35,6 @@ FREERDP_LOCAL BOOL gcc_write_conference_create_request(wStream* s, wStream* user
FREERDP_LOCAL BOOL gcc_read_conference_create_response(wStream* s, rdpMcs* mcs); FREERDP_LOCAL BOOL gcc_read_conference_create_response(wStream* s, rdpMcs* mcs);
FREERDP_LOCAL BOOL gcc_write_conference_create_response(wStream* s, wStream* userData); FREERDP_LOCAL BOOL gcc_write_conference_create_response(wStream* s, wStream* userData);
FREERDP_LOCAL BOOL gcc_write_client_data_blocks(wStream* s, const rdpMcs* mcs); FREERDP_LOCAL BOOL gcc_write_client_data_blocks(wStream* s, const rdpMcs* mcs);
FREERDP_LOCAL BOOL gcc_write_server_data_blocks(wStream* s, const rdpMcs* mcs); FREERDP_LOCAL BOOL gcc_write_server_data_blocks(wStream* s, rdpMcs* mcs);
#endif /* FREERDP_LIB_CORE_GCC_H */ #endif /* FREERDP_LIB_CORE_GCC_H */