1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-20 06:50:22 +03:00

domain_conf: graphics: extract VNC formatting to separate function

virDomainGraphicsDefFormat function was way too long so split it into
separate functions for each graphics type.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Pavel Hrdina 2025-03-06 11:46:00 +01:00
parent 227bf2c9de
commit 9774254ce3

View File

@ -26422,6 +26422,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,
@ -26443,67 +26513,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: