[libvirt] [libvirt-glib/libvirt-gconfig 00/17] Graphics: Introduce the new Remote and Local classes (and also implement a few missing methods).

While trying to use libvirt-gobject and libvirt-gconfig for accessing VMs and looking at their config, instead of using libvirt and parsing XML directly, I found out that a few methods have been missing and that libvirt-gconfig is not exactly thought for the "reading their config" use case (see more explanations on the 10th and 14th commits. This series, unfortunately, introduces an ABI breakage. Fabiano Fidêncio (17): gconfig: Implement gvir_config_domain_graphics_vnc_get_autoport() gconfig: Implement gvir_config_domain_graphics_spice_get_autoport() gconfig: Implement gvir_config_domain_graphics_rdp_get_autoport() gconfig: Implement gvir_config_domain_graphics_sdl_get_display() gconfig: Implement gvir_config_domain_graphics_sdl_get_fullscreen() gconfig: Implement gvir_config_domain_graphics_spice_get_tls_port() gconfig: Implement gvir_config_domain_graphics_spice_{get,set}_host() gconfig: Implement gvir_config_domain_graphics_vnc_{get,set}_host() gconfig: Implement gvir_config_domain_graphics_rdp_{get,set}_host() gconfig: Add GVirCofigDomainGraphicsRemote class gconfig: Adapt GVirConfigDomainGraphicsSpice to GVirConfigDomainGraphicsRemote gconfig: Adapt GVirConfigDomainGraphicsRdp to GVirConfigDomainGraphicsRemote gconfig: Adapt GVirConfigDomainGraphicsVnc to GVirConfigDomainGraphicsRemote gconfig: Add GVirCofigDomainGraphicsLocal class gconfig: Adapt GVirConfigDomainGraphicsSdl to GVirConfigDomainGraphicsLocal gconfig: Adapt GVirConfigDomainGraphicsDesktop to GVirConfigDomainGraphicsLocal gconfig,graphics: Avoid crash when gvir_config_object_new_from_xml() returns NULL libvirt-gconfig/Makefile.am | 4 + .../libvirt-gconfig-domain-graphics-desktop.c | 14 ++- .../libvirt-gconfig-domain-graphics-desktop.h | 4 +- .../libvirt-gconfig-domain-graphics-local.c | 97 +++++++++++++++++++ .../libvirt-gconfig-domain-graphics-local.h | 68 ++++++++++++++ .../libvirt-gconfig-domain-graphics-rdp.c | 32 ++++++- .../libvirt-gconfig-domain-graphics-rdp.h | 9 +- .../libvirt-gconfig-domain-graphics-remote.c | 103 +++++++++++++++++++++ .../libvirt-gconfig-domain-graphics-remote.h | 70 ++++++++++++++ .../libvirt-gconfig-domain-graphics-sdl.c | 19 +++- .../libvirt-gconfig-domain-graphics-sdl.h | 6 +- .../libvirt-gconfig-domain-graphics-spice.c | 40 +++++++- .../libvirt-gconfig-domain-graphics-spice.h | 10 +- .../libvirt-gconfig-domain-graphics-vnc.c | 32 ++++++- .../libvirt-gconfig-domain-graphics-vnc.h | 9 +- libvirt-gconfig/libvirt-gconfig.h | 2 + libvirt-gconfig/libvirt-gconfig.sym | 20 ++++ po/POTFILES.in | 2 + 18 files changed, 513 insertions(+), 28 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-local.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-local.h create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.h -- 2.5.0

For completeness and also because it's useful for libvirt-gconfig API's consumers who are interested on reading the guest configuration, like virt-viewer. Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c | 8 ++++++++ libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 10 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c index fc26bb9..96bbd74 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c @@ -92,6 +92,14 @@ void gvir_config_domain_graphics_vnc_set_socket(GVirConfigDomainGraphicsVnc *gra NULL); } +gboolean gvir_config_domain_graphics_vnc_get_autoport(GVirConfigDomainGraphicsVnc *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_VNC(graphics), FALSE); + + return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), + NULL, "autoport", FALSE); +} + void gvir_config_domain_graphics_vnc_set_autoport(GVirConfigDomainGraphicsVnc *graphics, gboolean autoport) { diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h index fe78621..1d7afec 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h @@ -66,6 +66,7 @@ const char *gvir_config_domain_graphics_vnc_get_socket(GVirConfigDomainGraphicsV void gvir_config_domain_graphics_vnc_set_socket(GVirConfigDomainGraphicsVnc *graphics, const char *socket); +gboolean gvir_config_domain_graphics_vnc_get_autoport(GVirConfigDomainGraphicsVnc *graphics); void gvir_config_domain_graphics_vnc_set_autoport(GVirConfigDomainGraphicsVnc *graphics, gboolean autoport); diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index f11f97a..a907aed 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -735,6 +735,7 @@ global: LIBVIRT_GCONFIG_0.2.4 { gvir_config_domain_graphics_spice_set_gl; + gvir_config_domain_graphics_vnc_get_autoport; gvir_config_domain_video_set_accel3d; } LIBVIRT_GCONFIG_0.2.2; -- 2.5.0

For completeness and also because it's useful for libvirt-gconfig API's consumers who are interested on reading the guest configuration, like virt-viewer. Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c | 8 ++++++++ libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 10 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c index 079ea27..3d44572 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -74,6 +74,14 @@ gvir_config_domain_graphics_spice_new_from_xml(const gchar *xml, return GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE(object); } +gboolean gvir_config_domain_graphics_spice_get_autoport(GVirConfigDomainGraphicsSpice *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), FALSE); + + return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), + NULL, "autoport", FALSE); +} + void gvir_config_domain_graphics_spice_set_autoport(GVirConfigDomainGraphicsSpice *graphics, gboolean autoport) { diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h index 25c132e..8c3b586 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h @@ -72,6 +72,7 @@ GVirConfigDomainGraphicsSpice *gvir_config_domain_graphics_spice_new(void); GVirConfigDomainGraphicsSpice *gvir_config_domain_graphics_spice_new_from_xml(const gchar *xml, GError **error); +gboolean gvir_config_domain_graphics_spice_get_autoport(GVirConfigDomainGraphicsSpice *graphics); void gvir_config_domain_graphics_spice_set_autoport(GVirConfigDomainGraphicsSpice *graphics, gboolean autoport); diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index a907aed..a9c45e6 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -734,6 +734,7 @@ global: } LIBVIRT_GCONFIG_0.2.1; LIBVIRT_GCONFIG_0.2.4 { + gvir_config_domain_graphics_spice_get_autoport; gvir_config_domain_graphics_spice_set_gl; gvir_config_domain_graphics_vnc_get_autoport; gvir_config_domain_video_set_accel3d; -- 2.5.0

For completeness and also because it's useful for libvirt-gconfig API's consumers who are interested on reading the guest configuration, like virt-viewer. Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c | 8 ++++++++ libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 10 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c index 7a2cb4d..4f6096e 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c @@ -73,6 +73,14 @@ gvir_config_domain_graphics_rdp_new_from_xml(const gchar *xml, return GVIR_CONFIG_DOMAIN_GRAPHICS_RDP(object); } +gboolean gvir_config_domain_graphics_rdp_get_autoport(GVirConfigDomainGraphicsRdp *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_RDP(graphics), FALSE); + + return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), + NULL, "autoport", FALSE); +} + void gvir_config_domain_graphics_rdp_set_autoport(GVirConfigDomainGraphicsRdp *graphics, gboolean autoport) { diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h index a048ff8..5cf93f0 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h @@ -62,6 +62,7 @@ GVirConfigDomainGraphicsRdp *gvir_config_domain_graphics_rdp_new(void); GVirConfigDomainGraphicsRdp *gvir_config_domain_graphics_rdp_new_from_xml(const gchar *xml, GError **error); +gboolean gvir_config_domain_graphics_rdp_get_autoport(GVirConfigDomainGraphicsRdp* graphics); void gvir_config_domain_graphics_rdp_set_autoport(GVirConfigDomainGraphicsRdp *graphics, gboolean autoport); diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index a9c45e6..100c174 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -734,6 +734,7 @@ global: } LIBVIRT_GCONFIG_0.2.1; LIBVIRT_GCONFIG_0.2.4 { + gvir_config_domain_graphics_rdp_get_autoport; gvir_config_domain_graphics_spice_get_autoport; gvir_config_domain_graphics_spice_set_gl; gvir_config_domain_graphics_vnc_get_autoport; -- 2.5.0

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c | 9 +++++++++ libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 11 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c index 1740494..d9e191e 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c @@ -93,6 +93,15 @@ void gvir_config_domain_graphics_sdl_set_display(GVirConfigDomainGraphicsSdl *gr NULL); } +const gchar *gvir_config_domain_graphics_sdl_get_display(GVirConfigDomainGraphicsSdl *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SDL(graphics), NULL); + + return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), + NULL, + "display"); +} + void gvir_config_domain_graphics_sdl_set_fullscreen(GVirConfigDomainGraphicsSdl *graphics, gboolean fullscreen) { diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h index 5110f1c..1b45649 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h @@ -63,6 +63,7 @@ GVirConfigDomainGraphicsSdl *gvir_config_domain_graphics_sdl_new_from_xml(const GError **error); void gvir_config_domain_graphics_sdl_set_xauthority(GVirConfigDomainGraphicsSdl *graphics, const gchar *path); +const gchar *gvir_config_domain_graphics_sdl_get_display(GVirConfigDomainGraphicsSdl *graphics); void gvir_config_domain_graphics_sdl_set_display(GVirConfigDomainGraphicsSdl *graphics, const gchar *disp); void gvir_config_domain_graphics_sdl_set_fullscreen(GVirConfigDomainGraphicsSdl *graphics, diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 100c174..a1dfe3d 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -735,6 +735,7 @@ global: LIBVIRT_GCONFIG_0.2.4 { gvir_config_domain_graphics_rdp_get_autoport; + gvir_config_domain_graphics_sdl_get_display; gvir_config_domain_graphics_spice_get_autoport; gvir_config_domain_graphics_spice_set_gl; gvir_config_domain_graphics_vnc_get_autoport; -- 2.5.0

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c | 10 ++++++++++ libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 12 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c index d9e191e..63d9bb3 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c @@ -113,3 +113,13 @@ void gvir_config_domain_graphics_sdl_set_fullscreen(GVirConfigDomainGraphicsSdl fullscreen, NULL); } + +gboolean gvir_config_domain_graphics_sdl_get_fullscreen(GVirConfigDomainGraphicsSdl *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SDL(graphics), FALSE); + + return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), + NULL, + "fullscreen", + FALSE); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h index 1b45649..f1b9842 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h @@ -66,6 +66,7 @@ void gvir_config_domain_graphics_sdl_set_xauthority(GVirConfigDomainGraphicsSdl const gchar *gvir_config_domain_graphics_sdl_get_display(GVirConfigDomainGraphicsSdl *graphics); void gvir_config_domain_graphics_sdl_set_display(GVirConfigDomainGraphicsSdl *graphics, const gchar *disp); +gboolean gvir_config_domain_graphics_sdl_get_fullscreen(GVirConfigDomainGraphicsSdl *graphics); void gvir_config_domain_graphics_sdl_set_fullscreen(GVirConfigDomainGraphicsSdl *graphics, gboolean fullscreen); diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index a1dfe3d..3beb1ed 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -736,6 +736,7 @@ global: LIBVIRT_GCONFIG_0.2.4 { gvir_config_domain_graphics_rdp_get_autoport; gvir_config_domain_graphics_sdl_get_display; + gvir_config_domain_graphics_sdl_get_fullscreen; gvir_config_domain_graphics_spice_get_autoport; gvir_config_domain_graphics_spice_set_gl; gvir_config_domain_graphics_vnc_get_autoport; -- 2.5.0

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c | 8 ++++++++ libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 10 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c index 3d44572..b781537 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -120,6 +120,14 @@ void gvir_config_domain_graphics_spice_set_port(GVirConfigDomainGraphicsSpice *g NULL); } +int gvir_config_domain_graphics_spice_get_tls_port(GVirConfigDomainGraphicsSpice *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), 0); + + return gvir_config_object_get_attribute_uint64(GVIR_CONFIG_OBJECT(graphics), + NULL, "tlsPort", 0); +} + void gvir_config_domain_graphics_spice_set_tls_port(GVirConfigDomainGraphicsSpice *graphics, int port) { diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h index 8c3b586..9703fdd 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h @@ -83,6 +83,7 @@ int gvir_config_domain_graphics_spice_get_port(GVirConfigDomainGraphicsSpice *gr void gvir_config_domain_graphics_spice_set_port(GVirConfigDomainGraphicsSpice *graphics, int port); +int gvir_config_domain_graphics_spice_get_tls_port(GVirConfigDomainGraphicsSpice *graphics); void gvir_config_domain_graphics_spice_set_tls_port(GVirConfigDomainGraphicsSpice *graphics, int port); diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 3beb1ed..be9887c 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -738,6 +738,7 @@ LIBVIRT_GCONFIG_0.2.4 { gvir_config_domain_graphics_sdl_get_display; gvir_config_domain_graphics_sdl_get_fullscreen; gvir_config_domain_graphics_spice_get_autoport; + gvir_config_domain_graphics_spice_get_tls_port; gvir_config_domain_graphics_spice_set_gl; gvir_config_domain_graphics_vnc_get_autoport; gvir_config_domain_video_set_accel3d; -- 2.5.0

For patches up to this one: Acked-by: Christophe Fergeau <cfergeau@redhat.com> You could have added a few more tests like this: diff --git a/tests/test-gconfig.c b/tests/test-gconfig.c index be55ef9..d78292c 100644 --- a/tests/test-gconfig.c +++ b/tests/test-gconfig.c @@ -466,6 +466,10 @@ static void test_domain_device_graphics(void) graphics = gvir_config_domain_graphics_spice_new(); gvir_config_domain_graphics_spice_set_port(graphics, 1234); g_assert_cmpint(gvir_config_domain_graphics_spice_get_port(graphics), ==, 1234); + gvir_config_domain_graphics_spice_set_autoport (graphics, TRUE); + g_assert_true(gvir_config_domain_graphics_spice_get_autoport(graphics)); + gvir_config_domain_graphics_spice_set_tls_port (graphics, 4321); + g_assert_cmpint(gvir_config_domain_graphics_spice_get_tls_port(graphics), ==, 4321); /* SPICE image compression configuration */ gvir_config_domain_graphics_spice_set_image_compression diff --git a/tests/xml/gconfig-domain-device-graphics.xml b/tests/xml/gconfig-domain-device-graphics.xml index 5d90c5c..bbfd0ae 100644 --- a/tests/xml/gconfig-domain-device-graphics.xml +++ b/tests/xml/gconfig-domain-device-graphics.xml @@ -1,6 +1,6 @@ <domain> <devices> - <graphics type="spice" port="1234"> + <graphics type="spice" port="1234" autoport="yes" tlsPort="4321"> <image compression="auto_lz"/> </graphics> </devices> but they are very basic, so maybe not worth having too many of these :) Christophe On Tue, Mar 22, 2016 at 11:04:42AM +0100, Fabiano Fidêncio wrote:
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c | 8 ++++++++ libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 10 insertions(+)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c index 3d44572..b781537 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -120,6 +120,14 @@ void gvir_config_domain_graphics_spice_set_port(GVirConfigDomainGraphicsSpice *g NULL); }
+int gvir_config_domain_graphics_spice_get_tls_port(GVirConfigDomainGraphicsSpice *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), 0); + + return gvir_config_object_get_attribute_uint64(GVIR_CONFIG_OBJECT(graphics), + NULL, "tlsPort", 0); +} + void gvir_config_domain_graphics_spice_set_tls_port(GVirConfigDomainGraphicsSpice *graphics, int port) { diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h index 8c3b586..9703fdd 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h @@ -83,6 +83,7 @@ int gvir_config_domain_graphics_spice_get_port(GVirConfigDomainGraphicsSpice *gr void gvir_config_domain_graphics_spice_set_port(GVirConfigDomainGraphicsSpice *graphics, int port);
+int gvir_config_domain_graphics_spice_get_tls_port(GVirConfigDomainGraphicsSpice *graphics); void gvir_config_domain_graphics_spice_set_tls_port(GVirConfigDomainGraphicsSpice *graphics, int port);
diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 3beb1ed..be9887c 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -738,6 +738,7 @@ LIBVIRT_GCONFIG_0.2.4 { gvir_config_domain_graphics_sdl_get_display; gvir_config_domain_graphics_sdl_get_fullscreen; gvir_config_domain_graphics_spice_get_autoport; + gvir_config_domain_graphics_spice_get_tls_port; gvir_config_domain_graphics_spice_set_gl; gvir_config_domain_graphics_vnc_get_autoport; gvir_config_domain_video_set_accel3d; -- 2.5.0
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

On Thu, Apr 21, 2016 at 12:12:19PM +0200, Christophe Fergeau wrote:
For patches up to this one:
Acked-by: Christophe Fergeau <cfergeau@redhat.com>
On second thought, the API added by the patches before this one becomes redundant and deprecated once the Remote/Local classes are introduced, so adding these now does not sound very useful. Christophe

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- .../libvirt-gconfig-domain-graphics-spice.c | 18 ++++++++++++++++++ .../libvirt-gconfig-domain-graphics-spice.h | 4 ++++ libvirt-gconfig/libvirt-gconfig.sym | 2 ++ 3 files changed, 24 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c index b781537..38ee3e6 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -181,3 +181,21 @@ void gvir_config_domain_graphics_spice_set_gl(GVirConfigDomainGraphicsSpice *gra gvir_config_object_replace_child_with_attribute_enum (GVIR_CONFIG_OBJECT(graphics), "gl", "enable", G_TYPE_BOOLEAN, gl); } + +const gchar *gvir_config_domain_graphics_spice_get_host(GVirConfigDomainGraphicsSpice *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), NULL); + + return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), + NULL, "listen"); +} + +void gvir_config_domain_graphics_spice_set_host(GVirConfigDomainGraphicsSpice *graphics, + const gchar *host) +{ + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics)); + + gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(graphics), + "listen", G_TYPE_STRING, host, + NULL); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h index 9703fdd..40d0e86 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h @@ -97,6 +97,10 @@ gvir_config_domain_graphics_spice_get_image_compression void gvir_config_domain_graphics_spice_set_gl(GVirConfigDomainGraphicsSpice *graphics, gboolean gl); +const gchar *gvir_config_domain_graphics_spice_get_host(GVirConfigDomainGraphicsSpice *graphics); +void gvir_config_domain_graphics_spice_set_host(GVirConfigDomainGraphicsSpice *graphics, + const gchar *host); + G_END_DECLS #endif /* __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_SPICE_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index be9887c..bb72f33 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -738,8 +738,10 @@ LIBVIRT_GCONFIG_0.2.4 { gvir_config_domain_graphics_sdl_get_display; gvir_config_domain_graphics_sdl_get_fullscreen; gvir_config_domain_graphics_spice_get_autoport; + gvir_config_domain_graphics_spice_get_host; gvir_config_domain_graphics_spice_get_tls_port; gvir_config_domain_graphics_spice_set_gl; + gvir_config_domain_graphics_spice_set_host; gvir_config_domain_graphics_vnc_get_autoport; gvir_config_domain_video_set_accel3d; } LIBVIRT_GCONFIG_0.2.2; -- 2.5.0

On Tue, Mar 22, 2016 at 11:04:43AM +0100, Fabiano Fidêncio wrote:
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- .../libvirt-gconfig-domain-graphics-spice.c | 18 ++++++++++++++++++ .../libvirt-gconfig-domain-graphics-spice.h | 4 ++++ libvirt-gconfig/libvirt-gconfig.sym | 2 ++ 3 files changed, 24 insertions(+)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c index b781537..38ee3e6 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -181,3 +181,21 @@ void gvir_config_domain_graphics_spice_set_gl(GVirConfigDomainGraphicsSpice *gra gvir_config_object_replace_child_with_attribute_enum (GVIR_CONFIG_OBJECT(graphics), "gl", "enable", G_TYPE_BOOLEAN, gl); } + +const gchar *gvir_config_domain_graphics_spice_get_host(GVirConfigDomainGraphicsSpice *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), NULL); + + return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), + NULL, "listen"); +} + +void gvir_config_domain_graphics_spice_set_host(GVirConfigDomainGraphicsSpice *graphics, + const gchar *host) +{ + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics)); + + gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(graphics), + "listen", G_TYPE_STRING, host, + NULL); +}
I think I'd try to keep "listen" in the function name to make it explicit what the "host" is for. My understanding is that the "listen" syntax (and VNC "socket") is more or less deprecated, and that <listen> nodes are preferred instead. So I'm not sure whether we should add these accessors/setters now, and in this way, or if we should look at a more extensive solution with <listen> nodes. Christophe

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c | 18 ++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h | 4 ++++ libvirt-gconfig/libvirt-gconfig.sym | 2 ++ 3 files changed, 24 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c index 96bbd74..94068a8 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c @@ -137,3 +137,21 @@ void gvir_config_domain_graphics_vnc_set_password(GVirConfigDomainGraphicsVnc *g "passwd", password, NULL); } + +const gchar *gvir_config_domain_graphics_vnc_get_host(GVirConfigDomainGraphicsVnc *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_VNC(graphics), NULL); + + return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), + NULL, "listen"); +} + +void gvir_config_domain_graphics_vnc_set_host(GVirConfigDomainGraphicsVnc *graphics, + const gchar *host) +{ + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_VNC(graphics)); + + gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(graphics), + "listen", G_TYPE_STRING, host, + NULL); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h index 1d7afec..cad26ca 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h @@ -77,6 +77,10 @@ void gvir_config_domain_graphics_vnc_set_port(GVirConfigDomainGraphicsVnc *graph void gvir_config_domain_graphics_vnc_set_password(GVirConfigDomainGraphicsVnc *graphics, const char *password); +const gchar *gvir_config_domain_graphics_vnc_get_host(GVirConfigDomainGraphicsVnc *graphics); +void gvir_config_domain_graphics_vnc_set_host(GVirConfigDomainGraphicsVnc *graphics, + const gchar *host); + G_END_DECLS #endif /* __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_VNC_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index bb72f33..44f0b09 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -743,6 +743,8 @@ LIBVIRT_GCONFIG_0.2.4 { gvir_config_domain_graphics_spice_set_gl; gvir_config_domain_graphics_spice_set_host; gvir_config_domain_graphics_vnc_get_autoport; + gvir_config_domain_graphics_vnc_get_host; + gvir_config_domain_graphics_vnc_set_host; gvir_config_domain_video_set_accel3d; } LIBVIRT_GCONFIG_0.2.2; -- 2.5.0

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c | 18 ++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h | 4 ++++ libvirt-gconfig/libvirt-gconfig.sym | 2 ++ 3 files changed, 24 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c index 4f6096e..b4d1735 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c @@ -156,3 +156,21 @@ gboolean gvir_config_domain_graphics_rdp_get_multi_user(GVirConfigDomainGraphics "multiUser", FALSE); } + +const gchar *gvir_config_domain_graphics_rdp_get_host(GVirConfigDomainGraphicsRdp *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_RDP(graphics), NULL); + + return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), + NULL, "listen"); +} + +void gvir_config_domain_graphics_rdp_set_host(GVirConfigDomainGraphicsRdp *graphics, + const gchar *host) +{ + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_RDP(graphics)); + + gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(graphics), + "listen", G_TYPE_STRING, host, + NULL); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h index 5cf93f0..e2bb782 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h @@ -77,6 +77,10 @@ gboolean gvir_config_domain_graphics_rdp_get_replace_user(GVirConfigDomainGraphi void gvir_config_domain_graphics_rdp_set_replace_user(GVirConfigDomainGraphicsRdp *graphics, gboolean replace_user); +const gchar *gvir_config_domain_graphics_rdp_get_host(GVirConfigDomainGraphicsRdp *graphics); +void gvir_config_domain_graphics_rdp_set_host(GVirConfigDomainGraphicsRdp *graphics, + const gchar *host); + G_END_DECLS #endif /* __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_RDP_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 44f0b09..ed47610 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -735,6 +735,8 @@ global: LIBVIRT_GCONFIG_0.2.4 { gvir_config_domain_graphics_rdp_get_autoport; + gvir_config_domain_graphics_rdp_get_host; + gvir_config_domain_graphics_rdp_set_host; gvir_config_domain_graphics_sdl_get_display; gvir_config_domain_graphics_sdl_get_fullscreen; gvir_config_domain_graphics_spice_get_autoport; -- 2.5.0

Seems that GVirConfigDomainGraphics* were built with a strong focus on writing/setting configs, but not reading those. For instance, considering virt-viewer's case, where the app is just consuming an already built xml, for getting the port attribute of a GVirDomainConfigGraphis{Spice,Vnc} you have to know, beforehand, the type of the connection and then call gvir_config_domain_graphics_{sdl,spice}_get_port(). It means creating an abstraction on virt-viewer side, that will ended up in some code like: if (GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics)) _get_whatever_you_want_using_specific_spice_api() else _get_whatever_you want_using_specific_vnc_api() In order to avoid this, let's introduce GVirConfigDomainGraphicsRemote class that, at least for now, is intended to be a helper for the case explained above. It introduces a new hierarchy in the project, where, instead of having GVirConfigDomainGraphics{Spice,Vnc,Rdp} inheriting from GVirCOnfigDomainGraphics, these classes will inherit from GVirConfigDomainGraphicsRemote (see the next patches) which inherits from from GVirConfigGraphics (it will cause an ABI breakage, though). Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/Makefile.am | 2 + .../libvirt-gconfig-domain-graphics-remote.c | 103 +++++++++++++++++++++ .../libvirt-gconfig-domain-graphics-remote.h | 70 ++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 5 + po/POTFILES.in | 1 + 6 files changed, 182 insertions(+) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index f308539..45fc559 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -47,6 +47,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-graphics.h \ libvirt-gconfig-domain-graphics-desktop.h \ libvirt-gconfig-domain-graphics-rdp.h \ + libvirt-gconfig-domain-graphics-remote.h \ libvirt-gconfig-domain-graphics-sdl.h \ libvirt-gconfig-domain-graphics-spice.h \ libvirt-gconfig-domain-graphics-vnc.h \ @@ -138,6 +139,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-graphics.c \ libvirt-gconfig-domain-graphics-desktop.c \ libvirt-gconfig-domain-graphics-rdp.c \ + libvirt-gconfig-domain-graphics-remote.c \ libvirt-gconfig-domain-graphics-sdl.c \ libvirt-gconfig-domain-graphics-spice.c \ libvirt-gconfig-domain-graphics-vnc.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.c new file mode 100644 index 0000000..e8b090f --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.c @@ -0,0 +1,103 @@ +/* + * libvirt-gconfig-domain-graphics-remote.c: libvirt domain graphics remote configuration + * + * Copyright (C) 2016 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Fabiano Fidêncio <fidencio@redhat.com> + */ + +#include <config.h> + +#include <glib/gi18n-lib.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" +#include "libvirt-gconfig/libvirt-gconfig-private.h" + +#define GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE, GVirConfigDomainGraphicsRemotePrivate)) + +struct _GVirConfigDomainGraphicsRemotePrivate +{ + gboolean unused; +}; + +typedef GVirConfigObject *(*GVirConfigDomainGraphicsRemoteNewFromXml)(const gchar *xml, GError **error); + +G_DEFINE_ABSTRACT_TYPE(GVirConfigDomainGraphicsRemote, gvir_config_domain_graphics_remote, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); + +static void gvir_config_domain_graphics_remote_class_init(GVirConfigDomainGraphicsRemoteClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainGraphicsRemotePrivate)); +} + +static void gvir_config_domain_graphics_remote_init(GVirConfigDomainGraphicsRemote *graphics) +{ + graphics->priv = GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE_GET_PRIVATE(graphics); +} + +GVirConfigDomainGraphicsRemote * +gvir_config_domain_graphics_remote_new_from_xml(const gchar *xml, + GError **error) +{ + GVirConfigDomainGraphicsRemoteNewFromXml functions[] = { + (GVirConfigDomainGraphicsRemoteNewFromXml)gvir_config_domain_graphics_vnc_new_from_xml, + (GVirConfigDomainGraphicsRemoteNewFromXml)gvir_config_domain_graphics_spice_new_from_xml, + (GVirConfigDomainGraphicsRemoteNewFromXml)gvir_config_domain_graphics_rdp_new_from_xml, + }; + GVirConfigObject *object; + + for (int i = 0; i < G_N_ELEMENTS(functions); i++) { + GVirConfigDomainGraphicsRemoteNewFromXml function = functions[i]; + + object = GVIR_CONFIG_OBJECT(function(xml, NULL)); + if (object != NULL) + break; + } + + if (object == NULL) { + g_set_error(error, + GVIR_CONFIG_OBJECT_ERROR, + 0, + _("Unable to create a new GraphicRemote object from the XML")); + } + + return GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(object); +} + +gboolean gvir_config_domain_graphics_remote_get_autoport(GVirConfigDomainGraphicsRemote *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_REMOTE(graphics), FALSE); + + return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), + NULL, "autoport", FALSE); +} + +const gchar *gvir_config_domain_graphics_remote_get_host(GVirConfigDomainGraphicsRemote *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_REMOTE(graphics), NULL); + + return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), + NULL, "listen"); +} + +int gvir_config_domain_graphics_remote_get_port(GVirConfigDomainGraphicsRemote *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_REMOTE(graphics), 0); + + return gvir_config_object_get_attribute_uint64(GVIR_CONFIG_OBJECT(graphics), + NULL, "port", 0); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.h new file mode 100644 index 0000000..d9de6df --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.h @@ -0,0 +1,70 @@ +/* + * libvirt-gconfig-domain-graphics-remote.h: libvirt domain graphics remote configuration + * + * Copyright (C) 2016 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Fabiano Fidêncio <fidencio@redhat.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_REMOTE_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_REMOTE_H__ + +G_BEGIN_DECLS + +#define GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE (gvir_config_domain_graphics_remote_get_type ()) +#define GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE, GVirConfigDomainGraphicsRemote)) +#define GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE, GVirConfigDomainGraphicsRemoteClass)) +#define GVIR_CONFIG_IS_DOMAIN_GRAPHICS_REMOTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE)) +#define GVIR_CONFIG_IS_DOMAIN_GRAPHICS_REMOTE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE)) +#define GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE, GVirConfigDomainGraphicsRemoteClass)) + +typedef struct _GVirConfigDomainGraphicsRemote GVirConfigDomainGraphicsRemote; +typedef struct _GVirConfigDomainGraphicsRemotePrivate GVirConfigDomainGraphicsRemotePrivate; +typedef struct _GVirConfigDomainGraphicsRemoteClass GVirConfigDomainGraphicsRemoteClass; + +struct _GVirConfigDomainGraphicsRemote +{ + GVirConfigDomainGraphics parent; + + GVirConfigDomainGraphicsRemotePrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainGraphicsRemoteClass +{ + GVirConfigDomainGraphicsClass parent_class; + + gpointer padding[20]; +}; + +GType gvir_config_domain_graphics_remote_get_type(void); + +GVirConfigDomainGraphicsRemote *gvir_config_domain_graphics_remote_new_from_xml(const gchar *xml, + GError **error); + +gboolean gvir_config_domain_graphics_remote_get_autoport(GVirConfigDomainGraphicsRemote *interface); +const gchar *gvir_config_domain_graphics_remote_get_host(GVirConfigDomainGraphicsRemote *graphics); +int gvir_config_domain_graphics_remote_get_port(GVirConfigDomainGraphicsRemote *interface); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_REMOTE_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 4624003..1ff369b 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -62,6 +62,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-disk-driver.h> #include <libvirt-gconfig/libvirt-gconfig-domain-filesys.h> #include <libvirt-gconfig/libvirt-gconfig-domain-graphics.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.h> #include <libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h> #include <libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h> #include <libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index ed47610..6dca69a 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -734,9 +734,14 @@ global: } LIBVIRT_GCONFIG_0.2.1; LIBVIRT_GCONFIG_0.2.4 { +global: gvir_config_domain_graphics_rdp_get_autoport; gvir_config_domain_graphics_rdp_get_host; gvir_config_domain_graphics_rdp_set_host; + gvir_config_domain_graphics_remote_get_autoport; + gvir_config_domain_graphics_remote_get_host; + gvir_config_domain_graphics_remote_get_port; + gvir_config_domain_graphics_remote_get_type; gvir_config_domain_graphics_sdl_get_display; gvir_config_domain_graphics_sdl_get_fullscreen; gvir_config_domain_graphics_spice_get_autoport; diff --git a/po/POTFILES.in b/po/POTFILES.in index 335ec67..da68459 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,4 +1,5 @@ libvirt-gconfig/libvirt-gconfig-helpers.c libvirt-gconfig/libvirt-gconfig-object.c +libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.c libvirt-gobject/libvirt-gobject-connection.c libvirt-gobject/libvirt-gobject-stream.c -- 2.5.0

Hey, 'GVirCofigDomainGraphicsRemote' typo in the subject On Tue, Mar 22, 2016 at 11:04:46AM +0100, Fabiano Fidêncio wrote:
Seems that GVirConfigDomainGraphics* were built with a strong focus on writing/setting configs, but not reading those.
For instance, considering virt-viewer's case, where the app is just consuming an already built xml, for getting the port attribute of a GVirDomainConfigGraphis{Spice,Vnc} you have to know, beforehand, the type of the connection and then call gvir_config_domain_graphics_{sdl,spice}_get_port(). It means creating an abstraction on virt-viewer side, that will ended up in some code like: if (GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics)) _get_whatever_you_want_using_specific_spice_api() else _get_whatever_you want_using_specific_vnc_api()
In order to avoid this, let's introduce GVirConfigDomainGraphicsRemote class that, at least for now, is intended to be a helper for the case explained above. It introduces a new hierarchy in the project, where, instead of having GVirConfigDomainGraphics{Spice,Vnc,Rdp} inheriting from GVirCOnfigDomainGraphics, these classes will inherit from GVirConfigDomainGraphicsRemote (see the next patches) which inherits from from GVirConfigGraphics (it will cause an ABI breakage, though).
Yes, the ABI breakage will be noticed if people have classes inheriting from GVirConfigDomainGraphics{Spice,Vnc,Rdp}, or if there is code expecting direct inheritance between these classes and GVirConfigDomainGraphics. Imo it's reasonable to assume that at this point no code is doing that, and that we can avoid raising the soname for this change.
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/Makefile.am | 2 + .../libvirt-gconfig-domain-graphics-remote.c | 103 +++++++++++++++++++++ .../libvirt-gconfig-domain-graphics-remote.h | 70 ++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 5 + po/POTFILES.in | 1 + 6 files changed, 182 insertions(+) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.h
diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index f308539..45fc559 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -47,6 +47,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-graphics.h \ libvirt-gconfig-domain-graphics-desktop.h \ libvirt-gconfig-domain-graphics-rdp.h \ + libvirt-gconfig-domain-graphics-remote.h \ libvirt-gconfig-domain-graphics-sdl.h \ libvirt-gconfig-domain-graphics-spice.h \ libvirt-gconfig-domain-graphics-vnc.h \ @@ -138,6 +139,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-graphics.c \ libvirt-gconfig-domain-graphics-desktop.c \ libvirt-gconfig-domain-graphics-rdp.c \ + libvirt-gconfig-domain-graphics-remote.c \ libvirt-gconfig-domain-graphics-sdl.c \ libvirt-gconfig-domain-graphics-spice.c \ libvirt-gconfig-domain-graphics-vnc.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.c new file mode 100644 index 0000000..e8b090f --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.c @@ -0,0 +1,103 @@ +/* + * libvirt-gconfig-domain-graphics-remote.c: libvirt domain graphics remote configuration + * + * Copyright (C) 2016 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Fabiano Fidêncio <fidencio@redhat.com> + */ + +#include <config.h> + +#include <glib/gi18n-lib.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" +#include "libvirt-gconfig/libvirt-gconfig-private.h" + +#define GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE, GVirConfigDomainGraphicsRemotePrivate)) + +struct _GVirConfigDomainGraphicsRemotePrivate +{ + gboolean unused; +}; + +typedef GVirConfigObject *(*GVirConfigDomainGraphicsRemoteNewFromXml)(const gchar *xml, GError **error);
Maybe this could be local to _new_from_xml ?
+ +G_DEFINE_ABSTRACT_TYPE(GVirConfigDomainGraphicsRemote, gvir_config_domain_graphics_remote, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); + +static void gvir_config_domain_graphics_remote_class_init(GVirConfigDomainGraphicsRemoteClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainGraphicsRemotePrivate)); +} + +static void gvir_config_domain_graphics_remote_init(GVirConfigDomainGraphicsRemote *graphics) +{ + graphics->priv = GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE_GET_PRIVATE(graphics); +} + +GVirConfigDomainGraphicsRemote * +gvir_config_domain_graphics_remote_new_from_xml(const gchar *xml, + GError **error) +{ + GVirConfigDomainGraphicsRemoteNewFromXml functions[] = { + (GVirConfigDomainGraphicsRemoteNewFromXml)gvir_config_domain_graphics_vnc_new_from_xml, + (GVirConfigDomainGraphicsRemoteNewFromXml)gvir_config_domain_graphics_spice_new_from_xml, + (GVirConfigDomainGraphicsRemoteNewFromXml)gvir_config_domain_graphics_rdp_new_from_xml, + }; + GVirConfigObject *object; +
I think I would look at /graphics/type here and directly call the right function. However, I'm not sure how much use there is in adding these methods in all objects as I don't think there are any users of these. dunno if we should keep adding them, or just stop, and add them all at once the day they are needed.
+ for (int i = 0; i < G_N_ELEMENTS(functions); i++) { + GVirConfigDomainGraphicsRemoteNewFromXml function = functions[i]; + + object = GVIR_CONFIG_OBJECT(function(xml, NULL)); + if (object != NULL) + break; + } + + if (object == NULL) { + g_set_error(error, + GVIR_CONFIG_OBJECT_ERROR, + 0, + _("Unable to create a new GraphicRemote object from the XML")); + } + + return GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(object); +} + +gboolean gvir_config_domain_graphics_remote_get_autoport(GVirConfigDomainGraphicsRemote *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_REMOTE(graphics), FALSE); + + return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), + NULL, "autoport", FALSE); +} + +const gchar *gvir_config_domain_graphics_remote_get_host(GVirConfigDomainGraphicsRemote *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_REMOTE(graphics), NULL); + + return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), + NULL, "listen"); +} + +int gvir_config_domain_graphics_remote_get_port(GVirConfigDomainGraphicsRemote *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_REMOTE(graphics), 0); + + return gvir_config_object_get_attribute_uint64(GVIR_CONFIG_OBJECT(graphics), + NULL, "port", 0); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.h new file mode 100644 index 0000000..d9de6df --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.h @@ -0,0 +1,70 @@ +/* + * libvirt-gconfig-domain-graphics-remote.h: libvirt domain graphics remote configuration
Extra space between 'graphics' and 'remote' Looks good otherwise. Christophe

On Tue, Mar 22, 2016 at 11:04:46AM +0100, Fabiano Fidêncio wrote:
Seems that GVirConfigDomainGraphics* were built with a strong focus on writing/setting configs, but not reading those.
For instance, considering virt-viewer's case, where the app is just consuming an already built xml, for getting the port attribute of a GVirDomainConfigGraphis{Spice,Vnc} you have to know, beforehand, the type of the connection and then call gvir_config_domain_graphics_{sdl,spice}_get_port(). It means creating an abstraction on virt-viewer side, that will ended up in some code like: if (GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics)) _get_whatever_you_want_using_specific_spice_api() else _get_whatever_you want_using_specific_vnc_api()
In order to avoid this, let's introduce GVirConfigDomainGraphicsRemote class that, at least for now, is intended to be a helper for the case explained above. It introduces a new hierarchy in the project, where, instead of having GVirConfigDomainGraphics{Spice,Vnc,Rdp} inheriting from GVirCOnfigDomainGraphics, these classes will inherit from
s/COnfig/Config
diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index ed47610..6dca69a 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -734,9 +734,14 @@ global: } LIBVIRT_GCONFIG_0.2.1;
LIBVIRT_GCONFIG_0.2.4 { +global: gvir_config_domain_graphics_rdp_get_autoport; gvir_config_domain_graphics_rdp_get_host; gvir_config_domain_graphics_rdp_set_host; + gvir_config_domain_graphics_remote_get_autoport; + gvir_config_domain_graphics_remote_get_host; + gvir_config_domain_graphics_remote_get_port; + gvir_config_domain_graphics_remote_get_type; gvir_config_domain_graphics_sdl_get_display; gvir_config_domain_graphics_sdl_get_fullscreen; gvir_config_domain_graphics_spice_get_autoport;
One more question came to mind, why don't you implement _remote_set_* as well? Christophe

This patch adapts GVirConfigDomainGraphicsSpice to the new GVirConfigDomainGraphicsRemote, inheriting from it and using its helper functions for getting autoport and port properties. As GVirConfigDomainGraphicsSpice now inherits from GVirConfigDomainGraphicsRemote, this patch also introduces an ABI breakage. Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c | 11 ++++------- libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h | 4 ++-- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c index 38ee3e6..74466d0 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -34,7 +34,7 @@ struct _GVirConfigDomainGraphicsSpicePrivate gboolean unused; }; -G_DEFINE_TYPE(GVirConfigDomainGraphicsSpice, gvir_config_domain_graphics_spice, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); +G_DEFINE_TYPE(GVirConfigDomainGraphicsSpice, gvir_config_domain_graphics_spice, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE); static void gvir_config_domain_graphics_spice_class_init(GVirConfigDomainGraphicsSpiceClass *klass) @@ -78,8 +78,7 @@ gboolean gvir_config_domain_graphics_spice_get_autoport(GVirConfigDomainGraphics { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), FALSE); - return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), - NULL, "autoport", FALSE); + return gvir_config_domain_graphics_remote_get_autoport(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); } void gvir_config_domain_graphics_spice_set_autoport(GVirConfigDomainGraphicsSpice *graphics, @@ -106,8 +105,7 @@ int gvir_config_domain_graphics_spice_get_port(GVirConfigDomainGraphicsSpice *gr { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), 0); - return gvir_config_object_get_attribute_uint64(GVIR_CONFIG_OBJECT(graphics), - NULL, "port", 0); + return gvir_config_domain_graphics_remote_get_port(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); } void gvir_config_domain_graphics_spice_set_port(GVirConfigDomainGraphicsSpice *graphics, @@ -186,8 +184,7 @@ const gchar *gvir_config_domain_graphics_spice_get_host(GVirConfigDomainGraphics { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), NULL); - return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), - NULL, "listen"); + return gvir_config_domain_graphics_remote_get_host(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); } void gvir_config_domain_graphics_spice_set_host(GVirConfigDomainGraphicsSpice *graphics, diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h index 40d0e86..1fc708d 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h @@ -43,7 +43,7 @@ typedef struct _GVirConfigDomainGraphicsSpiceClass GVirConfigDomainGraphicsSpice struct _GVirConfigDomainGraphicsSpice { - GVirConfigDomainGraphics parent; + GVirConfigDomainGraphicsRemote parent; GVirConfigDomainGraphicsSpicePrivate *priv; @@ -52,7 +52,7 @@ struct _GVirConfigDomainGraphicsSpice struct _GVirConfigDomainGraphicsSpiceClass { - GVirConfigDomainGraphicsClass parent_class; + GVirConfigDomainGraphicsRemoteClass parent_class; gpointer padding[20]; }; -- 2.5.0

On Tue, Mar 22, 2016 at 11:04:47AM +0100, Fabiano Fidêncio wrote:
This patch adapts GVirConfigDomainGraphicsSpice to the new GVirConfigDomainGraphicsRemote, inheriting from it and using its helper functions for getting autoport and port properties.
As GVirConfigDomainGraphicsSpice now inherits from GVirConfigDomainGraphicsRemote, this patch also introduces an ABI breakage.
I think one way of avoiding the biggest potential breakage would be to not add padding to GVirConfigDomainGraphicsRemote, I think this would not break classes inheriting from GVirConfigDomainGraphicsSpice. Acked-by: Christophe Fergeau <cfergeau@redhat.com>
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c | 11 ++++------- libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h | 4 ++-- 2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c index 38ee3e6..74466d0 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -34,7 +34,7 @@ struct _GVirConfigDomainGraphicsSpicePrivate gboolean unused; };
-G_DEFINE_TYPE(GVirConfigDomainGraphicsSpice, gvir_config_domain_graphics_spice, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); +G_DEFINE_TYPE(GVirConfigDomainGraphicsSpice, gvir_config_domain_graphics_spice, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE);
static void gvir_config_domain_graphics_spice_class_init(GVirConfigDomainGraphicsSpiceClass *klass) @@ -78,8 +78,7 @@ gboolean gvir_config_domain_graphics_spice_get_autoport(GVirConfigDomainGraphics { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), FALSE);
- return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), - NULL, "autoport", FALSE); + return gvir_config_domain_graphics_remote_get_autoport(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_spice_set_autoport(GVirConfigDomainGraphicsSpice *graphics, @@ -106,8 +105,7 @@ int gvir_config_domain_graphics_spice_get_port(GVirConfigDomainGraphicsSpice *gr { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), 0);
- return gvir_config_object_get_attribute_uint64(GVIR_CONFIG_OBJECT(graphics), - NULL, "port", 0); + return gvir_config_domain_graphics_remote_get_port(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_spice_set_port(GVirConfigDomainGraphicsSpice *graphics, @@ -186,8 +184,7 @@ const gchar *gvir_config_domain_graphics_spice_get_host(GVirConfigDomainGraphics { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), NULL);
- return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), - NULL, "listen"); + return gvir_config_domain_graphics_remote_get_host(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_spice_set_host(GVirConfigDomainGraphicsSpice *graphics, diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h index 40d0e86..1fc708d 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h @@ -43,7 +43,7 @@ typedef struct _GVirConfigDomainGraphicsSpiceClass GVirConfigDomainGraphicsSpice
struct _GVirConfigDomainGraphicsSpice { - GVirConfigDomainGraphics parent; + GVirConfigDomainGraphicsRemote parent;
GVirConfigDomainGraphicsSpicePrivate *priv;
@@ -52,7 +52,7 @@ struct _GVirConfigDomainGraphicsSpice
struct _GVirConfigDomainGraphicsSpiceClass { - GVirConfigDomainGraphicsClass parent_class; + GVirConfigDomainGraphicsRemoteClass parent_class;
gpointer padding[20]; }; -- 2.5.0
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

On Thu, Apr 21, 2016 at 12:51:48PM +0200, Christophe Fergeau wrote:
On Tue, Mar 22, 2016 at 11:04:47AM +0100, Fabiano Fidêncio wrote:
This patch adapts GVirConfigDomainGraphicsSpice to the new GVirConfigDomainGraphicsRemote, inheriting from it and using its helper functions for getting autoport and port properties.
As GVirConfigDomainGraphicsSpice now inherits from GVirConfigDomainGraphicsRemote, this patch also introduces an ABI breakage.
I think one way of avoiding the biggest potential breakage would be to not add padding to GVirConfigDomainGraphicsRemote, I think this would not break classes inheriting from GVirConfigDomainGraphicsSpice.
Actually the "private" member in GVirConfigDomainGraphicsRemote would cause issues too.
Acked-by: Christophe Fergeau <cfergeau@redhat.com>
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c | 11 ++++------- libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h | 4 ++-- 2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c index 38ee3e6..74466d0 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -34,7 +34,7 @@ struct _GVirConfigDomainGraphicsSpicePrivate gboolean unused; };
-G_DEFINE_TYPE(GVirConfigDomainGraphicsSpice, gvir_config_domain_graphics_spice, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); +G_DEFINE_TYPE(GVirConfigDomainGraphicsSpice, gvir_config_domain_graphics_spice, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE);
static void gvir_config_domain_graphics_spice_class_init(GVirConfigDomainGraphicsSpiceClass *klass) @@ -78,8 +78,7 @@ gboolean gvir_config_domain_graphics_spice_get_autoport(GVirConfigDomainGraphics { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), FALSE);
- return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), - NULL, "autoport", FALSE); + return gvir_config_domain_graphics_remote_get_autoport(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_spice_set_autoport(GVirConfigDomainGraphicsSpice *graphics, @@ -106,8 +105,7 @@ int gvir_config_domain_graphics_spice_get_port(GVirConfigDomainGraphicsSpice *gr { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), 0);
- return gvir_config_object_get_attribute_uint64(GVIR_CONFIG_OBJECT(graphics), - NULL, "port", 0); + return gvir_config_domain_graphics_remote_get_port(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_spice_set_port(GVirConfigDomainGraphicsSpice *graphics, @@ -186,8 +184,7 @@ const gchar *gvir_config_domain_graphics_spice_get_host(GVirConfigDomainGraphics { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SPICE(graphics), NULL);
- return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), - NULL, "listen"); + return gvir_config_domain_graphics_remote_get_host(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_spice_set_host(GVirConfigDomainGraphicsSpice *graphics, diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h index 40d0e86..1fc708d 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h @@ -43,7 +43,7 @@ typedef struct _GVirConfigDomainGraphicsSpiceClass GVirConfigDomainGraphicsSpice
struct _GVirConfigDomainGraphicsSpice { - GVirConfigDomainGraphics parent; + GVirConfigDomainGraphicsRemote parent;
GVirConfigDomainGraphicsSpicePrivate *priv;
@@ -52,7 +52,7 @@ struct _GVirConfigDomainGraphicsSpice
struct _GVirConfigDomainGraphicsSpiceClass { - GVirConfigDomainGraphicsClass parent_class; + GVirConfigDomainGraphicsRemoteClass parent_class;
gpointer padding[20]; }; -- 2.5.0
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

This patch adapts GVirConfigDomainGraphicsRdp to the new GVirConfigDomainGraphicsRemote, inheriting from it and using its helper functions for getting autoport and port properties. As GVirConfigDomainGraphicsRdp now inherits from GVirConfigDomainGraphicsRemote, this patch also introduces an ABI breakage. Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c | 11 ++++------- libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h | 4 ++-- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c index b4d1735..4671b13 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c @@ -33,7 +33,7 @@ struct _GVirConfigDomainGraphicsRdpPrivate gboolean unused; }; -G_DEFINE_TYPE(GVirConfigDomainGraphicsRdp, gvir_config_domain_graphics_rdp, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); +G_DEFINE_TYPE(GVirConfigDomainGraphicsRdp, gvir_config_domain_graphics_rdp, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE); static void gvir_config_domain_graphics_rdp_class_init(GVirConfigDomainGraphicsRdpClass *klass) @@ -77,8 +77,7 @@ gboolean gvir_config_domain_graphics_rdp_get_autoport(GVirConfigDomainGraphicsRd { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_RDP(graphics), FALSE); - return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), - NULL, "autoport", FALSE); + return gvir_config_domain_graphics_remote_get_autoport(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); } void gvir_config_domain_graphics_rdp_set_autoport(GVirConfigDomainGraphicsRdp *graphics, @@ -95,8 +94,7 @@ int gvir_config_domain_graphics_rdp_get_port(GVirConfigDomainGraphicsRdp *graphi { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_RDP(graphics), 0); - return gvir_config_object_get_attribute_uint64(GVIR_CONFIG_OBJECT(graphics), - NULL, "port", 0); + return gvir_config_domain_graphics_remote_get_port(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); } void gvir_config_domain_graphics_rdp_set_port(GVirConfigDomainGraphicsRdp *graphics, @@ -161,8 +159,7 @@ const gchar *gvir_config_domain_graphics_rdp_get_host(GVirConfigDomainGraphicsRd { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_RDP(graphics), NULL); - return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), - NULL, "listen"); + return gvir_config_domain_graphics_remote_get_host(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); } void gvir_config_domain_graphics_rdp_set_host(GVirConfigDomainGraphicsRdp *graphics, diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h index e2bb782..df4d2d3 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h @@ -42,7 +42,7 @@ typedef struct _GVirConfigDomainGraphicsRdpClass GVirConfigDomainGraphicsRdpClas struct _GVirConfigDomainGraphicsRdp { - GVirConfigDomainGraphics parent; + GVirConfigDomainGraphicsRemote parent; GVirConfigDomainGraphicsRdpPrivate *priv; @@ -51,7 +51,7 @@ struct _GVirConfigDomainGraphicsRdp struct _GVirConfigDomainGraphicsRdpClass { - GVirConfigDomainGraphicsClass parent_class; + GVirConfigDomainGraphicsRemoteClass parent_class; gpointer padding[20]; }; -- 2.5.0

On Tue, Mar 22, 2016 at 11:04:48AM +0100, Fabiano Fidêncio wrote:
This patch adapts GVirConfigDomainGraphicsRdp to the new GVirConfigDomainGraphicsRemote, inheriting from it and using its helper functions for getting autoport and port properties.
As GVirConfigDomainGraphicsRdp now inherits from GVirConfigDomainGraphicsRemote, this patch also introduces an ABI breakage.
Acked-by: Christophe Fergeau <cfergeau@redhat.com> This can be squashed into the SPICE one imo (and same for the other classes). Christophe
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c | 11 ++++------- libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h | 4 ++-- 2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c index b4d1735..4671b13 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c @@ -33,7 +33,7 @@ struct _GVirConfigDomainGraphicsRdpPrivate gboolean unused; };
-G_DEFINE_TYPE(GVirConfigDomainGraphicsRdp, gvir_config_domain_graphics_rdp, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); +G_DEFINE_TYPE(GVirConfigDomainGraphicsRdp, gvir_config_domain_graphics_rdp, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE);
static void gvir_config_domain_graphics_rdp_class_init(GVirConfigDomainGraphicsRdpClass *klass) @@ -77,8 +77,7 @@ gboolean gvir_config_domain_graphics_rdp_get_autoport(GVirConfigDomainGraphicsRd { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_RDP(graphics), FALSE);
- return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), - NULL, "autoport", FALSE); + return gvir_config_domain_graphics_remote_get_autoport(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_rdp_set_autoport(GVirConfigDomainGraphicsRdp *graphics, @@ -95,8 +94,7 @@ int gvir_config_domain_graphics_rdp_get_port(GVirConfigDomainGraphicsRdp *graphi { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_RDP(graphics), 0);
- return gvir_config_object_get_attribute_uint64(GVIR_CONFIG_OBJECT(graphics), - NULL, "port", 0); + return gvir_config_domain_graphics_remote_get_port(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_rdp_set_port(GVirConfigDomainGraphicsRdp *graphics, @@ -161,8 +159,7 @@ const gchar *gvir_config_domain_graphics_rdp_get_host(GVirConfigDomainGraphicsRd { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_RDP(graphics), NULL);
- return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), - NULL, "listen"); + return gvir_config_domain_graphics_remote_get_host(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_rdp_set_host(GVirConfigDomainGraphicsRdp *graphics, diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h index e2bb782..df4d2d3 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h @@ -42,7 +42,7 @@ typedef struct _GVirConfigDomainGraphicsRdpClass GVirConfigDomainGraphicsRdpClas
struct _GVirConfigDomainGraphicsRdp { - GVirConfigDomainGraphics parent; + GVirConfigDomainGraphicsRemote parent;
GVirConfigDomainGraphicsRdpPrivate *priv;
@@ -51,7 +51,7 @@ struct _GVirConfigDomainGraphicsRdp
struct _GVirConfigDomainGraphicsRdpClass { - GVirConfigDomainGraphicsClass parent_class; + GVirConfigDomainGraphicsRemoteClass parent_class;
gpointer padding[20]; }; -- 2.5.0
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

This patch adapts GVirConfigDomainGraphicsVnc to the new GVirConfigDomainGraphicsRemote, inheriting from it and using its helper functions for getting auport and port properties. As GVirConfigDomainGraphicsVnc now inherits from GVirConfigDomainGraphicsRemote, this patch also introduces an ABI breakage. Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c | 11 ++++------- libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h | 4 ++-- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c index 94068a8..4bd7b25 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c @@ -33,7 +33,7 @@ struct _GVirConfigDomainGraphicsVncPrivate gboolean unused; }; -G_DEFINE_TYPE(GVirConfigDomainGraphicsVnc, gvir_config_domain_graphics_vnc, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); +G_DEFINE_TYPE(GVirConfigDomainGraphicsVnc, gvir_config_domain_graphics_vnc, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE); static void gvir_config_domain_graphics_vnc_class_init(GVirConfigDomainGraphicsVncClass *klass) @@ -96,8 +96,7 @@ gboolean gvir_config_domain_graphics_vnc_get_autoport(GVirConfigDomainGraphicsVn { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_VNC(graphics), FALSE); - return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), - NULL, "autoport", FALSE); + return gvir_config_domain_graphics_remote_get_autoport(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); } void gvir_config_domain_graphics_vnc_set_autoport(GVirConfigDomainGraphicsVnc *graphics, @@ -114,8 +113,7 @@ int gvir_config_domain_graphics_vnc_get_port(GVirConfigDomainGraphicsVnc *graphi { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_VNC(graphics), 0); - return gvir_config_object_get_attribute_uint64(GVIR_CONFIG_OBJECT(graphics), - NULL, "port", 0); + return gvir_config_domain_graphics_remote_get_port(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); } void gvir_config_domain_graphics_vnc_set_port(GVirConfigDomainGraphicsVnc *graphics, @@ -142,8 +140,7 @@ const gchar *gvir_config_domain_graphics_vnc_get_host(GVirConfigDomainGraphicsVn { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_VNC(graphics), NULL); - return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), - NULL, "listen"); + return gvir_config_domain_graphics_remote_get_host(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); } void gvir_config_domain_graphics_vnc_set_host(GVirConfigDomainGraphicsVnc *graphics, diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h index cad26ca..f3556ad 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h @@ -42,7 +42,7 @@ typedef struct _GVirConfigDomainGraphicsVncClass GVirConfigDomainGraphicsVncClas struct _GVirConfigDomainGraphicsVnc { - GVirConfigDomainGraphics parent; + GVirConfigDomainGraphicsRemote parent; GVirConfigDomainGraphicsVncPrivate *priv; @@ -51,7 +51,7 @@ struct _GVirConfigDomainGraphicsVnc struct _GVirConfigDomainGraphicsVncClass { - GVirConfigDomainGraphicsClass parent_class; + GVirConfigDomainGraphicsRemoteClass parent_class; gpointer padding[20]; }; -- 2.5.0

Acked-by: Christophe Fergeau <cfergeau@redhat.com> On Tue, Mar 22, 2016 at 11:04:49AM +0100, Fabiano Fidêncio wrote:
This patch adapts GVirConfigDomainGraphicsVnc to the new GVirConfigDomainGraphicsRemote, inheriting from it and using its helper functions for getting auport and port properties.
As GVirConfigDomainGraphicsVnc now inherits from GVirConfigDomainGraphicsRemote, this patch also introduces an ABI breakage.
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c | 11 ++++------- libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h | 4 ++-- 2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c index 94068a8..4bd7b25 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c @@ -33,7 +33,7 @@ struct _GVirConfigDomainGraphicsVncPrivate gboolean unused; };
-G_DEFINE_TYPE(GVirConfigDomainGraphicsVnc, gvir_config_domain_graphics_vnc, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); +G_DEFINE_TYPE(GVirConfigDomainGraphicsVnc, gvir_config_domain_graphics_vnc, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_REMOTE);
static void gvir_config_domain_graphics_vnc_class_init(GVirConfigDomainGraphicsVncClass *klass) @@ -96,8 +96,7 @@ gboolean gvir_config_domain_graphics_vnc_get_autoport(GVirConfigDomainGraphicsVn { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_VNC(graphics), FALSE);
- return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), - NULL, "autoport", FALSE); + return gvir_config_domain_graphics_remote_get_autoport(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_vnc_set_autoport(GVirConfigDomainGraphicsVnc *graphics, @@ -114,8 +113,7 @@ int gvir_config_domain_graphics_vnc_get_port(GVirConfigDomainGraphicsVnc *graphi { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_VNC(graphics), 0);
- return gvir_config_object_get_attribute_uint64(GVIR_CONFIG_OBJECT(graphics), - NULL, "port", 0); + return gvir_config_domain_graphics_remote_get_port(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_vnc_set_port(GVirConfigDomainGraphicsVnc *graphics, @@ -142,8 +140,7 @@ const gchar *gvir_config_domain_graphics_vnc_get_host(GVirConfigDomainGraphicsVn { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_VNC(graphics), NULL);
- return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), - NULL, "listen"); + return gvir_config_domain_graphics_remote_get_host(GVIR_CONFIG_DOMAIN_GRAPHICS_REMOTE(graphics)); }
void gvir_config_domain_graphics_vnc_set_host(GVirConfigDomainGraphicsVnc *graphics, diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h index cad26ca..f3556ad 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.h @@ -42,7 +42,7 @@ typedef struct _GVirConfigDomainGraphicsVncClass GVirConfigDomainGraphicsVncClas
struct _GVirConfigDomainGraphicsVnc { - GVirConfigDomainGraphics parent; + GVirConfigDomainGraphicsRemote parent;
GVirConfigDomainGraphicsVncPrivate *priv;
@@ -51,7 +51,7 @@ struct _GVirConfigDomainGraphicsVnc
struct _GVirConfigDomainGraphicsVncClass { - GVirConfigDomainGraphicsClass parent_class; + GVirConfigDomainGraphicsRemoteClass parent_class;
gpointer padding[20]; }; -- 2.5.0
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

Adding this class more fore completness to the GVirConfigDomainGraphicsRemote than for any other reason. This patch introduces a new hierarchy in the project, where, instead of having GVirConfigDomainGraphics{Desktop,Sdl} inheriting from GVirConfigDomainGraphics, these classes will inherit from GVirConfigDomainGraphicsLocal (see the next patches), which inherits from GVirConfigDomainGraphics (it will cause ABI breakages, though). Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/Makefile.am | 2 + .../libvirt-gconfig-domain-graphics-local.c | 97 ++++++++++++++++++++++ .../libvirt-gconfig-domain-graphics-local.h | 68 +++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 3 + po/POTFILES.in | 1 + 6 files changed, 172 insertions(+) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-local.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-local.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 45fc559..5361fa7 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -46,6 +46,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-filesys.h \ libvirt-gconfig-domain-graphics.h \ libvirt-gconfig-domain-graphics-desktop.h \ + libvirt-gconfig-domain-graphics-local.h \ libvirt-gconfig-domain-graphics-rdp.h \ libvirt-gconfig-domain-graphics-remote.h \ libvirt-gconfig-domain-graphics-sdl.h \ @@ -138,6 +139,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-filesys.c \ libvirt-gconfig-domain-graphics.c \ libvirt-gconfig-domain-graphics-desktop.c \ + libvirt-gconfig-domain-graphics-local.c \ libvirt-gconfig-domain-graphics-rdp.c \ libvirt-gconfig-domain-graphics-remote.c \ libvirt-gconfig-domain-graphics-sdl.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-local.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-local.c new file mode 100644 index 0000000..3a0fe51 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-local.c @@ -0,0 +1,97 @@ +/* + * libvirt-gconfig-domain-graphics-local.c: libvirt domain graphics local configuration + * + * Copyright (C) 2016 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Fabiano Fidêncio <fidencio@redhat.com> + */ + +#include <config.h> + +#include <glib/gi18n-lib.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" +#include "libvirt-gconfig/libvirt-gconfig-private.h" + +#define GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_LOCAL, GVirConfigDomainGraphicsLocalPrivate)) + +struct _GVirConfigDomainGraphicsLocalPrivate +{ + gboolean unused; +}; + +typedef GVirConfigObject *(*GVirConfigDomainGraphicsLocalNewFromXml)(const gchar *xml, GError **error); + +G_DEFINE_ABSTRACT_TYPE(GVirConfigDomainGraphicsLocal, gvir_config_domain_graphics_local, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); + +static void gvir_config_domain_graphics_local_class_init(GVirConfigDomainGraphicsLocalClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainGraphicsLocalPrivate)); +} + +static void gvir_config_domain_graphics_local_init(GVirConfigDomainGraphicsLocal *graphics) +{ + graphics->priv = GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL_GET_PRIVATE(graphics); +} + +GVirConfigDomainGraphicsLocal * +gvir_config_domain_graphics_local_new_from_xml(const gchar *xml, + GError **error) +{ + GVirConfigDomainGraphicsLocalNewFromXml functions[] = { + (GVirConfigDomainGraphicsLocalNewFromXml)gvir_config_domain_graphics_sdl_new_from_xml, + (GVirConfigDomainGraphicsLocalNewFromXml)gvir_config_domain_graphics_desktop_new_from_xml, + }; + GVirConfigObject *object; + + for (int i = 0; i < G_N_ELEMENTS(functions); i++) { + GVirConfigDomainGraphicsLocalNewFromXml function = functions[i]; + + object = GVIR_CONFIG_OBJECT(function(xml, error)); + if (object != NULL) + break; + } + + if (object == NULL) { + g_set_error(error, + GVIR_CONFIG_OBJECT_ERROR, + 0, + _("Unable to create a new GraphicLocal object from the XML")); + } + + return GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL(object); +} + +const gchar *gvir_config_domain_graphics_local_get_display(GVirConfigDomainGraphicsLocal *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_LOCAL(graphics), NULL); + + return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), + NULL, + "display"); +} + +gboolean gvir_config_domain_graphics_local_get_fullscreen(GVirConfigDomainGraphicsLocal *graphics) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_LOCAL(graphics), FALSE); + + return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), + NULL, + "fullscreen", + FALSE); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-local.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-local.h new file mode 100644 index 0000000..6494e42 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-local.h @@ -0,0 +1,68 @@ +/* + * libvirt-gconfig-domain-graphics-local.h: libvirt domain graphics local configuration + * + * Copyright (C) 2016 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Fabiano Fidêncio <fidencio@redhat.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_LOCAL_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_LOCAL_H__ + +G_BEGIN_DECLS + +#define GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_LOCAL (gvir_config_domain_graphics_local_get_type ()) +#define GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_LOCAL, GVirConfigDomainGraphicsLocal)) +#define GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_LOCAL, GVirConfigDomainGraphicsLocalClass)) +#define GVIR_CONFIG_IS_DOMAIN_GRAPHICS_LOCAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_LOCAL)) +#define GVIR_CONFIG_IS_DOMAIN_GRAPHICS_LOCAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_LOCAL)) +#define GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_LOCAL, GVirConfigDomainGraphicsLocalClass)) + +typedef struct _GVirConfigDomainGraphicsLocal GVirConfigDomainGraphicsLocal; +typedef struct _GVirConfigDomainGraphicsLocalPrivate GVirConfigDomainGraphicsLocalPrivate; +typedef struct _GVirConfigDomainGraphicsLocalClass GVirConfigDomainGraphicsLocalClass; + +struct _GVirConfigDomainGraphicsLocal +{ + GVirConfigDomainGraphics parent; + + GVirConfigDomainGraphicsLocalPrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainGraphicsLocalClass +{ + GVirConfigDomainGraphicsClass parent_class; + + gpointer padding[20]; +}; + +GType gvir_config_domain_graphics_local_get_type(void); + +GVirConfigDomainGraphicsLocal *gvir_config_domain_graphics_local_new_from_xml(const gchar *xml, + GError **error); +const gchar *gvir_config_domain_graphics_local_get_display(GVirConfigDomainGraphicsLocal *graphics); +gboolean gvir_config_domain_graphics_local_get_fullscreen(GVirConfigDomainGraphicsLocal *graphics); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_LOCAL_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 1ff369b..22e9c67 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -62,6 +62,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-disk-driver.h> #include <libvirt-gconfig/libvirt-gconfig-domain-filesys.h> #include <libvirt-gconfig/libvirt-gconfig-domain-graphics.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-graphics-local.h> #include <libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.h> #include <libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h> #include <libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 6dca69a..bb745f5 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -735,6 +735,9 @@ global: LIBVIRT_GCONFIG_0.2.4 { global: + gvir_config_domain_graphics_local_get_display; + gvir_config_domain_graphics_local_get_fullscreen; + gvir_config_domain_graphics_local_get_type; gvir_config_domain_graphics_rdp_get_autoport; gvir_config_domain_graphics_rdp_get_host; gvir_config_domain_graphics_rdp_set_host; diff --git a/po/POTFILES.in b/po/POTFILES.in index da68459..7102849 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,5 +1,6 @@ libvirt-gconfig/libvirt-gconfig-helpers.c libvirt-gconfig/libvirt-gconfig-object.c +libvirt-gconfig/libvirt-gconfig-domain-graphics-local.c libvirt-gconfig/libvirt-gconfig-domain-graphics-remote.c libvirt-gobject/libvirt-gobject-connection.c libvirt-gobject/libvirt-gobject-stream.c -- 2.5.0

On Tue, Mar 22, 2016 at 11:04:50AM +0100, Fabiano Fidêncio wrote:
Adding this class more fore completness to the GVirConfigDomainGraphicsRemote than for any other reason.
This patch introduces a new hierarchy in the project, where, instead of having GVirConfigDomainGraphics{Desktop,Sdl} inheriting from GVirConfigDomainGraphics, these classes will inherit from GVirConfigDomainGraphicsLocal (see the next patches), which inherits from GVirConfigDomainGraphics (it will cause ABI breakages, though).
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/Makefile.am | 2 + .../libvirt-gconfig-domain-graphics-local.c | 97 ++++++++++++++++++++++ .../libvirt-gconfig-domain-graphics-local.h | 68 +++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 3 + po/POTFILES.in | 1 + 6 files changed, 172 insertions(+) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-local.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-local.h
diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 45fc559..5361fa7 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -46,6 +46,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-filesys.h \ libvirt-gconfig-domain-graphics.h \ libvirt-gconfig-domain-graphics-desktop.h \ + libvirt-gconfig-domain-graphics-local.h \ libvirt-gconfig-domain-graphics-rdp.h \ libvirt-gconfig-domain-graphics-remote.h \ libvirt-gconfig-domain-graphics-sdl.h \ @@ -138,6 +139,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-filesys.c \ libvirt-gconfig-domain-graphics.c \ libvirt-gconfig-domain-graphics-desktop.c \ + libvirt-gconfig-domain-graphics-local.c \ libvirt-gconfig-domain-graphics-rdp.c \ libvirt-gconfig-domain-graphics-remote.c \ libvirt-gconfig-domain-graphics-sdl.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-local.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-local.c new file mode 100644 index 0000000..3a0fe51 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-local.c @@ -0,0 +1,97 @@ +/* + * libvirt-gconfig-domain-graphics-local.c: libvirt domain graphics local configuration + * + * Copyright (C) 2016 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Fabiano Fidêncio <fidencio@redhat.com> + */ + +#include <config.h> + +#include <glib/gi18n-lib.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" +#include "libvirt-gconfig/libvirt-gconfig-private.h" + +#define GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_LOCAL, GVirConfigDomainGraphicsLocalPrivate)) + +struct _GVirConfigDomainGraphicsLocalPrivate +{ + gboolean unused; +}; + +typedef GVirConfigObject *(*GVirConfigDomainGraphicsLocalNewFromXml)(const gchar *xml, GError **error);
Could be local to gvir_config_domain_graphics_local_new_from_xml, and same comments as for gvir_config_domain_graphics_remote_new_from_xml Looks good otherwise, Christophe

This patch adapts GVirConfigDomainGraphicsSdl to the new GVirConfigDomainGraphicsLocal, inheriting from it and using its helper functions for getting the display and fullscreen properties. As GVirConfigDomainGraphicsSdl now inherits from GVirConfigDomainGraphicsLocal, this patch also introduces an ABI breakage. Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c | 11 +++-------- libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h | 4 ++-- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c index 63d9bb3..55d0012 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c @@ -33,7 +33,7 @@ struct _GVirConfigDomainGraphicsSdlPrivate gboolean unused; }; -G_DEFINE_TYPE(GVirConfigDomainGraphicsSdl, gvir_config_domain_graphics_sdl, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); +G_DEFINE_TYPE(GVirConfigDomainGraphicsSdl, gvir_config_domain_graphics_sdl, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_LOCAL); static void gvir_config_domain_graphics_sdl_class_init(GVirConfigDomainGraphicsSdlClass *klass) @@ -97,9 +97,7 @@ const gchar *gvir_config_domain_graphics_sdl_get_display(GVirConfigDomainGraphic { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SDL(graphics), NULL); - return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), - NULL, - "display"); + return gvir_config_domain_graphics_local_get_display(GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL(graphics)); } void gvir_config_domain_graphics_sdl_set_fullscreen(GVirConfigDomainGraphicsSdl *graphics, @@ -118,8 +116,5 @@ gboolean gvir_config_domain_graphics_sdl_get_fullscreen(GVirConfigDomainGraphics { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_SDL(graphics), FALSE); - return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), - NULL, - "fullscreen", - FALSE); + return gvir_config_domain_graphics_local_get_fullscreen(GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL(graphics)); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h index f1b9842..70c9aeb 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.h @@ -42,7 +42,7 @@ typedef struct _GVirConfigDomainGraphicsSdlClass GVirConfigDomainGraphicsSdlClas struct _GVirConfigDomainGraphicsSdl { - GVirConfigDomainGraphics parent; + GVirConfigDomainGraphicsLocal parent; GVirConfigDomainGraphicsSdlPrivate *priv; @@ -51,7 +51,7 @@ struct _GVirConfigDomainGraphicsSdl struct _GVirConfigDomainGraphicsSdlClass { - GVirConfigDomainGraphicsClass parent_class; + GVirConfigDomainGraphicsLocalClass parent_class; gpointer padding[20]; }; -- 2.5.0

This patch adapts GVirConfigDomainGraphicsDesktop to the new GVirConfigDomainGraphicsLocal, inheriting from it and using its helper functions for getting display and fullscreen properties. As GVirConfigDomainGraphicsDesktop now inherits from GVirConfigDomainGraphicsLocal, this patch also introduces an ABI breakage. Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c | 11 +++-------- libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h | 4 ++-- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c index dadf684..7d23b77 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c @@ -33,7 +33,7 @@ struct _GVirConfigDomainGraphicsDesktopPrivate gboolean unused; }; -G_DEFINE_TYPE(GVirConfigDomainGraphicsDesktop, gvir_config_domain_graphics_desktop, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); +G_DEFINE_TYPE(GVirConfigDomainGraphicsDesktop, gvir_config_domain_graphics_desktop, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_LOCAL); static void gvir_config_domain_graphics_desktop_class_init(GVirConfigDomainGraphicsDesktopClass *klass) @@ -88,9 +88,7 @@ const gchar *gvir_config_domain_graphics_desktop_get_display(GVirConfigDomainGra { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_DESKTOP(graphics), NULL); - return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), - NULL, - "display"); + return gvir_config_domain_graphics_local_get_display(GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL(graphics)); } @@ -111,8 +109,5 @@ gboolean gvir_config_domain_graphics_desktop_get_fullscreen(GVirConfigDomainGrap { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_DESKTOP(graphics), FALSE); - return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), - NULL, - "fullscreen", - FALSE); + return gvir_config_domain_graphics_local_get_fullscreen(GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL(graphics)); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h index 7e7e635..c117882 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h @@ -42,7 +42,7 @@ typedef struct _GVirConfigDomainGraphicsDesktopClass GVirConfigDomainGraphicsDes struct _GVirConfigDomainGraphicsDesktop { - GVirConfigDomainGraphics parent; + GVirConfigDomainGraphicsLocal parent; GVirConfigDomainGraphicsDesktopPrivate *priv; @@ -51,7 +51,7 @@ struct _GVirConfigDomainGraphicsDesktop struct _GVirConfigDomainGraphicsDesktopClass { - GVirConfigDomainGraphicsClass parent_class; + GVirConfigDomainGraphicsLocalClass parent_class; gpointer padding[20]; }; -- 2.5.0

Acked-by: Christophe Fergeau <cfergeau@redhat.com> Looks good to me. Christophe On Tue, Mar 22, 2016 at 11:04:52AM +0100, Fabiano Fidêncio wrote:
This patch adapts GVirConfigDomainGraphicsDesktop to the new GVirConfigDomainGraphicsLocal, inheriting from it and using its helper functions for getting display and fullscreen properties.
As GVirConfigDomainGraphicsDesktop now inherits from GVirConfigDomainGraphicsLocal, this patch also introduces an ABI breakage.
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c | 11 +++-------- libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h | 4 ++-- 2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c index dadf684..7d23b77 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c @@ -33,7 +33,7 @@ struct _GVirConfigDomainGraphicsDesktopPrivate gboolean unused; };
-G_DEFINE_TYPE(GVirConfigDomainGraphicsDesktop, gvir_config_domain_graphics_desktop, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS); +G_DEFINE_TYPE(GVirConfigDomainGraphicsDesktop, gvir_config_domain_graphics_desktop, GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_LOCAL);
static void gvir_config_domain_graphics_desktop_class_init(GVirConfigDomainGraphicsDesktopClass *klass) @@ -88,9 +88,7 @@ const gchar *gvir_config_domain_graphics_desktop_get_display(GVirConfigDomainGra { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_DESKTOP(graphics), NULL);
- return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(graphics), - NULL, - "display"); + return gvir_config_domain_graphics_local_get_display(GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL(graphics)); }
@@ -111,8 +109,5 @@ gboolean gvir_config_domain_graphics_desktop_get_fullscreen(GVirConfigDomainGrap { g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_GRAPHICS_DESKTOP(graphics), FALSE);
- return gvir_config_object_get_attribute_boolean(GVIR_CONFIG_OBJECT(graphics), - NULL, - "fullscreen", - FALSE); + return gvir_config_domain_graphics_local_get_fullscreen(GVIR_CONFIG_DOMAIN_GRAPHICS_LOCAL(graphics)); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h index 7e7e635..c117882 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.h @@ -42,7 +42,7 @@ typedef struct _GVirConfigDomainGraphicsDesktopClass GVirConfigDomainGraphicsDes
struct _GVirConfigDomainGraphicsDesktop { - GVirConfigDomainGraphics parent; + GVirConfigDomainGraphicsLocal parent;
GVirConfigDomainGraphicsDesktopPrivate *priv;
@@ -51,7 +51,7 @@ struct _GVirConfigDomainGraphicsDesktop
struct _GVirConfigDomainGraphicsDesktopClass { - GVirConfigDomainGraphicsClass parent_class; + GVirConfigDomainGraphicsLocalClass parent_class;
gpointer padding[20]; }; -- 2.5.0
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c | 3 +++ libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c | 3 +++ libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c | 3 +++ libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c | 3 +++ libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c | 3 +++ 5 files changed, 15 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c index 7d23b77..092020d 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c @@ -66,6 +66,9 @@ gvir_config_domain_graphics_desktop_new_from_xml(const gchar *xml, object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_DESKTOP, "graphics", NULL, xml, error); + if (object == NULL) + return NULL; + if (g_strcmp0(gvir_config_object_get_attribute(object, NULL, "type"), "desktop") != 0) { g_object_unref(G_OBJECT(object)); return NULL; diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c index 4671b13..024c7e9 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c @@ -66,6 +66,9 @@ gvir_config_domain_graphics_rdp_new_from_xml(const gchar *xml, object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_RDP, "graphics", NULL, xml, error); + if (object == NULL) + return NULL; + if (g_strcmp0(gvir_config_object_get_attribute(object, NULL, "type"), "rdp") != 0) { g_object_unref(G_OBJECT(object)); return NULL; diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c index 55d0012..3bb6c98 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c @@ -66,6 +66,9 @@ gvir_config_domain_graphics_sdl_new_from_xml(const gchar *xml, object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_SDL, "graphics", NULL, xml, error); + if (object == NULL) + return NULL; + if (g_strcmp0(gvir_config_object_get_attribute(object, NULL, "type"), "sdl") != 0) { g_object_unref(G_OBJECT(object)); return NULL; diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c index 74466d0..9951ab6 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -67,6 +67,9 @@ gvir_config_domain_graphics_spice_new_from_xml(const gchar *xml, object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_SPICE, "graphics", NULL, xml, error); + if (object == NULL) + return NULL; + if (g_strcmp0(gvir_config_object_get_attribute(object, NULL, "type"), "spice") != 0) { g_object_unref(G_OBJECT(object)); return NULL; diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c index 4bd7b25..1cccb31 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c @@ -66,6 +66,9 @@ gvir_config_domain_graphics_vnc_new_from_xml(const gchar *xml, object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_VNC, "graphics", NULL, xml, error); + if (object == NULL) + return NULL; + if (g_strcmp0(gvir_config_object_get_attribute(object, NULL, "type"), "vnc") != 0) { g_object_unref(G_OBJECT(object)); return NULL; -- 2.5.0

This issues is more widespread than that, it would be better to fix it everywhere in one go (maybe through a gvir_config_object_check_type() or something like this?) Christophe On Tue, Mar 22, 2016 at 11:04:53AM +0100, Fabiano Fidêncio wrote:
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> --- libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c | 3 +++ libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c | 3 +++ libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c | 3 +++ libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c | 3 +++ libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c | 3 +++ 5 files changed, 15 insertions(+)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c index 7d23b77..092020d 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-desktop.c @@ -66,6 +66,9 @@ gvir_config_domain_graphics_desktop_new_from_xml(const gchar *xml,
object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_DESKTOP, "graphics", NULL, xml, error); + if (object == NULL) + return NULL; + if (g_strcmp0(gvir_config_object_get_attribute(object, NULL, "type"), "desktop") != 0) { g_object_unref(G_OBJECT(object)); return NULL; diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c index 4671b13..024c7e9 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-rdp.c @@ -66,6 +66,9 @@ gvir_config_domain_graphics_rdp_new_from_xml(const gchar *xml,
object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_RDP, "graphics", NULL, xml, error); + if (object == NULL) + return NULL; + if (g_strcmp0(gvir_config_object_get_attribute(object, NULL, "type"), "rdp") != 0) { g_object_unref(G_OBJECT(object)); return NULL; diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c index 55d0012..3bb6c98 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-sdl.c @@ -66,6 +66,9 @@ gvir_config_domain_graphics_sdl_new_from_xml(const gchar *xml,
object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_SDL, "graphics", NULL, xml, error); + if (object == NULL) + return NULL; + if (g_strcmp0(gvir_config_object_get_attribute(object, NULL, "type"), "sdl") != 0) { g_object_unref(G_OBJECT(object)); return NULL; diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c index 74466d0..9951ab6 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -67,6 +67,9 @@ gvir_config_domain_graphics_spice_new_from_xml(const gchar *xml,
object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_SPICE, "graphics", NULL, xml, error); + if (object == NULL) + return NULL; + if (g_strcmp0(gvir_config_object_get_attribute(object, NULL, "type"), "spice") != 0) { g_object_unref(G_OBJECT(object)); return NULL; diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c index 4bd7b25..1cccb31 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-vnc.c @@ -66,6 +66,9 @@ gvir_config_domain_graphics_vnc_new_from_xml(const gchar *xml,
object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_GRAPHICS_VNC, "graphics", NULL, xml, error); + if (object == NULL) + return NULL; + if (g_strcmp0(gvir_config_object_get_attribute(object, NULL, "type"), "vnc") != 0) { g_object_unref(G_OBJECT(object)); return NULL; -- 2.5.0
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

On Thu, Apr 21, 2016 at 01:05:45PM +0200, Christophe Fergeau wrote:
This issues is more widespread than that, it would be better to fix it everywhere in one go (maybe through a gvir_config_object_check_type() or something like this?)
I believe this patch should do for now (with runtime warnings). Since I'm not sure how widespread _new_from_xml() use is, maybe it's enough for now, and we can decide on the best way to handle a NULL return when we start getting runtime warnings from that patch? From 0b428df2d82b6e669b50a3c400716c3883f9fe9c Mon Sep 17 00:00:00 2001 From: Christophe Fergeau <cfergeau@redhat.com> Date: Tue, 6 Sep 2016 10:30:58 +0200 Subject: [libvirt-glib] gconfig: Add precondition to gvir_config_object_get_xml_node() This will catch (among other things) cases when gvir_config_object_get_xml_node() is called with a NULL argument. Not catching this could cause a crash later on in cases when gvir_config_object_new_from_xml() is called and returns NULL, and then we call gvir_config_object_get_attribute() on it. Now this should be caught with runtime warnings so that the underlying issue can be fixed. --- libvirt-gconfig/libvirt-gconfig-object.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-object.c b/libvirt-gconfig/libvirt-gconfig-object.c index 6225de2..8cc4065 100644 --- a/libvirt-gconfig/libvirt-gconfig-object.c +++ b/libvirt-gconfig/libvirt-gconfig-object.c @@ -284,6 +284,8 @@ gvir_config_object_get_xml_doc(GVirConfigObject *config) G_GNUC_INTERNAL xmlNodePtr gvir_config_object_get_xml_node(GVirConfigObject *config) { + g_return_val_if_fail(GVIR_CONFIG_IS_OBJECT(config), NULL); + return config->priv->node; } -- 2.7.4
participants (2)
-
Christophe Fergeau
-
Fabiano Fidêncio