From 8dce81964f6fdb70d9ae345fa075e6f53794b974 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 28 Sep 2016 01:01:30 +0800 Subject: [PATCH] Enhance Mle::HandleDataResponse (#692) * Enhance Mle::HandleDataResponse * Send DataRequest when vn_version is greater and no dataset included --- src/core/thread/mle.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index b07b9ba7e..6d095f27a 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -1687,7 +1687,8 @@ ThreadError Mle::HandleDataResponse(const Message &aMessage, const Ip6::MessageI PendingTimestampTlv pendingTimestamp; Tlv tlv; uint16_t offset; - int8_t diff; + int8_t diff = 0; + bool dataRequest = false; otLogInfoMle("Received Data Response\n"); @@ -1732,6 +1733,10 @@ ThreadError Mle::HandleDataResponse(const Message &aMessage, const Ip6::MessageI aMessage.Read(offset, sizeof(tlv), &tlv); mNetif.GetActiveDataset().Set(activeTimestamp, aMessage, offset + sizeof(tlv), tlv.GetLength()); } + else + { + dataRequest = true; + } } // Pending Timestamp @@ -1745,6 +1750,10 @@ ThreadError Mle::HandleDataResponse(const Message &aMessage, const Ip6::MessageI aMessage.Read(offset, sizeof(tlv), &tlv); mNetif.GetPendingDataset().Set(activeTimestamp, aMessage, offset + sizeof(tlv), tlv.GetLength()); } + else + { + dataRequest = true; + } } // Network Data @@ -1754,6 +1763,15 @@ ThreadError Mle::HandleDataResponse(const Message &aMessage, const Ip6::MessageI exit: (void)aMessageInfo; + + if (diff > 0 && dataRequest) + { + uint8_t tlvs[] = {Tlv::kNetworkData}; + + SendDataRequest(aMessageInfo.GetPeerAddr(), tlvs, sizeof(tlvs)); + mRetrieveNewNetworkData = true; + } + return error; }