From 9aa653c83ee4a17da2614e0c4e427616d9394dee Mon Sep 17 00:00:00 2001 From: skarg Date: Fri, 8 Jan 2010 22:37:24 +0000 Subject: [PATCH] Change RP and RPM demos to send an Abort if the APDU length is longer than max-APDU-length-accepted. Thank you, Carlos! --- bacnet-stack/demo/handler/h_rp.c | 16 ++++++++++++++-- bacnet-stack/demo/handler/h_rpm.c | 11 +++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/bacnet-stack/demo/handler/h_rp.c b/bacnet-stack/demo/handler/h_rp.c index 282b89b0..a17955ce 100644 --- a/bacnet-stack/demo/handler/h_rp.c +++ b/bacnet-stack/demo/handler/h_rp.c @@ -154,10 +154,22 @@ void handler_read_property( len = rp_ack_encode_apdu(&Handler_Transmit_Buffer[pdu_len], service_data->invoke_id, &data); + if (len > service_data->max_resp) { + /* we don't support segmentation - send an abort */ + len = + abort_encode_apdu(&Handler_Transmit_Buffer[pdu_len], + service_data->invoke_id, ABORT_REASON_SEGMENTATION_NOT_SUPPORTED, + true); #if PRINT_ENABLED - fprintf(stderr, "RP: Sending Ack!\n"); + fprintf(stderr, "RP: Message too large. Sending Abort!\n"); #endif - error = false; + goto RP_ABORT; + } else { +#if PRINT_ENABLED + fprintf(stderr, "RP: Sending Ack!\n"); +#endif + error = false; + } } if (error) { if (len == -2) { diff --git a/bacnet-stack/demo/handler/h_rpm.c b/bacnet-stack/demo/handler/h_rpm.c index 7e47b634..f2ffb8da 100644 --- a/bacnet-stack/demo/handler/h_rpm.c +++ b/bacnet-stack/demo/handler/h_rpm.c @@ -423,6 +423,17 @@ void handler_read_property_multiple( break; } } while (1); + if (pdu_len > service_data->max_resp) { + /* we don't support segmentation - send an abort */ + apdu_len = + abort_encode_apdu(&Handler_Transmit_Buffer[npdu_len], + service_data->invoke_id, ABORT_REASON_SEGMENTATION_NOT_SUPPORTED, + true); +#if PRINT_ENABLED + fprintf(stderr, "RP: Message too large. Sending Abort!\n"); +#endif + goto RPM_ABORT; + } RPM_ABORT: pdu_len = apdu_len + npdu_len; bytes_sent =