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> 72352088eSBrad Bishop 88f876a5aSMatt Spinler #include <cassert> 93b025e69SAndrew Geissler #include <string> 103b025e69SAndrew Geissler 11d0cf9428SJohn Wang /** @brief The associations definitions interface */ 128f876a5aSMatt Spinler constexpr const char* assocDefsInterface = 138f876a5aSMatt Spinler "xyz.openbmc_project.Association.Definitions"; 148f876a5aSMatt Spinler 15d0cf9428SJohn Wang /** @brief The associations definitions property name */ 16d0cf9428SJohn Wang constexpr const char* assocDefsProperty = "Associations"; 172067926aSAndrew Geissler 1870461896SAndrew Geissler /** @brief InterfacesAdded represents the dbus data from the signal 1970461896SAndrew Geissler * 2070461896SAndrew Geissler * There are 2 pairs 2170461896SAndrew Geissler * pair1: D-bus Interface,vector[pair2] 2270461896SAndrew Geissler * pair2: D-bus Method,vector[Associations] 2370461896SAndrew Geissler */ 2470461896SAndrew Geissler using InterfacesAdded = std::vector<std::pair< 252bb2d6baSPatrick Williams std::string, std::vector<std::pair< 262bb2d6baSPatrick Williams std::string, std::variant<std::vector<Association>>>>>>; 2770461896SAndrew Geissler 283b025e69SAndrew Geissler /** @brief Get well known name of input unique name 293b025e69SAndrew Geissler * 303b025e69SAndrew Geissler * If user passes in well known name then that will be returned. 313b025e69SAndrew Geissler * 323b025e69SAndrew Geissler * @param[in] owners - Current list of owners 333b025e69SAndrew Geissler * @param[in] request - The name to look up 343b025e69SAndrew Geissler * @param[out] wellKnown - The well known name if found 353b025e69SAndrew Geissler * 363b025e69SAndrew Geissler * @return True if well known name is found, false otherwise 373b025e69SAndrew Geissler */ 383b025e69SAndrew Geissler bool getWellKnown( 393b025e69SAndrew Geissler const boost::container::flat_map<std::string, std::string>& owners, 40a098a37aSBrad Bishop const std::string& request, std::string& wellKnown); 4182815dacSAndrew Geissler 4282815dacSAndrew Geissler /** @brief Determine if dbus service is something to monitor 4382815dacSAndrew Geissler * 44*1e94e60bSBrad Bishop * mapper does not monitor all DBus services. needToIntrospect determines 45*1e94e60bSBrad Bishop * whether or not a service is to be monitored. 4682815dacSAndrew Geissler * 4782815dacSAndrew Geissler * @param[in] processName - Dbus service name 4882815dacSAndrew Geissler * 49a098a37aSBrad Bishop * @return True if input processName should be monitored, false otherwise 5082815dacSAndrew Geissler */ 51*1e94e60bSBrad Bishop bool needToIntrospect(const std::string& processName); 522067926aSAndrew Geissler 532067926aSAndrew Geissler /** @brief Handle the removal of an existing name in objmgr data structures 542067926aSAndrew Geissler * 552067926aSAndrew Geissler * @param[in,out] nameOwners - Map of unique name to well known name 562067926aSAndrew Geissler * @param[in] wellKnown - Well known name that has new owner 572067926aSAndrew Geissler * @param[in] oldOwner - Old unique name 582067926aSAndrew Geissler * @param[in,out] interfaceMap - Map of interfaces 59e2359fb7SMatt Spinler * @param[in,out] assocMaps - The association maps 602067926aSAndrew Geissler * @param[in,out] server - sdbus system object 612067926aSAndrew Geissler * 622067926aSAndrew Geissler */ 632067926aSAndrew Geissler void processNameChangeDelete( 642067926aSAndrew Geissler boost::container::flat_map<std::string, std::string>& nameOwners, 652067926aSAndrew Geissler const std::string& wellKnown, const std::string& oldOwner, 66a098a37aSBrad Bishop InterfaceMapType& interfaceMap, AssociationMaps& assocMaps, 672067926aSAndrew Geissler sdbusplus::asio::object_server& server); 6870461896SAndrew Geissler 6970461896SAndrew Geissler /** @brief Handle an interfaces added signal 7070461896SAndrew Geissler * 7170461896SAndrew Geissler * @param[in,out] interfaceMap - Global map of interfaces 7270461896SAndrew Geissler * @param[in] objPath - New path to process 7370461896SAndrew Geissler * @param[in] interfacesAdded - New interfaces to process 7470461896SAndrew Geissler * @param[in] wellKnown - Well known name that has new owner 75e2359fb7SMatt Spinler * @param[in,out] assocMaps - The association maps 7670461896SAndrew Geissler * @param[in,out] server - sdbus system object 7770461896SAndrew Geissler * 7870461896SAndrew Geissler */ 79a098a37aSBrad Bishop void processInterfaceAdded(InterfaceMapType& interfaceMap, 8070461896SAndrew Geissler const sdbusplus::message::object_path& objPath, 8170461896SAndrew Geissler const InterfacesAdded& intfAdded, 8270461896SAndrew Geissler const std::string& wellKnown, 83e2359fb7SMatt Spinler AssociationMaps& assocMaps, 8470461896SAndrew Geissler sdbusplus::asio::object_server& server); 85