|
|
|
@@ -165,3 +165,245 @@ int bacerror_decode_service_request(
|
|
|
|
|
return apdu_len;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Determine the error class from the error code
|
|
|
|
|
* @param error_code #BACNET_ERROR_CODE enumeration
|
|
|
|
|
* @return BACnet Error class assigned to the error code
|
|
|
|
|
* @note Error Code OTHER appears in all classes. Some
|
|
|
|
|
* error codes appear in multiple classes, such as
|
|
|
|
|
* VALUE_OUT_OF_RANGE, OPTIONAL_FUNCTIONALITY_NOT_SUPPORTED,
|
|
|
|
|
* WRITE_ACCESS_DENIED, READ_ACCESS_DENIED,
|
|
|
|
|
* INVALID_TAG, and SECURITY_ERROR.
|
|
|
|
|
*/
|
|
|
|
|
BACNET_ERROR_CLASS bacerror_code_class(BACNET_ERROR_CODE error_code)
|
|
|
|
|
{
|
|
|
|
|
BACNET_ERROR_CLASS error_class = ERROR_CLASS_DEVICE;
|
|
|
|
|
|
|
|
|
|
switch (error_code) {
|
|
|
|
|
case ERROR_CODE_CONFIGURATION_IN_PROGRESS:
|
|
|
|
|
case ERROR_CODE_DEVICE_BUSY:
|
|
|
|
|
case ERROR_CODE_INCONSISTENT_CONFIGURATION:
|
|
|
|
|
case ERROR_CODE_INTERNAL_ERROR:
|
|
|
|
|
case ERROR_CODE_NOT_CONFIGURED:
|
|
|
|
|
case ERROR_CODE_OPERATIONAL_PROBLEM:
|
|
|
|
|
case ERROR_CODE_OTHER:
|
|
|
|
|
error_class = ERROR_CLASS_DEVICE;
|
|
|
|
|
break;
|
|
|
|
|
case ERROR_CODE_BUSY:
|
|
|
|
|
case ERROR_CODE_DYNAMIC_CREATION_NOT_SUPPORTED:
|
|
|
|
|
case ERROR_CODE_FILE_FULL:
|
|
|
|
|
case ERROR_CODE_INVALID_OPERATION_IN_THIS_STATE:
|
|
|
|
|
case ERROR_CODE_LOG_BUFFER_FULL:
|
|
|
|
|
case ERROR_CODE_NO_ALARM_CONFIGURED:
|
|
|
|
|
case ERROR_CODE_NO_OBJECTS_OF_SPECIFIED_TYPE:
|
|
|
|
|
case ERROR_CODE_OBJECT_DELETION_NOT_PERMITTED:
|
|
|
|
|
case ERROR_CODE_OBJECT_IDENTIFIER_ALREADY_EXISTS:
|
|
|
|
|
case ERROR_CODE_REFERENCED_PORT_IN_ERROR:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_OBJECT:
|
|
|
|
|
case ERROR_CODE_UNSUPPORTED_OBJECT_TYPE:
|
|
|
|
|
error_class = ERROR_CLASS_OBJECT;
|
|
|
|
|
break;
|
|
|
|
|
case ERROR_CODE_CHARACTER_SET_NOT_SUPPORTED:
|
|
|
|
|
case ERROR_CODE_DATATYPE_NOT_SUPPORTED:
|
|
|
|
|
case ERROR_CODE_DUPLICATE_ENTRY:
|
|
|
|
|
case ERROR_CODE_DUPLICATE_NAME:
|
|
|
|
|
case ERROR_CODE_DUPLICATE_OBJECT_ID:
|
|
|
|
|
case ERROR_CODE_INCONSISTENT_SELECTION_CRITERION:
|
|
|
|
|
case ERROR_CODE_INVALID_ARRAY_INDEX:
|
|
|
|
|
case ERROR_CODE_INVALID_ARRAY_SIZE:
|
|
|
|
|
case ERROR_CODE_INVALID_DATA_ENCODING:
|
|
|
|
|
case ERROR_CODE_INVALID_DATA_TYPE:
|
|
|
|
|
case ERROR_CODE_INVALID_VALUE_IN_THIS_STATE:
|
|
|
|
|
case ERROR_CODE_LIST_ITEM_NOT_NUMBERED:
|
|
|
|
|
case ERROR_CODE_LIST_ITEM_NOT_TIMESTAMPED:
|
|
|
|
|
case ERROR_CODE_LOGGED_VALUE_PURGED:
|
|
|
|
|
case ERROR_CODE_NO_PROPERTY_SPECIFIED:
|
|
|
|
|
case ERROR_CODE_NOT_CONFIGURED_FOR_TRIGGERED_LOGGING:
|
|
|
|
|
case ERROR_CODE_NOT_COV_PROPERTY:
|
|
|
|
|
case ERROR_CODE_NOT_ENABLED:
|
|
|
|
|
case ERROR_CODE_OPTIONAL_FUNCTIONALITY_NOT_SUPPORTED:
|
|
|
|
|
case ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY:
|
|
|
|
|
case ERROR_CODE_READ_ACCESS_DENIED:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_PROPERTY:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_FILE_SIZE:
|
|
|
|
|
case ERROR_CODE_VALUE_NOT_INITIALIZED:
|
|
|
|
|
case ERROR_CODE_VALUE_OUT_OF_RANGE:
|
|
|
|
|
case ERROR_CODE_VALUE_TOO_LONG:
|
|
|
|
|
case ERROR_CODE_WRITE_ACCESS_DENIED:
|
|
|
|
|
error_class = ERROR_CLASS_PROPERTY;
|
|
|
|
|
break;
|
|
|
|
|
case ERROR_CODE_NO_SPACE_FOR_OBJECT:
|
|
|
|
|
case ERROR_CODE_NO_SPACE_TO_ADD_LIST_ELEMENT:
|
|
|
|
|
case ERROR_CODE_NO_SPACE_TO_WRITE_PROPERTY:
|
|
|
|
|
case ERROR_CODE_OUT_OF_MEMORY:
|
|
|
|
|
error_class = ERROR_CLASS_RESOURCES;
|
|
|
|
|
break;
|
|
|
|
|
case ERROR_CODE_ACCESS_DENIED:
|
|
|
|
|
case ERROR_CODE_ADJUST_SCOPE_REQUIRED:
|
|
|
|
|
case ERROR_CODE_AUTH_SCOPE_REQUIRED:
|
|
|
|
|
case ERROR_CODE_BAD_DESTINATION_ADDRESS:
|
|
|
|
|
case ERROR_CODE_BAD_DESTINATION_DEVICE_ID:
|
|
|
|
|
case ERROR_CODE_BAD_SIGNATURE:
|
|
|
|
|
case ERROR_CODE_BIND_SCOPE_REQUIRED:
|
|
|
|
|
case ERROR_CODE_CONFIG_SCOPE_REQUIRED:
|
|
|
|
|
case ERROR_CODE_CERTIFICATE_EXPIRED:
|
|
|
|
|
case ERROR_CODE_CERTIFICATE_MALFORMED:
|
|
|
|
|
case ERROR_CODE_CERTIFICATE_REVOKED:
|
|
|
|
|
case ERROR_CODE_CERTIFICATE_INVALID:
|
|
|
|
|
case ERROR_CODE_DUPLICATE_MESSAGE:
|
|
|
|
|
case ERROR_CODE_ENCRYPTION_NOT_CONFIGURED:
|
|
|
|
|
case ERROR_CODE_ENCRYPTION_REQUIRED:
|
|
|
|
|
case ERROR_CODE_EXTENDED_SCOPE_REQUIRED:
|
|
|
|
|
case ERROR_CODE_INCORRECT_AUDIENCE:
|
|
|
|
|
case ERROR_CODE_INCORRECT_CLIENT:
|
|
|
|
|
case ERROR_CODE_INCORRECT_ISSUER:
|
|
|
|
|
case ERROR_CODE_INSTALL_SCOPE_REQUIRED:
|
|
|
|
|
case ERROR_CODE_INSUFFICIENT_SCOPE:
|
|
|
|
|
case ERROR_CODE_INVALID_TOKEN:
|
|
|
|
|
case ERROR_CODE_MALFORMED_MESSAGE:
|
|
|
|
|
case ERROR_CODE_OVERRIDE_SCOPE_REQUIRED:
|
|
|
|
|
case ERROR_CODE_PASSWORD_FAILURE:
|
|
|
|
|
case ERROR_CODE_REVOKED_TOKEN:
|
|
|
|
|
case ERROR_CODE_SECURITY_NOT_CONFIGURED:
|
|
|
|
|
case ERROR_CODE_SOURCE_SECURITY_REQUIRED:
|
|
|
|
|
case ERROR_CODE_SUCCESS:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_AUTHENTICATION_TYPE:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_KEY:
|
|
|
|
|
case ERROR_CODE_VIEW_SCOPE_REQUIRED:
|
|
|
|
|
error_class = ERROR_CLASS_SECURITY;
|
|
|
|
|
break;
|
|
|
|
|
case ERROR_CODE_COMMUNICATION_DISABLED:
|
|
|
|
|
case ERROR_CODE_COV_SUBSCRIPTION_FAILED:
|
|
|
|
|
case ERROR_CODE_FILE_ACCESS_DENIED:
|
|
|
|
|
case ERROR_CODE_INCONSISTENT_OBJECT_TYPE:
|
|
|
|
|
case ERROR_CODE_INCONSISTENT_PARAMETERS:
|
|
|
|
|
case ERROR_CODE_INVALID_CONFIGURATION_DATA:
|
|
|
|
|
case ERROR_CODE_INVALID_EVENT_STATE:
|
|
|
|
|
case ERROR_CODE_INVALID_FILE_ACCESS_METHOD:
|
|
|
|
|
case ERROR_CODE_INVALID_FILE_START_POSITION:
|
|
|
|
|
case ERROR_CODE_INVALID_PARAMETER_DATA_TYPE:
|
|
|
|
|
case ERROR_CODE_INVALID_TAG:
|
|
|
|
|
case ERROR_CODE_INVALID_TIME_STAMP:
|
|
|
|
|
case ERROR_CODE_LIST_ELEMENT_NOT_FOUND:
|
|
|
|
|
case ERROR_CODE_MISSING_REQUIRED_PARAMETER:
|
|
|
|
|
case ERROR_CODE_NO_DEFAULT_SCOPE:
|
|
|
|
|
case ERROR_CODE_NO_POLICY:
|
|
|
|
|
case ERROR_CODE_PARAMETER_OUT_OF_RANGE:
|
|
|
|
|
case ERROR_CODE_PROPERTY_IS_NOT_A_LIST:
|
|
|
|
|
case ERROR_CODE_SERVICE_REQUEST_DENIED:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_AUDIENCE:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_CLIENT:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_SCOPE:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_SUBSCRIPTION:
|
|
|
|
|
error_class = ERROR_CLASS_SERVICES;
|
|
|
|
|
break;
|
|
|
|
|
case ERROR_CODE_ABORT_APDU_TOO_LONG:
|
|
|
|
|
case ERROR_CODE_ABORT_APPLICATION_EXCEEDED_REPLY_TIME:
|
|
|
|
|
case ERROR_CODE_ABORT_BUFFER_OVERFLOW:
|
|
|
|
|
case ERROR_CODE_ABORT_INSUFFICIENT_SECURITY:
|
|
|
|
|
case ERROR_CODE_ABORT_INVALID_APDU_IN_THIS_STATE:
|
|
|
|
|
case ERROR_CODE_ABORT_OUT_OF_RESOURCES:
|
|
|
|
|
case ERROR_CODE_ABORT_PREEMPTED_BY_HIGHER_PRIORITY_TASK:
|
|
|
|
|
case ERROR_CODE_SECURITY_ERROR:
|
|
|
|
|
case ERROR_CODE_ABORT_SEGMENTATION_NOT_SUPPORTED:
|
|
|
|
|
case ERROR_CODE_ABORT_TSM_TIMEOUT:
|
|
|
|
|
case ERROR_CODE_ABORT_PROPRIETARY:
|
|
|
|
|
case ERROR_CODE_ABORT_OTHER:
|
|
|
|
|
case ERROR_CODE_ADDRESSING_ERROR:
|
|
|
|
|
case ERROR_CODE_BVLC_FUNCTION_UNKNOWN:
|
|
|
|
|
case ERROR_CODE_BVLC_PROPRIETARY_FUNCTION_UNKNOWN:
|
|
|
|
|
case ERROR_CODE_DELETE_FDT_ENTRY_FAILED:
|
|
|
|
|
case ERROR_CODE_DISTRIBUTE_BROADCAST_FAILED:
|
|
|
|
|
case ERROR_CODE_DNS_ERROR:
|
|
|
|
|
case ERROR_CODE_DNS_NAME_RESOLUTION_FAILED:
|
|
|
|
|
case ERROR_CODE_DNS_RESOLVER_FAILURE:
|
|
|
|
|
case ERROR_CODE_DNS_UNAVAILABLE:
|
|
|
|
|
case ERROR_CODE_HEADER_ENCODING_ERROR:
|
|
|
|
|
case ERROR_CODE_HEADER_NOT_UNDERSTOOD:
|
|
|
|
|
case ERROR_CODE_HTTP_ERROR:
|
|
|
|
|
case ERROR_CODE_HTTP_NOT_A_SERVER:
|
|
|
|
|
case ERROR_CODE_HTTP_NO_UPGRADE:
|
|
|
|
|
case ERROR_CODE_HTTP_PROXY_AUTHENTICATION_FAILED:
|
|
|
|
|
case ERROR_CODE_HTTP_RESOURCE_NOT_LOCAL:
|
|
|
|
|
case ERROR_CODE_HTTP_RESPONSE_MISSING_HEADER:
|
|
|
|
|
case ERROR_CODE_HTTP_RESPONSE_TIMEOUT:
|
|
|
|
|
case ERROR_CODE_HTTP_RESPONSE_SYNTAX_ERROR:
|
|
|
|
|
case ERROR_CODE_HTTP_RESPONSE_VALUE_ERROR:
|
|
|
|
|
case ERROR_CODE_HTTP_TEMPORARY_UNAVAILABLE:
|
|
|
|
|
case ERROR_CODE_HTTP_UNEXPECTED_RESPONSE_CODE:
|
|
|
|
|
case ERROR_CODE_HTTP_UPGRADE_REQUIRED:
|
|
|
|
|
case ERROR_CODE_HTTP_UPGRADE_ERROR:
|
|
|
|
|
case ERROR_CODE_HTTP_WEBSOCKET_HEADER_ERROR:
|
|
|
|
|
case ERROR_CODE_IP_ADDRESS_NOT_REACHABLE:
|
|
|
|
|
case ERROR_CODE_IP_ERROR:
|
|
|
|
|
case ERROR_CODE_MESSAGE_INCOMPLETE:
|
|
|
|
|
case ERROR_CODE_MESSAGE_TOO_LONG:
|
|
|
|
|
case ERROR_CODE_NETWORK_DOWN:
|
|
|
|
|
case ERROR_CODE_NODE_DUPLICATE_VMAC:
|
|
|
|
|
case ERROR_CODE_NOT_A_BACNET_SC_HUB:
|
|
|
|
|
case ERROR_CODE_NOT_ROUTER_TO_DNET:
|
|
|
|
|
case ERROR_CODE_PAYLOAD_EXPECTED:
|
|
|
|
|
case ERROR_CODE_READ_BDT_FAILED:
|
|
|
|
|
case ERROR_CODE_READ_FDT_FAILED:
|
|
|
|
|
case ERROR_CODE_REGISTER_FOREIGN_DEVICE_FAILED:
|
|
|
|
|
case ERROR_CODE_REJECT_BUFFER_OVERFLOW:
|
|
|
|
|
case ERROR_CODE_REJECT_INCONSISTENT_PARAMETERS:
|
|
|
|
|
case ERROR_CODE_REJECT_INVALID_PARAMETER_DATA_TYPE:
|
|
|
|
|
case ERROR_CODE_REJECT_INVALID_TAG:
|
|
|
|
|
case ERROR_CODE_REJECT_MISSING_REQUIRED_PARAMETER:
|
|
|
|
|
case ERROR_CODE_REJECT_PARAMETER_OUT_OF_RANGE:
|
|
|
|
|
case ERROR_CODE_REJECT_TOO_MANY_ARGUMENTS:
|
|
|
|
|
case ERROR_CODE_REJECT_UNDEFINED_ENUMERATION:
|
|
|
|
|
case ERROR_CODE_REJECT_UNRECOGNIZED_SERVICE:
|
|
|
|
|
case ERROR_CODE_REJECT_PROPRIETARY:
|
|
|
|
|
case ERROR_CODE_REJECT_OTHER:
|
|
|
|
|
case ERROR_CODE_ROUTER_BUSY:
|
|
|
|
|
case ERROR_CODE_TCP_CONNECT_TIMEOUT:
|
|
|
|
|
case ERROR_CODE_TCP_CONNECTION_REFUSED:
|
|
|
|
|
case ERROR_CODE_TCP_CLOSED_BY_LOCAL:
|
|
|
|
|
case ERROR_CODE_TCP_CLOSED_OTHER:
|
|
|
|
|
case ERROR_CODE_TCP_ERROR:
|
|
|
|
|
case ERROR_CODE_TIMEOUT:
|
|
|
|
|
case ERROR_CODE_TLS_CLIENT_AUTHENTICATION_FAILED:
|
|
|
|
|
case ERROR_CODE_TLS_CLIENT_CERTIFICATE_ERROR:
|
|
|
|
|
case ERROR_CODE_TLS_CLIENT_CERTIFICATE_EXPIRED:
|
|
|
|
|
case ERROR_CODE_TLS_CLIENT_CERTIFICATE_REVOKED:
|
|
|
|
|
case ERROR_CODE_TLS_ERROR:
|
|
|
|
|
case ERROR_CODE_TLS_SERVER_AUTHENTICATION_FAILED:
|
|
|
|
|
case ERROR_CODE_TLS_SERVER_CERTIFICATE_ERROR:
|
|
|
|
|
case ERROR_CODE_TLS_SERVER_CERTIFICATE_EXPIRED:
|
|
|
|
|
case ERROR_CODE_TLS_SERVER_CERTIFICATE_REVOKED:
|
|
|
|
|
case ERROR_CODE_UNEXPECTED_DATA:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_DEVICE:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_ROUTE:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_NETWORK_MESSAGE:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_CLOSE_ERROR:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_CLOSED_BY_PEER:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_CLOSED_ABNORMALLY:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_DATA_AGAINST_POLICY:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_DATA_NOT_ACCEPTED:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_ENDPOINT_LEAVES:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_ERROR:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_EXTENSION_MISSING:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_FRAME_TOO_LONG:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_PROTOCOL_ERROR:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_SCHEME_NOT_SUPPORTED:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_UNKNOWN_CONTROL_MESSAGE:
|
|
|
|
|
case ERROR_CODE_WEBSOCKET_REQUEST_UNAVAILABLE:
|
|
|
|
|
case ERROR_CODE_WRITE_BDT_FAILED:
|
|
|
|
|
error_class = ERROR_CLASS_COMMUNICATION;
|
|
|
|
|
break;
|
|
|
|
|
case ERROR_CODE_NO_VT_SESSIONS_AVAILABLE:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_VT_CLASS:
|
|
|
|
|
case ERROR_CODE_UNKNOWN_VT_SESSION:
|
|
|
|
|
case ERROR_CODE_VT_SESSION_ALREADY_CLOSED:
|
|
|
|
|
case ERROR_CODE_VT_SESSION_TERMINATION_FAILURE:
|
|
|
|
|
error_class = ERROR_CLASS_VT;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return error_class;
|
|
|
|
|
}
|
|
|
|
|