virDomainGraphicsDefFormat function was way too long so split it into
separate functions for each graphics type.
Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
---
src/conf/domain_conf.c | 115 ++++++++++++++++++++++-------------------
1 file changed, 62 insertions(+), 53 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3edeffbe72..636d4a5099 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -26504,6 +26504,67 @@ virDomainGraphicsDefFormatDesktop(virBuffer *attrBuf,
virBufferAddLit(attrBuf, " fullscreen='yes'");
}
+static int
+virDomainGraphicsDefFormatSpice(virBuffer *attrBuf,
+ virDomainGraphicsDef *def,
+ unsigned int flags)
+{
+ virDomainGraphicsListenDef *glisten = virDomainGraphicsGetListen(def, 0);
+
+ if (!glisten) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("missing listen element for spice graphics"));
+ return -1;
+ }
+
+ switch (glisten->type) {
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
+ if (def->data.spice.port)
+ virBufferAsprintf(attrBuf, " port='%d'",
def->data.spice.port);
+
+ if (def->data.spice.tlsPort)
+ virBufferAsprintf(attrBuf, " tlsPort='%d'",
def->data.spice.tlsPort);
+
+ virBufferAsprintf(attrBuf, " autoport='%s'",
+ def->data.spice.autoport ? "yes" :
"no");
+
+ virDomainGraphicsListenDefFormatAddr(attrBuf, glisten, flags);
+ break;
+
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
+ if (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE)
+ virBufferAddLit(attrBuf, " autoport='no'");
+ break;
+
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
+ /* If socket is auto-generated based on config option we don't
+ * add any listen element into migratable XML because the original
+ * listen type is "address".
+ * We need to set autoport to make sure that libvirt on destination
+ * will parse it as listen type "address", without autoport it is
+ * parsed as listen type "none". */
+ if ((flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE) &&
+ glisten->fromConfig) {
+ virBufferAddLit(attrBuf, " autoport='yes'");
+ }
+ break;
+
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
+ break;
+ }
+
+ virBufferEscapeString(attrBuf, " keymap='%s'",
def->data.spice.keymap);
+
+ if (def->data.spice.defaultMode != VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY)
+ virBufferAsprintf(attrBuf, " defaultMode='%s'",
+
virDomainGraphicsSpiceChannelModeTypeToString(def->data.spice.defaultMode));
+
+ virDomainGraphicsAuthDefFormatAttr(attrBuf, &def->data.spice.auth, flags);
+
+ return 0;
+}
+
static int
virDomainGraphicsDefFormat(virBuffer *buf,
virDomainGraphicsDef *def,
@@ -26511,7 +26572,6 @@ virDomainGraphicsDefFormat(virBuffer *buf,
{
g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
- virDomainGraphicsListenDef *glisten = virDomainGraphicsGetListen(def, 0);
const char *type = virDomainGraphicsTypeToString(def->type);
size_t i;
@@ -26542,59 +26602,8 @@ virDomainGraphicsDefFormat(virBuffer *buf,
break;
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
- if (!glisten) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("missing listen element for spice graphics"));
+ if (virDomainGraphicsDefFormatSpice(&attrBuf, def, flags) < 0)
return -1;
- }
-
- switch (glisten->type) {
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
- if (def->data.spice.port)
- virBufferAsprintf(&attrBuf, " port='%d'",
- def->data.spice.port);
-
- if (def->data.spice.tlsPort)
- virBufferAsprintf(&attrBuf, " tlsPort='%d'",
- def->data.spice.tlsPort);
-
- virBufferAsprintf(&attrBuf, " autoport='%s'",
- def->data.spice.autoport ? "yes" :
"no");
-
- virDomainGraphicsListenDefFormatAddr(&attrBuf, glisten, flags);
- break;
-
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
- if (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE)
- virBufferAddLit(&attrBuf, " autoport='no'");
- break;
-
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
- /* If socket is auto-generated based on config option we don't
- * add any listen element into migratable XML because the original
- * listen type is "address".
- * We need to set autoport to make sure that libvirt on destination
- * will parse it as listen type "address", without autoport it is
- * parsed as listen type "none". */
- if ((flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE) &&
- glisten->fromConfig) {
- virBufferAddLit(&attrBuf, " autoport='yes'");
- }
- break;
-
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
- break;
- }
-
- virBufferEscapeString(&attrBuf, " keymap='%s'",
- def->data.spice.keymap);
-
- if (def->data.spice.defaultMode !=
VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY)
- virBufferAsprintf(&attrBuf, " defaultMode='%s'",
-
virDomainGraphicsSpiceChannelModeTypeToString(def->data.spice.defaultMode));
-
- virDomainGraphicsAuthDefFormatAttr(&attrBuf, &def->data.spice.auth,
flags);
break;
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
--
2.48.1