|  | #include <algorithm> | 
|  | #include <sdbusplus/server.hpp> | 
|  | #include <sdbusplus/exception.hpp> | 
|  | #include <org/openbmc/Associations/server.hpp> | 
|  |  | 
|  | namespace sdbusplus | 
|  | { | 
|  | namespace org | 
|  | { | 
|  | namespace openbmc | 
|  | { | 
|  | namespace server | 
|  | { | 
|  |  | 
|  | Associations::Associations(bus::bus& bus, const char* path) | 
|  | : _org_openbmc_Associations_interface( | 
|  | bus, path, _interface, _vtable, this) | 
|  | { | 
|  | } | 
|  |  | 
|  | Associations::Associations(bus::bus& bus, const char* path, | 
|  | const std::map<std::string, PropertiesVariant>& vals) | 
|  | : Associations(bus, path) | 
|  | { | 
|  | for (const auto& v : vals) | 
|  | { | 
|  | setPropertyByName(v.first, v.second); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | auto Associations::associations() const -> | 
|  | std::vector<std::tuple<std::string, std::string, std::string>> | 
|  | { | 
|  | return _associations; | 
|  | } | 
|  |  | 
|  | int Associations::_callback_get_associations( | 
|  | sd_bus* bus, const char* path, const char* interface, | 
|  | const char* property, sd_bus_message* reply, void* context, | 
|  | sd_bus_error* error) | 
|  | { | 
|  | using sdbusplus::server::binding::details::convertForMessage; | 
|  |  | 
|  | try | 
|  | { | 
|  | auto m = message::message(reply); | 
|  | #ifndef DISABLE_TRANSACTION | 
|  | { | 
|  | auto tbus = m.get_bus(); | 
|  | sdbusplus::server::transaction::Transaction t(tbus, m); | 
|  | sdbusplus::server::transaction::set_id | 
|  | (std::hash<sdbusplus::server::transaction::Transaction>{}(t)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | auto o = static_cast<Associations*>(context); | 
|  | m.append(convertForMessage(o->associations())); | 
|  | } | 
|  | catch(sdbusplus::internal_exception_t& e) | 
|  | { | 
|  | sd_bus_error_set_const(error, e.name(), e.description()); | 
|  | return -EINVAL; | 
|  | } | 
|  |  | 
|  | return true; | 
|  | } | 
|  |  | 
|  | auto Associations::associations(std::vector<std::tuple<std::string, std::string, std::string>> value) -> | 
|  | std::vector<std::tuple<std::string, std::string, std::string>> | 
|  | { | 
|  | if (_associations != value) | 
|  | { | 
|  | _associations = value; | 
|  | _org_openbmc_Associations_interface.property_changed("associations"); | 
|  | } | 
|  |  | 
|  | return _associations; | 
|  | } | 
|  |  | 
|  | int Associations::_callback_set_associations( | 
|  | sd_bus* bus, const char* path, const char* interface, | 
|  | const char* property, sd_bus_message* value, void* context, | 
|  | sd_bus_error* error) | 
|  | { | 
|  | try | 
|  | { | 
|  | auto m = message::message(value); | 
|  | #ifndef DISABLE_TRANSACTION | 
|  | { | 
|  | auto tbus = m.get_bus(); | 
|  | sdbusplus::server::transaction::Transaction t(tbus, m); | 
|  | sdbusplus::server::transaction::set_id | 
|  | (std::hash<sdbusplus::server::transaction::Transaction>{}(t)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | auto o = static_cast<Associations*>(context); | 
|  |  | 
|  | std::vector<std::tuple<std::string, std::string, std::string>> v{}; | 
|  | m.read(v); | 
|  | o->associations(v); | 
|  | } | 
|  | catch(sdbusplus::internal_exception_t& e) | 
|  | { | 
|  | sd_bus_error_set_const(error, e.name(), e.description()); | 
|  | return -EINVAL; | 
|  | } | 
|  |  | 
|  | return true; | 
|  | } | 
|  |  | 
|  | namespace details | 
|  | { | 
|  | namespace Associations | 
|  | { | 
|  | static const auto _property_associations = | 
|  | utility::tuple_to_array(message::types::type_id< | 
|  | std::vector<std::tuple<std::string, std::string, std::string>>>()); | 
|  | } | 
|  | } | 
|  |  | 
|  | void Associations::setPropertyByName(const std::string& name, | 
|  | const PropertiesVariant& val) | 
|  | { | 
|  | if (name == "associations") | 
|  | { | 
|  | auto& v = message::variant_ns::get<std::vector<std::tuple<std::string, std::string, std::string>>>(val); | 
|  | associations(v); | 
|  | return; | 
|  | } | 
|  | } | 
|  |  | 
|  | auto Associations::getPropertyByName(const std::string& name) -> | 
|  | PropertiesVariant | 
|  | { | 
|  | if (name == "associations") | 
|  | { | 
|  | return associations(); | 
|  | } | 
|  |  | 
|  | return PropertiesVariant(); | 
|  | } | 
|  |  | 
|  |  | 
|  | const vtable::vtable_t Associations::_vtable[] = { | 
|  | vtable::start(), | 
|  | vtable::property("associations", | 
|  | details::Associations::_property_associations | 
|  | .data(), | 
|  | _callback_get_associations, | 
|  | _callback_set_associations, | 
|  | vtable::property_::emits_change), | 
|  | vtable::end() | 
|  | }; | 
|  |  | 
|  | } // namespace server | 
|  | } // namespace openbmc | 
|  | } // namespace org | 
|  | } // namespace sdbusplus | 
|  |  |