X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=droute%2Fdroute.c;h=1567fc7bdc3d47cf9524dd6619f17ad6eb61cdca;hb=ed260a62ba9a15fb274a22de133cabf57fa3a69c;hp=321144eeea023c79153ed9ab9c3b1273176cdefa;hpb=c3917234bd94cf1ed37369c9392c1031d0bbcdaa;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/droute/droute.c b/droute/droute.c index 321144e..1567fc7 100644 --- a/droute/droute.c +++ b/droute/droute.c @@ -23,6 +23,7 @@ #include #include +#include #include "droute.h" #include "droute-pairhash.h" @@ -325,7 +326,11 @@ impl_prop_GetSet (DBusMessage *message, prop_funcs = (PropertyPair *) g_hash_table_lookup (path->properties, &pair); if (!prop_funcs) +#ifdef DBUS_ERROR_UNKNOWN_PROPERTY + return dbus_message_new_error (message, DBUS_ERROR_UNKNOWN_PROPERTY, "Property unavailable"); +#else return dbus_message_new_error (message, DBUS_ERROR_FAILED, "Property unavailable"); +#endif datum = path_get_datum (path, pathstr); if (!datum) @@ -360,6 +365,12 @@ impl_prop_GetSet (DBusMessage *message, reply = dbus_message_new_method_return (message); } +#ifdef DBUS_ERROR_PROPERTY_READ_ONLY + else if (!get) + { + reply = dbus_message_new_error (message, DBUS_ERROR_PROPERTY_READ_ONLY, "Property is read-only"); + } +#endif else { reply = dbus_message_new_error (message, DBUS_ERROR_FAILED, "Getter or setter unavailable"); @@ -379,9 +390,12 @@ handle_dbus (DBusConnection *bus, char *id_str = (char *) g_malloc(40); DBusMessage *reply; - if (strcmp (iface, DBUS_INTERFACE_DBUS) != 0 || - strcmp (member, "Hello") != 0) - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + if (strcmp (iface, DBUS_INTERFACE_DBUS) != 0 || + strcmp (member, "Hello") != 0) + { + g_free (id_str); + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + } /* TODO: Fix this hack (we don't handle wrap-around, for instance) */ sprintf (id_str, ":1.%d", id++); @@ -402,7 +416,7 @@ handle_properties (DBusConnection *bus, const gchar *member, const gchar *pathstr) { - DBusMessage *reply; + DBusMessage *reply = NULL; DBusHandlerResult result = DBUS_HANDLER_RESULT_HANDLED; if (!g_strcmp0(member, "GetAll")) @@ -523,16 +537,15 @@ handle_other (DBusConnection *bus, else reply = (func) (bus, message, datum); - if (!reply) + /* All D-Bus method calls must have a reply. + * If one is not provided presume that the caller has already + * sent one. + */ + if (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); } - dbus_connection_send (bus, reply, NULL); - dbus_message_unref (reply); result = DBUS_HANDLER_RESULT_HANDLED; } @@ -592,9 +605,15 @@ droute_object_does_not_exist_error (DBusMessage *message) dbus_message_get_signature (message), dbus_message_get_interface (message), dbus_message_get_path (message)); +#ifdef DBUS_ERROR_UNKNOWN_OBJECT + reply = dbus_message_new_error (message, + DBUS_ERROR_UNKNOWN_OBJECT, + errmsg); +#else reply = dbus_message_new_error (message, DBUS_ERROR_FAILED, errmsg); +#endif g_free (errmsg); return reply; } @@ -666,6 +685,12 @@ droute_path_register (DRoutePath *path, DBusConnection *bus) } void +droute_path_unregister (DRoutePath *path, DBusConnection *bus) +{ + dbus_connection_unregister_object_path (bus, path->path); +} + +void droute_context_register (DRouteContext *cnx, DBusConnection *bus) { g_ptr_array_foreach (cnx->registered_paths, (GFunc) droute_path_register, @@ -673,9 +698,30 @@ droute_context_register (DRouteContext *cnx, DBusConnection *bus) } void +droute_context_unregister (DRouteContext *cnx, DBusConnection *bus) +{ + g_ptr_array_foreach (cnx->registered_paths, (GFunc) droute_path_unregister, + bus); +} + +void +droute_context_deregister (DRouteContext *cnx, DBusConnection *bus) +{ + g_ptr_array_foreach (cnx->registered_paths, (GFunc) droute_path_unregister, + bus); +} + +void droute_intercept_dbus (DBusConnection *bus) { dbus_connection_register_object_path (bus, DBUS_PATH_DBUS, &droute_vtable, NULL); } + +void +droute_unintercept_dbus (DBusConnection *bus) +{ + dbus_connection_unregister_object_path (bus, DBUS_PATH_DBUS); +} + /*END------------------------------------------------------------------------*/