diff --git a/src/transport/SessionManager.cpp b/src/transport/SessionManager.cpp index 3b0bb58bc00bde..fdf7c3cd75c488 100644 --- a/src/transport/SessionManager.cpp +++ b/src/transport/SessionManager.cpp @@ -486,21 +486,25 @@ void SessionManager::SecureGroupMessageDispatch(const PacketHeader & packetHeade ExitNow(err = CHIP_NO_ERROR); } + // Group Messages should never send an Ack + if (payloadHeader.NeedsAck()) + { + ChipLogError(Inet, "Invalid condition found in protocol header"); + ExitNow(err = CHIP_ERROR_INCORRECT_STATE); + } + // TODO: Handle Group message counter here spec 4.7.3 // spec 4.5.1.2 for msg counter - if (isDuplicate == SessionManagerDelegate::DuplicateMessage::Yes && !payloadHeader.NeedsAck()) + if (isDuplicate == SessionManagerDelegate::DuplicateMessage::Yes) { ChipLogDetail(Inet, "Received a duplicate message with MessageCounter:" ChipLogFormatMessageCounter " on exchange " ChipLogFormatExchangeId, packetHeader.GetMessageCounter(), ChipLogValueExchangeIdFromReceivedHeader(payloadHeader)); - if (!payloadHeader.NeedsAck()) - { - // If it's a duplicate message, but doesn't require an ack, let's drop it right here to save CPU - // cycles on further message processing. - ExitNow(err = CHIP_NO_ERROR); - } + + // If it's a duplicate message, let's drop it right here to save CPU cycles + ExitNow(err = CHIP_NO_ERROR); } // TODO: Commit Group Message Counter