private bool VerifyIndexRangeForScalar(IVariableBase variable, BuiltInType type, DataValue result)
{
// allow DA status codes to be returned before checking the
if (IsDaBadStatus(result.StatusCode))
{
return true;
}
if (result.StatusCode != StatusCodes.BadIndexRangeInvalid)
{
if (type != BuiltInType.ByteString && type != BuiltInType.String && type != BuiltInType.Variant)
{
Log(
"Wrong error code when reading index range for scalar value '{0}'. NodeId = {1}, Value = {2}, StatusCode = {3}",
variable,
variable.NodeId,
variable.Value,
result.StatusCode);
return false;
}
if (type == BuiltInType.String)
{
string value = result.Value as string;
if (value != null && value.Length > 2)
{
Log(
"Too much data return when reading index range for sting value '{0}'. NodeId = {1}, Value = {2}, ReturnedValue = {3}",
variable,
variable.NodeId,
variable.Value,
result.Value);
return false;
}
}
if (type == BuiltInType.ByteString)
{
byte[] value = result.Value as byte[];
if (value != null && value.Length > 2)
{
Log(
"Too much data return when reading index range for ByteString value '{0}'. NodeId = {1}, Value = {2}, ReturnedValue = {3}",
variable,
variable.NodeId,
variable.Value,
result.Value);
return false;
}
}
if (type == BuiltInType.Variant)
{
Array value = result.Value as Array;
if (value != null && value.Length > 2)
{
Log(
"Too much data return when reading index range for Variant value '{0}'. NodeId = {1}, Value = {2}, ReturnedValue = {3}",
variable,
variable.NodeId,
variable.Value,
result.Value);
return false;
}
}
}
else
{
if (type == BuiltInType.ByteString || type == BuiltInType.String)
{
Log(
"Error returned reading index range for ByteString or String value '{0}'. NodeId = {1}, Value = {2}, StatusCode = {3}",
variable,
variable.NodeId,
variable.Value,
result.StatusCode);
return false;
}
}
return true;
}