mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-14 00:14:11 +09:00
Merge pull request #11910 from akallabeth/retry-fix
[client,common] improve retry handling
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <winpr/crypto.h>
|
||||
#include <winpr/json.h>
|
||||
|
||||
#include <freerdp/crypto/crypto.h>
|
||||
#include <freerdp/settings.h>
|
||||
#include <freerdp/codecs.h>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user