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