From 4a54ad2d803067fca5cd012a9dad8853f8dd4f34 Mon Sep 17 00:00:00 2001 From: Shu Chen Date: Tue, 13 Jun 2017 02:04:19 +0800 Subject: [PATCH] Use Tlv::GetOffset() method to find MLE Discovery TLV (#1896) --- src/core/thread/mle.cpp | 18 ++---------------- src/core/thread/mle_router.cpp | 18 ++---------------- 2 files changed, 4 insertions(+), 32 deletions(-) diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 27adea147..da8f0be33 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -3066,23 +3066,9 @@ otError Mle::HandleDiscoveryResponse(const Message &aMessage, const Ip6::Message VerifyOrExit(mIsDiscoverInProgress, error = OT_ERROR_DROP); - offset = aMessage.GetOffset(); - end = aMessage.GetLength(); - // find MLE Discovery TLV - while (offset < end) - { - aMessage.Read(offset, sizeof(tlv), &tlv); - - if (tlv.GetType() == Tlv::kDiscovery) - { - break; - } - - offset += sizeof(tlv) + tlv.GetLength(); - } - - VerifyOrExit(offset < end, error = OT_ERROR_PARSE); + VerifyOrExit(Tlv::GetOffset(aMessage, Tlv::kDiscovery, offset) == OT_ERROR_NONE, error = OT_ERROR_PARSE); + aMessage.Read(offset, sizeof(tlv), &tlv); offset += sizeof(tlv); end = offset + tlv.GetLength(); diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index b69a56d86..e9c950ad6 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -2570,23 +2570,9 @@ otError MleRouter::HandleDiscoveryRequest(const Message &aMessage, const Ip6::Me // only Routers and REEDs respond VerifyOrExit((mDeviceMode & ModeTlv::kModeFFD) != 0, error = OT_ERROR_INVALID_STATE); - offset = aMessage.GetOffset(); - end = aMessage.GetLength(); - // find MLE Discovery TLV - while (offset < end) - { - aMessage.Read(offset, sizeof(tlv), &tlv); - - if (tlv.GetType() == Tlv::kDiscovery) - { - break; - } - - offset += sizeof(tlv) + tlv.GetLength(); - } - - VerifyOrExit(offset < end, error = OT_ERROR_PARSE); + VerifyOrExit(Tlv::GetOffset(aMessage, Tlv::kDiscovery, offset) == OT_ERROR_NONE, error = OT_ERROR_PARSE); + aMessage.Read(offset, sizeof(tlv), &tlv); offset += sizeof(tlv); end = offset + sizeof(tlv) + tlv.GetLength();