From 0b716730b069645c20a9a83ca708f22451c5338b Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Thu, 30 May 2024 11:19:03 -0700 Subject: [PATCH] [mdns] use `NextFireTime` class (#10304) This commit updates the mDNS module to use the recently introduced general-purpose `NextFireTime` class, replacing the module-specific `TimerContext` class. --- src/core/net/mdns.cpp | 59 +++++++++++-------------------------------- src/core/net/mdns.hpp | 39 +++++++++++----------------- 2 files changed, 30 insertions(+), 68 deletions(-) diff --git a/src/core/net/mdns.cpp b/src/core/net/mdns.cpp index df0a61fdd..84c0cd199 100644 --- a/src/core/net/mdns.cpp +++ b/src/core/net/mdns.cpp @@ -305,10 +305,7 @@ void Core::HandleEntryTimer(void) RemoveEmptyEntries(); - if (context.GetNextTime() != context.GetNow().GetDistantFuture()) - { - mEntryTimer.FireAtIfEarlier(context.GetNextTime()); - } + mEntryTimer.FireAtIfEarlier(context.GetNextFireTime()); } void Core::RemoveEmptyEntries(void) @@ -823,6 +820,14 @@ void Core::FireTime::ScheduleFireTimeOn(TimerMilli &aTimer) } } +void Core::FireTime::UpdateNextFireTimeOn(NextFireTime &aNextFireTime) const +{ + if (mHasFireTime) + { + aNextFireTime.UpdateIfEarlier(mFireTime); + } +} + //---------------------------------------------------------------------------------------------------------------------- // Core::Entry @@ -1199,10 +1204,7 @@ template void Core::Entry::HandleTimer(EntryTimerContext &a thisAsEntryType->DetermineNextFireTime(); exit: - if (HasFireTime()) - { - aContext.UpdateNextTime(GetFireTime()); - } + UpdateNextFireTimeOn(aContext.GetNextFireTime()); } void Core::Entry::AppendQuestionTo(TxMessage &aTxMessage) const @@ -2673,10 +2675,7 @@ void Core::ServiceType::HandleTimer(EntryTimerContext &aContext) mServicesPtr.UpdateFireTimeOn(*this); exit: - if (HasFireTime()) - { - aContext.UpdateNextTime(GetFireTime()); - } + UpdateNextFireTimeOn(aContext.GetNextFireTime()); } void Core::ServiceType::PrepareResponse(TxMessage &aResponse, TimeMilli aNow) @@ -3211,33 +3210,11 @@ bool Core::TxMessage::ShouldClearAppendStateOnReinit(const Entry &aEntry) const return shouldClear; } -//---------------------------------------------------------------------------------------------------------------------- -// Core::TimerContext - -Core::TimerContext::TimerContext(Instance &aInstance) - : InstanceLocator(aInstance) - , mNow(TimerMilli::GetNow()) - , mNextTime(mNow.GetDistantFuture()) -{ -} - -void Core::TimerContext::UpdateNextTime(TimeMilli aTime) -{ - if (aTime <= mNow) - { - mNextTime = mNow; - } - else - { - mNextTime = Min(mNextTime, aTime); - } -} - //---------------------------------------------------------------------------------------------------------------------- // Core::EntryTimerContext Core::EntryTimerContext::EntryTimerContext(Instance &aInstance) - : TimerContext(aInstance) + : InstanceLocator(aInstance) , mProbeMessage(aInstance, TxMessage::kMulticastProbe) , mResponseMessage(aInstance, TxMessage::kMulticastResponse) { @@ -4339,10 +4316,7 @@ void Core::HandleCacheTimer(void) context.GetQueryMessage().Send(); - if (context.GetNextTime() != context.GetNow().GetDistantFuture()) - { - mCacheTimer.FireAtIfEarlier(context.GetNextTime()); - } + mCacheTimer.FireAtIfEarlier(context.GetNextFireTime()); } void Core::HandleCacheTask(void) @@ -4448,7 +4422,7 @@ void Core::ResultCallback::Invoke(Instance &aInstance, const AddressResult &aRes // Core::CacheTimerContext Core::CacheTimerContext::CacheTimerContext(Instance &aInstance) - : TimerContext(aInstance) + : InstanceLocator(aInstance) , mQueryMessage(aInstance, TxMessage::kMulticastQuery) { } @@ -4811,10 +4785,7 @@ void Core::CacheEntry::HandleTimer(CacheTimerContext &aContext) DetermineNextFireTime(); exit: - if (HasFireTime()) - { - aContext.UpdateNextTime(GetFireTime()); - } + UpdateNextFireTimeOn(aContext.GetNextFireTime()); } Core::ResultCallback *Core::CacheEntry::FindCallbackMatching(const ResultCallback &aCallback) diff --git a/src/core/net/mdns.hpp b/src/core/net/mdns.hpp index 6001e8f58..33f848870 100644 --- a/src/core/net/mdns.hpp +++ b/src/core/net/mdns.hpp @@ -790,6 +790,7 @@ private: protected: void ScheduleFireTimeOn(TimerMilli &aTimer); + void UpdateNextFireTimeOn(NextFireTime &aNextFireTime) const; private: TimeMilli mFireTime; @@ -1189,32 +1190,19 @@ private: // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - class TimerContext : public InstanceLocator - { - public: - TimerContext(Instance &aInstance); - - TimeMilli GetNow(void) const { return mNow; } - TimeMilli GetNextTime(void) const { return mNextTime; } - void UpdateNextTime(TimeMilli aTime); - - private: - TimeMilli mNow; - TimeMilli mNextTime; - }; - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - class EntryTimerContext : public TimerContext // Used by `HandleEntryTimer`. + class EntryTimerContext : public InstanceLocator // Used by `HandleEntryTimer`. { public: EntryTimerContext(Instance &aInstance); - TxMessage &GetProbeMessage(void) { return mProbeMessage; } - TxMessage &GetResponseMessage(void) { return mResponseMessage; } + TimeMilli GetNow(void) const { return mNextFireTime.GetNow(); } + NextFireTime &GetNextFireTime(void) { return mNextFireTime; } + TxMessage &GetProbeMessage(void) { return mProbeMessage; } + TxMessage &GetResponseMessage(void) { return mResponseMessage; } private: - TxMessage mProbeMessage; - TxMessage mResponseMessage; + NextFireTime mNextFireTime; + TxMessage mProbeMessage; + TxMessage mResponseMessage; }; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1440,14 +1428,17 @@ private: // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - class CacheTimerContext : public TimerContext + class CacheTimerContext : public InstanceLocator { public: CacheTimerContext(Instance &aInstance); - TxMessage &GetQueryMessage(void) { return mQueryMessage; } + TimeMilli GetNow(void) const { return mNextFireTime.GetNow(); } + NextFireTime &GetNextFireTime(void) { return mNextFireTime; } + TxMessage &GetQueryMessage(void) { return mQueryMessage; } private: - TxMessage mQueryMessage; + NextFireTime mNextFireTime; + TxMessage mQueryMessage; }; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -