From 74061eebd447cd180b2742adb72cb86f5de91bd8 Mon Sep 17 00:00:00 2001 From: Kangping Date: Tue, 7 Nov 2023 03:21:45 +0800 Subject: [PATCH] [dataset] returns OT_ERROR_REJECTED when MGMT_SET is rejected by leader (#9582) The current code won't return a failure error code when a MGMT_SET request is rejected by the leader, so the client doesn't know whether the operation succeed or not. This commit fixes this issue by converting the REJECTED state to the OT_ERROR_REJECTED error code which is propagated back via the otDatasetMgmtSetCallback callback. --- src/core/meshcop/dataset_manager.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/core/meshcop/dataset_manager.cpp b/src/core/meshcop/dataset_manager.cpp index a4ad59545..3e08889ea 100644 --- a/src/core/meshcop/dataset_manager.cpp +++ b/src/core/meshcop/dataset_manager.cpp @@ -312,15 +312,18 @@ void DatasetManager::HandleMgmtSetResponse(Coap::Message *aMessage, const Ip6::M OT_UNUSED_VARIABLE(aMessageInfo); Error error; - uint8_t state; + uint8_t state = StateTlv::kPending; SuccessOrExit(error = aError); VerifyOrExit(Tlv::Find(*aMessage, state) == kErrorNone && state != StateTlv::kPending, error = kErrorParse); + if (state == StateTlv::kReject) + { + error = kErrorRejected; + } exit: - LogInfo("MGMT_SET finished: %s", - error == kErrorNone ? StateTlv::StateToString(static_cast(state)) : ErrorToString(error)); + LogInfo("MGMT_SET finished: %s", error == kErrorNone ? "Accepted" : ErrorToString(error)); mMgmtPending = false;