static void on_nm_device_added (NMClient *client, NMDevice *device, gpointer user_data) { Network *self = user_data; Netinterface *iface; CockpitNetworkNetinterface *cockpit_iface; const char *iface_name; Daemon *daemon; gs_unref_object CockpitObjectSkeleton *object = NULL; gs_free char *path = NULL; g_assert (client != NULL); g_assert (self != NULL); iface_name = nm_device_get_iface (device); if (!iface_name) return; iface = g_hash_table_lookup (self->ifname_to_netinterface, iface_name); if (iface != NULL) return; iface = (Netinterface*)netinterface_new (self, iface_name); cockpit_iface = COCKPIT_NETWORK_NETINTERFACE (iface); g_hash_table_insert (self->ifname_to_netinterface, g_strdup (iface_name), iface); path = utils_generate_object_path ("/com/redhat/Cockpit/Network", iface_name); object = cockpit_object_skeleton_new (path); daemon = network_get_daemon (self); cockpit_object_skeleton_set_network_netinterface (object, cockpit_iface); g_dbus_object_manager_server_export (daemon_get_object_manager (daemon), G_DBUS_OBJECT_SKELETON (object)); g_signal_connect (device, "state-changed", G_CALLBACK(on_nm_device_state_changed), self); synchronize_device (self, device); }
static void user_added (ActUserManager *um, ActUser *user, Accounts *accounts) { if (act_user_is_system_account (user)) return; GDBusObjectManagerServer *object_manager_server = daemon_get_object_manager (daemon_get ()); CockpitAccount *acc = account_new (); account_update (ACCOUNT (acc), user); gs_free gchar *path = utils_generate_object_path ("/com/redhat/Cockpit/Accounts", cockpit_account_get_user_name (acc)); gs_unref_object CockpitObjectSkeleton *obj = cockpit_object_skeleton_new (path); cockpit_object_skeleton_set_account (obj, acc); g_dbus_object_manager_server_export_uniquely (object_manager_server, G_DBUS_OBJECT_SKELETON (obj)); g_hash_table_insert (accounts->act_user_to_account, user, ACCOUNT(acc)); }
static void daemon_constructed (GObject *_object) { Daemon *daemon = DAEMON (_object); CockpitManager *manager; CockpitMachines *machines; CockpitResourceMonitor *monitor; CockpitMultiResourceMonitor *multi_monitor; CockpitRealms *realms; CockpitServices *services; CockpitJournal *journal; CockpitAccounts *accounts; CockpitStorageManager *storage_manager; CockpitObjectSkeleton *object = NULL; g_assert (_daemon_instance == NULL); _daemon_instance = daemon; daemon->system_bus_proxy = g_dbus_proxy_new_sync (daemon->connection, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, NULL, "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", NULL, NULL); g_assert (daemon->system_bus_proxy != NULL); daemon->object_manager = g_dbus_object_manager_server_new ("/com/redhat/Cockpit"); /* /com/redhat/Cockpit/Machines */ machines = machines_new (daemon_get_object_manager (daemon)); daemon->machines = MACHINES (machines); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/Machines"); cockpit_object_skeleton_set_machines (object, machines); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (machines); g_object_unref (object); /* /com/redhat/Cockpit/Manager */ manager = manager_new (daemon); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/Manager"); cockpit_object_skeleton_set_manager (object, manager); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (manager); g_object_unref (object); /* /com/redhat/Cockpit/CpuMonitor */ monitor = cpu_monitor_new (daemon); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/CpuMonitor"); cockpit_object_skeleton_set_resource_monitor (object, monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (monitor); g_object_unref (object); /* /com/redhat/Cockpit/MemoryMonitor */ monitor = memory_monitor_new (daemon); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/MemoryMonitor"); cockpit_object_skeleton_set_resource_monitor (object, monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (monitor); g_object_unref (object); /* /com/redhat/Cockpit/NetworkMonitor */ monitor = network_monitor_new (daemon); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/NetworkMonitor"); cockpit_object_skeleton_set_resource_monitor (object, monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (monitor); g_object_unref (object); /* /com/redhat/Cockpit/DiskIOMonitor */ monitor = disk_io_monitor_new (daemon); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/DiskIOMonitor"); cockpit_object_skeleton_set_resource_monitor (object, monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (monitor); g_object_unref (object); /* /com/redhat/Cockpit/LxcMonitor */ multi_monitor = cgroup_monitor_new (G_OBJECT (daemon)); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/LxcMonitor"); cockpit_object_skeleton_set_multi_resource_monitor (object, multi_monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (multi_monitor); g_object_unref (object); /* /com/redhat/Cockpit/NetdevMonitor */ multi_monitor = netdev_monitor_new (G_OBJECT (daemon)); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/NetdevMonitor"); cockpit_object_skeleton_set_multi_resource_monitor (object, multi_monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (multi_monitor); g_object_unref (object); /* /com/redhat/Cockpit/Realms */ realms = realms_new (daemon); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/Realms"); cockpit_object_skeleton_set_realms (object, realms); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (realms); g_object_unref (object); /* /com/redhat/Cockpit/Services */ services = services_new (daemon); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/Services"); cockpit_object_skeleton_set_services (object, services); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (services); g_object_unref (object); /* /com/redhat/Cockpit/Journal */ journal = journal_new (); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/Journal"); cockpit_object_skeleton_set_journal (object, journal); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (journal); /* /com/redhat/Cockpit/Accounts */ accounts = accounts_new (); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/Accounts"); cockpit_object_skeleton_set_accounts (object, accounts); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (accounts); g_object_unref (object); /* /com/redhat/Cockpit/Storage/Manager */ storage_manager = storage_manager_new (daemon); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/Storage/Manager"); cockpit_object_skeleton_set_storage_manager (object, storage_manager); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (storage_manager); g_object_unref (object); daemon->storage_provider = storage_provider_new (daemon); /* Export the ObjectManager */ g_dbus_object_manager_server_set_connection (daemon->object_manager, daemon->connection); daemon->tick_timeout_id = g_timeout_add_seconds (1, on_timeout, daemon); if (G_OBJECT_CLASS (daemon_parent_class)->constructed != NULL) G_OBJECT_CLASS (daemon_parent_class)->constructed (_object); }
static void daemon_constructed (GObject *_object) { Daemon *daemon = DAEMON (_object); CockpitResourceMonitor *monitor; CockpitMultiResourceMonitor *multi_monitor; CockpitStorageManager *storage_manager; CockpitObjectSkeleton *object = NULL; g_assert (_daemon_instance == NULL); _daemon_instance = daemon; g_debug ("creating bus proxy"); daemon->system_bus_proxy = g_dbus_proxy_new_sync (daemon->connection, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, NULL, "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", NULL, NULL); g_assert (daemon->system_bus_proxy != NULL); g_debug ("creating object manager"); daemon->object_manager = g_dbus_object_manager_server_new ("/com/redhat/Cockpit"); /* /com/redhat/Cockpit/NetworkMonitor */ monitor = network_monitor_new (daemon); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/NetworkMonitor"); cockpit_object_skeleton_set_resource_monitor (object, monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (monitor); g_object_unref (object); g_debug ("exported network monitor"); /* /com/redhat/Cockpit/DiskIOMonitor */ monitor = disk_io_monitor_new (daemon); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/DiskIOMonitor"); cockpit_object_skeleton_set_resource_monitor (object, monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (monitor); g_object_unref (object); g_debug ("exported disk io monitor"); /* /com/redhat/Cockpit/LxcMonitor */ multi_monitor = cgroup_monitor_new (G_OBJECT (daemon)); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/LxcMonitor"); cockpit_object_skeleton_set_multi_resource_monitor (object, multi_monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (multi_monitor); g_object_unref (object); g_debug ("exported lxc monitor"); /* /com/redhat/Cockpit/NetdevMonitor */ multi_monitor = netdev_monitor_new (G_OBJECT (daemon)); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/NetdevMonitor"); cockpit_object_skeleton_set_multi_resource_monitor (object, multi_monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (multi_monitor); g_object_unref (object); g_debug ("exported net dev monitor"); /* /com/redhat/Cockpit/BlockdevMonitor */ multi_monitor = blockdev_monitor_new (G_OBJECT (daemon)); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/BlockdevMonitor"); cockpit_object_skeleton_set_multi_resource_monitor (object, multi_monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (multi_monitor); g_object_unref (object); g_debug ("exported block dev monitor"); /* /com/redhat/Cockpit/MountMonitor */ multi_monitor = mount_monitor_new (G_OBJECT (daemon)); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/MountMonitor"); cockpit_object_skeleton_set_multi_resource_monitor (object, multi_monitor); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (multi_monitor); g_object_unref (object); g_debug ("exported mount monitor"); /* /com/redhat/Cockpit/Storage/Manager */ storage_manager = storage_manager_new (daemon); object = cockpit_object_skeleton_new ("/com/redhat/Cockpit/Storage/Manager"); cockpit_object_skeleton_set_storage_manager (object, storage_manager); g_dbus_object_manager_server_export (daemon->object_manager, G_DBUS_OBJECT_SKELETON (object)); g_object_unref (storage_manager); g_object_unref (object); g_debug ("exported storage manager"); daemon->storage_provider = storage_provider_new (daemon); /* Export the ObjectManager */ g_dbus_object_manager_server_set_connection (daemon->object_manager, daemon->connection); daemon->tick_timeout_id = g_timeout_add_seconds (1, on_timeout, daemon); g_debug ("daemon constructed"); if (G_OBJECT_CLASS (daemon_parent_class)->constructed != NULL) G_OBJECT_CLASS (daemon_parent_class)->constructed (_object); }
static void provider_update_jobs (StorageProvider *provider) { GDBusObjectManagerServer *object_manager; GList *udisks_objects; GList *lvm_objects; GList *all_objects; GList *wanted; GList *added, *removed; GList *l; object_manager = G_DBUS_OBJECT_MANAGER_SERVER (daemon_get_object_manager (provider->daemon)); udisks_objects = g_dbus_object_manager_get_objects (udisks_client_get_object_manager (provider->udisks_client)); lvm_objects = g_dbus_object_manager_get_objects (provider->lvm_objman); all_objects = g_list_concat (udisks_objects, lvm_objects); wanted = NULL; for (l = all_objects; l != NULL; l = l->next) { if (!UDISKS_IS_OBJECT (l->data)) continue; UDisksObject *object = UDISKS_OBJECT (l->data); UDisksJob *job; job = udisks_object_peek_job (object); if (job == NULL) continue; const gchar *operation = udisks_job_get_operation (job); if (strcmp (operation, "format-mkfs") != 0 && strcmp (operation, "format-erase") != 0 && strcmp (operation, "lvm-vg-empty-device") != 0) continue; wanted = g_list_prepend (wanted, g_object_ref (job)); } wanted = g_list_sort (wanted, (GCompareFunc)_udisks_job_compare_func); provider->jobs = g_list_sort (provider->jobs, (GCompareFunc)_udisks_job_compare_func); diff_sorted_lists (provider->jobs, wanted, (GCompareFunc)_udisks_job_compare_func, &added, &removed, NULL); for (l = removed; l != NULL; l = l->next) { UDisksJob *job = UDISKS_JOB (l->data); CockpitJob *object; object = g_hash_table_lookup (provider->hash_job_to_storage_job, job); if (object == NULL) { g_warning ("No object for job %p", job); } else { g_warn_if_fail (g_dbus_object_manager_server_unexport (object_manager, g_dbus_object_get_object_path (G_DBUS_OBJECT (object)))); g_hash_table_remove (provider->hash_job_to_storage_job, job); } provider->jobs = g_list_remove (provider->jobs, job); g_object_unref (job); } for (l = added; l != NULL; l = l->next) { UDisksJob *job = UDISKS_JOB (l->data); CockpitObjectSkeleton *object; CockpitJob *cockpit_job; gchar *object_path; object_path = utils_generate_object_path ("/com/redhat/Cockpit/Jobs", udisks_job_get_operation (job)); cockpit_job = storage_job_new (provider, job); object = cockpit_object_skeleton_new (object_path); cockpit_object_skeleton_set_job (object, cockpit_job); g_object_unref (cockpit_job); g_free (object_path); g_warn_if_fail (g_hash_table_lookup (provider->hash_job_to_storage_job, job) == NULL); g_hash_table_insert (provider->hash_job_to_storage_job, g_object_ref (job), object); g_dbus_object_manager_server_export_uniquely (object_manager, G_DBUS_OBJECT_SKELETON (object)); provider->jobs = g_list_prepend (provider->jobs, g_object_ref (job)); } g_list_free (added); g_list_free (removed); g_list_free_full (all_objects, g_object_unref); g_list_free_full (wanted, g_object_unref); }