2nd pass at changing the error/reject/abort status reporting to improve BTL test compliance. ReadProperty fully done for core and demo objects. Will tackle other services next.
This commit is contained in:
@@ -75,7 +75,7 @@ void handler_read_property(
|
|||||||
int apdu_len = -1;
|
int apdu_len = -1;
|
||||||
int npdu_len = -1;
|
int npdu_len = -1;
|
||||||
BACNET_NPDU_DATA npdu_data;
|
BACNET_NPDU_DATA npdu_data;
|
||||||
bool error = false;
|
bool error = true; /* assume that there is an error */
|
||||||
int bytes_sent = 0;
|
int bytes_sent = 0;
|
||||||
BACNET_ADDRESS my_address;
|
BACNET_ADDRESS my_address;
|
||||||
|
|
||||||
@@ -85,16 +85,13 @@ void handler_read_property(
|
|||||||
npdu_len =
|
npdu_len =
|
||||||
npdu_encode_pdu(&Handler_Transmit_Buffer[0], src, &my_address,
|
npdu_encode_pdu(&Handler_Transmit_Buffer[0], src, &my_address,
|
||||||
&npdu_data);
|
&npdu_data);
|
||||||
if (service_data->segmented_message) {
|
if (service_data->segmented_message) { /* we don't support segmentation - send an abort */
|
||||||
/* we don't support segmentation - send an abort */
|
rpdata.error_code = ERROR_CODE_ABORT_SEGMENTATION_NOT_SUPPORTED;
|
||||||
apdu_len =
|
len = BACNET_STATUS_ABORT;
|
||||||
abort_encode_apdu(&Handler_Transmit_Buffer[npdu_len],
|
|
||||||
service_data->invoke_id, ABORT_REASON_SEGMENTATION_NOT_SUPPORTED,
|
|
||||||
true);
|
|
||||||
#if PRINT_ENABLED
|
#if PRINT_ENABLED
|
||||||
fprintf(stderr, "RP: Segmented message. Sending Abort!\n");
|
fprintf(stderr, "RP: Segmented message. Sending Abort!\n");
|
||||||
#endif
|
#endif
|
||||||
goto RP_ABORT;
|
goto RP_FAILURE;
|
||||||
}
|
}
|
||||||
len = rp_decode_service_request(service_request, service_len, &rpdata);
|
len = rp_decode_service_request(service_request, service_len, &rpdata);
|
||||||
#if PRINT_ENABLED
|
#if PRINT_ENABLED
|
||||||
@@ -103,16 +100,13 @@ void handler_read_property(
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
/* bad decoding - send an abort */
|
/* bad decoding - skip to error/reject/abort handling */
|
||||||
apdu_len = reject_encode_apdu(&Handler_Transmit_Buffer[npdu_len],
|
error = true;
|
||||||
service_data->invoke_id, rpdata.error_code);
|
|
||||||
#if PRINT_ENABLED
|
#if PRINT_ENABLED
|
||||||
fprintf(stderr, "RP: Bad Encoding. Sending Abort!\n");
|
fprintf(stderr, "RP: Bad Encoding.\n");
|
||||||
#endif
|
#endif
|
||||||
goto RP_ABORT;
|
goto RP_FAILURE;
|
||||||
}
|
}
|
||||||
/* assume that there is an error */
|
|
||||||
error = true;
|
|
||||||
apdu_len =
|
apdu_len =
|
||||||
rp_ack_encode_apdu_init(&Handler_Transmit_Buffer[npdu_len],
|
rp_ack_encode_apdu_init(&Handler_Transmit_Buffer[npdu_len],
|
||||||
service_data->invoke_id, &rpdata);
|
service_data->invoke_id, &rpdata);
|
||||||
@@ -129,14 +123,11 @@ void handler_read_property(
|
|||||||
apdu_len += len;
|
apdu_len += len;
|
||||||
if (apdu_len > service_data->max_resp) {
|
if (apdu_len > service_data->max_resp) {
|
||||||
/* too big for the sender - send an abort */
|
/* too big for the sender - send an abort */
|
||||||
apdu_len =
|
rpdata.error_code = ERROR_CODE_ABORT_SEGMENTATION_NOT_SUPPORTED;
|
||||||
abort_encode_apdu(&Handler_Transmit_Buffer[npdu_len],
|
len = BACNET_STATUS_ABORT;
|
||||||
service_data->invoke_id,
|
|
||||||
ABORT_REASON_SEGMENTATION_NOT_SUPPORTED, true);
|
|
||||||
#if PRINT_ENABLED
|
#if PRINT_ENABLED
|
||||||
fprintf(stderr, "RP: Message too large. Sending Abort!\n");
|
fprintf(stderr, "RP: Message too large.\n");
|
||||||
#endif
|
#endif
|
||||||
goto RP_ABORT;
|
|
||||||
} else {
|
} else {
|
||||||
#if PRINT_ENABLED
|
#if PRINT_ENABLED
|
||||||
fprintf(stderr, "RP: Sending Ack!\n");
|
fprintf(stderr, "RP: Sending Ack!\n");
|
||||||
@@ -144,27 +135,41 @@ void handler_read_property(
|
|||||||
error = false;
|
error = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RP_FAILURE:
|
||||||
if (error) {
|
if (error) {
|
||||||
if (len == -2) {
|
if (len == BACNET_STATUS_ABORT) {
|
||||||
/* BACnet APDU too small to fit data, so proper response is Abort */
|
/* Kludge alert! At the moment we assume any abort is due to
|
||||||
|
* to space issues due to segmentation or lack thereof. I wanted to show the proper
|
||||||
|
* handling via the abort_convert_error_code() so I put the error code
|
||||||
|
* in here, if you are sure all aborts properly set up the error_code then
|
||||||
|
* remove this next line
|
||||||
|
*/
|
||||||
|
rpdata.error_code = ERROR_CODE_ABORT_SEGMENTATION_NOT_SUPPORTED;
|
||||||
apdu_len =
|
apdu_len =
|
||||||
abort_encode_apdu(&Handler_Transmit_Buffer[npdu_len],
|
abort_encode_apdu(&Handler_Transmit_Buffer[npdu_len],
|
||||||
service_data->invoke_id,
|
service_data->invoke_id,
|
||||||
ABORT_REASON_SEGMENTATION_NOT_SUPPORTED, true);
|
abort_convert_error_code(rpdata.error_code), true);
|
||||||
#if PRINT_ENABLED
|
#if PRINT_ENABLED
|
||||||
fprintf(stderr, "RP: Reply too big to fit into APDU!\n");
|
fprintf(stderr, "RP: Sending Abort!\n");
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else if (len == BACNET_STATUS_ERROR){
|
||||||
apdu_len =
|
apdu_len =
|
||||||
bacerror_encode_apdu(&Handler_Transmit_Buffer[npdu_len],
|
bacerror_encode_apdu(&Handler_Transmit_Buffer[npdu_len],
|
||||||
service_data->invoke_id, SERVICE_CONFIRMED_READ_PROPERTY,
|
service_data->invoke_id, SERVICE_CONFIRMED_READ_PROPERTY,
|
||||||
rpdata.error_class, rpdata.error_code);
|
rpdata.error_class, rpdata.error_code);
|
||||||
#if PRINT_ENABLED
|
#if PRINT_ENABLED
|
||||||
fprintf(stderr, "RP: Sending Error!\n");
|
fprintf(stderr, "RP: Sending Error!\n");
|
||||||
|
#endif
|
||||||
|
} else if (len == BACNET_STATUS_REJECT){
|
||||||
|
apdu_len = reject_encode_apdu(&Handler_Transmit_Buffer[npdu_len],
|
||||||
|
service_data->invoke_id, reject_convert_error_code(rpdata.error_code));
|
||||||
|
#if PRINT_ENABLED
|
||||||
|
fprintf(stderr, "RP: Sending Reject!\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RP_ABORT:
|
|
||||||
pdu_len = npdu_len + apdu_len;
|
pdu_len = npdu_len + apdu_len;
|
||||||
bytes_sent =
|
bytes_sent =
|
||||||
datalink_send_pdu(src, &npdu_data, &Handler_Transmit_Buffer[0],
|
datalink_send_pdu(src, &npdu_data, &Handler_Transmit_Buffer[0],
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ char *Analog_Input_Name(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return apdu length, or -1 on error */
|
/* return apdu length, or BACNET_STATUS_ERROR on error */
|
||||||
/* assumption - object has already exists */
|
/* assumption - object has already exists */
|
||||||
int Analog_Input_Read_Property(
|
int Analog_Input_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
@@ -237,14 +237,14 @@ int Analog_Input_Read_Property(
|
|||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) {
|
if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ char *Analog_Output_Name(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return apdu len, or -1 on error */
|
/* return apdu len, or BACNET_STATUS_ERROR on error */
|
||||||
int Analog_Output_Read_Property(
|
int Analog_Output_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
@@ -354,7 +354,7 @@ int Analog_Output_Read_Property(
|
|||||||
else {
|
else {
|
||||||
rpdata->error_class = ERROR_CLASS_SERVICES;
|
rpdata->error_class = ERROR_CLASS_SERVICES;
|
||||||
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -375,7 +375,7 @@ int Analog_Output_Read_Property(
|
|||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -386,7 +386,7 @@ int Analog_Output_Read_Property(
|
|||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
@@ -394,7 +394,7 @@ int Analog_Output_Read_Property(
|
|||||||
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ char *Analog_Value_Name(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return apdu len, or -1 on error */
|
/* return apdu len, or BACNET_STATUS_ERROR on error */
|
||||||
int Analog_Value_Read_Property(
|
int Analog_Value_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
@@ -303,7 +303,7 @@ int Analog_Value_Read_Property(
|
|||||||
else {
|
else {
|
||||||
rpdata->error_class = ERROR_CLASS_SERVICES;
|
rpdata->error_class = ERROR_CLASS_SERVICES;
|
||||||
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -324,7 +324,7 @@ int Analog_Value_Read_Property(
|
|||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -335,7 +335,7 @@ int Analog_Value_Read_Property(
|
|||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
@@ -343,7 +343,7 @@ int Analog_Value_Read_Property(
|
|||||||
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ bool Binary_Input_Polarity_Set(
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return apdu length, or -1 on error */
|
/* return apdu length, or BACNET_STATUS_ERROR on error */
|
||||||
/* assumption - object already exists, and has been bounds checked */
|
/* assumption - object already exists, and has been bounds checked */
|
||||||
int Binary_Input_Read_Property(
|
int Binary_Input_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
@@ -394,14 +394,14 @@ int Binary_Input_Read_Property(
|
|||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) {
|
if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ char *Binary_Output_Name(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return apdu len, or -1 on error */
|
/* return apdu len, or BACNET_STATUS_ERROR on error */
|
||||||
int Binary_Output_Read_Property(
|
int Binary_Output_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
@@ -284,7 +284,7 @@ int Binary_Output_Read_Property(
|
|||||||
else {
|
else {
|
||||||
rpdata->error_class = ERROR_CLASS_SERVICES;
|
rpdata->error_class = ERROR_CLASS_SERVICES;
|
||||||
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -306,7 +306,7 @@ int Binary_Output_Read_Property(
|
|||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,7 +328,7 @@ int Binary_Output_Read_Property(
|
|||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
@@ -336,7 +336,7 @@ int Binary_Output_Read_Property(
|
|||||||
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ char *Binary_Value_Name(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return apdu len, or -1 on error */
|
/* return apdu len, or BACNET_STATUS_ERROR on error */
|
||||||
int Binary_Value_Read_Property(
|
int Binary_Value_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
@@ -277,7 +277,7 @@ int Binary_Value_Read_Property(
|
|||||||
else {
|
else {
|
||||||
rpdata->error_class = ERROR_CLASS_SERVICES;
|
rpdata->error_class = ERROR_CLASS_SERVICES;
|
||||||
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -299,7 +299,7 @@ int Binary_Value_Read_Property(
|
|||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -311,7 +311,7 @@ int Binary_Value_Read_Property(
|
|||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
@@ -319,7 +319,7 @@ int Binary_Value_Read_Property(
|
|||||||
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -949,8 +949,8 @@ int tm_isdst Daylight Savings flag.
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return the length of the apdu encoded or -1 for error or
|
/* return the length of the apdu encoded or BACNET_STATUS_ERROR for error or
|
||||||
-2 for abort message */
|
BACNET_STATUS_ABORT for abort message */
|
||||||
static int Device_Read_Property_Local(
|
static int Device_Read_Property_Local(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
@@ -1105,15 +1105,16 @@ static int Device_Read_Property_Local(
|
|||||||
/* assume next one is the same size as this one */
|
/* assume next one is the same size as this one */
|
||||||
/* can we all fit into the APDU? */
|
/* can we all fit into the APDU? */
|
||||||
if ((apdu_len + len) >= MAX_APDU) {
|
if ((apdu_len + len) >= MAX_APDU) {
|
||||||
/* reject message */
|
/* Abort response */
|
||||||
apdu_len = -2;
|
rpdata->error_code = ERROR_CODE_ABORT_SEGMENTATION_NOT_SUPPORTED;
|
||||||
|
apdu_len = BACNET_STATUS_ABORT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* error: internal error? */
|
/* error: internal error? */
|
||||||
rpdata->error_class = ERROR_CLASS_SERVICES;
|
rpdata->error_class = ERROR_CLASS_SERVICES;
|
||||||
rpdata->error_code = ERROR_CODE_OTHER;
|
rpdata->error_code = ERROR_CODE_OTHER;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1128,7 +1129,7 @@ static int Device_Read_Property_Local(
|
|||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1172,7 +1173,7 @@ static int Device_Read_Property_Local(
|
|||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
@@ -1180,7 +1181,7 @@ static int Device_Read_Property_Local(
|
|||||||
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
@@ -1192,12 +1193,12 @@ static int Device_Read_Property_Local(
|
|||||||
*
|
*
|
||||||
* @param rpdata [in,out] Structure with the desired Object and Property info
|
* @param rpdata [in,out] Structure with the desired Object and Property info
|
||||||
* on entry, and APDU message on return.
|
* on entry, and APDU message on return.
|
||||||
* @return The length of the APDU on success, else -1
|
* @return The length of the APDU on success, else BACNET_STATUS_ERROR
|
||||||
*/
|
*/
|
||||||
int Device_Read_Property(
|
int Device_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
int apdu_len = -1;
|
int apdu_len = BACNET_STATUS_ERROR;
|
||||||
struct object_functions *pObject = NULL;
|
struct object_functions *pObject = NULL;
|
||||||
|
|
||||||
/* initialize the default return values */
|
/* initialize the default return values */
|
||||||
|
|||||||
@@ -678,7 +678,7 @@ void Load_Control_State_Machine_Handler(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return apdu len, or -1 on error */
|
/* return apdu len, or BACNET_STATUS_ERROR on error */
|
||||||
int Load_Control_Read_Property(
|
int Load_Control_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
@@ -849,7 +849,7 @@ int Load_Control_Read_Property(
|
|||||||
else {
|
else {
|
||||||
rpdata->error_class = ERROR_CLASS_SERVICES;
|
rpdata->error_class = ERROR_CLASS_SERVICES;
|
||||||
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -861,7 +861,7 @@ int Load_Control_Read_Property(
|
|||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -887,7 +887,7 @@ int Load_Control_Read_Property(
|
|||||||
else {
|
else {
|
||||||
rpdata->error_class = ERROR_CLASS_SERVICES;
|
rpdata->error_class = ERROR_CLASS_SERVICES;
|
||||||
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -901,14 +901,14 @@ int Load_Control_Read_Property(
|
|||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
@@ -918,7 +918,7 @@ int Load_Control_Read_Property(
|
|||||||
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -359,7 +359,7 @@ char *Lighting_Output_Name(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return apdu len, or -1 on error */
|
/* return apdu len, or BACNET_STATUS_ERROR on error */
|
||||||
int Lighting_Output_Read_Property(
|
int Lighting_Output_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
@@ -461,7 +461,7 @@ int Lighting_Output_Read_Property(
|
|||||||
else {
|
else {
|
||||||
rpdata->error_class = ERROR_CLASS_SERVICES;
|
rpdata->error_class = ERROR_CLASS_SERVICES;
|
||||||
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -482,7 +482,7 @@ int Lighting_Output_Read_Property(
|
|||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -494,7 +494,7 @@ int Lighting_Output_Read_Property(
|
|||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
@@ -502,7 +502,7 @@ int Lighting_Output_Read_Property(
|
|||||||
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ char *Life_Safety_Point_Name(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return apdu len, or -1 on error */
|
/* return apdu len, or BACNET_STATUS_ERROR on error */
|
||||||
int Life_Safety_Point_Read_Property(
|
int Life_Safety_Point_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
@@ -282,14 +282,14 @@ int Life_Safety_Point_Read_Property(
|
|||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) {
|
if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -316,7 +316,7 @@ bool Multistate_Input_State_Text_Set(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* return apdu len, or -1 on error */
|
/* return apdu len, or BACNET_STATUS_ERROR on error */
|
||||||
int Multistate_Input_Read_Property(
|
int Multistate_Input_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
@@ -416,7 +416,7 @@ int Multistate_Input_Read_Property(
|
|||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_SERVICES;
|
rpdata->error_class = ERROR_CLASS_SERVICES;
|
||||||
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -434,14 +434,14 @@ int Multistate_Input_Read_Property(
|
|||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
@@ -449,7 +449,7 @@ int Multistate_Input_Read_Property(
|
|||||||
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ char *Multistate_Output_Name(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return apdu len, or -1 on error */
|
/* return apdu len, or BACNET_STATUS_ERROR on error */
|
||||||
int Multistate_Output_Read_Property(
|
int Multistate_Output_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
@@ -286,7 +286,7 @@ int Multistate_Output_Read_Property(
|
|||||||
else {
|
else {
|
||||||
rpdata->error_class = ERROR_CLASS_SERVICES;
|
rpdata->error_class = ERROR_CLASS_SERVICES;
|
||||||
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
rpdata->error_code = ERROR_CODE_NO_SPACE_FOR_OBJECT;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -309,7 +309,7 @@ int Multistate_Output_Read_Property(
|
|||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
rpdata->error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,7 +327,7 @@ int Multistate_Output_Read_Property(
|
|||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
@@ -335,7 +335,7 @@ int Multistate_Output_Read_Property(
|
|||||||
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
(rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -271,8 +271,8 @@ char *Trend_Log_Name(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* return the length of the apdu encoded or -1 for error or
|
/* return the length of the apdu encoded or BACNET_STATUS_ERROR for error or
|
||||||
-2 for abort message */
|
BACNET_STATUS_ABORT for abort message */
|
||||||
int Trend_Log_Read_Property(
|
int Trend_Log_Read_Property(
|
||||||
BACNET_READ_PROPERTY_DATA * rpdata)
|
BACNET_READ_PROPERTY_DATA * rpdata)
|
||||||
{
|
{
|
||||||
@@ -328,7 +328,7 @@ int Trend_Log_Read_Property(
|
|||||||
/* You can only read the buffer via the ReadRange service */
|
/* You can only read the buffer via the ReadRange service */
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_READ_ACCESS_DENIED;
|
rpdata->error_code = ERROR_CODE_READ_ACCESS_DENIED;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_RECORD_COUNT:
|
case PROP_RECORD_COUNT:
|
||||||
@@ -429,7 +429,7 @@ int Trend_Log_Read_Property(
|
|||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* only array properties can have array options */
|
/* only array properties can have array options */
|
||||||
@@ -437,7 +437,7 @@ int Trend_Log_Read_Property(
|
|||||||
&& (rpdata->array_index != BACNET_ARRAY_ALL)) {
|
&& (rpdata->array_index != BACNET_ARRAY_ALL)) {
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY;
|
||||||
apdu_len = -1;
|
apdu_len = BACNET_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apdu_len;
|
return apdu_len;
|
||||||
|
|||||||
@@ -41,6 +41,9 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
BACNET_ABORT_REASON abort_convert_error_code(
|
||||||
|
BACNET_ERROR_CODE error_code);
|
||||||
|
|
||||||
int abort_encode_apdu(
|
int abort_encode_apdu(
|
||||||
uint8_t * apdu,
|
uint8_t * apdu,
|
||||||
uint8_t invoke_id,
|
uint8_t invoke_id,
|
||||||
|
|||||||
@@ -99,4 +99,9 @@ typedef struct BACnet_Object_Id {
|
|||||||
#define BACNET_ID_VALUE(bacnet_object_instance, bacnet_object_type) ((((bacnet_object_type) & BACNET_MAX_OBJECT) << BACNET_INSTANCE_BITS) | ((bacnet_object_instance) & BACNET_MAX_INSTANCE))
|
#define BACNET_ID_VALUE(bacnet_object_instance, bacnet_object_type) ((((bacnet_object_type) & BACNET_MAX_OBJECT) << BACNET_INSTANCE_BITS) | ((bacnet_object_instance) & BACNET_MAX_INSTANCE))
|
||||||
#define BACNET_INSTANCE(bacnet_object_id_num) ((bacnet_object_id_num)&BACNET_MAX_INSTANCE)
|
#define BACNET_INSTANCE(bacnet_object_id_num) ((bacnet_object_id_num)&BACNET_MAX_INSTANCE)
|
||||||
#define BACNET_TYPE(bacnet_object_id_num) (((bacnet_object_id_num) >> BACNET_INSTANCE_BITS ) & BACNET_MAX_OBJECT)
|
#define BACNET_TYPE(bacnet_object_id_num) (((bacnet_object_id_num) >> BACNET_INSTANCE_BITS ) & BACNET_MAX_OBJECT)
|
||||||
|
|
||||||
|
#define BACNET_STATUS_ERROR (-1)
|
||||||
|
#define BACNET_STATUS_ABORT (-2)
|
||||||
|
#define BACNET_STATUS_REJECT (-3)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1250,7 +1250,7 @@ typedef enum {
|
|||||||
MAX_BACNET_REJECT_REASON = 10,
|
MAX_BACNET_REJECT_REASON = 10,
|
||||||
FIRST_PROPRIETARY_REJECT_REASON = 64,
|
FIRST_PROPRIETARY_REJECT_REASON = 64,
|
||||||
LAST_PROPRIETARY_REJECT_REASON = 65535
|
LAST_PROPRIETARY_REJECT_REASON = 65535
|
||||||
} BACNET_BACNET_REJECT_REASON;
|
} BACNET_REJECT_REASON;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ERROR_CLASS_DEVICE = 0,
|
ERROR_CLASS_DEVICE = 0,
|
||||||
|
|||||||
@@ -41,6 +41,9 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
BACNET_REJECT_REASON reject_convert_error_code(
|
||||||
|
BACNET_ERROR_CODE error_code);
|
||||||
|
|
||||||
int reject_encode_apdu(
|
int reject_encode_apdu(
|
||||||
uint8_t * apdu,
|
uint8_t * apdu,
|
||||||
uint8_t invoke_id,
|
uint8_t invoke_id,
|
||||||
|
|||||||
@@ -37,6 +37,24 @@
|
|||||||
#include "bacdef.h"
|
#include "bacdef.h"
|
||||||
|
|
||||||
/** @file abort.c Abort Encoding/Decoding */
|
/** @file abort.c Abort Encoding/Decoding */
|
||||||
|
/* Helper function to avoid needing additional entries in service data structures
|
||||||
|
* when passing back abort status.
|
||||||
|
* Convert from error code to abort code - assumes value is in range
|
||||||
|
* ERROR_CODE_RESERVED1 to ERROR_CODE_ABORT_SEGMENTATION_NOT_SUPPORTED
|
||||||
|
* anything outside this range gets converted to ABORT_REASON_OTHER.
|
||||||
|
* Will need reworking if it is required to return proprietary abort codes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
BACNET_ABORT_REASON abort_convert_error_code(
|
||||||
|
BACNET_ERROR_CODE error_code)
|
||||||
|
{
|
||||||
|
BACNET_ABORT_REASON abort_code = ABORT_REASON_OTHER;
|
||||||
|
|
||||||
|
if((error_code > ERROR_CODE_RESERVED1) && (error_code <= ERROR_CODE_ABORT_SEGMENTATION_NOT_SUPPORTED))
|
||||||
|
abort_code = (BACNET_ABORT_REASON)(error_code - ERROR_CODE_RESERVED1);
|
||||||
|
|
||||||
|
return(abort_code);
|
||||||
|
}
|
||||||
|
|
||||||
/* encode service */
|
/* encode service */
|
||||||
int abort_encode_apdu(
|
int abort_encode_apdu(
|
||||||
|
|||||||
@@ -38,6 +38,25 @@
|
|||||||
|
|
||||||
/** @file reject.c Encode/Decode Reject APDUs */
|
/** @file reject.c Encode/Decode Reject APDUs */
|
||||||
|
|
||||||
|
/* Helper function to avoid needing additional entries in service data structures
|
||||||
|
* when passing back reject status.
|
||||||
|
* Convert from error code to reject code - assumes value is in range
|
||||||
|
* ERROR_CODE_REJECT_BUFFER_OVERFLOW to ERROR_CODE_REJECT_UNRECOGNIZED_SERVICE
|
||||||
|
* anything outside this range gets converted to REJECT_REASON_OTHER.
|
||||||
|
* Will need reworking if it is required to return proprietary reject codes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
BACNET_REJECT_REASON reject_convert_error_code(
|
||||||
|
BACNET_ERROR_CODE error_code)
|
||||||
|
{
|
||||||
|
BACNET_REJECT_REASON reject_code = REJECT_REASON_OTHER;
|
||||||
|
|
||||||
|
if((error_code > ERROR_CODE_NETWORK_DOWN) && (error_code <= ERROR_CODE_REJECT_UNRECOGNIZED_SERVICE))
|
||||||
|
reject_code = (BACNET_REJECT_REASON)(error_code - ERROR_CODE_NETWORK_DOWN);
|
||||||
|
|
||||||
|
return(reject_code);
|
||||||
|
}
|
||||||
|
|
||||||
/* encode service */
|
/* encode service */
|
||||||
int reject_encode_apdu(
|
int reject_encode_apdu(
|
||||||
uint8_t * apdu,
|
uint8_t * apdu,
|
||||||
|
|||||||
+10
-10
@@ -92,14 +92,14 @@ int rp_decode_service_request(
|
|||||||
/* Must have at least 2 tags, an object id and a property identifier
|
/* Must have at least 2 tags, an object id and a property identifier
|
||||||
* of at least 1 byte in length to have any chance of parsing */
|
* of at least 1 byte in length to have any chance of parsing */
|
||||||
if(apdu_len < 7) {
|
if(apdu_len < 7) {
|
||||||
rpdata->error_code = REJECT_REASON_MISSING_REQUIRED_PARAMETER;
|
rpdata->error_code = ERROR_CODE_REJECT_MISSING_REQUIRED_PARAMETER;
|
||||||
return -1;
|
return BACNET_STATUS_REJECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tag 0: Object ID */
|
/* Tag 0: Object ID */
|
||||||
if (!decode_is_context_tag(&apdu[len++], 0)) {
|
if (!decode_is_context_tag(&apdu[len++], 0)) {
|
||||||
rpdata->error_code = REJECT_REASON_INVALID_TAG;
|
rpdata->error_code = ERROR_CODE_REJECT_INVALID_TAG;
|
||||||
return -1;
|
return BACNET_STATUS_REJECT;
|
||||||
}
|
}
|
||||||
len += decode_object_id(&apdu[len], &type, &rpdata->object_instance);
|
len += decode_object_id(&apdu[len], &type, &rpdata->object_instance);
|
||||||
rpdata->object_type = (BACNET_OBJECT_TYPE) type;
|
rpdata->object_type = (BACNET_OBJECT_TYPE) type;
|
||||||
@@ -108,8 +108,8 @@ int rp_decode_service_request(
|
|||||||
decode_tag_number_and_value(&apdu[len], &tag_number,
|
decode_tag_number_and_value(&apdu[len], &tag_number,
|
||||||
&len_value_type);
|
&len_value_type);
|
||||||
if (tag_number != 1) {
|
if (tag_number != 1) {
|
||||||
rpdata->error_code = REJECT_REASON_INVALID_TAG;
|
rpdata->error_code = ERROR_CODE_REJECT_INVALID_TAG;
|
||||||
return -1;
|
return BACNET_STATUS_REJECT;
|
||||||
}
|
}
|
||||||
len += decode_enumerated(&apdu[len], len_value_type, &property);
|
len += decode_enumerated(&apdu[len], len_value_type, &property);
|
||||||
rpdata->object_property = (BACNET_PROPERTY_ID) property;
|
rpdata->object_property = (BACNET_PROPERTY_ID) property;
|
||||||
@@ -123,8 +123,8 @@ int rp_decode_service_request(
|
|||||||
decode_unsigned(&apdu[len], len_value_type, &array_value);
|
decode_unsigned(&apdu[len], len_value_type, &array_value);
|
||||||
rpdata->array_index = array_value;
|
rpdata->array_index = array_value;
|
||||||
} else {
|
} else {
|
||||||
rpdata->error_code = REJECT_REASON_INVALID_TAG;
|
rpdata->error_code = ERROR_CODE_REJECT_INVALID_TAG;
|
||||||
return -1;
|
return BACNET_STATUS_REJECT;
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
rpdata->array_index = BACNET_ARRAY_ALL;
|
rpdata->array_index = BACNET_ARRAY_ALL;
|
||||||
@@ -132,8 +132,8 @@ int rp_decode_service_request(
|
|||||||
|
|
||||||
if(len < apdu_len) {
|
if(len < apdu_len) {
|
||||||
/* If something left over now, we have an invalid request */
|
/* If something left over now, we have an invalid request */
|
||||||
rpdata->error_code = REJECT_REASON_TOO_MANY_ARGUMENTS;
|
rpdata->error_code = ERROR_CODE_REJECT_TOO_MANY_ARGUMENTS;
|
||||||
return -1;
|
return BACNET_STATUS_REJECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (int) len;
|
return (int) len;
|
||||||
|
|||||||
Reference in New Issue
Block a user