Regenerate manager bindings
Re-run sdbus++ and react to the sdbusplus interface namespace
move and a real object path type.
Change-Id: Id6241b55cd3f2d4c3b85e5545e4ac6e5dd439e34
diff --git a/manager.cpp b/manager.cpp
index 0c2a76d..a05d2bc 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -127,15 +127,16 @@
}
}
-void Manager::notify(std::string path, Object object)
+void Manager::notify(sdbusplus::message::object_path path, Object object)
{
try
{
+
if (object.cbegin() == object.cend())
throw std::runtime_error(
- "No interfaces in " + path);
+ "No interfaces in " + path.str);
- path.insert(0, _root);
+ path.str.insert(0, _root);
auto obj = _refs.find(path);
if (obj != _refs.end())
@@ -156,7 +157,7 @@
"Unimplemented interface: " + x.first);
ref.emplace(x.first,
- (maker->second)(_bus, path.c_str()));
+ (maker->second)(_bus, path.str.c_str()));
}
// Hang on to a reference to the object (interfaces)
diff --git a/manager.hpp b/manager.hpp
index 24173e2..0c89017 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -22,7 +22,7 @@
using ServerObject = typename sdbusplus::server::object::object<T>;
using ManagerIface =
- sdbusplus::server::xyz::openbmc_project::Inventory::Manager;
+ sdbusplus::xyz::openbmc_project::Inventory::server::Manager;
/** @struct MakeInterface
* @brief Adapt an sdbusplus interface proxy.
@@ -77,7 +77,7 @@
using Object = std::map <
std::string, std::map <
- std::string, sdbusplus::message::variant<std::string >>>;
+ std::string, sdbusplus::message::variant<int64_t, std::string >>>;
using EventInfo = std::tuple <
std::vector<details::EventBasePtr>,
std::vector<details::ActionBasePtr >>;
@@ -89,7 +89,7 @@
void shutdown() noexcept;
/** @brief sd_bus Notify method implementation callback. */
- void notify(std::string path, Object) override;
+ void notify(sdbusplus::message::object_path, Object) override;
/** @brief sd_bus signal callback. */
void signal(sdbusplus::message::message&,
diff --git a/test/test.cpp b/test/test.cpp
index 7f72721..89e46b9 100644
--- a/test/test.cpp
+++ b/test/test.cpp
@@ -76,8 +76,6 @@
std::string,
sdbusplus::message::variant<T... >>>;
-using ObjectPath = std::string;
-
/**@brief Find a subset of interfaces and properties in an object. */
template <typename ...T>
auto hasProperties(const Object<T...>& l, const Object<T...>& r)
@@ -149,8 +147,8 @@
// Make sure the notify method works.
{
- ObjectPath relPath{"/foo"};
- ObjectPath path{root + relPath};
+ sdbusplus::message::object_path relPath{"/foo"};
+ std::string path(root + relPath.str);
SignalQueue queue(
"path='" + root + "',member='InterfacesAdded'");
@@ -162,7 +160,7 @@
auto sig{queue.pop()};
assert(sig);
- ObjectPath signalPath;
+ sdbusplus::message::object_path signalPath;
Object<std::string> signalObject;
sig.read(signalPath);
assert(path == signalPath);
@@ -174,12 +172,12 @@
// Make sure DBus signals are handled.
{
- ObjectPath relDeleteMeOne{"/deleteme1"};
- ObjectPath relDeleteMeTwo{"/deleteme2"};
- ObjectPath relTriggerOne{"/trigger1"};
- ObjectPath deleteMeOne{root + relDeleteMeOne};
- ObjectPath deleteMeTwo{root + relDeleteMeTwo};
- ObjectPath triggerOne{root + relTriggerOne};
+ sdbusplus::message::object_path relDeleteMeOne{"/deleteme1"};
+ sdbusplus::message::object_path relDeleteMeTwo{"/deleteme2"};
+ sdbusplus::message::object_path relTriggerOne{"/trigger1"};
+ std::string deleteMeOne{root + relDeleteMeOne.str};
+ std::string deleteMeTwo{root + relDeleteMeTwo.str};
+ std::string triggerOne{root + relTriggerOne.str};
// Create some objects to be deleted by an action.
{
@@ -227,7 +225,7 @@
m.append(sdbusplus::message::variant<std::string>("xxxyyy"));
b.call(m);
- ObjectPath sigpath;
+ sdbusplus::message::object_path sigpath;
std::vector<std::string> interfaces;
{
std::vector<std::string> interfaces;
@@ -259,10 +257,10 @@
// Validate the set property action.
{
- ObjectPath relChangeMe{"/changeme"};
- ObjectPath relTriggerTwo{"/trigger2"};
- ObjectPath changeMe{root + relChangeMe};
- ObjectPath triggerTwo{root + relTriggerTwo};
+ sdbusplus::message::object_path relChangeMe{"/changeme"};
+ sdbusplus::message::object_path relTriggerTwo{"/trigger2"};
+ std::string changeMe{root + relChangeMe.str};
+ std::string triggerTwo{root + relTriggerTwo.str};
// Create an object to be updated by the set property action.
{
diff --git a/xyz.openbmc_project.Inventory.Manager.cpp b/xyz.openbmc_project.Inventory.Manager.cpp
index bbe5667..787b65f 100644
--- a/xyz.openbmc_project.Inventory.Manager.cpp
+++ b/xyz.openbmc_project.Inventory.Manager.cpp
@@ -1,16 +1,19 @@
+#include <algorithm>
#include <sdbusplus/server.hpp>
+#include <sdbusplus/exception.hpp>
#include <xyz/openbmc_project/Inventory/Manager/server.hpp>
+
namespace sdbusplus
{
-namespace server
-{
namespace xyz
{
namespace openbmc_project
{
namespace Inventory
{
+namespace server
+{
Manager::Manager(bus::bus& bus, const char* path)
: _xyz_openbmc_project_Inventory_Manager_interface(
@@ -22,22 +25,32 @@
int Manager::_callback_Notify(
sd_bus_message* msg, void* context, sd_bus_error* error)
{
- auto m = message::message(sd_bus_message_ref(msg));
+ using sdbusplus::server::binding::details::convertForMessage;
- std::string path{};
- std::map<std::string, std::map<std::string, sdbusplus::message::variant<std::string>>> object{};
+ try
+ {
+ auto m = message::message(msg);
- m.read(path, object);
+ sdbusplus::message::object_path path{};
+ std::map<std::string, std::map<std::string, sdbusplus::message::variant<int64_t, std::string>>> object{};
- auto o = static_cast<Manager*>(context);
- o->notify(path, object);
+ m.read(path, object);
- auto reply = m.new_method_return();
- // No data to append on reply.
+ auto o = static_cast<Manager*>(context);
+ o->notify(path, object);
- reply.method_return();
+ auto reply = m.new_method_return();
+ // No data to append on reply.
- return 0;
+ reply.method_return();
+ }
+ catch(sdbusplus::internal_exception_t& e)
+ {
+ sd_bus_error_set_const(error, e.name(), e.description());
+ return -EINVAL;
+ }
+
+ return true;
}
namespace details
@@ -46,26 +59,30 @@
{
static const auto _param_Notify =
utility::tuple_to_array(message::types::type_id<
- std::string, std::map<std::string, std::map<std::string, sdbusplus::message::variant<std::string>>>>());
+ sdbusplus::message::object_path, std::map<std::string, std::map<std::string, sdbusplus::message::variant<int64_t, std::string>>>>());
+static const auto _return_Notify =
+ utility::tuple_to_array(std::make_tuple('\0'));
}
}
+
const vtable::vtable_t Manager::_vtable[] = {
vtable::start(),
vtable::method("Notify",
details::Manager::_param_Notify
.data(),
- nullptr,
+ details::Manager::_return_Notify
+ .data(),
_callback_Notify),
vtable::end()
};
+} // namespace server
} // namespace Inventory
} // namespace openbmc_project
} // namespace xyz
-} // namespace server
} // namespace sdbusplus
diff --git a/xyz/openbmc_project/Inventory/Manager/server.hpp b/xyz/openbmc_project/Inventory/Manager/server.hpp
index 9c3118b..302bee5 100644
--- a/xyz/openbmc_project/Inventory/Manager/server.hpp
+++ b/xyz/openbmc_project/Inventory/Manager/server.hpp
@@ -5,14 +5,14 @@
namespace sdbusplus
{
-namespace server
-{
namespace xyz
{
namespace openbmc_project
{
namespace Inventory
{
+namespace server
+{
class Manager
{
@@ -21,15 +21,16 @@
* Not allowed:
* - Default constructor to avoid nullptrs.
* - Copy operations due to internal unique_ptr.
+ * - Move operations due to 'this' being registered as the
+ * 'context' with sdbus.
* Allowed:
- * - Move operations.
* - Destructor.
*/
Manager() = delete;
Manager(const Manager&) = delete;
Manager& operator=(const Manager&) = delete;
- Manager(Manager&&) = default;
- Manager& operator=(Manager&&) = default;
+ Manager(Manager&&) = delete;
+ Manager& operator=(Manager&&) = delete;
virtual ~Manager() = default;
/** @brief Constructor to put object onto bus at a dbus path.
@@ -39,6 +40,7 @@
Manager(bus::bus& bus, const char* path);
+
/** @brief Implementation for Notify
* Signal the implementing service that an item is ready to have its state managed.
*
@@ -46,8 +48,9 @@
* @param[in] object - The fully enumerated item to be managed.
*/
virtual void notify(
- std::string path,
- std::map<std::string, std::map<std::string, sdbusplus::message::variant<std::string>>> object) = 0;
+ sdbusplus::message::object_path path,
+ std::map<std::string, std::map<std::string, sdbusplus::message::variant<int64_t, std::string>>> object) = 0;
+
@@ -61,14 +64,16 @@
static constexpr auto _interface = "xyz.openbmc_project.Inventory.Manager";
static const vtable::vtable_t _vtable[];
- interface::interface _xyz_openbmc_project_Inventory_Manager_interface;
+ sdbusplus::server::interface::interface
+ _xyz_openbmc_project_Inventory_Manager_interface;
};
+
+} // namespace server
} // namespace Inventory
} // namespace openbmc_project
} // namespace xyz
-} // namespace server
} // namespace sdbusplus