LCOV - code coverage report
Current view: top level - lib/dnssd - MinimalMdnsServer.h (source / functions) Hit Total Coverage
Test: lcov_final.info Lines: 14 15 93.3 %
Date: 2024-02-15 08:20:41 Functions: 6 7 85.7 %

          Line data    Source code
       1             : /*
       2             :  *
       3             :  *    Copyright (c) 2021 Project CHIP Authors
       4             :  *
       5             :  *    Licensed under the Apache License, Version 2.0 (the "License");
       6             :  *    you may not use this file except in compliance with the License.
       7             :  *    You may obtain a copy of the License at
       8             :  *
       9             :  *        http://www.apache.org/licenses/LICENSE-2.0
      10             :  *
      11             :  *    Unless required by applicable law or agreed to in writing, software
      12             :  *    distributed under the License is distributed on an "AS IS" BASIS,
      13             :  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      14             :  *    See the License for the specific language governing permissions and
      15             :  *    limitations under the License.
      16             :  */
      17             : #pragma once
      18             : 
      19             : #include <inet/IPPacketInfo.h>
      20             : #include <lib/dnssd/minimal_mdns/Server.h>
      21             : 
      22             : namespace chip {
      23             : namespace Dnssd {
      24             : 
      25             : /// Generic receive delegate for a MDNS packet
      26             : class MdnsPacketDelegate
      27             : {
      28             : public:
      29          31 :     virtual ~MdnsPacketDelegate() {}
      30             :     virtual void OnMdnsPacketData(const mdns::Minimal::BytesRange & data, const chip::Inet::IPPacketInfo * info) = 0;
      31             : };
      32             : 
      33             : /// A global mdns::Minimal::Server wrapper
      34             : /// used to share the same server between MDNS Advertiser and resolver
      35             : /// as advertiser responds to 'onquery' and resolver expects 'onresponse'
      36             : class GlobalMinimalMdnsServer : public mdns::Minimal::ServerDelegate
      37             : {
      38             : public:
      39             :     static constexpr size_t kMaxEndPoints = 30;
      40             : 
      41             :     using ServerType = mdns::Minimal::Server<kMaxEndPoints>;
      42             : 
      43             :     GlobalMinimalMdnsServer();
      44             : 
      45             :     static GlobalMinimalMdnsServer & Instance();
      46          67 :     static mdns::Minimal::ServerBase & Server()
      47             :     {
      48          67 :         if (Instance().mReplacementServer != nullptr)
      49             :         {
      50           0 :             return *Instance().mReplacementServer;
      51             :         }
      52             : 
      53          67 :         return Instance().mServer;
      54             :     }
      55             : 
      56             :     /// Calls Server().Listen() on all available interfaces
      57             :     CHIP_ERROR StartServer(chip::Inet::EndPointManager<chip::Inet::UDPEndPoint> * udpEndPointManager, uint16_t port);
      58             :     void ShutdownServer();
      59             : 
      60           2 :     void SetQueryDelegate(MdnsPacketDelegate * delegate) { mQueryDelegate = delegate; }
      61          29 :     void SetResponseDelegate(MdnsPacketDelegate * delegate) { mResponseDelegate = delegate; }
      62             : 
      63             :     // ServerDelegate implementation
      64          24 :     void OnQuery(const mdns::Minimal::BytesRange & data, const chip::Inet::IPPacketInfo * info) override
      65             :     {
      66          24 :         if (mQueryDelegate != nullptr)
      67             :         {
      68          24 :             mQueryDelegate->OnMdnsPacketData(data, info);
      69             :         }
      70          24 :     }
      71             : 
      72          32 :     void OnResponse(const mdns::Minimal::BytesRange & data, const chip::Inet::IPPacketInfo * info) override
      73             :     {
      74          32 :         if (mResponseDelegate != nullptr)
      75             :         {
      76          32 :             mResponseDelegate->OnMdnsPacketData(data, info);
      77             :         }
      78          32 :     }
      79             : 
      80             :     void SetReplacementServer(mdns::Minimal::ServerBase * server) { mReplacementServer = server; }
      81             : 
      82             : private:
      83             :     ServerType mServer;
      84             :     mdns::Minimal::ServerBase * mReplacementServer = nullptr;
      85             :     MdnsPacketDelegate * mQueryDelegate            = nullptr;
      86             :     MdnsPacketDelegate * mResponseDelegate         = nullptr;
      87             : };
      88             : 
      89             : } // namespace Dnssd
      90             : } // namespace chip

Generated by: LCOV version 1.14