sdbus++: exception handling for property callbacks
Change-Id: I4230d5ebc7d2a470d9ae2d3bb03a9918a29ba919
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/tools/sdbusplus/templates/interface.mako.server.cpp b/tools/sdbusplus/templates/interface.mako.server.cpp
index faaed4d..93e66d1 100644
--- a/tools/sdbusplus/templates/interface.mako.server.cpp
+++ b/tools/sdbusplus/templates/interface.mako.server.cpp
@@ -49,10 +49,18 @@
{
using sdbusplus::server::binding::details::convertForMessage;
- auto m = message::message(sd_bus_message_ref(reply));
+ try
+ {
+ auto m = message::message(sd_bus_message_ref(reply));
- auto o = static_cast<${classname}*>(context);
- m.append(convertForMessage(o->${p.camelCase}()));
+ auto o = static_cast<${classname}*>(context);
+ m.append(convertForMessage(o->${p.camelCase}()));
+ }
+ catch(sdbusplus::internal_exception_t& e)
+ {
+ sd_bus_error_set_const(error, e.name(), e.description());
+ return -EINVAL;
+ }
return true;
}
@@ -74,18 +82,26 @@
const char* property, sd_bus_message* value, void* context,
sd_bus_error* error)
{
- auto m = message::message(sd_bus_message_ref(value));
+ try
+ {
+ auto m = message::message(sd_bus_message_ref(value));
- auto o = static_cast<${classname}*>(context);
+ auto o = static_cast<${classname}*>(context);
- ${p.cppTypeMessage(interface.name)} v{};
- m.read(v);
+ ${p.cppTypeMessage(interface.name)} v{};
+ m.read(v);
% if p.is_enum():
- o->${p.camelCase}(${p.enum_namespace(interface.name)}\
+ o->${p.camelCase}(${p.enum_namespace(interface.name)}\
convert${p.enum_name(interface.name)}FromString(v));
% else:
- o->${p.camelCase}(v);
+ o->${p.camelCase}(v);
% endif
+ }
+ catch(sdbusplus::internal_exception_t& e)
+ {
+ sd_bus_error_set_const(error, e.name(), e.description());
+ return -EINVAL;
+ }
return true;
}