[core] Make remote rdpSettings* context wide

The settings struct containing the data sent by the remote is now
context wide. This way it is always possible to retrieve the data.
This commit is contained in:
Armin Novak 2023-01-17 10:04:29 +01:00 committed by Martin Fleisz
parent 4b3133b138
commit 6ff458bb34
5 changed files with 26 additions and 10 deletions

View File

@ -4213,13 +4213,13 @@ BOOL rdp_read_capability_set(wStream* sub, UINT16 type, rdpSettings* settings, B
return TRUE;
}
static BOOL rdp_read_capability_sets(wStream* s, rdpSettings* settings, UINT16 totalLength)
static BOOL rdp_read_capability_sets(wStream* s, rdpSettings* settings, rdpSettings* rcvSettings,
UINT16 totalLength)
{
BOOL rc = FALSE;
size_t start, end, len;
UINT16 numberCapabilities;
UINT16 count;
rdpSettings* rcvSettings;
#ifdef WITH_DEBUG_CAPABILITIES
const size_t capstart = Stream_GetPosition(s);
@ -4228,10 +4228,6 @@ static BOOL rdp_read_capability_sets(wStream* s, rdpSettings* settings, UINT16 t
WINPR_ASSERT(s);
WINPR_ASSERT(settings);
rcvSettings = freerdp_settings_new(0);
if (!rcvSettings)
goto fail;
if (!Stream_CheckAndLogRequiredLength(TAG, s, 4))
return FALSE;
@ -4283,7 +4279,6 @@ static BOOL rdp_read_capability_sets(wStream* s, rdpSettings* settings, UINT16 t
}
rc = freerdp_capability_buffer_copy(settings, rcvSettings);
fail:
freerdp_settings_free(rcvSettings);
return rc;
}
@ -4392,7 +4387,8 @@ BOOL rdp_recv_demand_active(rdpRdp* rdp, wStream* s)
return FALSE;
/* capabilitySets */
if (!rdp_read_capability_sets(s, rdp->settings, lengthCombinedCapabilities))
if (!rdp_read_capability_sets(s, rdp->settings, rdp->remoteSettings,
lengthCombinedCapabilities))
{
WLog_ERR(TAG, "rdp_read_capability_sets failed");
return FALSE;
@ -4518,7 +4514,8 @@ BOOL rdp_recv_confirm_active(rdpRdp* rdp, wStream* s, UINT16 pduLength)
return FALSE;
Stream_Seek(s, lengthSourceDescriptor); /* sourceDescriptor */
if (!rdp_read_capability_sets(s, rdp->settings, lengthCombinedCapabilities))
if (!rdp_read_capability_sets(s, rdp->settings, rdp->remoteSettings,
lengthCombinedCapabilities))
return FALSE;
if (!settings->ReceivedCapabilities[CAPSET_TYPE_SURFACE_COMMANDS])

View File

@ -110,6 +110,11 @@ static int freerdp_connect_begin(freerdp* instance)
if (!rdp->originalSettings)
return 0;
freerdp_settings_free(rdp->remoteSettings);
rdp->remoteSettings = freerdp_settings_new(0);
if (!rdp->remoteSettings)
return 0;
WINPR_ASSERT(instance->LoadChannels);
if (!instance->LoadChannels(instance))
return 0;

View File

@ -2045,7 +2045,8 @@ BOOL freerdp_get_stats(rdpRdp* rdp, UINT64* inBytes, UINT64* outBytes, UINT64* i
rdpRdp* rdp_new(rdpContext* context)
{
rdpRdp* rdp;
DWORD flags;
DWORD flags = 0;
DWORD remoteFlags = 0;
rdp = (rdpRdp*)calloc(1, sizeof(rdpRdp));
if (!rdp)
@ -2057,6 +2058,8 @@ rdpRdp* rdp_new(rdpContext* context)
if (context->ServerMode)
flags |= FREERDP_SETTINGS_SERVER_MODE;
else
remoteFlags |= FREERDP_SETTINGS_SERVER_MODE;
if (!context->settings)
{
@ -2074,6 +2077,11 @@ rdpRdp* rdp_new(rdpContext* context)
if (!rdp->originalSettings)
return FALSE;
freerdp_settings_free(rdp->remoteSettings);
rdp->remoteSettings = freerdp_settings_new(remoteFlags);
if (!rdp->remoteSettings)
return false;
rdp->settings->instance = context->instance;
context->settings = rdp->settings;
@ -2279,6 +2287,7 @@ void rdp_free(rdpRdp* rdp)
freerdp_settings_free(rdp->settings);
freerdp_settings_free(rdp->originalSettings);
freerdp_settings_free(rdp->remoteSettings);
input_free(rdp->input);
update_free(rdp->update);

View File

@ -156,6 +156,7 @@ struct rdp_rdp
rdpRedirection* redirection;
rdpSettings* settings;
rdpSettings* originalSettings;
rdpSettings* remoteSettings;
rdpTransport* transport;
rdpAutoDetect* autodetect;
rdpHeartbeat* heartbeat;

View File

@ -216,6 +216,10 @@ int rdp_redirection_apply_settings(rdpRdp* rdp)
settings = rdp->settings;
WINPR_ASSERT(settings);
freerdp_settings_free(rdp->remoteSettings);
rdp->remoteSettings = freerdp_settings_new(0);
WINPR_ASSERT(rdp->remoteSettings);
redirection = rdp->redirection;
WINPR_ASSERT(redirection);