X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=droute%2Fdroute.c;h=212c28088f442d502d3fab67f4ea6a2b484a5839;hb=a48fee205ddd62a67ed35f4ac3bdb5e2d06959c0;hp=06ec2bd8ecf0d8653860f7cb45040f4ee4cd35b4;hpb=dfc071dcf2f98f282616911cb0eb1636c93f3e77;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/droute/droute.c b/droute/droute.c index 06ec2bd..212c280 100644 --- a/droute/droute.c +++ b/droute/droute.c @@ -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------------------------------------------------------------------------*/