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;
 }