LCOV - code coverage report
Current view: top level - controller - CurrentFabricRemover.h (source / functions) Hit Total Coverage
Test: lcov_final.info Lines: 0 4 0.0 %
Date: 2024-02-15 08:20:41 Functions: 0 1 0.0 %

          Line data    Source code
       1             : /*
       2             :  *
       3             :  *    Copyright (c) 2021 Project CHIP Authors
       4             :  *    All rights reserved.
       5             :  *
       6             :  *    Licensed under the Apache License, Version 2.0 (the "License");
       7             :  *    you may not use this file except in compliance with the License.
       8             :  *    You may obtain a copy of the License at
       9             :  *
      10             :  *        http://www.apache.org/licenses/LICENSE-2.0
      11             :  *
      12             :  *    Unless required by applicable law or agreed to in writing, software
      13             :  *    distributed under the License is distributed on an "AS IS" BASIS,
      14             :  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      15             :  *    See the License for the specific language governing permissions and
      16             :  *    limitations under the License.
      17             :  */
      18             : 
      19             : #pragma once
      20             : 
      21             : #include <app/OperationalSessionSetup.h>
      22             : #include <controller/CHIPDeviceController.h>
      23             : #include <lib/core/CHIPCallback.h>
      24             : 
      25             : namespace chip {
      26             : namespace Controller {
      27             : 
      28             : typedef void (*OnCurrentFabricRemove)(void * context, NodeId remoteNodeId, CHIP_ERROR status);
      29             : 
      30             : /**
      31             :  * A helper class to remove fabric given some parameters.
      32             :  */
      33             : class CurrentFabricRemover
      34             : {
      35             : public:
      36           0 :     CurrentFabricRemover(DeviceController * controller) :
      37           0 :         mController(controller), mOnDeviceConnectedCallback(&OnDeviceConnectedFn, this),
      38           0 :         mOnDeviceConnectionFailureCallback(&OnDeviceConnectionFailureFn, this)
      39           0 :     {}
      40             : 
      41             :     enum class Step : uint8_t
      42             :     {
      43             :         // Ready to start removing a fabric.
      44             :         kAcceptRemoveFabricStart = 0,
      45             :         // Need to get Current Fabric Index.
      46             :         kReadCurrentFabricIndex,
      47             :         // Need to send Remove Fabric Command.
      48             :         kSendRemoveFabric,
      49             :     };
      50             : 
      51             :     /*
      52             :      * @brief
      53             :      *   Try to look up the device attached to our controller with the given
      54             :      *   remote node id and ask it to remove Fabric.
      55             :      *   If function returns an error, callback will never be be executed. Otherwise, callback will always be executed.
      56             :      *
      57             :      * @param[in] remoteNodeId The remote device Id
      58             :      * @param[in] callback The callback to call once the remote fabric is completed or not.
      59             :      */
      60             :     CHIP_ERROR RemoveCurrentFabric(NodeId remoteNodeId, Callback::Callback<OnCurrentFabricRemove> * callback);
      61             : 
      62             : private:
      63             :     DeviceController * mController;
      64             : 
      65             :     chip::Callback::Callback<OnDeviceConnected> mOnDeviceConnectedCallback;
      66             :     chip::Callback::Callback<OnDeviceConnectionFailure> mOnDeviceConnectionFailureCallback;
      67             :     chip::Callback::Callback<OnCurrentFabricRemove> * mCurrentFabricRemoveCallback;
      68             : 
      69             :     NodeId mRemoteNodeId;
      70             :     FabricIndex mFabricIndex = kUndefinedFabricIndex;
      71             :     Step mNextStep           = Step::kAcceptRemoveFabricStart;
      72             : 
      73             :     CHIP_ERROR ReadCurrentFabricIndex(Messaging::ExchangeManager & exchangeMgr, const SessionHandle & sessionHandle);
      74             :     CHIP_ERROR SendRemoveFabricIndex(Messaging::ExchangeManager & exchangeMgr, const SessionHandle & sessionHandle);
      75             : 
      76             :     static void OnDeviceConnectedFn(void * context, Messaging::ExchangeManager & exchangeMgr, const SessionHandle & sessionHandle);
      77             :     static void OnDeviceConnectionFailureFn(void * context, const ScopedNodeId & peerId, CHIP_ERROR error);
      78             : 
      79             :     static void OnSuccessReadCurrentFabricIndex(void * context, FabricIndex fabricIndex);
      80             :     static void OnReadAttributeFailure(void * context, CHIP_ERROR error);
      81             : 
      82             :     static void
      83             :     OnSuccessRemoveFabric(void * context,
      84             :                           const chip::app::Clusters::OperationalCredentials::Commands::NOCResponse::DecodableType & data);
      85             :     static void OnCommandFailure(void * context, CHIP_ERROR error);
      86             : 
      87             :     static void FinishRemoveCurrentFabric(void * context, CHIP_ERROR err);
      88             : };
      89             : 
      90             : /**
      91             :  * A helper class that can be used by consumers that don't care about the callback from the
      92             :  * remove fabric process and just want automatic cleanup of the CurrentFabricRemover when done
      93             :  * with it.
      94             :  */
      95             : class AutoCurrentFabricRemover : private CurrentFabricRemover
      96             : {
      97             : public:
      98             :     // Takes the same arguments as CurrentFabricRemover::RemoveCurrentFabric except without the callback.
      99             :     static CHIP_ERROR RemoveCurrentFabric(DeviceController * controller, NodeId remoteNodeId);
     100             : 
     101             : private:
     102             :     AutoCurrentFabricRemover(DeviceController * controller);
     103             :     static void OnRemoveCurrentFabric(void * context, NodeId remoteNodeId, CHIP_ERROR status);
     104             :     chip::Callback::Callback<OnCurrentFabricRemove> mOnRemoveCurrentFabricCallback;
     105             : };
     106             : 
     107             : } // namespace Controller
     108             : } // namespace chip

Generated by: LCOV version 1.14