From 577ecf8d7f0046e6a8a69455a4e78c251b72fe34 Mon Sep 17 00:00:00 2001 From: Steve Karg Date: Mon, 2 Feb 2026 13:54:26 -0600 Subject: [PATCH] Added handling for abort and reject errors in Write Property service (#1216) --- CHANGELOG.md | 3 ++- src/bacnet/basic/service/h_wp.c | 14 +++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f0d48ba..3626cc58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ The git repositories are hosted at the following sites: * https://bacnet.sourceforge.net/ * https://github.com/bacnet-stack/bacnet-stack/ -## [Unreleased] - 2026-01-28 +## [Unreleased] - 2026-02-02 ### Security @@ -120,6 +120,7 @@ The git repositories are hosted at the following sites: ### Fixed +* Fixed handling for abort and reject errors in Write Property service. (#1216) * Fixed lighting output object lighting-commands for warn-off and warn-relinquish when an update at the specified priority slot shall occur after an egress time delay. (#1214) diff --git a/src/bacnet/basic/service/h_wp.c b/src/bacnet/basic/service/h_wp.c index ca3b097e..f740ea86 100644 --- a/src/bacnet/basic/service/h_wp.c +++ b/src/bacnet/basic/service/h_wp.c @@ -70,8 +70,10 @@ handler_write_property_relinquish_bypass(BACNET_WRITE_PROPERTY_DATA *wp_data) * - an Abort if * - the message is segmented * - if decoding fails + * - the WriteProperty fails and error code is an Abort + * - a Reject if the WriteProperty fails and error code is a Reject * - an ACK if Device_Write_Property() succeeds - * - an Error if Device_Write_Property() fails + * - an Error if Device_Write_Property() fails and error code is an Error * or there isn't enough room in the APDU to fit the data. * * @param service_request [in] The contents of the service request. @@ -154,6 +156,16 @@ void handler_write_property( &Handler_Transmit_Buffer[pdu_len], service_data->invoke_id, SERVICE_CONFIRMED_WRITE_PROPERTY); debug_print("WP: Sending Simple Ack!\n"); + } else if (abort_valid_error_code(wp_data.error_code)) { + len = abort_encode_apdu( + &Handler_Transmit_Buffer[pdu_len], service_data->invoke_id, + abort_convert_error_code(wp_data.error_code), true); + debug_print("WP: Sending Abort!\n"); + } else if (reject_valid_error_code(wp_data.error_code)) { + len = reject_encode_apdu( + &Handler_Transmit_Buffer[pdu_len], service_data->invoke_id, + reject_convert_error_code(wp_data.error_code)); + debug_print("WP: Sending Reject!\n"); } else { len = bacerror_encode_apdu( &Handler_Transmit_Buffer[pdu_len], service_data->invoke_id,