diff --git a/constants.h b/constants.h index 91b3046..1f4ab07 100644 --- a/constants.h +++ b/constants.h @@ -580,6 +580,10 @@ enum RDP_INPUT_DEVICE #define ERRINFO_CB_CONNECTION_ERROR_INVALID_SETTINGS 0x0410 #define ERRINFO_CB_SESSION_ONLINE_VM_BOOT_TIMEOUT 0x0411 #define ERRINFO_CB_SESSION_ONLINE_VM_SESSMON_FAILED 0x0412 +#define ERRINFO_REMOTEAPPSNOTENABLED 0x10f3 +#define ERRINFO_UPDATESESSIONKEYFAILED 0x1191 +#define ERRINFO_DECRYPTFAILED 0x1192 +#define ERRINFO_ENCRYPTFAILED 0x1193 /* SeamlessRDP constants */ #define SEAMLESSRDP_NOTYETMAPPED -1 diff --git a/rdesktop.c b/rdesktop.c index 1b738c7..616de7f 100644 --- a/rdesktop.c +++ b/rdesktop.c @@ -444,12 +444,32 @@ handle_disconnect_reason(RD_BOOL deactivated, uint16 reason) retval = EXRD_CB_VM_BOOT_SESSMON_FAILED; break; + case ERRINFO_REMOTEAPPSNOTENABLED: + text = "The server can only host Remote Applications"; + retval = EXRD_RDP_REMOTEAPPSNOTENABLED; + break; + + case ERRINFO_UPDATESESSIONKEYFAILED: + text = "Update of session keys failed"; + retval = EXRD_RDP_UPDATESESSIONKEYFAILED; + break; + + case ERRINFO_DECRYPTFAILED: + text = "Decryption or session key creation failed"; + retval = EXRD_RDP_DECRYPTFAILED; + break; + + case ERRINFO_ENCRYPTFAILED: + text = "Encryption failed"; + retval = EXRD_RDP_ENCRYPTFAILED; + break; + default: text = "Unknown reason"; retval = EXRD_UNKNOWN; } - if (reason > 0x1000 && reason < 0x7fff) { + if (reason > 0x1000 && reason < 0x7fff && retval == EXRD_UNKNOWN) { fprintf(stderr, "Internal protocol error: %x", reason); } else if (reason != ERRINFO_NO_INFO) { fprintf(stderr, "disconnect: %s.\n", text); diff --git a/rdesktop.h b/rdesktop.h index 339d41b..b9e3c0e 100644 --- a/rdesktop.h +++ b/rdesktop.h @@ -129,6 +129,11 @@ #define EXRD_CB_VM_BOOT_TIMEOUT 41 #define EXRD_CB_VM_BOOT_SESSMON_FAILED 42 +#define EXRD_RDP_REMOTEAPPSNOTENABLED 50 +#define EXRD_RDP_UPDATESESSIONKEYFAILED 51 +#define EXRD_RDP_DECRYPTFAILED 52 +#define EXRD_RDP_ENCRYPTFAILED 53 + /* other exit codes */ #define EXRD_WINDOW_CLOSED 62 #define EXRD_UNKNOWN 63