The BACnet standard states that any attempt to read the LogBuffer property of a Trendlog or Trendlog Multiple object with a ReadProperty-Request or a ReadPropertyMultiple-Request shall cause a a Result(-) response, with an Error class of PROPERTY, and an Error Code of READ_ACCESS_DENIED.
Currently BACnet4j does not do this.
I've created a couple of patches which I believe fix this:
diff --git a/src/com/serotonin/bacnet4j/service/confirmed/ReadPropertyMultipleRequest.java b/src/com/serotonin/bacnet4j/service/confirmed/ReadPropertyMultipleRequest.java
--- a/src/com/serotonin/bacnet4j/service/confirmed/ReadPropertyMultipleRequest.java
+++ b/src/com/serotonin/bacnet4j/service/confirmed/ReadPropertyMultipleRequest.java
@@ -44,6 +44,8 @@
import com.serotonin.bacnet4j.type.constructed.ReadAccessResult.Result;
import com.serotonin.bacnet4j.type.constructed.ReadAccessSpecification;
import com.serotonin.bacnet4j.type.constructed.SequenceOf;
+import com.serotonin.bacnet4j.type.enumerated.ErrorClass;
+import com.serotonin.bacnet4j.type.enumerated.ErrorCode;
import com.serotonin.bacnet4j.type.enumerated.PropertyIdentifier;
import com.serotonin.bacnet4j.type.primitive.ObjectIdentifier;
import com.serotonin.bacnet4j.type.primitive.OctetString;
@@ -151,7 +153,10 @@
else {
// Get the specified property.
try {
- results.add(new Result(pid, pin, obj.getPropertyRequired(pid, pin)));
+ if (pid.equals(PropertyIdentifier.logBuffer))
+ results.add(new Result(pid, pin, new BACnetError(ErrorClass.property, ErrorCode.readAccessDenied)));
+ else
+ results.add(new Result(pid, pin, obj.getPropertyRequired(pid, pin)));
}
catch (BACnetServiceException e) {
results.add(new Result(pid, pin, new BACnetError(e.getErrorClass(), e.getErrorCode())));
diff --git a/src/com/serotonin/bacnet4j/service/confirmed/ReadPropertyMultipleRequest.java b/src/com/serotonin/bacnet4j/service/confirmed/ReadPropertyMultipleRequest.java
--- a/src/com/serotonin/bacnet4j/service/confirmed/ReadPropertyMultipleRequest.java
+++ b/src/com/serotonin/bacnet4j/service/confirmed/ReadPropertyMultipleRequest.java
@@ -44,6 +44,8 @@
import com.serotonin.bacnet4j.type.constructed.ReadAccessResult.Result;
import com.serotonin.bacnet4j.type.constructed.ReadAccessSpecification;
import com.serotonin.bacnet4j.type.constructed.SequenceOf;
+import com.serotonin.bacnet4j.type.enumerated.ErrorClass;
+import com.serotonin.bacnet4j.type.enumerated.ErrorCode;
import com.serotonin.bacnet4j.type.enumerated.PropertyIdentifier;
import com.serotonin.bacnet4j.type.primitive.ObjectIdentifier;
import com.serotonin.bacnet4j.type.primitive.OctetString;
@@ -151,7 +153,10 @@
else {
// Get the specified property.
try {
results.add(new Result(pid, pin, obj.getPropertyRequired(pid, pin)));
if (pid.equals(PropertyIdentifier.logBuffer))
results.add(new Result(pid, pin, new BACnetError(ErrorClass.property, ErrorCode.readAccessDenied)));
else
results.add(new Result(pid, pin, obj.getPropertyRequired(pid, pin)));
}
catch (BACnetServiceException e) {
results.add(new Result(pid, pin, new BACnetError(e.getErrorClass(), e.getErrorCode())));