From 5d25e39dd1678c970f2bda942b5e21747fa31b39 Mon Sep 17 00:00:00 2001 From: Bart Sopers Date: Mon, 27 Apr 2020 23:14:00 +0200 Subject: [PATCH] Verify the message address before accepting --- .../comm/OmnipodCommunicationService.java | 4 ++++ .../IllegalMessageAddressException.java | 22 +++++++++++++++++++ .../omnipod/comm/message/OmnipodMessage.java | 5 ++++- .../driver/comm/AapsOmnipodManager.java | 3 +++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/exception/IllegalMessageAddressException.java diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationService.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationService.java index 8c29a1356c..d610c43ddb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationService.java @@ -16,6 +16,7 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.Rile import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.OmnipodAction; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.CommunicationException; +import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.IllegalMessageAddressException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.IllegalPacketTypeException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.IllegalResponseException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.IllegalMessageSequenceNumberException; @@ -218,6 +219,9 @@ public class OmnipodCommunicationService extends RileyLinkCommunicationManager { while (receivedMessage == null) { try { receivedMessage = OmnipodMessage.decodeMessage(receivedMessageData); + if(receivedMessage.getAddress() != message.getAddress()) { + throw new IllegalMessageAddressException(message.getAddress(), receivedMessage.getAddress()); + } if (receivedMessage.getSequenceNumber() != podState.getMessageNumber()) { throw new IllegalMessageSequenceNumberException(podState.getMessageNumber(), receivedMessage.getSequenceNumber()); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/exception/IllegalMessageAddressException.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/exception/IllegalMessageAddressException.java new file mode 100644 index 0000000000..9c674cd8ca --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/exception/IllegalMessageAddressException.java @@ -0,0 +1,22 @@ +package info.nightscout.androidaps.plugins.pump.omnipod.comm.exception; + +import info.nightscout.androidaps.plugins.pump.omnipod.exception.OmnipodException; + +public class IllegalMessageAddressException extends OmnipodException { + private final int expected; + private final int actual; + + public IllegalMessageAddressException(int expected, int actual) { + super("Invalid message address. Expected="+ expected +", actual="+ actual, false); + this.expected = expected; + this.actual = actual; + } + + public int getExpected() { + return expected; + } + + public int getActual() { + return actual; + } +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/message/OmnipodMessage.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/message/OmnipodMessage.java index c328997172..78cfa72e19 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/message/OmnipodMessage.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/message/OmnipodMessage.java @@ -97,6 +97,10 @@ public class OmnipodMessage { } } + public int getAddress() { + return address; + } + public List getMessageBlocks() { return messageBlocks; } @@ -135,7 +139,6 @@ public class OmnipodMessage { return false; } - @Override public String toString() { return "OmnipodMessage{" + diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsOmnipodManager.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsOmnipodManager.java index 40b3454f71..34fdce45e0 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsOmnipodManager.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsOmnipodManager.java @@ -37,6 +37,7 @@ import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodManager; import info.nightscout.androidaps.plugins.pump.omnipod.comm.SetupActionResult; +import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.IllegalMessageAddressException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.IllegalMessageSequenceNumberException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.podinfo.PodInfoRecentPulseLog; @@ -615,6 +616,8 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface comment = getStringResource(R.string.omnipod_driver_error_invalid_response); } else if (ex instanceof IllegalMessageSequenceNumberException) { comment = getStringResource(R.string.omnipod_driver_error_invalid_message_sequence_number); + } else if (ex instanceof IllegalMessageAddressException) { + comment = getStringResource(R.string.omnipod_driver_error_invalid_message_address); } else if (ex instanceof MessageDecodingException) { comment = getStringResource(R.string.omnipod_driver_error_message_decoding_failed); } else if (ex instanceof NonceOutOfSyncException) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a97887f5f8..b112907813 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1757,6 +1757,7 @@ Communication failed: the Pod is in a wrong state. Communication failed: received an invalid response from the Pod. Communication failed: received a message with an invalid sequence number from the Pod. + Communication failed: received a message with an invalid address from the Pod. Communication failed: failed to decode message from the Pod. Communication failed: nonce resync failed. Communication failed: nonce out of sync.