src/protocols/rdp/error.c
/**
 * Translates the error code returned by freerdp_get_last_error() for the given
 * RDP instance into a Guacamole status code and human-readable message. If no
 * error was reported, a successful error code and message will be assigned.
 *
 * @param rdp_inst
 *     The FreeRDP client instance handling the RDP connection that failed.
 *
 * @param status
 *     Pointer to the variable that should receive the guac_protocol_status
 *     value equivalent to the error returned by freerdp_get_last_error().
 *
 * @param message
 *     Pointer to the variable that should receive a static human-readable
 *     message generally describing the error returned by
 *     freerdp_get_last_error().
 */
Translates the error code returned by freerdp_get_last_error() for the given
RDP instance into a Guacamole status code and human-readable message. If no
error was reported, a successful error code and message will be assigned.

@param rdp_inst
The FreeRDP client instance handling the RDP connection that failed.

@param status
Pointer to the variable that should receive the guac_protocol_status
value equivalent to the error returned by freerdp_get_last_error().

@param message
Pointer to the variable that should receive a static human-readable
message generally describing the error returned by
freerdp_get_last_error().
Translates the error code returned by freerdp_get_last_error () for the given RDP instance into a Guacamole status code and human - readable message . If no error was reported a successful error code and message will be assigned . @param rdp_inst The FreeRDP client instance handling the RDP connection that failed . @param status Pointer to the variable that should receive the guac_protocol_status value equivalent to the error returned by freerdp_get_last_error () . @param message Pointer to the variable that should receive a static human - readable message generally describing the error returned by freerdp_get_last_error () .
static void guac_rdp_translate_last_error(freerdp* rdp_inst,
        guac_protocol_status* status, const char** message) {
    UINT32 last_error = freerdp_get_last_error(rdp_inst->context);
    switch (last_error) {
        case FREERDP_ERROR_NONE:
        case FREERDP_ERROR_SUCCESS:
            *status = GUAC_PROTOCOL_STATUS_SUCCESS;
            *message = "Disconnected.";
            break;
#ifdef FREERDP_ERROR_CONNECT_ACCOUNT_EXPIRED
        case FREERDP_ERROR_CONNECT_ACCOUNT_EXPIRED:
#endif
#ifdef FREERDP_ERROR_CONNECT_PASSWORD_MUST_CHANGE
        case FREERDP_ERROR_CONNECT_PASSWORD_MUST_CHANGE:
#endif
        case FREERDP_ERROR_CONNECT_PASSWORD_CERTAINLY_EXPIRED:
        case FREERDP_ERROR_CONNECT_PASSWORD_EXPIRED:
        case FREERDP_ERROR_SERVER_FRESH_CREDENTIALS_REQUIRED:
            *status = GUAC_PROTOCOL_STATUS_CLIENT_FORBIDDEN;
            *message = "Credentials expired.";
            break;
        case FREERDP_ERROR_SECURITY_NEGO_CONNECT_FAILED:
            *status = GUAC_PROTOCOL_STATUS_CLIENT_UNAUTHORIZED;
            *message = "Security negotiation failed (wrong security type?)";
            break;
#ifdef FREERDP_ERROR_CONNECT_ACCESS_DENIED
        case FREERDP_ERROR_CONNECT_ACCESS_DENIED:
#endif
#ifdef FREERDP_ERROR_CONNECT_ACCOUNT_DISABLED
        case FREERDP_ERROR_CONNECT_ACCOUNT_DISABLED:
#endif
#ifdef FREERDP_ERROR_CONNECT_ACCOUNT_LOCKED_OUT
        case FREERDP_ERROR_CONNECT_ACCOUNT_LOCKED_OUT:
#endif
#ifdef FREERDP_ERROR_CONNECT_ACCOUNT_RESTRICTION
        case FREERDP_ERROR_CONNECT_ACCOUNT_RESTRICTION:
#endif
#ifdef FREERDP_ERROR_CONNECT_LOGON_TYPE_NOT_GRANTED
        case FREERDP_ERROR_CONNECT_LOGON_TYPE_NOT_GRANTED:
#endif
        case FREERDP_ERROR_CONNECT_CLIENT_REVOKED:
        case FREERDP_ERROR_INSUFFICIENT_PRIVILEGES:
        case FREERDP_ERROR_SERVER_DENIED_CONNECTION:
        case FREERDP_ERROR_SERVER_INSUFFICIENT_PRIVILEGES:
            *status = GUAC_PROTOCOL_STATUS_CLIENT_FORBIDDEN;
            *message = "Access denied by server (account locked/disabled?)";
            break;
#ifdef FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS
        case FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS:
#endif
#ifdef FREERDP_ERROR_CONNECT_LOGON_FAILURE
        case FREERDP_ERROR_CONNECT_LOGON_FAILURE:
#endif
#ifdef FREERDP_ERROR_CONNECT_WRONG_PASSWORD
        case FREERDP_ERROR_CONNECT_WRONG_PASSWORD:
#endif
        case FREERDP_ERROR_AUTHENTICATION_FAILED:
            *status = GUAC_PROTOCOL_STATUS_CLIENT_UNAUTHORIZED;
            *message = "Authentication failure (invalid credentials?)";
            break;
        case FREERDP_ERROR_TLS_CONNECT_FAILED:
            *status = GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND;
            *message = "SSL/TLS connection failed (untrusted/self-signed certificate?)";
            break;
        case FREERDP_ERROR_DNS_ERROR:
        case FREERDP_ERROR_DNS_NAME_NOT_FOUND:
            *status = GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND;
            *message = "DNS lookup failed (incorrect hostname?)";
            break;
        case FREERDP_ERROR_CONNECT_TRANSPORT_FAILED:
            *status = GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND;
            *message = "Server refused connection (wrong security type?)";
            break;
        case FREERDP_ERROR_CONNECT_CANCELLED:
        case FREERDP_ERROR_CONNECT_FAILED:
        case FREERDP_ERROR_CONNECT_KDC_UNREACHABLE:
        case FREERDP_ERROR_MCS_CONNECT_INITIAL_ERROR:
            *status = GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND;
            *message = "Connection failed (server unreachable?)";
            break;
        default:
            *status = GUAC_PROTOCOL_STATUS_UPSTREAM_ERROR;
            *message = "Upstream error.";
    }
}
static void guac_rdp_translate_last_error ( freerdp * rdp_inst , guac_protocol_status * status , const char * * message ) { UINT32 last_error = freerdp_get_last_error ( rdp_inst -> context ) ; switch ( last_error ) { case FREERDP_ERROR_NONE : case FREERDP_ERROR_SUCCESS : * status = GUAC_PROTOCOL_STATUS_SUCCESS ; * message = " " ; break ; #ifdef FREERDP_ERROR_CONNECT_ACCOUNT_EXPIRED case FREERDP_ERROR_CONNECT_ACCOUNT_EXPIRED : #endif #ifdef FREERDP_ERROR_CONNECT_PASSWORD_MUST_CHANGE case FREERDP_ERROR_CONNECT_PASSWORD_MUST_CHANGE : #endif case FREERDP_ERROR_CONNECT_PASSWORD_CERTAINLY_EXPIRED : case FREERDP_ERROR_CONNECT_PASSWORD_EXPIRED : case FREERDP_ERROR_SERVER_FRESH_CREDENTIALS_REQUIRED : * status = GUAC_PROTOCOL_STATUS_CLIENT_FORBIDDEN ; * message = " " ; break ; case FREERDP_ERROR_SECURITY_NEGO_CONNECT_FAILED : * status = GUAC_PROTOCOL_STATUS_CLIENT_UNAUTHORIZED ; * message = " " ; break ; #ifdef FREERDP_ERROR_CONNECT_ACCESS_DENIED case FREERDP_ERROR_CONNECT_ACCESS_DENIED : #endif #ifdef FREERDP_ERROR_CONNECT_ACCOUNT_DISABLED case FREERDP_ERROR_CONNECT_ACCOUNT_DISABLED : #endif #ifdef FREERDP_ERROR_CONNECT_ACCOUNT_LOCKED_OUT case FREERDP_ERROR_CONNECT_ACCOUNT_LOCKED_OUT : #endif #ifdef FREERDP_ERROR_CONNECT_ACCOUNT_RESTRICTION case FREERDP_ERROR_CONNECT_ACCOUNT_RESTRICTION : #endif #ifdef FREERDP_ERROR_CONNECT_LOGON_TYPE_NOT_GRANTED case FREERDP_ERROR_CONNECT_LOGON_TYPE_NOT_GRANTED : #endif case FREERDP_ERROR_CONNECT_CLIENT_REVOKED : case FREERDP_ERROR_INSUFFICIENT_PRIVILEGES : case FREERDP_ERROR_SERVER_DENIED_CONNECTION : case FREERDP_ERROR_SERVER_INSUFFICIENT_PRIVILEGES : * status = GUAC_PROTOCOL_STATUS_CLIENT_FORBIDDEN ; * message = " " ; break ; #ifdef FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS case FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS : #endif #ifdef FREERDP_ERROR_CONNECT_LOGON_FAILURE case FREERDP_ERROR_CONNECT_LOGON_FAILURE : #endif #ifdef FREERDP_ERROR_CONNECT_WRONG_PASSWORD case FREERDP_ERROR_CONNECT_WRONG_PASSWORD : #endif case FREERDP_ERROR_AUTHENTICATION_FAILED : * status = GUAC_PROTOCOL_STATUS_CLIENT_UNAUTHORIZED ; * message = " " ; break ; case FREERDP_ERROR_TLS_CONNECT_FAILED : * status = GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND ; * message = " " ; break ; case FREERDP_ERROR_DNS_ERROR : case FREERDP_ERROR_DNS_NAME_NOT_FOUND : * status = GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND ; * message = " " ; break ; case FREERDP_ERROR_CONNECT_TRANSPORT_FAILED : * status = GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND ; * message = " " ; break ; case FREERDP_ERROR_CONNECT_CANCELLED : case FREERDP_ERROR_CONNECT_FAILED : case FREERDP_ERROR_CONNECT_KDC_UNREACHABLE : case FREERDP_ERROR_MCS_CONNECT_INITIAL_ERROR : * status = GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND ; * message = " " ; break ; default : * status = GUAC_PROTOCOL_STATUS_UPSTREAM_ERROR ; * message = " " ; } }
Translates the error code returned by freerdp_get_last_error() for the given
 RDP instance into a Guacamole status code and human-readable message.
Translates the error code returned by freerdp_get_last_error () for the given RDP instance into a Guacamole status code and human - readable message .
/*
         * Normal disconnect (no error at all)
         */ /*
         * General credentials expired (password has expired, password must be
         * reset before it can be used for the first time, etc.)
         */ /*
         * Security negotiation failed (the server is refusing the connection
         * because the security negotiation process failed)
         */ /*
         * General access denied/revoked (regardless of any credentials
         * provided, the server is denying the requested access by this
         * account)
         */ /*
         * General authentication failure (no credentials provided or wrong
         * credentials provided)
         */ /*
         * SSL/TLS connection failed (the server's certificate is not trusted)
         */ /*
         * DNS lookup failed (hostname resolution failed or invalid IP address)
         */ /*
         * Connection refused (the server is outright refusing to handle the
         * inbound connection, typically due to the client requesting a
         * security type that is not allowed)
         */ /*
         * Connection failed (the network connection to the server did not
         * succeed)
         */ /*
         * All other (unknown) errors
         */