Skip to content

Commit 93eb4df

Browse files
akallabethmfleisz
authored andcommitted
[core,gateway] implement RDG and TSG policy
* use dynamic logger in RDG * honor [MS-TSGU] 2.2.9.2.1.5.2 TSG_REDIRECTION_FLAGS * honor [MS-TSGU] 2.2.10.16 HTTP_TUNNEL_AUTH_RESPONSE HTTP_TUNNEL_AUTH_RESPONSE_FIELD_REDIR_FLAGS flag * add setting GatewayIgnoreRedirectionPolicy to ignore the gateway policy if desired
1 parent 6a7c375 commit 93eb4df

12 files changed

+401
-85
lines changed

include/freerdp/settings.h

+11
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,17 @@ typedef struct rdp_settings rdpSettings;
164164
const char* option, const char* value);
165165

166166
FREERDP_API BOOL freerdp_device_collection_add(rdpSettings* settings, RDPDR_DEVICE* device);
167+
168+
/** \brief Removed a device from the settings, returns ownership of the allocated device to
169+
* caller.
170+
*
171+
* \param settings the settings to remove the device from
172+
* \param device the device to remove
173+
*
174+
* \return \b TRUE if the device was removed, \b FALSE if device was not found or is NULL
175+
*/
176+
FREERDP_API BOOL freerdp_device_collection_del(rdpSettings* settings,
177+
const RDPDR_DEVICE* device);
167178
FREERDP_API RDPDR_DEVICE* freerdp_device_collection_find(rdpSettings* settings,
168179
const char* name);
169180
FREERDP_API RDPDR_DEVICE* freerdp_device_collection_find_type(rdpSettings* settings,

include/freerdp/settings_types_private.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,8 @@ struct rdp_settings
467467
SETTINGS_DEPRECATED(ALIGN64 char* GatewayAvdDiagnosticserviceurl); /* 2009 */
468468
SETTINGS_DEPRECATED(ALIGN64 char* GatewayAvdHubdiscoverygeourl); /* 2010 */
469469
SETTINGS_DEPRECATED(ALIGN64 char* GatewayAvdActivityhint); /* 2011 */
470-
UINT64 padding2015[2015 - 2012]; /* 2012 */
470+
SETTINGS_DEPRECATED(ALIGN64 BOOL GatewayIgnoreRedirectionPolicy); /* 2012 */
471+
UINT64 padding2015[2015 - 2013]; /* 2013 */
471472

472473
/* Proxy */
473474
SETTINGS_DEPRECATED(ALIGN64 UINT32 ProxyType); /* 2015 */

libfreerdp/common/settings.c

+27
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,33 @@ BOOL freerdp_device_collection_add(rdpSettings* settings, RDPDR_DEVICE* device)
237237
return TRUE;
238238
}
239239

240+
BOOL freerdp_device_collection_del(rdpSettings* settings, const RDPDR_DEVICE* device)
241+
{
242+
WINPR_ASSERT(settings);
243+
244+
if (!device)
245+
return FALSE;
246+
247+
const UINT32 count = settings->DeviceCount;
248+
for (size_t x = 0; x < count; x++)
249+
{
250+
const RDPDR_DEVICE* cur = settings->DeviceArray[x];
251+
if (cur == device)
252+
{
253+
for (size_t y = x + 1; y < count; y++)
254+
{
255+
RDPDR_DEVICE* next = settings->DeviceArray[y];
256+
settings->DeviceArray[y - 1] = next;
257+
}
258+
settings->DeviceArray[count - 1] = NULL;
259+
settings->DeviceCount--;
260+
return TRUE;
261+
}
262+
}
263+
264+
return FALSE;
265+
}
266+
240267
RDPDR_DEVICE* freerdp_device_collection_find(rdpSettings* settings, const char* name)
241268
{
242269
RDPDR_DEVICE* device = NULL;

libfreerdp/common/settings_getters.c

+7
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,9 @@ BOOL freerdp_settings_get_bool(const rdpSettings* settings, FreeRDP_Settings_Key
252252
case FreeRDP_GatewayHttpUseWebsockets:
253253
return settings->GatewayHttpUseWebsockets;
254254

255+
case FreeRDP_GatewayIgnoreRedirectionPolicy:
256+
return settings->GatewayIgnoreRedirectionPolicy;
257+
255258
case FreeRDP_GatewayRpcTransport:
256259
return settings->GatewayRpcTransport;
257260

@@ -908,6 +911,10 @@ BOOL freerdp_settings_set_bool(rdpSettings* settings, FreeRDP_Settings_Keys_Bool
908911
settings->GatewayHttpUseWebsockets = cnv.c;
909912
break;
910913

914+
case FreeRDP_GatewayIgnoreRedirectionPolicy:
915+
settings->GatewayIgnoreRedirectionPolicy = cnv.c;
916+
break;
917+
911918
case FreeRDP_GatewayRpcTransport:
912919
settings->GatewayRpcTransport = cnv.c;
913920
break;

libfreerdp/common/settings_str.h

+2
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ static const struct settings_str_entry settings_map[] = {
114114
{ FreeRDP_GatewayHttpTransport, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_GatewayHttpTransport" },
115115
{ FreeRDP_GatewayHttpUseWebsockets, FREERDP_SETTINGS_TYPE_BOOL,
116116
"FreeRDP_GatewayHttpUseWebsockets" },
117+
{ FreeRDP_GatewayIgnoreRedirectionPolicy, FREERDP_SETTINGS_TYPE_BOOL,
118+
"FreeRDP_GatewayIgnoreRedirectionPolicy" },
117119
{ FreeRDP_GatewayRpcTransport, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_GatewayRpcTransport" },
118120
{ FreeRDP_GatewayUdpTransport, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_GatewayUdpTransport" },
119121
{ FreeRDP_GatewayUseSameCredentials, FREERDP_SETTINGS_TYPE_BOOL,

libfreerdp/core/client.c

+6-2
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,8 @@ static int freerdp_channels_process_sync(rdpChannels* channels, freerdp* instanc
661661
int status = TRUE;
662662
wMessage message = { 0 };
663663

664+
WINPR_ASSERT(channels);
665+
664666
while (MessageQueue_Peek(channels->queue, &message, TRUE))
665667
{
666668
freerdp_channels_process_message(instance, &message);
@@ -728,6 +730,8 @@ int freerdp_channels_process_pending_messages(freerdp* instance)
728730
*/
729731
BOOL freerdp_channels_check_fds(rdpChannels* channels, freerdp* instance)
730732
{
733+
WINPR_ASSERT(channels);
734+
731735
if (WaitForSingleObject(MessageQueue_Event(channels->queue), 0) == WAIT_OBJECT_0)
732736
{
733737
freerdp_channels_process_sync(channels, instance);
@@ -742,6 +746,8 @@ UINT freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance)
742746
CHANNEL_OPEN_DATA* pChannelOpenData = NULL;
743747
CHANNEL_CLIENT_DATA* pChannelClientData = NULL;
744748

749+
WINPR_ASSERT(channels);
750+
745751
if (!channels->connected)
746752
return 0;
747753

@@ -808,8 +814,6 @@ void freerdp_channels_close(rdpChannels* channels, freerdp* instance)
808814
}
809815
}
810816

811-
channels->clientDataCount = 0;
812-
813817
for (int index = 0; index < channels->openDataCount; index++)
814818
{
815819
pChannelOpenData = &channels->openDataList[index];

0 commit comments

Comments
 (0)