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);
        }
}
示例#2
0
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);
}