diff --git a/src/core/meshcop/joiner_router.cpp b/src/core/meshcop/joiner_router.cpp index 291ecf332..fe58e4201 100644 --- a/src/core/meshcop/joiner_router.cpp +++ b/src/core/meshcop/joiner_router.cpp @@ -290,72 +290,29 @@ exit: Coap::Message *JoinerRouter::PrepareJoinerEntrustMessage(void) { - Error error; + static const Tlv::Type kTlvTypes[] = { + Tlv::kNetworkKey, Tlv::kMeshLocalPrefix, Tlv::kExtendedPanId, Tlv::kNetworkName, + Tlv::kActiveTimestamp, Tlv::kChannelMask, Tlv::kPskc, Tlv::kSecurityPolicy, + }; + + Error error = kErrorNone; Coap::Message *message = nullptr; Dataset dataset; - NetworkNameTlv networkName; - const Tlv *tlv; - NetworkKey networkKey; message = Get().NewPriorityConfirmablePostMessage(kUriJoinerEntrust); VerifyOrExit(message != nullptr, error = kErrorNoBufs); message->SetSubType(Message::kSubTypeJoinerEntrust); - Get().GetNetworkKey(networkKey); - SuccessOrExit(error = Tlv::Append(*message, networkKey)); - SuccessOrExit(error = Tlv::Append(*message, Get().GetMeshLocalPrefix())); - SuccessOrExit(error = Tlv::Append(*message, Get().GetExtPanId())); + SuccessOrExit(error = Get().Read(dataset)); - networkName.Init(); - networkName.SetNetworkName(Get().GetNetworkName().GetAsData()); - SuccessOrExit(error = networkName.AppendTo(*message)); - - IgnoreError(Get().Read(dataset)); - - if ((tlv = dataset.GetTlv()) != nullptr) + for (Tlv::Type tlvType : kTlvTypes) { + const Tlv *tlv = dataset.GetTlv(tlvType); + + VerifyOrExit(tlv != nullptr, error = kErrorInvalidState); SuccessOrExit(error = tlv->AppendTo(*message)); } - else - { - ActiveTimestampTlv activeTimestamp; - activeTimestamp.Init(); - SuccessOrExit(error = activeTimestamp.AppendTo(*message)); - } - - if ((tlv = dataset.GetTlv()) != nullptr) - { - SuccessOrExit(error = tlv->AppendTo(*message)); - } - else - { - ChannelMaskBaseTlv channelMask; - channelMask.Init(); - SuccessOrExit(error = channelMask.AppendTo(*message)); - } - - if ((tlv = dataset.GetTlv()) != nullptr) - { - SuccessOrExit(error = tlv->AppendTo(*message)); - } - else - { - PskcTlv pskc; - pskc.Init(); - SuccessOrExit(error = pskc.AppendTo(*message)); - } - - if ((tlv = dataset.GetTlv()) != nullptr) - { - SuccessOrExit(error = tlv->AppendTo(*message)); - } - else - { - SecurityPolicyTlv securityPolicy; - securityPolicy.Init(); - SuccessOrExit(error = securityPolicy.AppendTo(*message)); - } SuccessOrExit(error = Tlv::Append(*message, Get().GetCurrentKeySequence()));