From nobody Mon Feb 9 17:58:09 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1557515597; cv=none; d=zoho.com; s=zohoarc; b=V9LEoezDZeIXKT05PuO6wlkxMNHou31LKoioWZ+3CltURiEqAd8HWhx9b6gliQEh5ydaOFr0nWIiUGlTgOZGHuPAn1PouVtjrsVevDjtLY34ftYICSA66v4ZhXqfvfCpYI+4KzEptAHZBZ0GVQ1C2nrBxWNNLBQ/a7ma9HJ37Y4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1557515597; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=tlgu34V1BmEPhCSI2Fegf1/U8Ec/QU3r5k0cJ3yV6qk=; b=cS4th/sfWuQUHV2K2PujwUMVja9V9N77ot06nzeioMZ/eVZGbhO7/algrTu28HuRKkYkbOShVVSS5iFcwigkkqficL6xx+MKzj3khh4J+D6wZnhuZi0CpktZQZkPlkd/8dMOrCdDG8OGXleETEcTMxWMvQSPOclm2C5/ymi5mzo= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1557515597190548.8539337109314; Fri, 10 May 2019 12:13:17 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8A2B53082B02; Fri, 10 May 2019 19:13:15 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 60CA4608C2; Fri, 10 May 2019 19:13:15 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 053AA18052E1; Fri, 10 May 2019 19:13:15 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x4AJDDMj003741 for ; Fri, 10 May 2019 15:13:13 -0400 Received: by smtp.corp.redhat.com (Postfix) id 62F9B6015A; Fri, 10 May 2019 19:13:13 +0000 (UTC) Received: from laerte.brq.redhat.com (unknown [10.43.2.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8962C60126; Fri, 10 May 2019 19:13:08 +0000 (UTC) From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= To: libvir-list@redhat.com Date: Fri, 10 May 2019 21:12:45 +0200 Message-Id: <20190510191245.32567-9-fidencio@redhat.com> In-Reply-To: <20190510191245.32567-1-fidencio@redhat.com> References: <20190510191245.32567-1-fidencio@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Cc: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= Subject: [libvirt] [glib PATCH 8/8] gobject: Wrap virConnectGetDomainCapabilities() X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Fri, 10 May 2019 19:13:16 +0000 (UTC) In order to do so, 3 new APIs have been added: - gvir_connection_get_domain_capabilities(); - gvir_connection_get_domain_capabilities_async(); - gvir_connection_get_domain_capabilities_finish(); The returned object is a GVirConfigDomainCapabilities, from which consumers will be able to access a few other objects representing the XML returned by virConnectGetDomainCapabilities(). Signed-off-by: Fabiano Fid=C3=AAncio --- libvirt-gobject/libvirt-gobject-connection.c | 168 +++++++++++++++++++ libvirt-gobject/libvirt-gobject-connection.h | 22 +++ libvirt-gobject/libvirt-gobject.sym | 8 + 3 files changed, 198 insertions(+) diff --git a/libvirt-gobject/libvirt-gobject-connection.c b/libvirt-gobject= /libvirt-gobject-connection.c index e84ca6d..8e7bf5e 100644 --- a/libvirt-gobject/libvirt-gobject-connection.c +++ b/libvirt-gobject/libvirt-gobject-connection.c @@ -2077,6 +2077,174 @@ GVirNodeInfo *gvir_connection_get_node_info(GVirCon= nection *conn, return ret; } =20 +/** + * gvir_connection_get_domain_capabilities: + * @conn: a #GVirConnection + * @emulatorbin: (allow-none): path to emulator + * @arch: (allow-none): domain architecture + * @machine: (allow-none): machine type + * @virttype: (allow-none): virtualization type + * @flags: extra flags; not used yet, so callers should always pass 0 + * @err: return location for any #GError + * + * Return value: (transfer full): a #GVirConfigDomainCapabilities or NULL. + * The return object should be unreffed with g_object_unref() when no long= er + * needed. + */ +GVirConfigDomainCapabilities * +gvir_connection_get_domain_capabilities(GVirConnection *conn, + const gchar *emulatorbin, + const gchar *arch, + const gchar *machine, + const gchar *virttype, + guint flags, + GError **err) +{ + GVirConfigDomainCapabilities *domain_caps; + gchar *domain_caps_xml; + + g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL); + g_return_val_if_fail(err =3D=3D NULL || *err =3D=3D NULL, NULL); + g_return_val_if_fail(conn->priv->conn, NULL); + + domain_caps_xml =3D virConnectGetDomainCapabilities(conn->priv->conn, + emulatorbin, + arch, + machine, + virttype, + flags); + if (domain_caps_xml =3D=3D NULL) { + gvir_set_error_literal(err, GVIR_CONNECTION_ERROR, + 0, + _("Unable to get domain capabilities")); + return NULL; + } + + domain_caps =3D gvir_config_domain_capabilities_new_from_xml(domain_ca= ps_xml, err); + free(domain_caps_xml); + + return domain_caps; +} + +typedef struct { + gchar *emulatorbin; + gchar *arch; + gchar *machine; + gchar *virttype; + guint flags; +} GetDomainCapabilitiesData; + +static void get_domain_capabilities_data_free(GetDomainCapabilitiesData *d= ata) +{ + g_free(data->emulatorbin); + g_free(data->arch); + g_free(data->machine); + g_free(data->virttype); + g_slice_free(GetDomainCapabilitiesData, data); +} + +static void +gvir_connection_get_domain_capabilities_helper(GTask *task, + gpointer object, + gpointer task_data G_GNUC_U= NUSED, + GCancellable *cancellable G= _GNUC_UNUSED) +{ + GVirConnection *conn =3D GVIR_CONNECTION(object); + GetDomainCapabilitiesData *data; + GError *err =3D NULL; + GVirConfigDomainCapabilities *domain_caps; + + data =3D (GetDomainCapabilitiesData *)task_data; + + domain_caps =3D gvir_connection_get_domain_capabilities(conn, + data->emulatorbi= n, + data->arch, + data->machine, + data->virttype, + data->flags, + &err); + if (domain_caps =3D=3D NULL) { + g_task_return_error(task, err); + + return; + } + + g_task_return_pointer(task, domain_caps, g_object_unref); +} + +/** + * gvir_connection_get_domain_capabilities_async: + * @conn: a #GVirConnection + * @emulatorbin: (allow-none): path to emulator + * @arch: (allow-none): domain architecture + * @machine: (allow-none): machine type + * @virttype: (allow-none): virtualization type + * @flags: extra flags; not used yet, so callers should always pass 0 + * @cancellable: (allow-none)(transfer none): cancellation object + * @callback: (scope async): completion callback + * @user_data: (closure): opaque data for callback + */ +void gvir_connection_get_domain_capabilities_async(GVirConnection *conn, + const gchar *emulatorbi= n, + const gchar *arch, + const gchar *machine, + const gchar *virttype, + guint flags, + GCancellable *cancellab= le, + GAsyncReadyCallback cal= lback, + gpointer user_data) +{ + GTask *task; + GetDomainCapabilitiesData *data; + + g_return_if_fail(GVIR_IS_CONNECTION(conn)); + g_return_if_fail((cancellable =3D=3D NULL) || G_IS_CANCELLABLE(cancell= able)); + + data =3D g_slice_new0(GetDomainCapabilitiesData); + data->emulatorbin =3D g_strdup(emulatorbin); + data->arch =3D g_strdup(arch); + data->machine =3D g_strdup(machine); + data->virttype =3D g_strdup(virttype); + data->flags =3D flags; + + task =3D g_task_new(G_OBJECT(conn), + cancellable, + callback, + user_data); + g_task_set_source_tag(task, + gvir_connection_get_domain_capabilities_async); + g_task_set_task_data(task, + data, + (GDestroyNotify)get_domain_capabilities_data_free= ); + g_task_run_in_thread(task, + gvir_connection_get_domain_capabilities_helper); + g_object_unref(task); +} + +/** + * gvir_connection_get_domain_capabilities_finish: + * @conn: a #GVirConnection + * @result: (transfer none): async method result + * + * Return value: (transfer full): a #GVirConfigDomainCapabilities or NULL. + * The returned object should be unreffed with g_object_unref() when no + * longer needed. + */ +GVirConfigDomainCapabilities * +gvir_connection_get_domain_capabilities_finish(GVirConnection *conn, + GAsyncResult *result, + GError **err) +{ + g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL); + g_return_val_if_fail(g_task_is_valid(result, G_OBJECT(conn)), + NULL); + g_return_val_if_fail(g_task_get_source_tag(G_TASK(result)) =3D=3D + gvir_connection_get_domain_capabilities_async, + NULL); + + return g_task_propagate_pointer(G_TASK(result), err); +} + /** * gvir_connection_get_capabilities: * @conn: a #GVirConnection diff --git a/libvirt-gobject/libvirt-gobject-connection.h b/libvirt-gobject= /libvirt-gobject-connection.h index f3d2cb8..9557fde 100644 --- a/libvirt-gobject/libvirt-gobject-connection.h +++ b/libvirt-gobject/libvirt-gobject-connection.h @@ -255,6 +255,28 @@ gboolean gvir_connection_restore_domain_from_file_finish(GVirConnection *conn, GAsyncResult *result, GError **err); + +GVirConfigDomainCapabilities *gvir_connection_get_domain_capabilities(GVir= Connection *conn, + cons= t gchar *emulatorbin, + cons= t gchar *arch, + cons= t gchar *machine, + cons= t gchar *virttype, + guin= t flags, + GErr= or **err); +void gvir_connection_get_domain_capabilities_async(GVirConnection *conn, + const gchar *emulatorbi= n, + const gchar *arch, + const gchar *machine, + const gchar *virttype, + guint flags, + GCancellable *cancellab= le, + GAsyncReadyCallback cal= lback, + gpointer user_data); +GVirConfigDomainCapabilities * +gvir_connection_get_domain_capabilities_finish(GVirConnection *conn, + GAsyncResult *result, + GError **err); + G_END_DECLS =20 #endif /* __LIBVIRT_GOBJECT_CONNECTION_H__ */ diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-= gobject.sym index fe5bffe..b663906 100644 --- a/libvirt-gobject/libvirt-gobject.sym +++ b/libvirt-gobject/libvirt-gobject.sym @@ -311,4 +311,12 @@ LIBVIRT_GOBJECT_0.2.3 { gvir_domain_set_time_finish; } LIBVIRT_GOBJECT_0.2.2; =20 + +LIBVIRT_GOBJECT_2.0.1 { + global: + gvir_connection_get_domain_capabilities; + gvir_connection_get_domain_capabilities_async; + gvir_connection_get_domain_capabilities_finish; +} LIBVIRT_GOBJECT_0.2.3; + # .... define new API here using predicted next version number .... --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list