Matter SDK Coverage Report
Current view: top level - protocols/echo - Echo.h (source / functions) Coverage Total Hit
Test: SHA:b879ecb8e99e175eea0a293a888bda853da2b19c Lines: 40.0 % 5 2
Test Date: 2025-01-17 19:00:11 Functions: 25.0 % 4 1

            Line data    Source code
       1              : /*
       2              :  *
       3              :  *    Copyright (c) 2020 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              : /**
      20              :  *    @file
      21              :  *      This file defines objects for a CHIP Echo unsolicited
      22              :  *      initaitor (client) and responder (server).
      23              :  *
      24              :  */
      25              : 
      26              : #pragma once
      27              : 
      28              : #include <lib/core/CHIPCore.h>
      29              : #include <lib/support/CodeUtils.h>
      30              : #include <lib/support/DLLUtil.h>
      31              : #include <lib/support/logging/CHIPLogging.h>
      32              : #include <messaging/ExchangeContext.h>
      33              : #include <messaging/ExchangeMgr.h>
      34              : #include <messaging/Flags.h>
      35              : #include <protocols/Protocols.h>
      36              : 
      37              : namespace chip {
      38              : namespace Protocols {
      39              : namespace Echo {
      40              : 
      41              : inline constexpr char kProtocolName[] = "Echo";
      42              : 
      43              : /**
      44              :  * Echo Protocol Message Types
      45              :  */
      46              : enum class MsgType : uint8_t
      47              : {
      48              :     EchoRequest  = 0x01,
      49              :     EchoResponse = 0x02
      50              : };
      51              : 
      52              : using EchoFunct = void (*)(Messaging::ExchangeContext * ec, System::PacketBufferHandle && payload);
      53              : 
      54              : class DLL_EXPORT EchoClient : public Messaging::ExchangeDelegate
      55              : {
      56              : public:
      57              :     // TODO: Init function will take a Channel instead a SessionHandle, when Channel API is ready
      58              :     /**
      59              :      *  Initialize the EchoClient object. Within the lifetime
      60              :      *  of this instance, this method is invoked once after object
      61              :      *  construction until a call to Shutdown is made to terminate the
      62              :      *  instance.
      63              :      *
      64              :      *  @param[in]    exchangeMgr    A pointer to the ExchangeManager object.
      65              :      *  @param[in]    sessoin        A handle to the session.
      66              :      *
      67              :      *  @retval #CHIP_ERROR_INCORRECT_STATE If the state is not equal to
      68              :      *          kState_NotInitialized.
      69              :      *  @retval #CHIP_NO_ERROR On success.
      70              :      *
      71              :      */
      72              :     CHIP_ERROR Init(Messaging::ExchangeManager * exchangeMgr, const SessionHandle & session);
      73              : 
      74              :     /**
      75              :      *  Shutdown the EchoClient. This terminates this instance
      76              :      *  of the object and releases all held resources.
      77              :      *
      78              :      */
      79              :     void Shutdown();
      80              : 
      81              :     /**
      82              :      * Set the application callback to be invoked when an echo response is received.
      83              :      *
      84              :      *  @param[in]    callback    The callback function to receive echo response message.
      85              :      *
      86              :      */
      87              :     void SetEchoResponseReceived(EchoFunct callback) { OnEchoResponseReceived = callback; }
      88              : 
      89              :     /**
      90              :      * Send an echo request to a CHIP node.
      91              :      *
      92              :      * @param payload       A PacketBufferHandle with the payload.
      93              :      * @param sendFlags     Flags set by the application for the CHIP message being sent.
      94              :      *                      SendEchoRequest will always add
      95              :      *                      SendMessageFlags::kExpectResponse to the flags.
      96              :      *
      97              :      * @return CHIP_ERROR_NO_MEMORY if no ExchangeContext is available.
      98              :      *         Other CHIP_ERROR codes as returned by the lower layers.
      99              :      *
     100              :      */
     101              :     CHIP_ERROR SendEchoRequest(System::PacketBufferHandle && payload,
     102              :                                Messaging::SendFlags sendFlags = Messaging::SendFlags(Messaging::SendMessageFlags::kNone));
     103              : 
     104              : private:
     105              :     Messaging::ExchangeManager * mExchangeMgr = nullptr;
     106              :     Messaging::ExchangeContext * mExchangeCtx = nullptr;
     107              :     EchoFunct OnEchoResponseReceived          = nullptr;
     108              :     SessionHolder mSecureSession;
     109              : 
     110              :     CHIP_ERROR OnMessageReceived(Messaging::ExchangeContext * ec, const PayloadHeader & payloadHeader,
     111              :                                  System::PacketBufferHandle && payload) override;
     112              :     void OnResponseTimeout(Messaging::ExchangeContext * ec) override;
     113              : };
     114              : 
     115              : class DLL_EXPORT EchoServer : public Messaging::UnsolicitedMessageHandler, public Messaging::ExchangeDelegate
     116              : {
     117              : public:
     118              :     /**
     119              :      *  Initialize the EchoServer object. Within the lifetime
     120              :      *  of this instance, this method is invoked once after object
     121              :      *  construction until a call to Shutdown is made to terminate the
     122              :      *  instance.
     123              :      *
     124              :      *  @param[in]    exchangeMgr    A pointer to the ExchangeManager object.
     125              :      *
     126              :      *  @retval #CHIP_ERROR_INCORRECT_STATE If the state is not equal to
     127              :      *          kState_NotInitialized.
     128              :      *  @retval #CHIP_NO_ERROR On success.
     129              :      *
     130              :      */
     131              :     CHIP_ERROR Init(Messaging::ExchangeManager * exchangeMgr);
     132              : 
     133              :     /**
     134              :      *  Shutdown the EchoServer. This terminates this instance
     135              :      *  of the object and releases all held resources.
     136              :      *
     137              :      */
     138              :     void Shutdown();
     139              : 
     140              :     /**
     141              :      * Set the application callback to be invoked when an echo request is received.
     142              :      *
     143              :      *  @param[in]    callback    The callback function to receive echo request message.
     144              :      *
     145              :      */
     146            0 :     void SetEchoRequestReceived(EchoFunct callback) { OnEchoRequestReceived = callback; }
     147              : 
     148              : private:
     149              :     Messaging::ExchangeManager * mExchangeMgr = nullptr;
     150              :     EchoFunct OnEchoRequestReceived           = nullptr;
     151              : 
     152              :     CHIP_ERROR OnUnsolicitedMessageReceived(const PayloadHeader & payloadHeader, ExchangeDelegate *& newDelegate) override;
     153              :     CHIP_ERROR OnMessageReceived(Messaging::ExchangeContext * ec, const PayloadHeader & payloadHeader,
     154              :                                  System::PacketBufferHandle && payload) override;
     155            0 :     void OnResponseTimeout(Messaging::ExchangeContext * ec) override {}
     156              : };
     157              : 
     158              : } // namespace Echo
     159              : 
     160              : template <>
     161              : struct MessageTypeTraits<Echo::MsgType>
     162              : {
     163            0 :     static constexpr const Protocols::Id & ProtocolId() { return Echo::Id; }
     164              : 
     165          380 :     static auto GetTypeToNameTable()
     166              :     {
     167              :         static const std::array<MessageTypeNameLookup, 2> typeToNameTable = {
     168              :             {
     169              :                 { Echo::MsgType::EchoRequest, "EchoRequest" },
     170              :                 { Echo::MsgType::EchoResponse, "EchoResponse" },
     171              :             },
     172              :         };
     173              : 
     174          380 :         return &typeToNameTable;
     175              :     }
     176              : };
     177              : 
     178              : } // namespace Protocols
     179              : } // namespace chip
        

Generated by: LCOV version 2.0-1