Merge branch 'master' of git+ssh://git.freedesktop.org/git/at-spi2/at-spi2-core
[platform/core/uifw/at-spi2-atk.git] / droute / droute.c
index 06ec2bd..212c280 100644 (file)
@@ -34,7 +34,7 @@
 #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
@@ -129,6 +129,8 @@ droute_new (DBusConnection *bus, const char *introspect_dir)
     cnx->bus = bus;
     cnx->registered_paths = g_ptr_array_new ();
     cnx->introspect_dir = g_strdup(introspect_dir);
+
+    return cnx;
 }
 
 void
@@ -162,10 +164,12 @@ droute_add_one (DRouteContext *cnx,
                 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);
@@ -319,7 +323,11 @@ impl_prop_GetSet (DBusMessage *message,
 
         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)
       {
@@ -328,7 +336,7 @@ impl_prop_GetSet (DBusMessage *message,
 
         _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);
@@ -471,7 +479,7 @@ handle_other (DBusConnection *bus,
 
     StrPair pair;
     DRouteFunction func;
-    DBusMessage *reply;
+    DBusMessage *reply = NULL;
 
     pair.one = iface;
     pair.two = member;
@@ -485,11 +493,16 @@ handle_other (DBusConnection *bus,
 
         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;
@@ -541,4 +554,40 @@ droute_not_yet_handled_error (DBusMessage *message)
     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------------------------------------------------------------------------*/