mirror of
https://github.com/espressif/openthread.git
synced 2026-08-09 20:27:47 +00:00
[mle] add RemoveDelayedMessage() helper method (#7476)
This commit adds `Mle::RemoveDelayedMessage()` helper method which removes messages with a given sub-type and an optional destination IPv6 address from the `mDelayedResponses` message queue.
This commit is contained in:
+14
-24
@@ -2020,41 +2020,31 @@ exit:
|
||||
|
||||
void Mle::RemoveDelayedDataResponseMessage(void)
|
||||
{
|
||||
Message * message = mDelayedResponses.GetHead();
|
||||
DelayedResponseMetadata metadata;
|
||||
|
||||
while (message != nullptr)
|
||||
{
|
||||
metadata.ReadFrom(*message);
|
||||
|
||||
if (message->GetSubType() == Message::kSubTypeMleDataResponse)
|
||||
{
|
||||
mDelayedResponses.DequeueAndFree(*message);
|
||||
Log(kMessageRemoveDelayed, kTypeDataResponse, metadata.mDestination);
|
||||
|
||||
// no more than one multicast MLE Data Response in Delayed Message Queue.
|
||||
break;
|
||||
}
|
||||
|
||||
message = message->GetNext();
|
||||
}
|
||||
RemoveDelayedMessage(Message::kSubTypeMleDataResponse, kTypeDataResponse, nullptr);
|
||||
}
|
||||
|
||||
void Mle::RemoveDelayedDataRequestMessage(const Ip6::Address &aDestination)
|
||||
{
|
||||
for (Message *message = mDelayedResponses.GetHead(); message != nullptr; message = message->GetNext())
|
||||
RemoveDelayedMessage(Message::kSubTypeMleDataRequest, kTypeDataRequest, &aDestination);
|
||||
}
|
||||
|
||||
void Mle::RemoveDelayedMessage(Message::SubType aSubType, MessageType aMessageType, const Ip6::Address *aDestination)
|
||||
{
|
||||
Message *nextMessage;
|
||||
|
||||
for (Message *message = mDelayedResponses.GetHead(); message != nullptr; message = nextMessage)
|
||||
{
|
||||
DelayedResponseMetadata metadata;
|
||||
|
||||
nextMessage = message->GetNext();
|
||||
|
||||
metadata.ReadFrom(*message);
|
||||
|
||||
if (message->GetSubType() == Message::kSubTypeMleDataRequest && metadata.mDestination == aDestination)
|
||||
if ((message->GetSubType() == aSubType) &&
|
||||
((aDestination == nullptr) || (metadata.mDestination == *aDestination)))
|
||||
{
|
||||
mDelayedResponses.DequeueAndFree(*message);
|
||||
Log(kMessageRemoveDelayed, kTypeDataRequest, metadata.mDestination);
|
||||
|
||||
// no more than one MLE Data Request for the destination in Delayed Message Queue.
|
||||
break;
|
||||
Log(kMessageRemoveDelayed, aMessageType, metadata.mDestination);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1832,7 +1832,8 @@ private:
|
||||
bool PrepareAnnounceState(void);
|
||||
void SendAnnounce(uint8_t aChannel, AnnounceMode aMode);
|
||||
void SendAnnounce(uint8_t aChannel, const Ip6::Address &aDestination, AnnounceMode aMode = kNormalAnnounce);
|
||||
void RemoveDelayedDataRequestMessage(const Ip6::Address &aDestination);
|
||||
void RemoveDelayedMessage(Message::SubType aSubType, MessageType aMessageType, const Ip6::Address *aDestination);
|
||||
void RemoveDelayedDataRequestMessage(const Ip6::Address &aDestination);
|
||||
#if OPENTHREAD_CONFIG_MLE_LINK_METRICS_SUBJECT_ENABLE
|
||||
Error SendLinkMetricsManagementResponse(const Ip6::Address &aDestination, LinkMetrics::Status aStatus);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user