void
-virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCaps *qemuCaps,
+virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUDriverConfig *cfg,
+ virQEMUCaps *qemuCaps,
virDomainCapsDeviceGraphics *dev)
{
dev->supported = VIR_TRISTATE_BOOL_YES;
VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_SPICE);
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_EGL_HEADLESS))
VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS);
- if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DISPLAY_DBUS))
- VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_DBUS);
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DISPLAY_DBUS)) {
+ VIR_DOMAIN_CAPS_ENUM_SET(dev->type,
+ VIR_DOMAIN_GRAPHICS_TYPE_DBUS);
+ if (qemuRdpAvailable(cfg->qemuRdpName)) {
+ VIR_DOMAIN_CAPS_ENUM_SET(dev->type,
+ VIR_DOMAIN_GRAPHICS_TYPE_RDP);
+ }
+ }
}
virQEMUCapsFillDomainCPUCaps(qemuCaps, hostarch, domCaps);
virQEMUCapsFillDomainMemoryBackingCaps(qemuCaps, memoryBacking);
virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, domCaps->machine, disk);
- virQEMUCapsFillDomainDeviceGraphicsCaps(qemuCaps, graphics);
+ virQEMUCapsFillDomainDeviceGraphicsCaps(cfg, qemuCaps, graphics);
virQEMUCapsFillDomainDeviceVideoCaps(qemuCaps, video);
virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev);
virQEMUCapsFillDomainDeviceRNGCaps(qemuCaps, rng);
void virQEMUCapsFillDomainMemoryBackingCaps(virQEMUCaps *qemuCaps,
virDomainCapsMemoryBacking *memoryBacking);
-void virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCaps *qemuCaps,
+void virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUDriverConfig *cfg,
+ virQEMUCaps *qemuCaps,
virDomainCapsDeviceGraphics *dev);
void virQEMUCapsFillDomainDeviceVideoCaps(virQEMUCaps *qemuCaps,
"SetCredentials",
args);
}
+
+
+bool
+qemuRdpAvailable(const char *helper)
+{
+ g_autoptr(qemuRdp) rdp = NULL;
+
+ rdp = qemuRdpNewForHelper(helper);
+
+ return rdp && qemuRdpHasFeature(rdp, QEMU_RDP_FEATURE_DBUS_ADDRESS);
+}
guint leaving_id;
};
+bool qemuRdpAvailable(const char *helper);
+
qemuRdp *qemuRdpNew(void);
qemuRdp *qemuRdpNewForHelper(const char *helper);
virQEMUDriver *driver,
virQEMUCaps *qemuCaps)
{
+ g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
virDomainCapsDeviceGraphics graphicsCaps = { 0 };
- virQEMUCapsFillDomainDeviceGraphicsCaps(qemuCaps, &graphicsCaps);
+ virQEMUCapsFillDomainDeviceGraphicsCaps(cfg, qemuCaps, &graphicsCaps);
if (!VIR_DOMAIN_CAPS_ENUM_IS_SET(graphicsCaps.type, graphics->type)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>dbus</value>
</enum>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>dbus</value>
</enum>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<graphics supported='yes'>
<enum name='type'>
<value>vnc</value>
+ <value>rdp</value>
<value>dbus</value>
</enum>
</graphics>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>egl-headless</value>
<value>dbus</value>
</enum>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
<enum name='type'>
<value>sdl</value>
<value>vnc</value>
+ <value>rdp</value>
<value>spice</value>
<value>egl-headless</value>
<value>dbus</value>
}
+/* Enough to tell capabilities code that qemu-rdp is usable */
+bool qemuRdpAvailable(const char *helper G_GNUC_UNUSED)
+{
+ return true;
+}
+
bool
virTPMSwtpmSetupCapsGet(virTPMSwtpmSetupFeature cap)