mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-14 00:14:11 +09:00
[core,arm] add TARGET_BOOTING error code
Propagate the error code for a VM still booting to client.
This commit is contained in:
@@ -139,6 +139,7 @@ enum SDL_EXIT_CODE
|
||||
SDL_EXIT_CONNECT_ACCOUNT_EXPIRED = 157,
|
||||
SDL_EXIT_CONNECT_LOGON_TYPE_NOT_GRANTED = 158,
|
||||
SDL_EXIT_CONNECT_NO_OR_MISSING_CREDENTIALS = 159,
|
||||
SDL_EXIT_CONNECT_TARGET_BOOTING = 160,
|
||||
|
||||
SDL_EXIT_UNKNOWN = 255,
|
||||
};
|
||||
@@ -188,6 +189,7 @@ static const struct sdl_exit_code_map_t sdl_exit_code_map[] = {
|
||||
ENTRY(FREERDP_ERROR_AUTHENTICATION_FAILED, SDL_EXIT_AUTH_FAILURE),
|
||||
ENTRY(FREERDP_ERROR_SECURITY_NEGO_CONNECT_FAILED, SDL_EXIT_NEGO_FAILURE),
|
||||
ENTRY(FREERDP_ERROR_CONNECT_LOGON_FAILURE, SDL_EXIT_LOGON_FAILURE),
|
||||
ENTRY(FREERDP_ERROR_CONNECT_TARGET_BOOTING, SDL_EXIT_CONNECT_TARGET_BOOTING),
|
||||
ENTRY(FREERDP_ERROR_CONNECT_ACCOUNT_LOCKED_OUT, SDL_EXIT_ACCOUNT_LOCKED_OUT),
|
||||
ENTRY(FREERDP_ERROR_PRE_CONNECT_FAILED, SDL_EXIT_PRE_CONNECT_FAILED),
|
||||
ENTRY(FREERDP_ERROR_CONNECT_UNDEFINED, SDL_EXIT_CONNECT_UNDEFINED),
|
||||
|
||||
@@ -145,7 +145,8 @@ static const struct xf_exit_code_map_t xf_exit_code_map[] = {
|
||||
{ FREERDP_ERROR_CONNECT_ACCOUNT_RESTRICTION, XF_EXIT_CONNECT_ACCOUNT_RESTRICTION },
|
||||
{ FREERDP_ERROR_CONNECT_ACCOUNT_EXPIRED, XF_EXIT_CONNECT_ACCOUNT_EXPIRED },
|
||||
{ FREERDP_ERROR_CONNECT_LOGON_TYPE_NOT_GRANTED, XF_EXIT_CONNECT_LOGON_TYPE_NOT_GRANTED },
|
||||
{ FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS, XF_EXIT_CONNECT_NO_OR_MISSING_CREDENTIALS }
|
||||
{ FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS, XF_EXIT_CONNECT_NO_OR_MISSING_CREDENTIALS },
|
||||
{ FREERDP_ERROR_CONNECT_TARGET_BOOTING, XF_EXIT_CONNECT_TARGET_BOOTING }
|
||||
};
|
||||
|
||||
static BOOL xf_setup_x11(xfContext* xfc);
|
||||
@@ -1708,8 +1709,7 @@ end:
|
||||
|
||||
int xf_exit_code_from_disconnect_reason(DWORD reason)
|
||||
{
|
||||
if (reason == 0 ||
|
||||
(reason >= XF_EXIT_PARSE_ARGUMENTS && reason <= XF_EXIT_CONNECT_NO_OR_MISSING_CREDENTIALS))
|
||||
if ((reason == 0) || ((reason >= XF_EXIT_PARSE_ARGUMENTS) && (reason <= XF_EXIT_CODE_LAST)))
|
||||
return WINPR_ASSERTING_INT_CAST(int, reason);
|
||||
/* License error set */
|
||||
else if (reason >= 0x100 && reason <= 0x10A)
|
||||
|
||||
@@ -393,7 +393,8 @@ enum XF_EXIT_CODE
|
||||
XF_EXIT_CONNECT_ACCOUNT_EXPIRED = 157,
|
||||
XF_EXIT_CONNECT_LOGON_TYPE_NOT_GRANTED = 158,
|
||||
XF_EXIT_CONNECT_NO_OR_MISSING_CREDENTIALS = 159,
|
||||
|
||||
XF_EXIT_CONNECT_TARGET_BOOTING = 160,
|
||||
XF_EXIT_CODE_LAST = XF_EXIT_CONNECT_TARGET_BOOTING,
|
||||
XF_EXIT_UNKNOWN = 255,
|
||||
};
|
||||
|
||||
|
||||
@@ -270,6 +270,7 @@ extern "C"
|
||||
#define ERRCONNECT_LOGON_TYPE_NOT_GRANTED 0x0000001A
|
||||
#define ERRCONNECT_NO_OR_MISSING_CREDENTIALS 0x0000001B
|
||||
#define ERRCONNECT_ACTIVATION_TIMEOUT 0x0000001C
|
||||
#define ERRCONNECT_TARGET_BOOTING 0x0000001D
|
||||
|
||||
#define ERRCONNECT_SUCCESS ERRINFO_SUCCESS
|
||||
#define ERRCONNECT_NONE ERRINFO_NONE
|
||||
@@ -352,6 +353,7 @@ extern "C"
|
||||
|
||||
#define FREERDP_ERROR_CONNECT_ACTIVATION_TIMEOUT \
|
||||
MAKE_FREERDP_ERROR(CONNECT, ERRCONNECT_ACTIVATION_TIMEOUT)
|
||||
#define FREERDP_ERROR_CONNECT_TARGET_BOOTING MAKE_FREERDP_ERROR(CONNECT, ERRCONNECT_TARGET_BOOTING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -94,6 +94,8 @@
|
||||
|
||||
#define ERRCONNECT_ACTIVATION_TIMEOUT_STRING "Timeout waiting for activation."
|
||||
|
||||
#define ERRCONNECT_TARGET_BOOTING_STRING "Starting your VM. It may take up to 5 minutes."
|
||||
|
||||
/* Special codes */
|
||||
#define ERRCONNECT_SUCCESS_STRING "Success."
|
||||
#define ERRCONNECT_NONE_STRING ""
|
||||
@@ -129,6 +131,7 @@ static const ERRINFO ERRCONNECT_CODES[] = {
|
||||
ERRCONNECT_DEFINE(LOGON_TYPE_NOT_GRANTED, CAT_ADMIN),
|
||||
ERRCONNECT_DEFINE(NO_OR_MISSING_CREDENTIALS, CAT_USE),
|
||||
ERRCONNECT_DEFINE(ACTIVATION_TIMEOUT, CAT_PROTOCOL),
|
||||
ERRCONNECT_DEFINE(TARGET_BOOTING, CAT_ADMIN),
|
||||
|
||||
ERRCONNECT_DEFINE(NONE, CAT_NONE)
|
||||
};
|
||||
|
||||
@@ -1049,6 +1049,7 @@ static BOOL arm_handle_bad_request(rdpArm* arm, const HttpResponse* response, BO
|
||||
WLog_WARN(TAG, "Starting your VM. It may take up to 5 minutes");
|
||||
else
|
||||
WLog_WARN(TAG, "%s", msgstr);
|
||||
freerdp_set_last_error_if_not(arm->context, FREERDP_ERROR_CONNECT_TARGET_BOOTING);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -478,6 +478,17 @@ BOOL transport_connect_aad(rdpTransport* transport)
|
||||
return rdp_client_transition_to_state(rdp, CONNECTION_STATE_AAD);
|
||||
}
|
||||
|
||||
static BOOL transport_can_retry(const rdpContext* context, BOOL status)
|
||||
{
|
||||
switch (freerdp_get_last_error(context))
|
||||
{
|
||||
case FREERDP_ERROR_CONNECT_TARGET_BOOTING:
|
||||
return FALSE;
|
||||
default:
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL transport_connect(rdpTransport* transport, const char* hostname, UINT16 port, DWORD timeout)
|
||||
{
|
||||
BOOL status = FALSE;
|
||||
@@ -519,7 +530,7 @@ BOOL transport_connect(rdpTransport* transport, const char* hostname, UINT16 por
|
||||
transport->wst = NULL;
|
||||
}
|
||||
}
|
||||
if (!status && settings->GatewayHttpTransport)
|
||||
if (transport_can_retry(transport->context, status) && settings->GatewayHttpTransport)
|
||||
{
|
||||
WINPR_ASSERT(!transport->rdg);
|
||||
transport->rdg = rdg_new(context);
|
||||
@@ -544,7 +555,8 @@ BOOL transport_connect(rdpTransport* transport, const char* hostname, UINT16 por
|
||||
}
|
||||
}
|
||||
|
||||
if (!status && settings->GatewayRpcTransport && rpcFallback)
|
||||
if (transport_can_retry(transport->context, status) && settings->GatewayRpcTransport &&
|
||||
rpcFallback)
|
||||
{
|
||||
WINPR_ASSERT(!transport->tsg);
|
||||
transport->tsg = tsg_new(transport);
|
||||
|
||||
Reference in New Issue
Block a user