summaryrefslogtreecommitdiff
path: root/gdbus
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2012-10-04 04:26:34 -0300
committerMarcel Holtmann <marcel@holtmann.org>2012-11-26 14:44:48 +0100
commit6c077951862a042a1407db7de55762a2d86e4251 (patch)
treedcb7035315b8411c609c552499ab907833eb203f /gdbus
parent9614c2022b5ca0decd8b97e4582c7626c305f03d (diff)
downloadconnman-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.c17
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);