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:
parent
227bf2c9de
commit
9774254ce3
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user