mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-27 02:51:16 +00:00
generic support for RDP and desktop graphic extensions
* docs/schemas/domain.rng src/domain_conf.[ch] src/qemu_driver.c: extend the generic code for the RDP and desktop extensions of the graphic tag needed for vbox, patch by Pritesh Kothari Daniel
This commit is contained in:
parent
fa1ceca232
commit
cd223d93da
@ -1,3 +1,9 @@
|
|||||||
|
Fri May 15 11:41:46 CEST 2009 Daniel Veillard <veillard@redhat.com>
|
||||||
|
|
||||||
|
* docs/schemas/domain.rng src/domain_conf.[ch] src/qemu_driver.c:
|
||||||
|
extend the generic code for the RDP and desktop extensions of
|
||||||
|
the graphic tag needed for vbox, patch by Pritesh Kothari
|
||||||
|
|
||||||
Thu May 14 12:29:41 CEST 2009 Daniel Veillard <veillard@redhat.com>
|
Thu May 14 12:29:41 CEST 2009 Daniel Veillard <veillard@redhat.com>
|
||||||
|
|
||||||
* src/xend_internal.c: remove [] around cpumaps for recent xend
|
* src/xend_internal.c: remove [] around cpumaps for recent xend
|
||||||
|
@ -725,6 +725,63 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
</optional>
|
</optional>
|
||||||
</group>
|
</group>
|
||||||
|
<group>
|
||||||
|
<attribute name="type">
|
||||||
|
<value>rdp</value>
|
||||||
|
</attribute>
|
||||||
|
<optional>
|
||||||
|
<attribute name="port">
|
||||||
|
<ref name="PortNumber"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="autoport">
|
||||||
|
<choice>
|
||||||
|
<value>yes</value>
|
||||||
|
<value>no</value>
|
||||||
|
</choice>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="replaceUser">
|
||||||
|
<choice>
|
||||||
|
<value>yes</value>
|
||||||
|
<value>no</value>
|
||||||
|
</choice>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="multiUser">
|
||||||
|
<choice>
|
||||||
|
<value>yes</value>
|
||||||
|
<value>no</value>
|
||||||
|
</choice>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="listen">
|
||||||
|
<ref name="addrIP"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<attribute name="type">
|
||||||
|
<value>desktop</value>
|
||||||
|
</attribute>
|
||||||
|
<optional>
|
||||||
|
<attribute name="display">
|
||||||
|
<text/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="fullscreen">
|
||||||
|
<choice>
|
||||||
|
<value>yes</value>
|
||||||
|
<value>no</value>
|
||||||
|
</choice>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
</group>
|
||||||
</choice>
|
</choice>
|
||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
|
@ -151,7 +151,9 @@ VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,
|
|||||||
|
|
||||||
VIR_ENUM_IMPL(virDomainGraphics, VIR_DOMAIN_GRAPHICS_TYPE_LAST,
|
VIR_ENUM_IMPL(virDomainGraphics, VIR_DOMAIN_GRAPHICS_TYPE_LAST,
|
||||||
"sdl",
|
"sdl",
|
||||||
"vnc")
|
"vnc",
|
||||||
|
"rdp",
|
||||||
|
"desktop")
|
||||||
|
|
||||||
VIR_ENUM_IMPL(virDomainHostdevMode, VIR_DOMAIN_HOSTDEV_MODE_LAST,
|
VIR_ENUM_IMPL(virDomainHostdevMode, VIR_DOMAIN_HOSTDEV_MODE_LAST,
|
||||||
"subsystem",
|
"subsystem",
|
||||||
@ -245,6 +247,14 @@ void virDomainGraphicsDefFree(virDomainGraphicsDefPtr def)
|
|||||||
VIR_FREE(def->data.sdl.display);
|
VIR_FREE(def->data.sdl.display);
|
||||||
VIR_FREE(def->data.sdl.xauth);
|
VIR_FREE(def->data.sdl.xauth);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
|
VIR_FREE(def->data.rdp.listenAddr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
|
VIR_FREE(def->data.desktop.display);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
VIR_FREE(def);
|
VIR_FREE(def);
|
||||||
@ -1521,6 +1531,68 @@ virDomainGraphicsDefParseXML(virConnectPtr conn,
|
|||||||
def->data.sdl.fullscreen = 0;
|
def->data.sdl.fullscreen = 0;
|
||||||
def->data.sdl.xauth = virXMLPropString(node, "xauth");
|
def->data.sdl.xauth = virXMLPropString(node, "xauth");
|
||||||
def->data.sdl.display = virXMLPropString(node, "display");
|
def->data.sdl.display = virXMLPropString(node, "display");
|
||||||
|
} else if (def->type == VIR_DOMAIN_GRAPHICS_TYPE_RDP) {
|
||||||
|
char *port = virXMLPropString(node, "port");
|
||||||
|
char *autoport;
|
||||||
|
char *replaceUser;
|
||||||
|
char *multiUser;
|
||||||
|
|
||||||
|
if (port) {
|
||||||
|
if (virStrToLong_i(port, NULL, 10, &def->data.rdp.port) < 0) {
|
||||||
|
virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("cannot parse rdp port %s"), port);
|
||||||
|
VIR_FREE(port);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
VIR_FREE(port);
|
||||||
|
} else {
|
||||||
|
def->data.rdp.port = 0;
|
||||||
|
def->data.rdp.autoport = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((autoport = virXMLPropString(node, "autoport")) != NULL) {
|
||||||
|
if (STREQ(autoport, "yes")) {
|
||||||
|
if (flags & VIR_DOMAIN_XML_INACTIVE)
|
||||||
|
def->data.rdp.port = 0;
|
||||||
|
def->data.rdp.autoport = 1;
|
||||||
|
}
|
||||||
|
VIR_FREE(autoport);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((replaceUser = virXMLPropString(node, "replaceUser")) != NULL) {
|
||||||
|
if (STREQ(replaceUser, "yes")) {
|
||||||
|
def->data.rdp.replaceUser = 1;
|
||||||
|
}
|
||||||
|
VIR_FREE(replaceUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((multiUser = virXMLPropString(node, "multiUser")) != NULL) {
|
||||||
|
if (STREQ(multiUser, "yes")) {
|
||||||
|
def->data.rdp.multiUser = 1;
|
||||||
|
}
|
||||||
|
VIR_FREE(multiUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
def->data.rdp.listenAddr = virXMLPropString(node, "listen");
|
||||||
|
} else if (def->type == VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP) {
|
||||||
|
char *fullscreen = virXMLPropString(node, "fullscreen");
|
||||||
|
|
||||||
|
if (fullscreen != NULL) {
|
||||||
|
if (STREQ(fullscreen, "yes")) {
|
||||||
|
def->data.desktop.fullscreen = 1;
|
||||||
|
} else if (STREQ(fullscreen, "no")) {
|
||||||
|
def->data.desktop.fullscreen = 0;
|
||||||
|
} else {
|
||||||
|
virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("unknown fullscreen value '%s'"), fullscreen);
|
||||||
|
VIR_FREE(fullscreen);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
VIR_FREE(fullscreen);
|
||||||
|
} else
|
||||||
|
def->data.desktop.fullscreen = 0;
|
||||||
|
|
||||||
|
def->data.desktop.display = virXMLPropString(node, "display");
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
@ -3295,6 +3367,38 @@ virDomainGraphicsDefFormat(virConnectPtr conn,
|
|||||||
virBufferAddLit(buf, " fullscreen='yes'");
|
virBufferAddLit(buf, " fullscreen='yes'");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
|
if (def->data.rdp.port)
|
||||||
|
virBufferVSprintf(buf, " port='%d'",
|
||||||
|
def->data.rdp.port);
|
||||||
|
else if (def->data.rdp.autoport)
|
||||||
|
virBufferAddLit(buf, " port='0'");
|
||||||
|
|
||||||
|
if (def->data.rdp.autoport)
|
||||||
|
virBufferVSprintf(buf, " autoport='yes'");
|
||||||
|
|
||||||
|
if (def->data.rdp.replaceUser)
|
||||||
|
virBufferVSprintf(buf, " replaceUser='yes'");
|
||||||
|
|
||||||
|
if (def->data.rdp.multiUser)
|
||||||
|
virBufferVSprintf(buf, " multiUser='yes'");
|
||||||
|
|
||||||
|
if (def->data.rdp.listenAddr)
|
||||||
|
virBufferVSprintf(buf, " listen='%s'", def->data.rdp.listenAddr);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
|
if (def->data.desktop.display)
|
||||||
|
virBufferEscapeString(buf, " display='%s'",
|
||||||
|
def->data.desktop.display);
|
||||||
|
|
||||||
|
if (def->data.desktop.fullscreen)
|
||||||
|
virBufferAddLit(buf, " fullscreen='yes'");
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virBufferAddLit(buf, "/>\n");
|
virBufferAddLit(buf, "/>\n");
|
||||||
|
@ -268,6 +268,8 @@ struct _virDomainSoundDef {
|
|||||||
enum virDomainGraphicsType {
|
enum virDomainGraphicsType {
|
||||||
VIR_DOMAIN_GRAPHICS_TYPE_SDL,
|
VIR_DOMAIN_GRAPHICS_TYPE_SDL,
|
||||||
VIR_DOMAIN_GRAPHICS_TYPE_VNC,
|
VIR_DOMAIN_GRAPHICS_TYPE_VNC,
|
||||||
|
VIR_DOMAIN_GRAPHICS_TYPE_RDP,
|
||||||
|
VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP,
|
||||||
|
|
||||||
VIR_DOMAIN_GRAPHICS_TYPE_LAST,
|
VIR_DOMAIN_GRAPHICS_TYPE_LAST,
|
||||||
};
|
};
|
||||||
@ -289,6 +291,17 @@ struct _virDomainGraphicsDef {
|
|||||||
char *xauth;
|
char *xauth;
|
||||||
int fullscreen;
|
int fullscreen;
|
||||||
} sdl;
|
} sdl;
|
||||||
|
struct {
|
||||||
|
int port;
|
||||||
|
char *listenAddr;
|
||||||
|
int autoport : 1;
|
||||||
|
int replaceUser : 1;
|
||||||
|
int multiUser : 1;
|
||||||
|
} rdp;
|
||||||
|
struct {
|
||||||
|
char *display;
|
||||||
|
int fullscreen : 1;
|
||||||
|
} desktop;
|
||||||
} data;
|
} data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4841,6 +4841,7 @@ qemudDomainMigratePrepare2 (virConnectPtr dconn,
|
|||||||
vm->def->name);
|
vm->def->name);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
virDomainObjUnlock(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(vm = virDomainAssignDef(dconn,
|
if (!(vm = virDomainAssignDef(dconn,
|
||||||
|
Loading…
Reference in New Issue
Block a user