virDomainGraphicsDefFormat function was way too long so split it into separate functions for each graphics type. Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> --- src/conf/domain_conf.c | 131 ++++++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 60 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 8de39e7767..e1589527f2 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -26385,6 +26385,76 @@ virDomainGraphicsDefFormatAudio(virBuffer *buf, virXMLFormatElement(buf, "audio", &attrBuf, NULL); } +static int +virDomainGraphicsDefFormatVNC(virBuffer *attrBuf, + virDomainGraphicsDef *def, + unsigned int flags) +{ + virDomainGraphicsListenDef *glisten = virDomainGraphicsGetListen(def, 0); + + if (!glisten) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing listen element for graphics")); + return -1; + } + + switch (glisten->type) { + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: + /* To not break migration we shouldn't print the 'socket' attribute + * if it's auto-generated or if it's based on config option from + * qemu.conf. If the socket is provided by user we need to print it + * into migratable XML. */ + if (glisten->socket && + !((glisten->autoGenerated || glisten->fromConfig) && + (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))) { + virBufferEscapeString(attrBuf, " socket='%s'", glisten->socket); + } + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: + if (def->data.vnc.port && + (!def->data.vnc.autoport || !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))) + virBufferAsprintf(attrBuf, " port='%d'", def->data.vnc.port); + else if (def->data.vnc.autoport) + virBufferAddLit(attrBuf, " port='-1'"); + + virBufferAsprintf(attrBuf, " autoport='%s'", + def->data.vnc.autoport ? "yes" : "no"); + + if (def->data.vnc.websocketGenerated && + (flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) + virBufferAddLit(attrBuf, " websocket='-1'"); + else if (def->data.vnc.websocket) + virBufferAsprintf(attrBuf, " websocket='%d'", def->data.vnc.websocket); + + if (flags & VIR_DOMAIN_DEF_FORMAT_STATUS) + virBufferAsprintf(attrBuf, " websocketGenerated='%s'", + def->data.vnc.websocketGenerated ? "yes" : "no"); + + virDomainGraphicsListenDefFormatAddr(attrBuf, glisten, flags); + break; + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: + break; + } + + virBufferEscapeString(attrBuf, " keymap='%s'", def->data.vnc.keymap); + + if (def->data.vnc.sharePolicy) + virBufferAsprintf(attrBuf, " sharePolicy='%s'", + virDomainGraphicsVNCSharePolicyTypeToString( + def->data.vnc.sharePolicy)); + + if (def->data.vnc.powerControl) + virBufferAsprintf(attrBuf, " powerControl='%s'", + virTristateBoolTypeToString(def->data.vnc.powerControl)); + + virDomainGraphicsAuthDefFormatAttr(attrBuf, &def->data.vnc.auth, flags); + + return 0; +} + static int virDomainGraphicsDefFormat(virBuffer *buf, virDomainGraphicsDef *def, @@ -26406,67 +26476,8 @@ virDomainGraphicsDefFormat(virBuffer *buf, switch (def->type) { case VIR_DOMAIN_GRAPHICS_TYPE_VNC: - if (!glisten) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("missing listen element for graphics")); + if (virDomainGraphicsDefFormatVNC(&attrBuf, def, flags) < 0) return -1; - } - - switch (glisten->type) { - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: - /* To not break migration we shouldn't print the 'socket' attribute - * if it's auto-generated or if it's based on config option from - * qemu.conf. If the socket is provided by user we need to print it - * into migratable XML. */ - if (glisten->socket && - !((glisten->autoGenerated || glisten->fromConfig) && - (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))) { - virBufferEscapeString(&attrBuf, " socket='%s'", glisten->socket); - } - break; - - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: - if (def->data.vnc.port && - (!def->data.vnc.autoport || !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))) - virBufferAsprintf(&attrBuf, " port='%d'", - def->data.vnc.port); - else if (def->data.vnc.autoport) - virBufferAddLit(&attrBuf, " port='-1'"); - - virBufferAsprintf(&attrBuf, " autoport='%s'", - def->data.vnc.autoport ? "yes" : "no"); - - if (def->data.vnc.websocketGenerated && - (flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) - virBufferAddLit(&attrBuf, " websocket='-1'"); - else if (def->data.vnc.websocket) - virBufferAsprintf(&attrBuf, " websocket='%d'", def->data.vnc.websocket); - - if (flags & VIR_DOMAIN_DEF_FORMAT_STATUS) - virBufferAsprintf(&attrBuf, " websocketGenerated='%s'", - def->data.vnc.websocketGenerated ? "yes" : "no"); - - virDomainGraphicsListenDefFormatAddr(&attrBuf, glisten, flags); - break; - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: - break; - } - - virBufferEscapeString(&attrBuf, " keymap='%s'", - def->data.vnc.keymap); - - if (def->data.vnc.sharePolicy) - virBufferAsprintf(&attrBuf, " sharePolicy='%s'", - virDomainGraphicsVNCSharePolicyTypeToString( - def->data.vnc.sharePolicy)); - - if (def->data.vnc.powerControl) - virBufferAsprintf(&attrBuf, " powerControl='%s'", - virTristateBoolTypeToString(def->data.vnc.powerControl)); - - virDomainGraphicsAuthDefFormatAttr(&attrBuf, &def->data.vnc.auth, flags); break; case VIR_DOMAIN_GRAPHICS_TYPE_SDL: -- 2.48.1