diff --git a/src/core/meshcop/border_agent.cpp b/src/core/meshcop/border_agent.cpp index 8a9a85d44..d8df76a29 100644 --- a/src/core/meshcop/border_agent.cpp +++ b/src/core/meshcop/border_agent.cpp @@ -526,8 +526,9 @@ Error BorderAgent::PrepareServiceTxtData(ServiceTxtData &aTxtData) Error BorderAgent::PrepareServiceTxtData(uint8_t *aBuffer, uint16_t aBufferSize, uint16_t &aLength) { - Error error = kErrorNone; - Dns::TxtDataEncoder encoder(aBuffer, aBufferSize); + Error error = kErrorNone; + Dns::TxtDataEncoder encoder(aBuffer, aBufferSize); + MeshCoP::Dataset::Info datasetInfo; #if OPENTHREAD_CONFIG_BORDER_AGENT_ID_ENABLE { @@ -538,11 +539,23 @@ Error BorderAgent::PrepareServiceTxtData(uint8_t *aBuffer, uint16_t aBufferSize, } #endif SuccessOrExit(error = encoder.AppendStringEntry("rv", kTxtDataRecordVersion)); - SuccessOrExit(error = encoder.AppendNameEntry("nn", Get().GetNetworkName().GetAsData())); - SuccessOrExit(error = encoder.AppendEntry("xp", Get().GetExtPanId())); + SuccessOrExit(error = encoder.AppendBigEndianUintEntry("sb", DetermineStateBitmap())); SuccessOrExit(error = encoder.AppendStringEntry("tv", kThreadVersionString)); SuccessOrExit(error = encoder.AppendEntry("xa", Get().GetExtAddress())); - SuccessOrExit(error = encoder.AppendBigEndianUintEntry("sb", DetermineStateBitmap())); + + if (Get().IsComplete() && + (Get().Read(datasetInfo) == kErrorNone)) + { + if (datasetInfo.IsPresent()) + { + SuccessOrExit(error = encoder.AppendEntry("xp", datasetInfo.Get())); + } + + if (datasetInfo.IsPresent()) + { + SuccessOrExit(error = encoder.AppendNameEntry("nn", datasetInfo.Get().GetAsData())); + } + } if (Get().IsAttached()) { diff --git a/tests/nexus/test_border_agent.cpp b/tests/nexus/test_border_agent.cpp index 251daf6d2..51fe3502c 100644 --- a/tests/nexus/test_border_agent.cpp +++ b/tests/nexus/test_border_agent.cpp @@ -1251,11 +1251,15 @@ void ValidateMeshCoPTxtData(TxtData &aTxtData, Node &aNode) aNode.Get().GetId(id); aTxtData.ValidateKey("id", id); aTxtData.ValidateKey("rv", "1"); - aTxtData.ValidateKey("nn", aNode.Get().GetNetworkName().GetAsCString()); - aTxtData.ValidateKey("xp", aNode.Get().GetExtPanId()); aTxtData.ValidateKey("tv", kThreadVersionString); aTxtData.ValidateKey("xa", aNode.Get().GetExtAddress()); + if (aNode.Get().IsComplete()) + { + aTxtData.ValidateKey("nn", aNode.Get().GetNetworkName().GetAsCString()); + aTxtData.ValidateKey("xp", aNode.Get().GetExtPanId()); + } + if (aNode.Get().IsAttached()) { aTxtData.ValidateKey("pt", BigEndian::HostSwap32(aNode.Get().GetLeaderData().GetPartitionId()));