| Hi All, [PATCH 2/3]: contains support for vrdp/sdl/gui while dumping xml [PATCH 3/3]: contains support for vrdp/sdl/gui while starting the machine Pritesh |
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index b25e93b..87db6ab 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -3040,24 +3040,29 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
}
} /* Finished:Block to attach the Parallel Port to the VM */
-#if 0
{ /* Started:Block to attach the Remote Display to VM */
- if (def->graphics) {
+ int vrdpPresent = 0;
+ int sdlPresent = 0;
+ int guiPresent = 0;
+ char *guiDisplay = NULL;
+ char *sdlDisplay = NULL;
+ int i = 0;
+
+ for (i = 0; i < def->ngraphics; i++) {
IVRDPServer *VRDPServer = NULL;
- /* TODO: include the support for headless stuff
- */
+ if ((def->graphics[i]->type == VIR_DOMAIN_GRAPHICS_TYPE_RDP) && (vrdpPresent == 0)) {
- if (def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_RDP) {
+ vrdpPresent = 1;
machine->vtbl->GetVRDPServer(machine, &VRDPServer);
if (VRDPServer) {
VRDPServer->vtbl->SetEnabled(VRDPServer, PR_TRUE);
DEBUG0("VRDP Support turned ON on port: 3389");
- if (def->graphics->data.rdp.port) {
- VRDPServer->vtbl->SetPort(VRDPServer, def->graphics->data.rdp.port);
- DEBUG("VRDP Port changed to: %d", def->graphics->data.rdp.port);
- } else if (def->graphics->data.rdp.autoport) {
+ if (def->graphics[i]->data.rdp.port) {
+ VRDPServer->vtbl->SetPort(VRDPServer, def->graphics[i]->data.rdp.port);
+ DEBUG("VRDP Port changed to: %d", def->graphics[i]->data.rdp.port);
+ } else if (def->graphics[i]->data.rdp.autoport) {
/* Setting the port to 0 will reset its value to
* the default one which is 3389 currently
*/
@@ -3065,37 +3070,22 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
DEBUG0("VRDP Port changed to default, which is 3389 currently");
}
- if (def->graphics->data.rdp.reuseconnection) {
+ if (def->graphics[i]->data.rdp.replaceUser) {
VRDPServer->vtbl->SetReuseSingleConnection(VRDPServer, PR_TRUE);
DEBUG0("VRDP set to reuse single connection");
}
- if (def->graphics->data.rdp.multiconnections) {
+ if (def->graphics[i]->data.rdp.multiUser) {
VRDPServer->vtbl->SetAllowMultiConnection(VRDPServer, PR_TRUE);
DEBUG0("VRDP set to allow multiple connection");
}
- if (def->graphics->data.rdp.auth) {
- if (STREQ(def->graphics->data.rdp.auth, "guest")) {
- VRDPServer->vtbl->SetAuthType(VRDPServer, VRDPAuthType_Guest);
- DEBUG0("VRDP authentication method set to Guest");
- } else if (STREQ(def->graphics->data.rdp.auth, "external")) {
- VRDPServer->vtbl->SetAuthType(VRDPServer, VRDPAuthType_External);
- DEBUG0("VRDP authentication method set to External");
- }
-
- if (def->graphics->data.rdp.authtimeout) {
- VRDPServer->vtbl->SetAuthTimeout(VRDPServer, def->graphics->data.rdp.authtimeout);
- DEBUG("VRDP authentication timeout is set to %llu", def->graphics->data.rdp.authtimeout);
- }
- }
-
- if (def->graphics->data.rdp.listenAddr) {
+ if (def->graphics[i]->data.rdp.listenAddr) {
PRUnichar *netAddressUtf16 = NULL;
- data->pFuncs->pfnUtf8ToUtf16(def->graphics->data.rdp.listenAddr, &netAddressUtf16);
+ data->pFuncs->pfnUtf8ToUtf16(def->graphics[i]->data.rdp.listenAddr, &netAddressUtf16);
VRDPServer->vtbl->SetNetAddress(VRDPServer, netAddressUtf16);
- DEBUG("VRDP listen address is set to: %s", def->graphics->data.rdp.listenAddr);
+ DEBUG("VRDP listen address is set to: %s", def->graphics[i]->data.rdp.listenAddr);
data->pFuncs->pfnUtf16Free(netAddressUtf16);
}
@@ -3103,9 +3093,86 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
VRDPServer->vtbl->nsisupports.Release((nsISupports *)VRDPServer);
}
}
+
+ if ((def->graphics[i]->type == VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP) && (guiPresent == 0)) {
+ guiPresent = 1;
+ guiDisplay = strdup(def->graphics[i]->data.desktop.display);
+ }
+
+ if ((def->graphics[i]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) && (sdlPresent == 0)) {
+ sdlPresent = 1;
+ sdlDisplay = strdup(def->graphics[i]->data.sdl.display);
+ }
+ }
+
+ if ((vrdpPresent == 1) && (guiPresent == 0) && (sdlPresent == 0)) {
+ /* store extradata key that frontend is set to vrdp */
+ PRUnichar *keyTypeUtf16 = NULL;
+ PRUnichar *valueTypeUtf16 = NULL;
+
+ data->pFuncs->pfnUtf8ToUtf16("FRONTEND/Type", &keyTypeUtf16);
+ data->pFuncs->pfnUtf8ToUtf16("vrdp", &valueTypeUtf16);
+
+ machine->vtbl->SetExtraData(machine, keyTypeUtf16, valueTypeUtf16);
+
+ data->pFuncs->pfnUtf16Free(keyTypeUtf16);
+ data->pFuncs->pfnUtf16Free(valueTypeUtf16);
+
+ } else if ((guiPresent == 0) && (sdlPresent == 1)) {
+ /* store extradata key that frontend is set to sdl */
+ PRUnichar *keyTypeUtf16 = NULL;
+ PRUnichar *valueTypeUtf16 = NULL;
+ PRUnichar *keyDislpayUtf16 = NULL;
+ PRUnichar *valueDisplayUtf16 = NULL;
+
+ data->pFuncs->pfnUtf8ToUtf16("FRONTEND/Type", &keyTypeUtf16);
+ data->pFuncs->pfnUtf8ToUtf16("sdl", &valueTypeUtf16);
+
+ machine->vtbl->SetExtraData(machine, keyTypeUtf16, valueTypeUtf16);
+
+ data->pFuncs->pfnUtf16Free(keyTypeUtf16);
+ data->pFuncs->pfnUtf16Free(valueTypeUtf16);
+
+ if (sdlDisplay) {
+ data->pFuncs->pfnUtf8ToUtf16("FRONTEND/Display", &keyDislpayUtf16);
+ data->pFuncs->pfnUtf8ToUtf16(sdlDisplay, &valueDisplayUtf16);
+
+ machine->vtbl->SetExtraData(machine, keyDislpayUtf16, valueDisplayUtf16);
+
+ data->pFuncs->pfnUtf16Free(keyDislpayUtf16);
+ data->pFuncs->pfnUtf16Free(valueDisplayUtf16);
+ }
+
+ } else {
+ /* if all are set then default is gui, with vrdp turned on */
+ PRUnichar *keyTypeUtf16 = NULL;
+ PRUnichar *valueTypeUtf16 = NULL;
+ PRUnichar *keyDislpayUtf16 = NULL;
+ PRUnichar *valueDisplayUtf16 = NULL;
+
+ data->pFuncs->pfnUtf8ToUtf16("FRONTEND/Type", &keyTypeUtf16);
+ data->pFuncs->pfnUtf8ToUtf16("gui", &valueTypeUtf16);
+
+ machine->vtbl->SetExtraData(machine, keyTypeUtf16, valueTypeUtf16);
+
+ data->pFuncs->pfnUtf16Free(keyTypeUtf16);
+ data->pFuncs->pfnUtf16Free(valueTypeUtf16);
+
+ if (guiDisplay) {
+ data->pFuncs->pfnUtf8ToUtf16("FRONTEND/Display", &keyDislpayUtf16);
+ data->pFuncs->pfnUtf8ToUtf16(guiDisplay, &valueDisplayUtf16);
+
+ machine->vtbl->SetExtraData(machine, keyDislpayUtf16, valueDisplayUtf16);
+
+ data->pFuncs->pfnUtf16Free(keyDislpayUtf16);
+ data->pFuncs->pfnUtf16Free(valueDisplayUtf16);
+ }
}
+
+ VIR_FREE(guiDisplay);
+ VIR_FREE(sdlDisplay);
+
} /* Finished:Block to attach the Remote Display to VM */
-#endif
{ /* Started:Block to attach USB Devices to VM */
if (def->nhostdevs > 0) {