You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2018/10/18 17:25:15 UTC
[incubator-plc4x] branch master updated: [ADS] fixed a bunch of
sonar issues
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
The following commit(s) were added to refs/heads/master by this push:
new 7ef7f00 [ADS] fixed a bunch of sonar issues
7ef7f00 is described below
commit 7ef7f00527e1b3ef68699ab916b7ff3a33f503fd
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Oct 18 19:25:10 2018 +0200
[ADS] fixed a bunch of sonar issues
---
.../java/ads/api/commands/UnknownCommand.java | 2 +-
.../java/ads/api/commands/types/IndexGroup.java | 8 +++++
.../java/ads/api/commands/types/IndexOffset.java | 4 +++
.../ads/api/commands/types/TransmissionMode.java | 4 +++
.../plc4x/java/ads/api/generic/AmsPacket.java | 8 +++--
.../plc4x/java/ads/api/generic/types/AmsPort.java | 8 ++---
.../ads/api/serial/AmsSerialAcknowledgeFrame.java | 28 ++++++++++++----
.../plc4x/java/ads/api/serial/AmsSerialFrame.java | 32 +++++++++++++-----
.../java/ads/api/serial/AmsSerialResetFrame.java | 28 ++++++++++++----
.../plc4x/java/ads/api/tcp/AmsTCPPacket.java | 12 +++++--
.../java/ads/connection/AdsTcpPlcConnection.java | 28 +++++++++++++---
.../org/apache/plc4x/java/ads/model/AdsField.java | 1 +
.../plc4x/java/ads/model/DirectAdsField.java | 3 +-
.../plc4x/java/ads/model/SymbolicAdsField.java | 3 +-
.../java/ads/protocol/Ads2PayloadProtocol.java | 39 +++++++++++-----------
.../java/ads/protocol/Payload2SerialProtocol.java | 2 ++
.../plc4x/java/ads/protocol/Plc4x2AdsProtocol.java | 4 +--
.../exception/AdsProtocolOverflowException.java} | 15 ++++++---
.../plc4x/java/ads/protocol/util/DigestUtil.java | 10 +++---
.../ads/protocol/util/LittleEndianDecoder.java | 2 +-
.../protocol/util/SingleMessageRateLimiter.java | 10 +++---
21 files changed, 177 insertions(+), 74 deletions(-)
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
index df395dc..44bf79c 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
@@ -32,7 +32,7 @@ import static java.util.Objects.requireNonNull;
@AdsCommandType(Command.UNKNOWN)
public class UnknownCommand extends AmsPacket {
- private transient final ByteBuf remainingBytes;
+ private final transient ByteBuf remainingBytes;
private UnknownCommand(AmsHeader amsHeader, ByteBuf remainingBytes) {
super(amsHeader);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/IndexGroup.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/IndexGroup.java
index 1a84ebf..c52a498 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/IndexGroup.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/IndexGroup.java
@@ -85,6 +85,10 @@ public class IndexGroup extends UnsignedIntLEByteValue {
public static final IndexGroup ADSIGRP_DEVICE_DATA = IndexGroup.of(0xF100);
public static final IndexGroup ADSIOFFS_DEVDATA_ADSSTATE = IndexGroup.of(0x0000);
public static final IndexGroup ADSIOFFS_DEVDATA_DEVSTATE = IndexGroup.of(0x0002);
+
+ private ReservedGroups() {
+ // Container class
+ }
}
public static final class SystemServiceGroups {
@@ -111,5 +115,9 @@ public class IndexGroup extends UnsignedIntLEByteValue {
public static final IndexGroup SYSTEMSERVICE_TIMESERVICES = IndexGroup.of(400);
public static final IndexGroup SYSTEMSERVICE_STARTPROCESS = IndexGroup.of(500);
public static final IndexGroup SYSTEMSERVICE_CHANGENETID = IndexGroup.of(600);
+
+ private SystemServiceGroups() {
+ // Container class
+ }
}
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/IndexOffset.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/IndexOffset.java
index 943c41c..e307f80 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/IndexOffset.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/IndexOffset.java
@@ -65,5 +65,9 @@ public class IndexOffset extends UnsignedIntLEByteValue {
public static final IndexOffset TIMESERVICE_SYSTEMTIMES = IndexOffset.of(2);
public static final IndexOffset TIMESERVICE_RTCTIMEDIFF = IndexOffset.of(3);
public static final IndexOffset TIMESERVICE_ADJUSTTIMETORTC = IndexOffset.of(4);
+
+ private SystemServiceOffsets() {
+ // Container class
+ }
}
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/TransmissionMode.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/TransmissionMode.java
index 64ae165..83b1147 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/TransmissionMode.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/TransmissionMode.java
@@ -69,5 +69,9 @@ public class TransmissionMode extends UnsignedIntLEByteValue {
public static final TransmissionMode ADSTRANS_SERVERONCHA2 = TransmissionMode.of(6);
public static final TransmissionMode ADSTRANS_CLIENT1REQ = TransmissionMode.of(10);
public static final TransmissionMode ADSTRANS_MAXMODES = TransmissionMode.of(Integer.MAX_VALUE);
+
+ private DefinedValues() {
+ // Container class
+ }
}
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AmsPacket.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AmsPacket.java
index 51e10ca..b8a70fc 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AmsPacket.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AmsPacket.java
@@ -66,8 +66,12 @@ public abstract class AmsPacket implements ByteReadable {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof AmsPacket)) return false;
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof AmsPacket)) {
+ return false;
+ }
AmsPacket amsPacket = (AmsPacket) o;
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/types/AmsPort.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/types/AmsPort.java
index 5ae3123..061e301 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/types/AmsPort.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/types/AmsPort.java
@@ -69,10 +69,6 @@ public class AmsPort extends UnsignedShortLEByteValue {
public static class ReservedPorts {
- private ReservedPorts() {
- // Container class
- }
-
/**
* Logger (only NT-Log)
*/
@@ -128,5 +124,9 @@ public class AmsPort extends UnsignedShortLEByteValue {
* Scope
*/
public static final AmsPort scope = AmsPort.of(900);
+
+ private ReservedPorts() {
+ // Container class
+ }
}
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialAcknowledgeFrame.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialAcknowledgeFrame.java
index 16911b8..d3dfc77 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialAcknowledgeFrame.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialAcknowledgeFrame.java
@@ -121,16 +121,30 @@ public class AmsSerialAcknowledgeFrame implements ByteReadable {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof AmsSerialAcknowledgeFrame)) return false;
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof AmsSerialAcknowledgeFrame)) {
+ return false;
+ }
AmsSerialAcknowledgeFrame that = (AmsSerialAcknowledgeFrame) o;
- if (!magicCookie.equals(that.magicCookie)) return false;
- if (!transmitterAddress.equals(that.transmitterAddress)) return false;
- if (!receiverAddress.equals(that.receiverAddress)) return false;
- if (!fragmentNumber.equals(that.fragmentNumber)) return false;
- if (!userDataLength.equals(that.userDataLength)) return false;
+ if (!magicCookie.equals(that.magicCookie)) {
+ return false;
+ }
+ if (!transmitterAddress.equals(that.transmitterAddress)) {
+ return false;
+ }
+ if (!receiverAddress.equals(that.receiverAddress)) {
+ return false;
+ }
+ if (!fragmentNumber.equals(that.fragmentNumber)) {
+ return false;
+ }
+ if (!userDataLength.equals(that.userDataLength)) {
+ return false;
+ }
return crc.equals(that.crc);
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialFrame.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialFrame.java
index a0f1feb..8ca399e 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialFrame.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialFrame.java
@@ -142,17 +142,33 @@ public class AmsSerialFrame implements ByteReadable {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof AmsSerialFrame)) return false;
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof AmsSerialFrame)) {
+ return false;
+ }
AmsSerialFrame that = (AmsSerialFrame) o;
- if (!magicCookie.equals(that.magicCookie)) return false;
- if (!transmitterAddress.equals(that.transmitterAddress)) return false;
- if (!receiverAddress.equals(that.receiverAddress)) return false;
- if (!fragmentNumber.equals(that.fragmentNumber)) return false;
- if (!userDataLength.equals(that.userDataLength)) return false;
- if (!userData.equals(that.userData)) return false;
+ if (!magicCookie.equals(that.magicCookie)) {
+ return false;
+ }
+ if (!transmitterAddress.equals(that.transmitterAddress)) {
+ return false;
+ }
+ if (!receiverAddress.equals(that.receiverAddress)) {
+ return false;
+ }
+ if (!fragmentNumber.equals(that.fragmentNumber)) {
+ return false;
+ }
+ if (!userDataLength.equals(that.userDataLength)) {
+ return false;
+ }
+ if (!userData.equals(that.userData)) {
+ return false;
+ }
return crc.equals(that.crc);
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialResetFrame.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialResetFrame.java
index 4c8ab65..342ba0e 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialResetFrame.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AmsSerialResetFrame.java
@@ -133,16 +133,30 @@ public class AmsSerialResetFrame implements ByteReadable {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof AmsSerialResetFrame)) return false;
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof AmsSerialResetFrame)) {
+ return false;
+ }
AmsSerialResetFrame that = (AmsSerialResetFrame) o;
- if (!magicCookie.equals(that.magicCookie)) return false;
- if (!transmitterAddress.equals(that.transmitterAddress)) return false;
- if (!receiverAddress.equals(that.receiverAddress)) return false;
- if (!fragmentNumber.equals(that.fragmentNumber)) return false;
- if (!userDataLength.equals(that.userDataLength)) return false;
+ if (!magicCookie.equals(that.magicCookie)) {
+ return false;
+ }
+ if (!transmitterAddress.equals(that.transmitterAddress)) {
+ return false;
+ }
+ if (!receiverAddress.equals(that.receiverAddress)) {
+ return false;
+ }
+ if (!fragmentNumber.equals(that.fragmentNumber)) {
+ return false;
+ }
+ if (!userDataLength.equals(that.userDataLength)) {
+ return false;
+ }
return crc.equals(that.crc);
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/AmsTCPPacket.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/AmsTCPPacket.java
index 5c34f79..b2a5592 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/AmsTCPPacket.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/AmsTCPPacket.java
@@ -62,12 +62,18 @@ public class AmsTCPPacket implements ByteReadable {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof AmsTCPPacket)) return false;
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof AmsTCPPacket)) {
+ return false;
+ }
AmsTCPPacket that = (AmsTCPPacket) o;
- if (!amsTcpHeader.equals(that.amsTcpHeader)) return false;
+ if (!amsTcpHeader.equals(that.amsTcpHeader)) {
+ return false;
+ }
return userData.equals(that.userData);
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
index d4b2364..3a78dd8 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
@@ -56,6 +56,9 @@ import java.net.UnknownHostException;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@@ -115,7 +118,7 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
pipeline.addLast(new Payload2TcpProtocol());
pipeline.addLast(new Ads2PayloadProtocol());
pipeline.addLast(new Plc4x2AdsProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, fieldMapping));
- pipeline.addLast(new SingleItemToSingleRequestProtocol(AdsTcpPlcConnection.this, AdsTcpPlcConnection.this, timer)); // TODO: remove nulls; implement correctly
+ pipeline.addLast(new SingleItemToSingleRequestProtocol(AdsTcpPlcConnection.this, AdsTcpPlcConnection.this, timer));
}
};
}
@@ -200,7 +203,7 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
Invoke.NONE,
indexGroup,
indexOffset,
- Length.of(adsDataType.getTargetByteSize() * numberOfElements),
+ Length.of(adsDataType.getTargetByteSize() * (long) numberOfElements),
transmissionMode,
MaxDelay.of(0),
CycleTime.of(cycleTime)
@@ -223,7 +226,7 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
.stream()
.collect(Collectors.toMap(
fieldName -> fieldName,
- __ -> Pair.of(PlcResponseCode.OK, adsSubscriptionHandle)
+ ignored -> Pair.of(PlcResponseCode.OK, adsSubscriptionHandle)
));
future.complete(new DefaultPlcSubscriptionResponse(internalPlcSubscriptionRequest, responseItems));
@@ -324,7 +327,24 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
@Override
public void close() throws PlcConnectionException {
- // TODO: unregister all consumers.
+ try {
+ consumerRegistrations.values().forEach(getChannel().pipeline().get(Plc4x2AdsProtocol.class)::removeConsumer);
+ List<PlcSubscriptionHandle> collect = consumerRegistrations.keySet().stream()
+ .map(InternalPlcConsumerRegistration::getAssociatedHandles)
+ .flatMap(Collection::stream)
+ .map(PlcSubscriptionHandle.class::cast)
+ .collect(Collectors.toList());
+
+ PlcUnsubscriptionRequest plcUnsubscriptionRequest = new DefaultPlcUnsubscriptionRequest.Builder(this).addHandles(collect).build();
+ unsubscribe(plcUnsubscriptionRequest).get(5, TimeUnit.SECONDS);
+
+ consumerRegistrations.clear();
+ } catch (InterruptedException e) {
+ LOGGER.warn("Exception while closing", e);
+ Thread.currentThread().interrupt();
+ } catch (RuntimeException | ExecutionException | TimeoutException e) {
+ LOGGER.warn("Exception while closing", e);
+ }
super.close();
}
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsField.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsField.java
index cab080b..d4938e6 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsField.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsField.java
@@ -20,6 +20,7 @@ package org.apache.plc4x.java.ads.model;
import org.apache.plc4x.java.api.model.PlcField;
+@FunctionalInterface
public interface AdsField extends PlcField {
AdsDataType getAdsDataType();
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/DirectAdsField.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/DirectAdsField.java
index 70211de..27bc45f 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/DirectAdsField.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/DirectAdsField.java
@@ -57,7 +57,7 @@ public class DirectAdsField implements AdsField {
return new DirectAdsField(indexGroup, indexOffset, adsDataType, numberOfElements);
}
- public static DirectAdsField of(String address) throws PlcInvalidFieldException {
+ public static DirectAdsField of(String address) {
Matcher matcher = RESOURCE_ADDRESS_PATTERN.matcher(address);
if (!matcher.matches()) {
throw new PlcInvalidFieldException(address, RESOURCE_ADDRESS_PATTERN, "{indexGroup}/{indexOffset}:{adsDataType}([numberOfElements])?");
@@ -104,6 +104,7 @@ public class DirectAdsField implements AdsField {
return indexOffset;
}
+ @Override
public AdsDataType getAdsDataType() {
return adsDataType;
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsField.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsField.java
index bd94d7b..52f9720 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsField.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsField.java
@@ -46,7 +46,7 @@ public class SymbolicAdsField implements AdsField {
}
}
- public static SymbolicAdsField of(String address) throws PlcInvalidFieldException {
+ public static SymbolicAdsField of(String address) {
Matcher matcher = SYMBOLIC_ADDRESS_PATTERN.matcher(address);
if (!matcher.matches()) {
throw new PlcInvalidFieldException(address, SYMBOLIC_ADDRESS_PATTERN, "{address}");
@@ -70,6 +70,7 @@ public class SymbolicAdsField implements AdsField {
return symbolicAddress;
}
+ @Override
public AdsDataType getAdsDataType() {
return adsDataType;
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Ads2PayloadProtocol.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Ads2PayloadProtocol.java
index d0d8468..7d75019 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Ads2PayloadProtocol.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Ads2PayloadProtocol.java
@@ -28,6 +28,7 @@ import org.apache.plc4x.java.ads.api.commands.types.*;
import org.apache.plc4x.java.ads.api.generic.AmsHeader;
import org.apache.plc4x.java.ads.api.generic.AmsPacket;
import org.apache.plc4x.java.ads.api.generic.types.*;
+import org.apache.plc4x.java.ads.protocol.exception.AdsProtocolOverflowException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -91,7 +92,7 @@ public class Ads2PayloadProtocol extends MessageToMessageCodec<ByteBuf, AmsPacke
LOGGER.debug("Correlated packet received {}", correlatedAmsPacket);
}
if (dataLength.getAsLong() > Integer.MAX_VALUE) {
- throw new IllegalStateException("Overflow in datalength: " + dataLength.getAsLong());
+ throw new AdsProtocolOverflowException(Integer.class, dataLength.getAsLong());
}
ByteBuf commandBuffer = byteBuf.readBytes((int) dataLength.getAsLong());
AmsHeader amsHeader = AmsHeader.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, commandId, stateId, dataLength, errorCode, invoke);
@@ -169,10 +170,10 @@ public class Ads2PayloadProtocol extends MessageToMessageCodec<ByteBuf, AmsPacke
Result result = Result.of(commandBuffer);
Length length = Length.of(commandBuffer);
if (length.getAsLong() > Integer.MAX_VALUE) {
- throw new IllegalStateException("Overflow in datalength: " + length.getAsLong());
+ throw new AdsProtocolOverflowException(Integer.class, length.getAsLong());
}
if (length.getAsLong() > ADS_READ_COMMAND_MAX_BYTES) {
- throw new IllegalStateException("Overflow of ADS_READ_COMMAND_MAX_BYTES: " + ADS_READ_COMMAND_MAX_BYTES + ". Actual " + length.getAsLong() + "bytes.");
+ throw new AdsProtocolOverflowException("ADS_READ_COMMAND_MAX_BYTES", ADS_READ_COMMAND_MAX_BYTES, length.getAsLong());
}
byte[] dataToRead = new byte[(int) length.getAsLong()];
commandBuffer.readBytes(dataToRead);
@@ -189,10 +190,10 @@ public class Ads2PayloadProtocol extends MessageToMessageCodec<ByteBuf, AmsPacke
IndexOffset indexOffset = IndexOffset.of(commandBuffer);
Length length = Length.of(commandBuffer);
if (length.getAsLong() > Integer.MAX_VALUE) {
- throw new IllegalStateException("Overflow in datalength: " + length.getAsLong());
+ throw new AdsProtocolOverflowException(Integer.class, length.getAsLong());
}
if (length.getAsLong() > ADS_WRITE_COMMAND_MAX_BYTES) {
- throw new IllegalStateException("Overflow of ADS_WRITE_COMMAND_MAX_BYTES: " + ADS_WRITE_COMMAND_MAX_BYTES + ". Actual " + length.getAsLong() + "bytes.");
+ throw new AdsProtocolOverflowException("ADS_WRITE_COMMAND_MAX_BYTES", ADS_WRITE_COMMAND_MAX_BYTES, length.getAsLong());
}
byte[] dataToRead = new byte[(int) length.getAsLong()];
commandBuffer.readBytes(dataToRead);
@@ -226,10 +227,10 @@ public class Ads2PayloadProtocol extends MessageToMessageCodec<ByteBuf, AmsPacke
DeviceState deviceState = DeviceState.of(commandBuffer);
Length length = Length.of(commandBuffer);
if (length.getAsLong() > Integer.MAX_VALUE) {
- throw new IllegalStateException("Overflow in datalength: " + length.getAsLong());
+ throw new AdsProtocolOverflowException(Integer.class, length.getAsLong());
}
if (length.getAsLong() > ADS_WRITE_CONTROL_COMMAND_MAX_BYTES) {
- throw new IllegalStateException("Overflow of ADS_WRITE_CONTROL_COMMAND_MAX_BYTES: " + ADS_WRITE_CONTROL_COMMAND_MAX_BYTES + ". Actual " + length.getAsLong() + "bytes.");
+ throw new AdsProtocolOverflowException("ADS_WRITE_CONTROL_COMMAND_MAX_BYTES", ADS_WRITE_CONTROL_COMMAND_MAX_BYTES, length.getAsLong());
}
byte[] dataToRead = new byte[(int) length.getAsLong()];
commandBuffer.readBytes(dataToRead);
@@ -278,17 +279,17 @@ public class Ads2PayloadProtocol extends MessageToMessageCodec<ByteBuf, AmsPacke
if (stateId.isRequest()) {
Length length = Length.of(commandBuffer);
if (length.getAsLong() > Integer.MAX_VALUE) {
- throw new IllegalStateException("Overflow in datalength: " + length.getAsLong());
+ throw new AdsProtocolOverflowException(Integer.class, length.getAsLong());
}
Stamps stamps = Stamps.of(commandBuffer);
if (stamps.getAsLong() > Integer.MAX_VALUE) {
- throw new IllegalStateException("Overflow in datalength: " + stamps.getAsLong());
+ throw new AdsProtocolOverflowException(Integer.class, stamps.getAsLong());
}
// Note: the length includes the 4 Bytes of stamps which we read already so we substract.
ByteBuf adsDeviceNotificationBuffer = commandBuffer.readBytes((int) length.getAsLong() - Stamps.NUM_BYTES);
List<AdsStampHeader> adsStampHeaders = new ArrayList<>((int) stamps.getAsLong());
if (stamps.getAsLong() > MAX_NUM_STAMPS) {
- throw new IllegalStateException("Overflow of MAX_NUM_STAMPS: " + MAX_NUM_STAMPS + ". Actual " + stamps.getAsLong());
+ throw new AdsProtocolOverflowException("MAX_NUM_STAMPS", MAX_NUM_STAMPS, length.getAsLong());
}
for (int i = 1; i <= stamps.getAsLong(); i++) {
AdsStampHeader adsStampHeader = handleStampHeader(adsDeviceNotificationBuffer);
@@ -307,7 +308,7 @@ public class Ads2PayloadProtocol extends MessageToMessageCodec<ByteBuf, AmsPacke
List<AdsNotificationSample> adsNotificationSamples = new LinkedList<>();
if (samples.getAsLong() > MAX_NUM_SAMPLES) {
- throw new IllegalStateException("Overflow of MAX_NUM_SAMPLES: " + MAX_NUM_SAMPLES + ". Actual " + samples.getAsLong());
+ throw new AdsProtocolOverflowException("MAX_NUM_SAMPLES", MAX_NUM_SAMPLES, samples.getAsLong());
}
for (int i = 1; i <= samples.getAsLong(); i++) {
AdsNotificationSample adsNotificationSample = handleAdsNotificartionSample(adsDeviceNotificationBuffer);
@@ -321,10 +322,10 @@ public class Ads2PayloadProtocol extends MessageToMessageCodec<ByteBuf, AmsPacke
NotificationHandle notificationHandle = NotificationHandle.of(adsDeviceNotificationBuffer);
SampleSize sampleSize = SampleSize.of(adsDeviceNotificationBuffer);
if (sampleSize.getAsLong() > Integer.MAX_VALUE) {
- throw new IllegalStateException("Overflow in datalength: " + sampleSize.getAsLong());
+ throw new AdsProtocolOverflowException(Integer.class, sampleSize.getAsLong());
}
if (sampleSize.getAsLong() > ADS_NOTIFICATION_SAMPLE_MAX_BYTES) {
- throw new IllegalStateException("Overflow of ADS_NOTIFICATION_SAMPLE_MAX_BYTES: " + ADS_NOTIFICATION_SAMPLE_MAX_BYTES + ". Actual " + sampleSize.getAsLong() + "bytes.");
+ throw new AdsProtocolOverflowException("ADS_NOTIFICATION_SAMPLE_MAX_BYTES", ADS_NOTIFICATION_SAMPLE_MAX_BYTES, sampleSize.getAsLong());
}
// TODO: do we need a special marker class for: Notice: If your handle becomes invalid, one notification without data will be send once as advice.
byte[] dataToRead = new byte[(int) sampleSize.getAsLong()];
@@ -340,17 +341,17 @@ public class Ads2PayloadProtocol extends MessageToMessageCodec<ByteBuf, AmsPacke
IndexOffset indexOffset = IndexOffset.of(commandBuffer);
ReadLength readLength = ReadLength.of(commandBuffer);
if (readLength.getAsLong() > Integer.MAX_VALUE) {
- throw new IllegalStateException("Overflow in datalength: " + readLength.getAsLong());
+ throw new AdsProtocolOverflowException(Integer.class, readLength.getAsLong());
}
WriteLength writeLength = WriteLength.of(commandBuffer);
if (writeLength.getAsLong() > Integer.MAX_VALUE) {
- throw new IllegalStateException("Overflow in datalength: " + writeLength.getAsLong());
+ throw new AdsProtocolOverflowException(Integer.class, writeLength.getAsLong());
}
if (readLength.getAsLong() + writeLength.getAsLong() > Integer.MAX_VALUE) {
- throw new IllegalStateException("Overflow in datalength: " + readLength.getAsLong() + writeLength.getAsLong());
+ throw new AdsProtocolOverflowException(Integer.class, readLength.getAsLong() + writeLength.getAsLong());
}
if (readLength.getAsLong() > ADS_READ_WRITE_COMMAND_REQUEST_MAX_BYTES) {
- throw new IllegalStateException("Overflow of ADS_READ_WRITE_COMMAND_REQUEST_MAX_BYTES: " + ADS_READ_WRITE_COMMAND_REQUEST_MAX_BYTES + ". Actual " + readLength.getAsLong() + "bytes.");
+ throw new AdsProtocolOverflowException("ADS_READ_WRITE_COMMAND_REQUEST_MAX_BYTES", ADS_READ_WRITE_COMMAND_REQUEST_MAX_BYTES, readLength.getAsLong());
}
byte[] dataToRead = new byte[(int) readLength.getAsLong()];
commandBuffer.readBytes(dataToRead);
@@ -360,10 +361,10 @@ public class Ads2PayloadProtocol extends MessageToMessageCodec<ByteBuf, AmsPacke
Result result = Result.of(commandBuffer);
Length length = Length.of(commandBuffer);
if (length.getAsLong() > Integer.MAX_VALUE) {
- throw new IllegalStateException("Overflow in datalength: " + length.getAsLong());
+ throw new AdsProtocolOverflowException(Integer.class, length.getAsLong());
}
if (length.getAsLong() > ADS_READ_WRITE_COMMAND_RESPONSE_MAX_BYTES) {
- throw new IllegalStateException("Overflow of ADS_READ_WRITE_COMMAND_RESPONSE_MAX_BYTES: " + ADS_READ_WRITE_COMMAND_RESPONSE_MAX_BYTES + ". Actual " + length.getAsLong() + "bytes.");
+ throw new AdsProtocolOverflowException("ADS_READ_WRITE_COMMAND_RESPONSE_MAX_BYTES", ADS_READ_WRITE_COMMAND_RESPONSE_MAX_BYTES, length.getAsLong());
}
byte[] dataToRead = new byte[(int) length.getAsLong()];
commandBuffer.readBytes(dataToRead);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocol.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocol.java
index 41dfe4f..54cba1b 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocol.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocol.java
@@ -148,6 +148,8 @@ public class Payload2SerialProtocol extends MessageToMessageCodec<ByteBuf, ByteB
LOGGER.debug("Ams Serial Reset Frame received {}", amsSerialResetFrame);
ReferenceCountUtil.release(byteBuf);
break;
+ default:
+ throw new PlcProtocolException("Unknown type: " + magicCookie);
}
CRC calculatedCrc = CRC.of(DigestUtil.calculateCrc16(magicCookie, transmitterAddress, receiverAddress, fragmentNumber, userDataLength, userData));
if (!crc.equals(calculatedCrc)) {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocol.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocol.java
index fc67896..c67f455 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocol.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocol.java
@@ -283,7 +283,7 @@ public class Plc4x2AdsProtocol extends MessageToMessageCodec<AmsPacket, PlcReque
.stream()
.collect(Collectors.toMap(
fieldName -> fieldName,
- __ -> responseCode
+ ignore -> responseCode
));
return new DefaultPlcWriteResponse(plcWriteRequest, responseItems);
}
@@ -304,7 +304,7 @@ public class Plc4x2AdsProtocol extends MessageToMessageCodec<AmsPacket, PlcReque
.stream()
.collect(Collectors.toMap(
fieldName -> fieldName,
- __ -> Pair.of(responseCode, fieldItem)
+ ignore -> Pair.of(responseCode, fieldItem)
));
return new DefaultPlcReadResponse(plcReadRequest, responseItems);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsField.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/exception/AdsProtocolOverflowException.java
similarity index 58%
copy from plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsField.java
copy to plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/exception/AdsProtocolOverflowException.java
index cab080b..10f330a 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsField.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/exception/AdsProtocolOverflowException.java
@@ -16,10 +16,17 @@
specific language governing permissions and limitations
under the License.
*/
-package org.apache.plc4x.java.ads.model;
-import org.apache.plc4x.java.api.model.PlcField;
+package org.apache.plc4x.java.ads.protocol.exception;
-public interface AdsField extends PlcField {
- AdsDataType getAdsDataType();
+import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+
+public class AdsProtocolOverflowException extends PlcRuntimeException {
+ public AdsProtocolOverflowException(Class<?> clazz, long length) {
+ super("Overflow in datatype " + clazz + " length: " + length);
+ }
+
+ public AdsProtocolOverflowException(String constantName, long expectedLength, long actualLength) {
+ super("Overflow of " + constantName + ": " + expectedLength + ". Actual " + actualLength + "bytes.");
+ }
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/DigestUtil.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/DigestUtil.java
index 6305a31..9971ebb 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/DigestUtil.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/DigestUtil.java
@@ -33,7 +33,7 @@ public class DigestUtil {
CRC16.isReflectOut(),
CRC16.getFinalXor());
- private static CRC crc16 = new CRC(CRC16_ADS);
+ private static CRC crc = new CRC(CRC16_ADS);
private DigestUtil() {
// Utility class
@@ -43,16 +43,16 @@ public class DigestUtil {
if (byteReadables.length == 1) {
return calculateCrc16(byteReadables[0].getBytes());
}
- long currentCrcValue = crc16.init();
+ long currentCrcValue = crc.init();
for (ByteReadable byteReadable : byteReadables) {
- currentCrcValue = crc16.update(currentCrcValue, byteReadable.getBytes());
+ currentCrcValue = crc.update(currentCrcValue, byteReadable.getBytes());
}
- short finalCrc = crc16.finalCRC16(currentCrcValue);
+ short finalCrc = crc.finalCRC16(currentCrcValue);
return Short.toUnsignedInt(Short.reverseBytes(finalCrc));
}
public static int calculateCrc16(byte[] bytes) {
- short finalCrc = (short) crc16.calculateCRC(bytes);
+ short finalCrc = (short) crc.calculateCRC(bytes);
return Short.toUnsignedInt(Short.reverseBytes(finalCrc));
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java
index e09b508..235760e 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java
@@ -42,7 +42,7 @@ public class LittleEndianDecoder {
}
@SuppressWarnings("unchecked")
- public static FieldItem<?> decodeData(AdsDataType adsDataType, byte[] adsData) {
+ public static FieldItem decodeData(AdsDataType adsDataType, byte[] adsData) {
ByteBuf wrappedBuffer = Unpooled.wrappedBuffer(adsData);
switch (adsDataType) {
case BIT: {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/SingleMessageRateLimiter.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/SingleMessageRateLimiter.java
index 7b159a5..1f33c3b 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/SingleMessageRateLimiter.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/SingleMessageRateLimiter.java
@@ -63,7 +63,7 @@ public class SingleMessageRateLimiter extends ChannelDuplexHandler {
if (!messagesQueue.isEmpty() && messageOnTheWay.compareAndSet(false, true)) {
ToSend pop = messagesQueue.pop();
LOGGER.debug("Sending {}", pop);
- pop.channelHandlerContext.writeAndFlush(pop.toSend, pop.promise);
+ pop.channelHandlerContext.writeAndFlush(pop.objectToSend, pop.promise);
LOGGER.debug("Send {}", pop);
}
}, 100, 10, TimeUnit.MILLISECONDS);
@@ -103,12 +103,12 @@ public class SingleMessageRateLimiter extends ChannelDuplexHandler {
private static final class ToSend {
final ChannelHandlerContext channelHandlerContext;
- final Object toSend;
+ final Object objectToSend;
final ChannelPromise promise;
- private ToSend(ChannelHandlerContext channelHandlerContext, Object toSend, ChannelPromise promise) {
+ private ToSend(ChannelHandlerContext channelHandlerContext, Object objectToSend, ChannelPromise promise) {
this.channelHandlerContext = channelHandlerContext;
- this.toSend = toSend;
+ this.objectToSend = objectToSend;
this.promise = promise;
}
@@ -116,7 +116,7 @@ public class SingleMessageRateLimiter extends ChannelDuplexHandler {
public String toString() {
return "ToSend{" +
"channelHandlerContext=" + channelHandlerContext +
- ", toSend=" + toSend +
+ ", objectToSend=" + objectToSend +
", promise=" + promise +
'}';
}