#if defined DROUTE_DEBUG
#define _DROUTE_DEBUG(format, args...) g_print (format , ## args)
#else
- #define _DROUTE_DEBUG
+ #define _DROUTE_DEBUG(format, args...)
#endif
struct _DRouteContext
cnx->bus = bus;
cnx->registered_paths = g_ptr_array_new ();
cnx->introspect_dir = g_strdup(introspect_dir);
+
+ return cnx;
}
void
const void *data)
{
DRoutePath *new_path;
+ gboolean registered;
new_path = path_new (cnx, (void *) data, NULL);
- if (!dbus_connection_register_object_path (cnx->bus, path, &droute_vtable, new_path))
+ registered = dbus_connection_register_object_path (cnx->bus, path, &droute_vtable, new_path);
+ if (!registered)
oom();
g_ptr_array_add (cnx->registered_paths, new_path);
reply = dbus_message_new_method_return (message);
dbus_message_iter_init_append (reply, &iter);
- (prop_funcs->get) (&iter, datum);
+ if (!(prop_funcs->get) (&iter, datum))
+ {
+ dbus_message_unref (reply);
+ reply = dbus_message_new_error (message, DBUS_ERROR_FAILED, "Get failed");
+ }
}
else if (!get && prop_funcs->set)
{
_DROUTE_DEBUG ("DRoute (handle prop Get): %s|%s on %s\n", pair.one, pair.two, pathstr);
- dbus_message_iter_init_append (message, &iter);
+ dbus_message_iter_init (message, &iter);
/* Skip the interface and property name */
dbus_message_iter_next(&iter);
dbus_message_iter_next(&iter);
StrPair pair;
DRouteFunction func;
- DBusMessage *reply;
+ DBusMessage *reply = NULL;
pair.one = iface;
pair.two = member;
reply = (func) (bus, message, datum);
- if (reply)
+ if (!reply)
{
- dbus_connection_send (bus, reply, NULL);
- dbus_message_unref (reply);
+ /* All D-Bus method calls must have a reply.
+ * If one is not provided presume that the call has a void
+ * return and no error has occured.
+ */
+ reply = dbus_message_new_method_return (message);
}
+ dbus_connection_send (bus, reply, NULL);
+ dbus_message_unref (reply);
result = DBUS_HANDLER_RESULT_HANDLED;
}
return result;
return reply;
}
+DBusMessage *
+droute_out_of_memory_error (DBusMessage *message)
+{
+ DBusMessage *reply;
+ gchar *errmsg;
+
+ errmsg= g_strdup_printf (
+ "Method \"%s\" with signature \"%s\" on interface \"%s\" could not be processed due to lack of memory\n",
+ dbus_message_get_member (message),
+ dbus_message_get_signature (message),
+ dbus_message_get_interface (message));
+ reply = dbus_message_new_error (message,
+ DBUS_ERROR_NO_MEMORY,
+ errmsg);
+ g_free (errmsg);
+ return reply;
+}
+
+DBusMessage *
+droute_invalid_arguments_error (DBusMessage *message)
+{
+ DBusMessage *reply;
+ gchar *errmsg;
+
+ errmsg= g_strdup_printf (
+ "Method \"%s\" with signature \"%s\" on interface \"%s\" was supplied with invalid arguments\n",
+ dbus_message_get_member (message),
+ dbus_message_get_signature (message),
+ dbus_message_get_interface (message));
+ reply = dbus_message_new_error (message,
+ DBUS_ERROR_INVALID_ARGS,
+ errmsg);
+ g_free (errmsg);
+ return reply;
+}
+
/*END------------------------------------------------------------------------*/