+
+/* ---------------------------------------------------------------------------------------------------- */
+
+static void
+export_all (GDBusObjectManagerServer *manager)
+{
+ GHashTableIter iter;
+ const gchar *object_path;
+ RegistrationData *data;
+ GHashTableIter iface_iter;
+ GDBusInterfaceSkeleton *iface;
+ GError *error;
+
+ g_return_if_fail (manager->priv->connection != NULL);
+
+ error = NULL;
+ g_warn_if_fail (manager->priv->manager_reg_id == 0);
+ manager->priv->manager_reg_id = g_dbus_connection_register_object (manager->priv->connection,
+ manager->priv->object_path,
+ (GDBusInterfaceInfo *) &manager_interface_info,
+ &manager_interface_vtable,
+ manager,
+ NULL, /* user_data_free_func */
+ &error);
+ if (manager->priv->manager_reg_id == 0)
+ {
+ g_warning ("%s: Error registering manager at %s: %s",
+ G_STRLOC,
+ manager->priv->object_path,
+ error->message);
+ g_error_free (error);
+ }
+
+ g_hash_table_iter_init (&iter, manager->priv->map_object_path_to_data);
+ while (g_hash_table_iter_next (&iter, (gpointer) &object_path, (gpointer) &data))
+ {
+ g_hash_table_iter_init (&iface_iter, data->map_iface_name_to_iface);
+ while (g_hash_table_iter_next (&iface_iter, NULL, (gpointer) &iface))
+ {
+ g_warn_if_fail (g_dbus_interface_skeleton_get_connection (iface) == NULL);
+ error = NULL;
+ if (!g_dbus_interface_skeleton_export (iface,
+ manager->priv->connection,
+ object_path,
+ &error))
+ {
+ g_warning ("%s: Error registering object at %s with interface %s: %s",
+ G_STRLOC,
+ object_path,
+ g_dbus_interface_skeleton_get_info (iface)->name,
+ error->message);
+ g_error_free (error);
+ }
+ }
+ }
+}
+
+static void
+unexport_all (GDBusObjectManagerServer *manager, gboolean only_manager)
+{
+ GHashTableIter iter;
+ RegistrationData *data;
+ GHashTableIter iface_iter;
+ GDBusInterfaceSkeleton *iface;
+
+ g_return_if_fail (manager->priv->connection != NULL);
+
+ g_warn_if_fail (manager->priv->manager_reg_id > 0);
+ if (manager->priv->manager_reg_id > 0)
+ {
+ g_warn_if_fail (g_dbus_connection_unregister_object (manager->priv->connection,
+ manager->priv->manager_reg_id));
+ manager->priv->manager_reg_id = 0;
+ }
+ if (only_manager)
+ goto out;
+
+ g_hash_table_iter_init (&iter, manager->priv->map_object_path_to_data);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &data))
+ {
+ g_hash_table_iter_init (&iface_iter, data->map_iface_name_to_iface);
+ while (g_hash_table_iter_next (&iface_iter, NULL, (gpointer) &iface))
+ {
+ g_warn_if_fail (g_dbus_interface_skeleton_get_connection (iface) != NULL);
+ g_dbus_interface_skeleton_unexport (iface);
+ }
+ }
+ out:
+ ;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */