X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git;a=blobdiff_plain;f=droute%2Fdroute.c;h=82eea8f95740d4e0db17bbab7193a767f8d15c7b;hp=b58402cbedf37cacaf021ee792183bccc076288d;hb=87be4982ef114dd00cc8d8ee5687e890d06b3420;hpb=b92c3032a60413834b85318e05bc9d0c30f0cefd diff --git a/droute/droute.c b/droute/droute.c index b58402c..82eea8f 100644 --- a/droute/droute.c +++ b/droute/droute.c @@ -107,7 +107,7 @@ path_new (DRouteContext *cnx, new_path->properties = g_hash_table_new_full ((GHashFunc)str_pair_hash, str_pair_equal, g_free, - NULL); + g_free); new_path->introspect_children_cb = introspect_children_cb; new_path->introspect_children_data = introspect_children_data; @@ -123,9 +123,10 @@ path_free (DRoutePath *path, gpointer user_data) g_free (path->path); g_string_chunk_free (path->chunks); g_ptr_array_free (path->interfaces, TRUE); - g_ptr_array_free (path->introspection, FALSE); + g_free(g_ptr_array_free (path->introspection, FALSE)); g_hash_table_destroy (path->methods); g_hash_table_destroy (path->properties); + g_free (path); } static void * @@ -154,6 +155,7 @@ void droute_free (DRouteContext *cnx) { g_ptr_array_foreach (cnx->registered_paths, (GFunc) path_free, NULL); + g_ptr_array_free (cnx->registered_paths, TRUE); g_free (cnx); } @@ -174,7 +176,6 @@ droute_add_one (DRouteContext *cnx, const void *data) { DRoutePath *new_path; - gboolean registered; new_path = path_new (cnx, path, FALSE, (void *)data, NULL, NULL, NULL); @@ -215,7 +216,7 @@ droute_path_add_interface(DRoutePath *path, itf = g_string_chunk_insert (path->chunks, name); g_ptr_array_add (path->interfaces, itf); - g_ptr_array_add (path->introspection, introspect); + g_ptr_array_add (path->introspection, (gpointer) introspect); for (; methods != NULL && methods->name != NULL; methods++) { @@ -326,7 +327,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) @@ -361,6 +366,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"); @@ -527,16 +538,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; } @@ -596,9 +606,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; } @@ -670,6 +686,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, @@ -677,9 +699,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------------------------------------------------------------------------*/