1 #pragma once
2 
3 #include "associations.hpp"
4 #include "types.hpp"
5 
6 #include <boost/container/flat_map.hpp>
7 #include <boost/container/flat_set.hpp>
8 #include <cassert>
9 #include <string>
10 
11 /** @brief Define white list and black list data structure */
12 using WhiteBlackList = boost::container::flat_set<std::string>;
13 
14 /** @brief The associations definitions interface */
15 constexpr const char* assocDefsInterface =
16     "xyz.openbmc_project.Association.Definitions";
17 
18 /** @brief The associations definitions property name */
19 constexpr const char* assocDefsProperty = "Associations";
20 
21 /** @brief InterfacesAdded represents the dbus data from the signal
22  *
23  * There are 2 pairs
24  * pair1: D-bus Interface,vector[pair2]
25  * pair2: D-bus Method,vector[Associations]
26  */
27 using InterfacesAdded = std::vector<std::pair<
28     std::string, std::vector<std::pair<
29                      std::string, std::variant<std::vector<Association>>>>>>;
30 
31 /** @brief Get well known name of input unique name
32  *
33  * If user passes in well known name then that will be returned.
34  *
35  * @param[in] owners       - Current list of owners
36  * @param[in] request      - The name to look up
37  * @param[out] wellKnown   - The well known name if found
38  *
39  * @return True if well known name is found, false otherwise
40  */
41 bool getWellKnown(
42     const boost::container::flat_map<std::string, std::string>& owners,
43     const std::string& request, std::string& well_known);
44 
45 /** @brief Determine if dbus service is something to monitor
46  *
47  * mapper supports a whitelist and blacklist concept. If a whitelist is provided
48  * as input then only dbus objects matching that list is monitored. If a
49  * blacklist is provided then objects matching it will not be monitored.
50  *
51  * @param[in] processName   - Dbus service name
52  * @param[in] whiteList     - The white list
53  * @param[in] blackList     - The black list
54  *
55  * @return True if input process_name should be monitored, false otherwise
56  */
57 bool needToIntrospect(const std::string& processName,
58                       const WhiteBlackList& whiteList,
59                       const WhiteBlackList& blackList);
60 
61 /** @brief Handle the removal of an existing name in objmgr data structures
62  *
63  * @param[in,out] nameOwners      - Map of unique name to well known name
64  * @param[in]     wellKnown       - Well known name that has new owner
65  * @param[in]     oldOwner        - Old unique name
66  * @param[in,out] interfaceMap    - Map of interfaces
67  * @param[in,out] assocMaps       - The association maps
68  * @param[in,out] server          - sdbus system object
69  *
70  */
71 void processNameChangeDelete(
72     boost::container::flat_map<std::string, std::string>& nameOwners,
73     const std::string& wellKnown, const std::string& oldOwner,
74     interface_map_type& interfaceMap, AssociationMaps& assocMaps,
75     sdbusplus::asio::object_server& server);
76 
77 /** @brief Handle an interfaces added signal
78  *
79  * @param[in,out] interfaceMap    - Global map of interfaces
80  * @param[in]     objPath         - New path to process
81  * @param[in]     interfacesAdded - New interfaces to process
82  * @param[in]     wellKnown       - Well known name that has new owner
83  * @param[in,out] assocMaps       - The association maps
84  * @param[in,out] server          - sdbus system object
85  *
86  */
87 void processInterfaceAdded(interface_map_type& interfaceMap,
88                            const sdbusplus::message::object_path& objPath,
89                            const InterfacesAdded& intfAdded,
90                            const std::string& wellKnown,
91                            AssociationMaps& assocMaps,
92                            sdbusplus::asio::object_server& server);
93