LCOV - code coverage report
Current view: top level - src - call_factory.h (source / functions) Coverage Total Hit
Test: jami-coverage-filtered.info Lines: 70.0 % 10 7
Test Date: 2026-06-13 09:18:46 Functions: 66.7 % 3 2

            Line data    Source code
       1              : /*
       2              :  *  Copyright (C) 2004-2026 Savoir-faire Linux Inc.
       3              :  *
       4              :  *  This program is free software: you can redistribute it and/or modify
       5              :  *  it under the terms of the GNU General Public License as published by
       6              :  *  the Free Software Foundation, either version 3 of the License, or
       7              :  *  (at your option) any later version.
       8              :  *
       9              :  *  This program is distributed in the hope that it will be useful,
      10              :  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
      11              :  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
      12              :  *  GNU General Public License for more details.
      13              :  *
      14              :  *  You should have received a copy of the GNU General Public License
      15              :  *  along with this program. If not, see <https://www.gnu.org/licenses/>.
      16              :  */
      17              : #pragma once
      18              : 
      19              : #include <map>
      20              : #include <memory>
      21              : #include <mutex>
      22              : #include <vector>
      23              : #include <string>
      24              : #include <utility>
      25              : 
      26              : #include "call.h"
      27              : #include "account.h"
      28              : 
      29              : namespace jami {
      30              : 
      31              : class SIPAccountBase;
      32              : class SIPCall;
      33              : 
      34              : class CallFactory
      35              : {
      36              : public:
      37           38 :     CallFactory(std::mt19937_64& rand)
      38           38 :         : rand_(rand)
      39           38 :     {}
      40              : 
      41              :     std::string getNewCallID() const;
      42              : 
      43              :     /**
      44              :      * Create a new call instance.
      45              :      * @param account Account used to create this call
      46              :      * @param type Set definitely this call as incoming/outgoing
      47              :      * @param mediaList The list of media to include
      48              :      * @return A shared pointer to the created call
      49              :      */
      50              :     std::shared_ptr<SIPCall> newSipCall(const std::shared_ptr<SIPAccountBase>& account,
      51              :                                         Call::CallType type,
      52              :                                         const std::vector<libjami::MediaMap>& mediaList);
      53              : 
      54              :     /**
      55              :      * Forbid creation of new calls.
      56              :      */
      57              :     void forbid();
      58              : 
      59              :     /**
      60              :      * Remove given call instance from call list.
      61              :      */
      62              :     void removeCall(Call& call);
      63              : 
      64              :     /**
      65              :      * Accessor on removeCall with callID than instance.
      66              :      */
      67              :     void removeCall(const std::string& id);
      68              : 
      69              :     /**
      70              :      * Return call pointer associated to given ID.Type can optionally be specified.
      71              :      */
      72              :     std::shared_ptr<Call> getCall(const std::string& id) const;
      73              :     std::shared_ptr<Call> getCall(const std::string& id, Call::LinkType link) const;
      74              : 
      75              :     template<class C>
      76            0 :     std::shared_ptr<C> getCall(const std::string& id)
      77              :     {
      78            0 :         return std::dynamic_pointer_cast<C>(getCall(id, C::LINK_TYPE));
      79              :     }
      80              : 
      81              :     /**
      82              :      * Return if given call exists. Type can optionally be specified.
      83              :      */
      84              :     bool hasCall(const std::string& id) const;
      85              :     bool hasCall(const std::string& id, Call::LinkType link) const;
      86              : 
      87              :     /**
      88              :      * Return if calls exist. Type can optionally be specified.
      89              :      */
      90              :     bool empty() const;
      91              :     bool empty(Call::LinkType link) const;
      92              : 
      93              :     /**
      94              :      * Erase all calls.
      95              :      */
      96              :     void clear();
      97              : 
      98              :     /**
      99              :      * Return all calls. Type can optionally be specified.
     100              :      */
     101              :     std::vector<std::shared_ptr<Call>> getAllCalls() const;
     102              :     std::vector<std::shared_ptr<Call>> getAllCalls(Call::LinkType link) const;
     103              : 
     104              :     /**
     105              :      * Return all call's IDs. Type can optionally be specified.
     106              :      */
     107              :     std::vector<std::string> getCallIDs() const;
     108              :     std::vector<std::string> getCallIDs(Call::LinkType link) const;
     109              : 
     110              :     /**
     111              :      * Return number of calls. Type can optionally be specified.
     112              :      */
     113              :     std::size_t callCount() const;
     114              :     std::size_t callCount(Call::LinkType link) const;
     115              : 
     116              : private:
     117              :     /**
     118              :      * @brief Get the calls map
     119              :      * @param link The call type
     120              :      * @return A pointer to the calls map instance
     121              :      * @warning Concurrency protection must done by the caller.
     122              :      */
     123           32 :     const CallMap* getMap_(Call::LinkType link) const
     124              :     {
     125           32 :         auto const& itermap = callMaps_.find(link);
     126           32 :         if (itermap != callMaps_.cend())
     127            0 :             return &itermap->second;
     128           32 :         return nullptr;
     129              :     }
     130              : 
     131              :     std::mt19937_64& rand_;
     132              : 
     133              :     mutable std::recursive_mutex callMapsMutex_ {};
     134              : 
     135              :     std::atomic_bool allowNewCall_ {true};
     136              : 
     137              :     std::map<Call::LinkType, CallMap> callMaps_ {};
     138              : };
     139              : 
     140              : } // namespace jami
        

Generated by: LCOV version 2.0-1