static void on_manager_signal (GDBusProxy *proxy, char *sender_name, char *signal_name, GVariant *parameters, gpointer user_data) { GUPnPNetworkManager *manager; manager = GUPNP_NETWORK_MANAGER (user_data); if (g_strcmp0 (signal_name, "DeviceAdded") == 0) { char *device_path = NULL; g_variant_get_child (parameters, 0, "o", &device_path); if (G_UNLIKELY (device_path == NULL)) return; g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, NULL, DBUS_SERVICE_NM, device_path, DEVICE_INTERFACE, manager->priv->cancellable, device_proxy_new_cb, manager); g_free (device_path); } else if (g_strcmp0 (signal_name, "DeviceRemoved") == 0) { GList *device_node; NMDevice *nm_device; GUPnPNetworkManagerPrivate *priv; char *device_path = NULL; g_variant_get_child (parameters, 0, "o", &device_path); if (G_UNLIKELY (device_path == NULL)) return; priv = manager->priv; device_node = g_list_find_custom ( priv->nm_devices, device_path, (GCompareFunc) compare_device_path); if (G_UNLIKELY (device_node == NULL)) { g_free (device_path); return; } nm_device = (NMDevice *) device_node->data; priv->nm_devices = g_list_remove (priv->nm_devices, nm_device); nm_device_free (nm_device); g_free (device_path); } }
static void on_device_removed (DBusGProxy *proxy, char *device_path, gpointer user_data) { GList *device_node; NMDevice *nm_device; GUPnPNetworkManagerPrivate *priv; priv = GUPNP_NETWORK_MANAGER (user_data)->priv; device_node = g_list_find_custom (priv->nm_devices, device_path, (GCompareFunc) compare_device_path); if (G_UNLIKELY (device_node == NULL)) return; nm_device = (NMDevice *) device_node->data; priv->nm_devices = g_list_remove (priv->nm_devices, nm_device); nm_device_free (nm_device); }