From 3c808ab05f1fe9c2452ac285c2cad559c060b8f6 Mon Sep 17 00:00:00 2001 From: Andrei Litvin Date: Fri, 3 May 2024 10:21:22 -0400 Subject: [PATCH] Fix handling of non-permitted messages in ExchangeContext. (#33148) (#33292) They should not count as responses, since we don't notify our delegate about them. Co-authored-by: Boris Zbarsky --- src/messaging/ExchangeContext.cpp | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/messaging/ExchangeContext.cpp b/src/messaging/ExchangeContext.cpp index bcdd4ea643af72..745a10828d5396 100644 --- a/src/messaging/ExchangeContext.cpp +++ b/src/messaging/ExchangeContext.cpp @@ -595,21 +595,26 @@ CHIP_ERROR ExchangeContext::HandleMessage(uint32_t messageCounter, const Payload return CHIP_ERROR_INCORRECT_STATE; } - if (IsResponseExpected()) + // Don't send messages on to our delegate if our dispatch does not allow + // those messages. Those messages should also not be treated as responses, + // since if our delegate is expecting a response we will not notify it about + // these messages. + if (mDispatch.MessagePermitted(payloadHeader.GetProtocolID(), payloadHeader.GetMessageType())) { - // Since we got the response, cancel the response timer. - CancelResponseTimer(); + if (IsResponseExpected()) + { + // Since we got the response, cancel the response timer. + CancelResponseTimer(); - // If the context was expecting a response to a previously sent message, this message - // is implicitly that response. - SetResponseExpected(false); - } + // If the context was expecting a response to a previously sent message, this message + // is implicitly that response. + SetResponseExpected(false); + } - // Don't send messages on to our delegate if our dispatch does not allow - // those messages. - if (mDelegate != nullptr && mDispatch.MessagePermitted(payloadHeader.GetProtocolID(), payloadHeader.GetMessageType())) - { - return mDelegate->OnMessageReceived(this, payloadHeader, std::move(msgBuf)); + if (mDelegate != nullptr) + { + return mDelegate->OnMessageReceived(this, payloadHeader, std::move(msgBuf)); + } } DefaultOnMessageReceived(this, payloadHeader.GetProtocolID(), payloadHeader.GetMessageType(), messageCounter,