static void gupnp_network_manager_dispose (GObject *object) { GUPnPNetworkManager *manager; GUPnPNetworkManagerPrivate *priv; GObjectClass *object_class; manager = GUPNP_NETWORK_MANAGER (object); priv = manager->priv; if (manager->priv->idle_context_creation_src) { g_source_destroy (manager->priv->idle_context_creation_src); manager->priv->idle_context_creation_src = NULL; } if (priv->manager_proxy != NULL) { g_object_unref (priv->manager_proxy); priv->manager_proxy = NULL; } g_list_free_full (priv->nm_devices, (GDestroyNotify) nm_device_unref); if (priv->cancellable != NULL) { g_cancellable_cancel (priv->cancellable); g_object_unref (priv->cancellable); priv->cancellable = NULL; } g_clear_object (&(priv->system_bus)); /* Call super */ object_class = G_OBJECT_CLASS (gupnp_network_manager_parent_class); object_class->dispose (object); }
static void on_device_added (DBusGProxy *proxy, char *device_path, gpointer user_data) { add_device_from_path (device_path, GUPNP_NETWORK_MANAGER (user_data)); }
static void device_proxy_new_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) { GUPnPNetworkManager *manager; GDBusProxy *device_proxy; NMDevice *nm_device = NULL; NMDeviceType type; GVariant *value; GError *error; error = NULL; device_proxy = g_dbus_proxy_new_for_bus_finish (res, &error); if (G_UNLIKELY (error != NULL)) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) g_message ("Failed to create D-Bus proxy: %s", error->message); g_error_free (error); goto done; } manager = GUPNP_NETWORK_MANAGER (user_data); value = g_dbus_proxy_get_cached_property (device_proxy, "DeviceType"); if (G_UNLIKELY (value == NULL)) { goto done; } if (G_UNLIKELY (!g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32))) { g_variant_unref (value); goto done; } type = g_variant_get_uint32 (value); g_variant_unref (value); nm_device = nm_device_new (manager, device_proxy); if (type == NM_DEVICE_TYPE_WIFI) { const char *path; path = g_dbus_proxy_get_object_path (nm_device->proxy); g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, NULL, DBUS_SERVICE_NM, path, WIFI_INTERFACE, manager->priv->cancellable, wifi_proxy_new_cb, nm_device_ref (nm_device)); } else use_new_device (manager, nm_device); done: g_clear_pointer (&nm_device, (GDestroyNotify) nm_device_unref); g_clear_object (&device_proxy); }
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 get_devices_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) { GUPnPNetworkManager *manager; GVariant *ret; GVariantIter *device_iter; char* device_path; GError *error = NULL; manager = GUPNP_NETWORK_MANAGER (user_data); ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error); if (error != NULL) { g_warning ("Error fetching list of devices: %s", error->message); g_error_free (error); return; } g_variant_get_child (ret, 0, "ao", &device_iter); while (g_variant_iter_loop (device_iter, "o", &device_path)) 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, user_data); g_variant_iter_free (device_iter); g_variant_unref (ret); }
static void gupnp_network_manager_constructed (GObject *object) { GUPnPNetworkManager *manager; GUPnPNetworkManagerPrivate *priv; GObjectClass *object_class; manager = GUPNP_NETWORK_MANAGER (object); priv = manager->priv; priv->nm_devices = NULL; init_network_manager (manager); schedule_loopback_context_creation (manager); /* Call super */ object_class = G_OBJECT_CLASS (gupnp_network_manager_parent_class); if (object_class->constructed != NULL) { object_class->constructed (object); } }
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); }
static void gupnp_network_manager_dispose (GObject *object) { GUPnPNetworkManagerPrivate *priv; GObjectClass *object_class; priv = GUPNP_NETWORK_MANAGER (object)->priv; if (priv->manager_proxy != NULL) { g_object_unref (priv->manager_proxy); priv->manager_proxy = NULL; } if (priv->nm_devices != NULL) { g_list_foreach (priv->nm_devices, (GFunc) nm_device_free, NULL); g_list_free (priv->nm_devices); priv->nm_devices = NULL; } /* Call super */ object_class = G_OBJECT_CLASS (gupnp_network_manager_parent_class); object_class->dispose (object); }
static void gupnp_network_manager_constructed (GObject *object) { GUPnPNetworkManager *manager; GUPnPNetworkManagerPrivate *priv; GObjectClass *object_class; manager = GUPNP_NETWORK_MANAGER (object); priv = manager->priv; priv->cancellable = g_cancellable_new (); priv->nm_devices = NULL; priv->system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL); init_network_manager (manager); schedule_loopback_context_creation (manager); /* Call super */ object_class = G_OBJECT_CLASS (gupnp_network_manager_parent_class); if (object_class->constructed != NULL) { object_class->constructed (object); } }
static void gupnp_network_manager_dispose (GObject *object) { GUPnPNetworkManager *manager; GUPnPNetworkManagerPrivate *priv; GObjectClass *object_class; manager = GUPNP_NETWORK_MANAGER (object); priv = manager->priv; if (manager->priv->idle_context_creation_src) { g_source_destroy (manager->priv->idle_context_creation_src); manager->priv->idle_context_creation_src = NULL; } if (priv->manager_proxy != NULL) { g_object_unref (priv->manager_proxy); priv->manager_proxy = NULL; } if (priv->nm_devices != NULL) { g_list_foreach (priv->nm_devices, (GFunc) nm_device_free, NULL); g_list_free (priv->nm_devices); priv->nm_devices = NULL; } if (priv->connection) { dbus_connection_close (priv->dbus_connection); dbus_g_connection_unref (priv->connection); } priv->connection = NULL; /* Call super */ object_class = G_OBJECT_CLASS (gupnp_network_manager_parent_class); object_class->dispose (object); }