From accaa6b11bbae5528dc85766ab1112c53b92bc93 Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Mon, 10 Feb 2025 17:12:31 -0500 Subject: [PATCH] Reset backoff on successful subscription in MTRDevice. ReadClient does this, but we are not using its backoff logic. --- .../Framework/CHIP/MTRBaseSubscriptionCallback.h | 4 ++-- src/darwin/Framework/CHIP/MTRDevice_Concrete.mm | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRBaseSubscriptionCallback.h b/src/darwin/Framework/CHIP/MTRBaseSubscriptionCallback.h index 9edd153fd2410c..3719faa9442ca7 100644 --- a/src/darwin/Framework/CHIP/MTRBaseSubscriptionCallback.h +++ b/src/darwin/Framework/CHIP/MTRBaseSubscriptionCallback.h @@ -139,8 +139,6 @@ class MTRBaseSubscriptionCallback : public chip::app::ClusterStateCache::Callbac void OnDeallocatePaths(chip::app::ReadPrepareParams && aReadPrepareParams) override; - void OnSubscriptionEstablished(chip::SubscriptionId aSubscriptionId) override; - CHIP_ERROR OnResubscriptionNeeded(chip::app::ReadClient * apReadClient, CHIP_ERROR aTerminationCause) override; void OnUnsolicitedMessageFromPublisher(chip::app::ReadClient * apReadClient) override; @@ -153,6 +151,8 @@ class MTRBaseSubscriptionCallback : public chip::app::ClusterStateCache::Callbac void CallResubscriptionScheduledHandler(NSError * error, NSNumber * resubscriptionDelay); + void OnSubscriptionEstablished(chip::SubscriptionId aSubscriptionId) override; + private: DataReportCallback _Nullable mAttributeReportCallback = nil; DataReportCallback _Nullable mEventReportCallback = nil; diff --git a/src/darwin/Framework/CHIP/MTRDevice_Concrete.mm b/src/darwin/Framework/CHIP/MTRDevice_Concrete.mm index 4e29b0e5e3d3a3..0a9e897cf54b53 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_Concrete.mm @@ -118,6 +118,8 @@ - (void)_deviceInternalStateChanged:(MTRDevice *)device; void ResetResubscriptionBackoff() { mResubscriptionNumRetries = 0; } private: + void OnSubscriptionEstablished(chip::SubscriptionId aSubscriptionId) override; + void OnEventData(const EventHeader & aEventHeader, TLV::TLVReader * apData, const StatusIB * apStatus) override; void OnAttributeData(const ConcreteDataAttributePath & aPath, TLV::TLVReader * apData, const StatusIB & aStatus) override; @@ -4770,6 +4772,14 @@ + (MTRDevice *)deviceWithNodeID:(uint64_t)nodeID deviceController:(MTRDeviceCont #pragma mark - SubscriptionCallback namespace { +void SubscriptionCallback::OnSubscriptionEstablished(SubscriptionId aSubscriptionId) +{ + // The next time we need to do a resubscribe, we should start a new backoff + // sequence. + ResetResubscriptionBackoff(); + MTRBaseSubscriptionCallback::OnSubscriptionEstablished(aSubscriptionId); +} + void SubscriptionCallback::OnEventData(const EventHeader & aEventHeader, TLV::TLVReader * apData, const StatusIB * apStatus) { if (mEventReports == nil) {