Added a handler for license error alert.

There is a special case in here we need to consider, when no license is received
from the server we will get a License Error Alert PDU - Valid Client packet which
indicates that everything is ok.

This solves a connection error which resulted in protocol error 76.




git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/rdesktop/trunk@1780 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
Henrik Andersson 2014-02-05 11:58:22 +00:00
parent b4dfb9b5e0
commit f613559ea5

View File

@ -299,6 +299,53 @@ licence_process_new_license(STREAM s)
save_licence(s->p, length); save_licence(s->p, length);
} }
/* process a licence error alert packet */
void
licence_process_error_alert(STREAM s)
{
uint32 error_code;
uint32 state_transition;
uint32 error_info;
in_uint32(s, error_code);
in_uint32(s, state_transition);
in_uint32(s, error_info);
/* There is a special case in the error alert handling, when licensing is all good
and the server is not sending a license to client, a "Server License Error PDU -
Valid Client" packet is sent which means, every thing is ok.
Therefor we should flag that everything is ok with license here.
*/
if (error_code == 0x07)
{
g_licence_issued = True;
return;
}
/* handle error codes, for now, jsut report them */
switch (error_code)
{
case 0x6: // ERR_NO_LICENSE_SERVER
warning("License error alert from server: No license server\n");
break;
case 0x8: // ERR_INVALID_CLIENT
warning("License error alert from server: Invalid client\n");
break;
case 0x4: // ERR_INVALID_SCOPE
case 0xb: // ERR_INVALID_PRODUCTID
case 0xc: // ERR_INVALID_MESSAGE_LENGTH
default:
warning("License error alert from server: code %u, state transition %u\n",
error_code, state_transition);
break;
}
g_licence_error_result = True;
}
/* Process a licence packet */ /* Process a licence packet */
void void
licence_process(STREAM s) licence_process(STREAM s)
@ -329,7 +376,7 @@ licence_process(STREAM s)
break; break;
case LICENCE_TAG_ERROR_ALERT: case LICENCE_TAG_ERROR_ALERT:
g_licence_error_result = True; licence_process_error_alert(s);
break; break;
default: default: