[libvirt] [PATCH 1/3] Support for vrdp/sdl/gui while defining a machine

Daniel P. Berrange berrange at redhat.com
Mon May 11 10:20:36 UTC 2009


On Thu, May 07, 2009 at 03:49:28PM +0200, Pritesh Kothari wrote:
> Hi All,
> 
> I have added support for vrdp/sdl/gui modes for VirtualBox driver in libvirt. 
> Tha patch's are as below:
> 
> [PATCH 1/3]: contains support for vrdp/sdl/gui while defining a machine.
> [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
> 
> Regards,
> 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
> @@ -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);
> +                }
> +            }

Need to check for OOM failure here.

> +
> +            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) {


Generally, looks fine apart from the OOM check

Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list