static void print_server(GDBusProxy *proxy) { char **props, **itr; char *nameowner; nameowner = g_dbus_proxy_get_name_owner(proxy); if (!nameowner) { puts("Server is not running."); return; } printf("Server at %s\n", nameowner); props = g_dbus_proxy_get_cached_property_names(proxy); if (!props) return; for (itr = props; *itr != NULL; itr++) { GVariant *value = g_dbus_proxy_get_cached_property(proxy, *itr); char *str = g_variant_print(value, TRUE); printf("\t%s = %s\n", *itr, str); g_variant_unref(value); g_free(str); } g_strfreev(props); g_free(nameowner); }
static void add_interface (JsonBuilder *builder, GDBusInterface *interface, GVariant *changed_properties) { gchar *s; json_builder_set_member_name (builder, g_dbus_proxy_get_interface_name (G_DBUS_PROXY (interface))); json_builder_begin_object (builder); if (changed_properties == NULL) { gchar **properties; guint n; properties = g_dbus_proxy_get_cached_property_names (G_DBUS_PROXY (interface)); for (n = 0; properties != NULL && properties[n] != NULL; n++) { const gchar *property_name = properties[n]; GVariant *value; value = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (interface), property_name); if (value != NULL) { s = g_strconcat ("dbus_prop_", property_name, NULL); json_builder_set_member_name (builder, s); g_free (s); _json_builder_add_gvariant (builder, value); g_variant_unref (value); } } g_strfreev (properties); if (properties == NULL) { json_builder_set_member_name (builder, "HackEmpty"); json_builder_add_string_value (builder, "HackEmpty"); } } else { GVariantIter iter; const gchar *property_name; GVariant *value; g_variant_iter_init (&iter, changed_properties); while (g_variant_iter_next (&iter, "{&sv}", &property_name, &value)) { s = g_strconcat ("dbus_prop_", property_name, NULL); json_builder_set_member_name (builder, property_name); g_free (s); _json_builder_add_gvariant (builder, value); g_variant_unref (value); } } json_builder_end_object (builder); }
static void printProperties (GDBusProxy *proxy) { gchar **property_names; guint n; debug(" properties:\n"); property_names = g_dbus_proxy_get_cached_property_names (proxy); for (n = 0; property_names != NULL && property_names[n] != NULL; n++) { const gchar *key = property_names[n]; GVariant *value; gchar *value_str; value = g_dbus_proxy_get_cached_property (proxy, key); value_str = g_variant_print (value, TRUE); debug(" %s -> %s\n", key, value_str); g_variant_unref (value); g_free (value_str); } g_strfreev (property_names); }
static void on_bss_proxy_acquired (GDBusProxy *proxy, GAsyncResult *result, gpointer user_data) { NMSupplicantInterface *self; NMSupplicantInterfacePrivate *priv; gs_free_error GError *error = NULL; gs_strfreev char **properties = NULL; gs_unref_variant GVariant *props = NULL; GVariantBuilder builder; char **iter; if (!g_async_initable_init_finish (G_ASYNC_INITABLE (proxy), result, &error)) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { nm_log_dbg (LOGD_SUPPLICANT, "Failed to acquire BSS proxy: (%s)", error->message); g_hash_table_remove (NM_SUPPLICANT_INTERFACE_GET_PRIVATE (user_data)->bss_proxies, g_dbus_proxy_get_object_path (proxy)); } return; } self = NM_SUPPLICANT_INTERFACE (user_data); priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self); g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); iter = properties = g_dbus_proxy_get_cached_property_names (proxy); while (iter && *iter) { GVariant *copy = g_dbus_proxy_get_cached_property (proxy, *iter); g_variant_builder_add (&builder, "{sv}", *iter++, copy); g_variant_unref (copy); } props = g_variant_builder_end (&builder); g_signal_emit (self, signals[NEW_BSS], 0, g_dbus_proxy_get_object_path (proxy), g_variant_ref_sink (props)); }
static gboolean do_delayed_print_server(gpointer data) { GDBusProxy *proxy = data; char **props; char *nameowner; nameowner = g_dbus_proxy_get_name_owner(proxy); if (!nameowner) { print_server(proxy); return FALSE; } g_free(nameowner); props = g_dbus_proxy_get_cached_property_names(proxy); if (!props) { g_timeout_add(1000, do_delayed_print_server, proxy); return FALSE; } g_strfreev(props); print_server(data); return FALSE; }