static void mtn_connman_service_g_signal (GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters) { MtnConnmanService *service = MTN_CONNMAN_SERVICE (proxy); if (!service->priv->properties) return; if (g_strcmp0 (signal_name, "PropertyChanged") == 0) { char *key; GVariant *value; g_variant_get (parameters, "(sv)", &key, &value); if (g_strcmp0 (key, "PassphraseRequested") == 0) { /* get the new Passphrase value before emitting signal * (because there is no signal for Passphrase) */ g_dbus_proxy_call (proxy, "GetProperties", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, _get_properties_for_passphrase_cb, NULL); } else { mtn_connman_service_handle_new_property (service, key, value); } } }
static void _get_properties_for_passphrase_cb (GObject *obj, GAsyncResult *res, gpointer user_data) { MtnConnmanService *service; GError *error; GVariant *var; service = MTN_CONNMAN_SERVICE (obj); error = NULL; var = g_dbus_proxy_call_finish (G_DBUS_PROXY (obj), res, &error); if (!var) { g_warning ("Connman Service.GetProperties failed: %s", error->message); g_error_free (error); } else { GVariant *value; char *key; GVariantIter *iter; g_variant_get (var, "(a{sv})", &iter); while (g_variant_iter_next (iter, "{sv}", &key, &value)) { if (g_strcmp0 (key, "Passphrase") == 0 || g_strcmp0 (key, "PassphraseRequired") == 0) { mtn_connman_service_handle_new_property (service, key, value); } } g_variant_iter_free (iter); g_variant_unref (var); } }
static void mtn_connman_service_dispose (GObject *object) { MtnConnmanService *service; service = MTN_CONNMAN_SERVICE (object); if (service->priv->properties) { g_hash_table_unref (service->priv->properties); service->priv->properties = NULL; } G_OBJECT_CLASS (mtn_connman_service_parent_class)->dispose (object); }
static gboolean mtn_connman_service_initable_init_sync (GInitable *initable, GCancellable *cancellable, GError **error) { GInitableIface *iface_class, *parent_iface_class; GVariant *var, *value; GVariantIter *iter; char *key; MtnConnmanService *service; service = MTN_CONNMAN_SERVICE (initable); /* Chain up the old method */ iface_class = G_INITABLE_GET_IFACE (initable); parent_iface_class = g_type_interface_peek_parent (iface_class); if (!parent_iface_class->init (initable, cancellable, error)) { return FALSE; } g_signal_connect (service, "notify::g-name-owner", G_CALLBACK (_name_owner_notify_cb), NULL); var = g_dbus_proxy_call_sync (G_DBUS_PROXY (service), "GetProperties", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, error); if (!var) { g_debug ("Service has no properties?!"); return FALSE; } g_variant_get (var, "(a{sv})", &iter); while (g_variant_iter_next (iter, "{sv}", &key, &value)) { g_debug ("Got Service property %s", key); g_hash_table_insert (service->priv->properties, key, value); } g_variant_iter_free (iter); g_variant_unref (var); return TRUE; }
static void _get_properties_cb (GObject *obj, GAsyncResult *res, gpointer user_data) { MtnConnmanService *service; GError *error; GVariant *var; InitData *data; service = MTN_CONNMAN_SERVICE (obj); data = (InitData*)user_data; error = NULL; var = g_dbus_proxy_call_finish (G_DBUS_PROXY (obj), res, &error); if (!var) { g_warning ("Initial Service.GetProperties() failed: %s\n", error->message); g_error_free (error); } else { GVariant *value; char *key; GVariantIter *iter; g_variant_get (var, "(a{sv})", &iter); while (g_variant_iter_next (iter, "{sv}", &key, &value)) { g_hash_table_insert (service->priv->properties, key, value); } g_variant_iter_free (iter); g_variant_unref (var); } g_simple_async_result_complete_in_idle (data->res); init_data_free (data); }
MtnConnmanService * mtn_connman_service_new_finish (GAsyncResult *res, GError **error) { return MTN_CONNMAN_SERVICE (g_dbus_proxy_new_finish (res, error)); }