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; }