diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2012-10-04 04:26:34 -0300 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2012-11-26 14:44:48 +0100 |
commit | 6c077951862a042a1407db7de55762a2d86e4251 (patch) | |
tree | dcb7035315b8411c609c552499ab907833eb203f /gdbus | |
parent | 9614c2022b5ca0decd8b97e4582c7626c305f03d (diff) | |
download | connman-6c077951862a042a1407db7de55762a2d86e4251.tar.gz connman-6c077951862a042a1407db7de55762a2d86e4251.tar.bz2 connman-6c077951862a042a1407db7de55762a2d86e4251.zip |
gdbus: Only export ObjectManager interface on root path
ObjectManager should be exported only in the root path and list all
the children paths.
Diffstat (limited to 'gdbus')
-rw-r--r-- | gdbus/object.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/gdbus/object.c b/gdbus/object.c index fef66357..7ce3aaf0 100644 --- a/gdbus/object.c +++ b/gdbus/object.c @@ -534,6 +534,10 @@ static void emit_interfaces_added(struct generic_data *data) if (parent == NULL) return; + /* Find root data */ + while (parent->parent) + parent = parent->parent; + signal = dbus_message_new_signal(parent->path, DBUS_INTERFACE_OBJECT_MANAGER, "InterfacesAdded"); @@ -918,6 +922,10 @@ static void emit_interfaces_removed(struct generic_data *data) if (parent == NULL) return; + /* Find root data */ + while (parent->parent) + parent = parent->parent; + signal = dbus_message_new_signal(parent->path, DBUS_INTERFACE_OBJECT_MANAGER, "InterfacesRemoved"); @@ -1054,6 +1062,8 @@ static void append_object(gpointer data, gpointer user_data) &child->path); append_interfaces(child, &entry); dbus_message_iter_close_container(array, &entry); + + g_slist_foreach(child->objects, append_object, user_data); } static DBusMessage *get_objects(DBusConnection *connection, @@ -1168,8 +1178,11 @@ static struct generic_data *object_path_ref(DBusConnection *connection, add_interface(data, DBUS_INTERFACE_INTROSPECTABLE, introspect_methods, NULL, NULL, data, NULL); - add_interface(data, DBUS_INTERFACE_OBJECT_MANAGER, manager_methods, - manager_signals, NULL, data, NULL); + /* Only root path export ObjectManager interface */ + if (data->parent == NULL) + add_interface(data, DBUS_INTERFACE_OBJECT_MANAGER, + manager_methods, manager_signals, + NULL, data, NULL); add_interface(data, DBUS_INTERFACE_PROPERTIES, properties_methods, properties_signals, NULL, data, NULL); |