diff --git a/src/core/meshcop/joiner_router.cpp b/src/core/meshcop/joiner_router.cpp index 0543c9b62..d70e0a7ac 100644 --- a/src/core/meshcop/joiner_router.cpp +++ b/src/core/meshcop/joiner_router.cpp @@ -148,6 +148,7 @@ void JoinerRouter::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &a JoinerRouterLocatorTlv rloc; ExtendedTlv tlv; uint16_t borderAgentRloc; + uint16_t offset; otLogInfoMeshCoP("JoinerRouter::HandleUdpReceive"); @@ -175,22 +176,9 @@ void JoinerRouter::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &a tlv.SetType(Tlv::kJoinerDtlsEncapsulation); tlv.SetLength(aMessage.GetLength() - aMessage.GetOffset()); SuccessOrExit(error = message->Append(&tlv, sizeof(tlv))); - - while (aMessage.GetOffset() < aMessage.GetLength()) - { - uint16_t length = aMessage.GetLength() - aMessage.GetOffset(); - uint8_t tmp[16]; - - if (length >= sizeof(tmp)) - { - length = sizeof(tmp); - } - - aMessage.Read(aMessage.GetOffset(), length, tmp); - aMessage.MoveOffset(length); - - SuccessOrExit(error = message->Append(tmp, length)); - } + offset = message->GetLength(); + SuccessOrExit(error = message->SetLength(offset + tlv.GetLength())); + aMessage.CopyTo(aMessage.GetOffset(), offset, tlv.GetLength(), *message); messageInfo.SetSockAddr(netif.GetMle().GetMeshLocal16()); messageInfo.SetPeerAddr(netif.GetMle().GetMeshLocal16());