[meshcop-leader] simplify adding CommissioningData (#9540)

This commit contains smaller changes in` MeshCoP::Leader` class:
- Changes `CommissioningData` to be a `private` type in this class
- Adds `Init()` to `CommisioningData()` to init all sub-tlvs.
This commit is contained in:
Abtin Keshavarzian
2023-10-18 10:44:50 -07:00
committed by GitHub
parent 6bfe59dabf
commit 47272e4270
4 changed files with 37 additions and 31 deletions
+22 -14
View File
@@ -87,18 +87,8 @@ template <> void Leader::HandleTmf<kUriLeaderPetition>(Coap::Message &aMessage,
ResignCommissioner();
}
data.mBorderAgentLocator.Init();
data.mBorderAgentLocator.SetBorderAgentLocator(aMessageInfo.GetPeerAddr().GetIid().GetLocator());
data.mCommissionerSessionId.Init();
data.mCommissionerSessionId.SetCommissionerSessionId(++mSessionId);
data.mSteeringData.Init();
data.mSteeringData.SetLength(1);
data.mSteeringData.Clear();
SuccessOrExit(
Get<NetworkData::Leader>().SetCommissioningData(reinterpret_cast<uint8_t *>(&data), data.GetLength()));
data.Init(aMessageInfo.GetPeerAddr().GetIid().GetLocator(), ++mSessionId);
SuccessOrExit(Get<NetworkData::Leader>().SetCommissioningData(&data, data.GetLength()));
mCommissionerId = commissionerId;
@@ -263,8 +253,7 @@ void Leader::SetEmptyCommissionerData(void)
sessionIdTlv.Init();
sessionIdTlv.SetCommissionerSessionId(++mSessionId);
IgnoreError(Get<NetworkData::Leader>().SetCommissioningData(reinterpret_cast<uint8_t *>(&sessionIdTlv),
sizeof(Tlv) + sessionIdTlv.GetLength()));
IgnoreError(Get<NetworkData::Leader>().SetCommissioningData(&sessionIdTlv, sizeof(CommissionerSessionIdTlv)));
}
void Leader::ResignCommissioner(void)
@@ -275,6 +264,25 @@ void Leader::ResignCommissioner(void)
LogInfo("commissioner inactive");
}
void Leader::CommissioningData::Init(uint16_t aBorderAgentRloc16, uint16_t aSessionId)
{
mBorderAgentLocatorTlv.Init();
mBorderAgentLocatorTlv.SetBorderAgentLocator(aBorderAgentRloc16);
mSessionIdTlv.Init();
mSessionIdTlv.SetCommissionerSessionId(aSessionId);
mSteeringDataTlv.Init();
mSteeringDataTlv.SetLength(1);
mSteeringDataTlv.Clear();
}
uint8_t Leader::CommissioningData::GetLength(void) const
{
return static_cast<uint8_t>(sizeof(BorderAgentLocatorTlv) + sizeof(CommissionerSessionIdTlv) +
mSteeringDataTlv.GetSize());
}
} // namespace MeshCoP
} // namespace ot
+13 -15
View File
@@ -49,21 +49,6 @@
namespace ot {
namespace MeshCoP {
OT_TOOL_PACKED_BEGIN
class CommissioningData
{
public:
uint8_t GetLength(void) const
{
return sizeof(Tlv) + mBorderAgentLocator.GetLength() + sizeof(Tlv) + mCommissionerSessionId.GetLength() +
sizeof(Tlv) + mSteeringData.GetLength();
}
BorderAgentLocatorTlv mBorderAgentLocator;
CommissionerSessionIdTlv mCommissionerSessionId;
SteeringDataTlv mSteeringData;
} OT_TOOL_PACKED_END;
class Leader : public InstanceLocator, private NonCopyable
{
friend class Tmf::Agent;
@@ -113,6 +98,19 @@ public:
private:
static constexpr uint32_t kTimeoutLeaderPetition = 50; // TIMEOUT_LEAD_PET (seconds)
OT_TOOL_PACKED_BEGIN
class CommissioningData
{
public:
void Init(uint16_t aBorderAgentRloc16, uint16_t aSessionId);
uint8_t GetLength(void) const;
private:
BorderAgentLocatorTlv mBorderAgentLocatorTlv;
CommissionerSessionIdTlv mSessionIdTlv;
SteeringDataTlv mSteeringDataTlv;
} OT_TOOL_PACKED_END;
void HandleTimer(void);
template <Uri kUri> void HandleTmf(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
+1 -1
View File
@@ -428,7 +428,7 @@ exit:
return error;
}
Error LeaderBase::SetCommissioningData(const uint8_t *aValue, uint8_t aValueLength)
Error LeaderBase::SetCommissioningData(const void *aValue, uint8_t aValueLength)
{
Error error = kErrorNone;
CommissioningDataTlv *commissioningDataTlv;
+1 -1
View File
@@ -240,7 +240,7 @@ public:
* @retval kErrorNoBufs Insufficient space to add the Commissioning Data.
*
*/
Error SetCommissioningData(const uint8_t *aValue, uint8_t aValueLength);
Error SetCommissioningData(const void *aValue, uint8_t aValueLength);
/**
* Checks if the steering data includes a Joiner.