diff --git a/bacnet-stack/demo/handler/h_rp.c b/bacnet-stack/demo/handler/h_rp.c index a17955ce..0c667e96 100644 --- a/bacnet-stack/demo/handler/h_rp.c +++ b/bacnet-stack/demo/handler/h_rp.c @@ -155,7 +155,7 @@ void handler_read_property( 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 */ + /* too big for the sender - send an abort */ len = abort_encode_apdu(&Handler_Transmit_Buffer[pdu_len], service_data->invoke_id, ABORT_REASON_SEGMENTATION_NOT_SUPPORTED, diff --git a/bacnet-stack/demo/handler/h_rpm.c b/bacnet-stack/demo/handler/h_rpm.c index f2ffb8da..a2bc6236 100644 --- a/bacnet-stack/demo/handler/h_rpm.c +++ b/bacnet-stack/demo/handler/h_rpm.c @@ -423,8 +423,8 @@ void handler_read_property_multiple( break; } } while (1); - if (pdu_len > service_data->max_resp) { - /* we don't support segmentation - send an abort */ + if (apdu_len > service_data->max_resp) { + /* too big for the sender - send an abort */ apdu_len = abort_encode_apdu(&Handler_Transmit_Buffer[npdu_len], service_data->invoke_id, ABORT_REASON_SEGMENTATION_NOT_SUPPORTED, diff --git a/bacnet-stack/ports/at91sam7s/h_rp.c b/bacnet-stack/ports/at91sam7s/h_rp.c index 786db423..23c3188f 100644 --- a/bacnet-stack/ports/at91sam7s/h_rp.c +++ b/bacnet-stack/ports/at91sam7s/h_rp.c @@ -163,7 +163,16 @@ void handler_read_property( len = rp_ack_encode_apdu(&Handler_Transmit_Buffer[pdu_len], service_data->invoke_id, &data); - error = false; + if (len > service_data->max_resp) { + /* too big for the sender - send an abort */ + len = + abort_encode_apdu(&Handler_Transmit_Buffer[pdu_len], + service_data->invoke_id, ABORT_REASON_SEGMENTATION_NOT_SUPPORTED, + true); + goto RP_ABORT; + } else { + error = false; + } } if (error) { if (len == -2) { diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/h_rp.c b/bacnet-stack/ports/bdk-atxx4-mstp/h_rp.c index 9392c9a6..695efc40 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/h_rp.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/h_rp.c @@ -163,7 +163,16 @@ void handler_read_property( len = rp_ack_encode_apdu(&Handler_Transmit_Buffer[pdu_len], service_data->invoke_id, &data); - error = false; + if (len > service_data->max_resp) { + /* too big for the sender - send an abort */ + len = + abort_encode_apdu(&Handler_Transmit_Buffer[pdu_len], + service_data->invoke_id, ABORT_REASON_SEGMENTATION_NOT_SUPPORTED, + true); + goto RP_ABORT; + } else { + error = false; + } } if (error) { if (len == -2) { diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/h_rpm.c b/bacnet-stack/ports/bdk-atxx4-mstp/h_rpm.c index 37db202f..819c9ce8 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/h_rpm.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/h_rpm.c @@ -432,6 +432,13 @@ void handler_read_property_multiple( break; } } while (1); + if (apdu_len > service_data->max_resp) { + /* too big for the sender - send an abort */ + apdu_len = + abort_encode_apdu(&Handler_Transmit_Buffer[npdu_len], + service_data->invoke_id, ABORT_REASON_SEGMENTATION_NOT_SUPPORTED, + true); + } RPM_ABORT: pdu_len = apdu_len + npdu_len; bytes_sent =