13b025e69SAndrew Geissler #pragma once 23b025e69SAndrew Geissler 32067926aSAndrew Geissler #include "associations.hpp" 435396c10SMatt Spinler #include "types.hpp" 52067926aSAndrew Geissler 63b025e69SAndrew Geissler #include <boost/container/flat_map.hpp> 782815dacSAndrew Geissler #include <boost/container/flat_set.hpp> 88f876a5aSMatt Spinler #include <cassert> 93b025e69SAndrew Geissler #include <string> 103b025e69SAndrew Geissler 1182815dacSAndrew Geissler /** @brief Define white list and black list data structure */ 1282815dacSAndrew Geissler using WhiteBlackList = boost::container::flat_set<std::string>; 1382815dacSAndrew Geissler 14d0cf9428SJohn Wang /** @brief The associations definitions interface */ 158f876a5aSMatt Spinler constexpr const char* assocDefsInterface = 168f876a5aSMatt Spinler "xyz.openbmc_project.Association.Definitions"; 178f876a5aSMatt Spinler 18d0cf9428SJohn Wang /** @brief The associations definitions property name */ 19d0cf9428SJohn Wang constexpr const char* assocDefsProperty = "Associations"; 202067926aSAndrew Geissler 2170461896SAndrew Geissler /** @brief InterfacesAdded represents the dbus data from the signal 2270461896SAndrew Geissler * 2370461896SAndrew Geissler * There are 2 pairs 2470461896SAndrew Geissler * pair1: D-bus Interface,vector[pair2] 2570461896SAndrew Geissler * pair2: D-bus Method,vector[Associations] 2670461896SAndrew Geissler */ 2770461896SAndrew Geissler using InterfacesAdded = std::vector<std::pair< 28*2bb2d6baSPatrick Williams std::string, std::vector<std::pair< 29*2bb2d6baSPatrick Williams std::string, std::variant<std::vector<Association>>>>>>; 3070461896SAndrew Geissler 313b025e69SAndrew Geissler /** @brief Get well known name of input unique name 323b025e69SAndrew Geissler * 333b025e69SAndrew Geissler * If user passes in well known name then that will be returned. 343b025e69SAndrew Geissler * 353b025e69SAndrew Geissler * @param[in] owners - Current list of owners 363b025e69SAndrew Geissler * @param[in] request - The name to look up 373b025e69SAndrew Geissler * @param[out] wellKnown - The well known name if found 383b025e69SAndrew Geissler * 393b025e69SAndrew Geissler * @return True if well known name is found, false otherwise 403b025e69SAndrew Geissler */ 413b025e69SAndrew Geissler bool getWellKnown( 423b025e69SAndrew Geissler const boost::container::flat_map<std::string, std::string>& owners, 4382815dacSAndrew Geissler const std::string& request, std::string& well_known); 4482815dacSAndrew Geissler 4582815dacSAndrew Geissler /** @brief Determine if dbus service is something to monitor 4682815dacSAndrew Geissler * 4782815dacSAndrew Geissler * mapper supports a whitelist and blacklist concept. If a whitelist is provided 4882815dacSAndrew Geissler * as input then only dbus objects matching that list is monitored. If a 4982815dacSAndrew Geissler * blacklist is provided then objects matching it will not be monitored. 5082815dacSAndrew Geissler * 5182815dacSAndrew Geissler * @param[in] processName - Dbus service name 5282815dacSAndrew Geissler * @param[in] whiteList - The white list 5382815dacSAndrew Geissler * @param[in] blackList - The black list 5482815dacSAndrew Geissler * 5582815dacSAndrew Geissler * @return True if input process_name should be monitored, false otherwise 5682815dacSAndrew Geissler */ 5782815dacSAndrew Geissler bool needToIntrospect(const std::string& processName, 5882815dacSAndrew Geissler const WhiteBlackList& whiteList, 5982815dacSAndrew Geissler const WhiteBlackList& blackList); 602067926aSAndrew Geissler 612067926aSAndrew Geissler /** @brief Handle the removal of an existing name in objmgr data structures 622067926aSAndrew Geissler * 632067926aSAndrew Geissler * @param[in,out] nameOwners - Map of unique name to well known name 642067926aSAndrew Geissler * @param[in] wellKnown - Well known name that has new owner 652067926aSAndrew Geissler * @param[in] oldOwner - Old unique name 662067926aSAndrew Geissler * @param[in,out] interfaceMap - Map of interfaces 67e2359fb7SMatt Spinler * @param[in,out] assocMaps - The association maps 682067926aSAndrew Geissler * @param[in,out] server - sdbus system object 692067926aSAndrew Geissler * 702067926aSAndrew Geissler */ 712067926aSAndrew Geissler void processNameChangeDelete( 722067926aSAndrew Geissler boost::container::flat_map<std::string, std::string>& nameOwners, 732067926aSAndrew Geissler const std::string& wellKnown, const std::string& oldOwner, 74e2359fb7SMatt Spinler interface_map_type& interfaceMap, AssociationMaps& assocMaps, 752067926aSAndrew Geissler sdbusplus::asio::object_server& server); 7670461896SAndrew Geissler 7770461896SAndrew Geissler /** @brief Handle an interfaces added signal 7870461896SAndrew Geissler * 7970461896SAndrew Geissler * @param[in,out] interfaceMap - Global map of interfaces 8070461896SAndrew Geissler * @param[in] objPath - New path to process 8170461896SAndrew Geissler * @param[in] interfacesAdded - New interfaces to process 8270461896SAndrew Geissler * @param[in] wellKnown - Well known name that has new owner 83e2359fb7SMatt Spinler * @param[in,out] assocMaps - The association maps 8470461896SAndrew Geissler * @param[in,out] server - sdbus system object 8570461896SAndrew Geissler * 8670461896SAndrew Geissler */ 8770461896SAndrew Geissler void processInterfaceAdded(interface_map_type& interfaceMap, 8870461896SAndrew Geissler const sdbusplus::message::object_path& objPath, 8970461896SAndrew Geissler const InterfacesAdded& intfAdded, 9070461896SAndrew Geissler const std::string& wellKnown, 91e2359fb7SMatt Spinler AssociationMaps& assocMaps, 9270461896SAndrew Geissler sdbusplus::asio::object_server& server); 93