From c0da27476f5e10ccce947a8532d19765451c21cc Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 1 Oct 2025 09:13:11 +0200 Subject: [PATCH 1/2] [client,common] improve retry handling * Log each return path * Correctly apply the returned delay --- client/common/client.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/client/common/client.c b/client/common/client.c index 3d7369f31..313981c7c 100644 --- a/client/common/client.c +++ b/client/common/client.c @@ -1340,12 +1340,14 @@ BOOL client_auto_reconnect_ex(freerdp* instance, BOOL (*window_events)(freerdp* WLog_INFO(TAG, "Network disconnect!"); break; default: + WLog_DBG(TAG, "Other error: %s", freerdp_get_error_info_string(error)); return FALSE; } if (!freerdp_settings_get_bool(settings, FreeRDP_AutoReconnectionEnabled)) { /* No auto-reconnect - just quit */ + WLog_DBG(TAG, "AutoReconnect not enabled, quitting."); return FALSE; } @@ -1364,13 +1366,15 @@ BOOL client_auto_reconnect_ex(freerdp* instance, BOOL (*window_events)(freerdp* /* Quit retrying if max retries has been exceeded */ if ((maxRetries > 0) && (numRetries++ >= maxRetries)) { + WLog_DBG(TAG, "AutoReconnect retries exceeded."); return FALSE; } /* Attempt the next reconnect */ WLog_INFO(TAG, "Attempting reconnect (%" PRIu32 " of %" PRIu32 ")", numRetries, maxRetries); - IFCALL(instance->RetryDialog, instance, "connection", numRetries, NULL); + const SSIZE_T delay = + IFCALLRESULT(5000, instance->RetryDialog, instance, "connection", numRetries, NULL); if (freerdp_reconnect(instance)) return TRUE; @@ -1383,10 +1387,13 @@ BOOL client_auto_reconnect_ex(freerdp* instance, BOOL (*window_events)(freerdp* default: break; } - for (UINT32 x = 0; x < 50; x++) + for (UINT32 x = 0; x < delay / 10; x++) { if (!IFCALLRESULT(TRUE, window_events, instance)) + { + WLog_ERR(TAG, "window_events failed!"); return FALSE; + } Sleep(10); } From ad8780c823355c849b47417ec43b54e3c7bab32b Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 1 Oct 2025 09:38:09 +0200 Subject: [PATCH 2/2] [core,test] fix TestSettings Fill values with base64 encoded random data. Some fields are strings that need to be valid utf-8. --- libfreerdp/core/test/TestSettings.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libfreerdp/core/test/TestSettings.c b/libfreerdp/core/test/TestSettings.c index 4410bc21c..657dc4583 100644 --- a/libfreerdp/core/test/TestSettings.c +++ b/libfreerdp/core/test/TestSettings.c @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -1669,7 +1670,15 @@ static BOOL fill_random(rdpSettings* src, FreeRDP_Settings_Keys_Pointer key, siz uint8_t* data = freerdp_settings_get_pointer_writable(src, key); if (!data) return FALSE; - winpr_RAND(data, len * elem); + + const size_t size = len * elem; + char* random = calloc(len, elem); + if (!random) + return FALSE; + char* b64 = crypto_base64_encode(random, size); + free(random); + memcpy(data, b64, size); + free(b64); return TRUE; }