Added optional array detection for common properties.

This commit is contained in:
skarg
2011-04-25 04:21:51 +00:00
parent f13191309e
commit ac7d360712
+24 -3
View File
@@ -170,6 +170,12 @@ static int Read_Property_Common(
apdu = rpdata->application_data; apdu = rpdata->application_data;
switch (rpdata->object_property) { switch (rpdata->object_property) {
case PROP_OBJECT_IDENTIFIER: case PROP_OBJECT_IDENTIFIER:
/* only array properties can have array options */
if (rpdata->array_index != BACNET_ARRAY_ALL) {
rpdata->error_class = ERROR_CLASS_PROPERTY;
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
apdu_len = BACNET_STATUS_ERROR;
} else {
/* Device Object exception: requested instance /* Device Object exception: requested instance
may not match our instance if a wildcard */ may not match our instance if a wildcard */
if (rpdata->object_type == OBJECT_DEVICE) { if (rpdata->object_type == OBJECT_DEVICE) {
@@ -178,21 +184,36 @@ static int Read_Property_Common(
apdu_len = apdu_len =
encode_application_object_id(&apdu[0], rpdata->object_type, encode_application_object_id(&apdu[0], rpdata->object_type,
rpdata->object_instance); rpdata->object_instance);
}
break; break;
case PROP_OBJECT_NAME: case PROP_OBJECT_NAME:
/* only array properties can have array options */
if (rpdata->array_index != BACNET_ARRAY_ALL) {
rpdata->error_class = ERROR_CLASS_PROPERTY;
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
apdu_len = BACNET_STATUS_ERROR;
} else {
characterstring_init_ansi(&char_string, "");
if (pObject->Object_Name) { if (pObject->Object_Name) {
(void)pObject->Object_Name( (void)pObject->Object_Name(
rpdata->object_instance, rpdata->object_instance,
&char_string); &char_string);
} else {
characterstring_init_ansi(&char_string, "");
} }
apdu_len = apdu_len =
encode_application_character_string(&apdu[0], &char_string); encode_application_character_string(&apdu[0], &char_string);
}
break; break;
case PROP_OBJECT_TYPE: case PROP_OBJECT_TYPE:
/* only array properties can have array options */
if (rpdata->array_index != BACNET_ARRAY_ALL) {
rpdata->error_class = ERROR_CLASS_PROPERTY;
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
apdu_len = BACNET_STATUS_ERROR;
} else {
apdu_len = apdu_len =
encode_application_enumerated(&apdu[0], rpdata->object_type); encode_application_enumerated(&apdu[0],
rpdata->object_type);
}
break; break;
default: default:
if (pObject->Object_Read_Property) { if (pObject->Object_Read_Property) {