protected bool VerifyBadAttribute(
Node node,
uint attributeId,
StatusCode error)
{
// check for invalid attribute.
if (error == StatusCodes.BadAttributeIdInvalid)
{
// expected if attribute is not valid for node.
if (!Attributes.IsValid(node.NodeClass, attributeId))
{
return true;
}
// check for optional attribute.
switch (attributeId)
{
case Attributes.Description:
{
node.Description = null;
return true;
}
case Attributes.ArrayDimensions:
{
((IVariableBase)node).ArrayDimensions = null;
return true;
}
case Attributes.InverseName:
{
((IReferenceType)node).InverseName = null;
return true;
}
case Attributes.WriteMask:
{
node.WriteMask = 0;
return true;
}
case Attributes.UserWriteMask:
{
node.UserWriteMask = 0;
return true;
}
case Attributes.Value:
{
if (node.NodeClass == NodeClass.VariableType)
{
((IVariableBase)node).Value = error;
return true;
}
break;
}
}
Log(
"Mandatory attribute not supported for Node '{0}'. NodeId = {1}, NodeClass = {2}, Attribute = {3}",
node,
node.NodeId,
node.NodeClass,
Attributes.GetBrowseName(attributeId));
return false;
}
// anything goes for the value attribute.
if (attributeId == Attributes.Value)
{
((IVariableBase)node).Value = error;
return true;
}
Log(
"Unexpected error reading for Node '{0}'. NodeId = {1}, Attribute = {2}, Error = {3}",
node,
node.NodeId,
Attributes.GetBrowseName(attributeId),
error);
return false;
}