From 95170a3085b9ccead90755d26e13cd9de5db07a6 Mon Sep 17 00:00:00 2001 From: Alexander Burluka Date: Fri, 19 Dec 2014 16:41:03 +0300 Subject: [PATCH] Parallels: Add VNC hostname setup Add missing VNC setup via Parallels SDK. Parallels Cloud Server starts one VNC server per domain, so we could process only one VNC server definition. Network-based listening currently is unimplemented. Signed-off-by: Alexander Burluka --- src/parallels/parallels_sdk.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/parallels/parallels_sdk.c b/src/parallels/parallels_sdk.c index cde5772614..36ec57bbbf 100644 --- a/src/parallels/parallels_sdk.c +++ b/src/parallels/parallels_sdk.c @@ -1929,7 +1929,7 @@ static int prlsdkCheckGraphicsUnsupportedParams(virDomainDefPtr def) if (def->ngraphics == 0) return 0; - if (def->ngraphics >1) { + if (def->ngraphics > 1) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Parallels Cloud Server supports only " "one VNC per domain.")); @@ -1988,6 +1988,20 @@ static int prlsdkCheckGraphicsUnsupportedParams(virDomainDefPtr def) return -1; } + if (gr->nListens > 1) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Parallels driver doesn't support more than " + "one listening VNC server per domain")); + return -1; + } + + if (gr->nListens == 1 && + virDomainGraphicsListenGetType(gr, 0) != VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Parallels driver supports only address-based VNC listening")); + return -1; + } + return 0; } @@ -2286,6 +2300,7 @@ static int prlsdkApplyGraphicsParams(PRL_HANDLE sdkdom, virDomainDefPtr def) virDomainGraphicsDefPtr gr; PRL_RESULT pret; int ret = -1; + const char *listenAddr = NULL; if (prlsdkCheckGraphicsUnsupportedParams(def)) return -1; @@ -2306,6 +2321,14 @@ static int prlsdkApplyGraphicsParams(PRL_HANDLE sdkdom, virDomainDefPtr def) prlsdkCheckRetGoto(pret, cleanup); } + if (gr->nListens == 1) { + listenAddr = virDomainGraphicsListenGetAddress(gr, 0); + if (!listenAddr) + goto cleanup; + pret = PrlVmCfg_SetVNCHostName(sdkdom, listenAddr); + prlsdkCheckRetGoto(pret, cleanup); + } + ret = 0; cleanup: return ret;