diff --git a/src/core/meshcop/joiner.cpp b/src/core/meshcop/joiner.cpp index d0ef8c109..63d63fde7 100644 --- a/src/core/meshcop/joiner.cpp +++ b/src/core/meshcop/joiner.cpp @@ -519,13 +519,9 @@ void Joiner::HandleJoinerEntrust(void *aContext, otMessage *aMessage, const otMe void Joiner::HandleJoinerEntrust(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo) { - otError error; - NetworkMasterKeyTlv masterKey; - MeshLocalPrefixTlv meshLocalPrefix; - ExtendedPanIdTlv extendedPanId; - NetworkNameTlv networkName; - ActiveTimestampTlv activeTimestamp; - NetworkKeySequenceTlv networkKeySeq; + otError error; + NetworkMasterKeyTlv masterKey; + otOperationalDataset dataset; VerifyOrExit(mState == OT_JOINER_STATE_ENTRUST && aMessage.GetType() == OT_COAP_TYPE_CONFIRMABLE && aMessage.GetCode() == OT_COAP_CODE_POST, @@ -537,26 +533,18 @@ void Joiner::HandleJoinerEntrust(Coap::Message &aMessage, const Ip6::MessageInfo SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kNetworkMasterKey, sizeof(masterKey), masterKey)); VerifyOrExit(masterKey.IsValid(), error = OT_ERROR_PARSE); - SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kMeshLocalPrefix, sizeof(meshLocalPrefix), meshLocalPrefix)); - VerifyOrExit(meshLocalPrefix.IsValid(), error = OT_ERROR_PARSE); + memset(&dataset, 0, sizeof(dataset)); - SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kExtendedPanId, sizeof(extendedPanId), extendedPanId)); - VerifyOrExit(extendedPanId.IsValid(), error = OT_ERROR_PARSE); + dataset.mMasterKey = masterKey.GetNetworkMasterKey(); + dataset.mComponents.mIsMasterKeyPresent = true; - SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kNetworkName, sizeof(networkName), networkName)); + dataset.mChannel = Get().GetPanChannel(); + dataset.mComponents.mIsChannelPresent = true; - SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kActiveTimestamp, sizeof(activeTimestamp), activeTimestamp)); - VerifyOrExit(activeTimestamp.IsValid(), error = OT_ERROR_PARSE); + dataset.mPanId = Get().GetPanId(); + dataset.mComponents.mIsPanIdPresent = true; - SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kNetworkKeySequence, sizeof(networkKeySeq), networkKeySeq)); - VerifyOrExit(networkKeySeq.IsValid(), error = OT_ERROR_PARSE); - - Get().SetMasterKey(masterKey.GetNetworkMasterKey()); - Get().SetCurrentKeySequence(networkKeySeq.GetNetworkKeySequence()); - Get().SetMeshLocalPrefix(meshLocalPrefix.GetMeshLocalPrefix()); - Get().SetExtendedPanId(extendedPanId.GetExtendedPanId()); - - Get().SetNetworkName(networkName.GetNetworkName()); + Get().Save(dataset); otLogInfoMeshCoP("Joiner successful!");