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 =