private failureCode_Values GetFailureCode_RDP_NEG_FAILURE(Client_X_224_Connection_Request_Pdu pdu)
{
failureCode_Values result = failureCode_Values.NO_FAILURE;
if (pdu == null)
return result;
bool has_PROTOCOL_RDP_FLAG = pdu.rdpNegData.requestedProtocols.HasFlag(requestedProtocols_Values.PROTOCOL_RDP_FLAG);
bool has_PROTOCOL_SSL_FLAG = pdu.rdpNegData.requestedProtocols.HasFlag(requestedProtocols_Values.PROTOCOL_RDP_FLAG);
bool has_PROTOCOL_HYBRID_FLAG = pdu.rdpNegData.requestedProtocols.HasFlag(requestedProtocols_Values.PROTOCOL_HYBRID_FLAG);
bool has_PROTOCOL_HYBRID_EX = pdu.rdpNegData.requestedProtocols.HasFlag(requestedProtocols_Values.PROTOCOL_HYBRID_EX);
if (!has_PROTOCOL_HYBRID_EX && !has_PROTOCOL_HYBRID_FLAG && has_PROTOCOL_SSL_FLAG)
{
// 0000 | 0001
result = failureCode_Values.SSL_REQUIRED_BY_SERVER;
}
else if (!has_PROTOCOL_HYBRID_EX && !has_PROTOCOL_HYBRID_FLAG)
{
// 0010 | 0011
result = failureCode_Values.HYBRID_REQUIRED_BY_SERVER;
}
else if (!has_PROTOCOL_SSL_FLAG)
{
// 1000 | 0100 | 1101 | 1100 | 1001 | 0101 | 1100
result = failureCode_Values.SSL_WITH_USER_AUTH_REQUIRED_BY_SERVER;
}
else if (!has_PROTOCOL_RDP_FLAG)
{
// 1010 | 0110 | 1110
result = failureCode_Values.SSL_CERT_NOT_ON_SERVER;
}
else
{
// 1011 | 0111 | 1111
result = failureCode_Values.INCONSISTENT_FLAGS;
}
return result;
}