diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index a8302c5d84c5722abd4c34f2e2fd2e3b18654c11..6376a30ebb0dc567eba4016edb4bc57941cf29bd 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4047,6 +4047,44 @@ qemuProcessGraphicsReservePorts(virQEMUDriverPtr driver, } +static int +qemuProcessGraphicsAllocatePorts(virQEMUDriverPtr driver, + virDomainGraphicsDefPtr graphics, + bool allocate) +{ + virDomainGraphicsListenDefPtr glisten; + + if (graphics->nListens <= 0) + return 0; + + glisten = &graphics->listens[0]; + + if (glisten->type != VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS && + glisten->type != VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK) + return 0; + + switch (graphics->type) { + case VIR_DOMAIN_GRAPHICS_TYPE_VNC: + if (qemuProcessVNCAllocatePorts(driver, graphics, allocate) < 0) + return -1; + break; + + case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: + if (qemuProcessSPICEAllocatePorts(driver, graphics, allocate) < 0) + return -1; + break; + + case VIR_DOMAIN_GRAPHICS_TYPE_SDL: + case VIR_DOMAIN_GRAPHICS_TYPE_RDP: + case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP: + case VIR_DOMAIN_GRAPHICS_TYPE_LAST: + break; + } + + return 0; +} + + static int qemuProcessGraphicsSetupNetworkAddress(virDomainGraphicsListenDefPtr glisten, const char *listenAddr) @@ -4176,27 +4214,8 @@ qemuProcessSetupGraphics(virQEMUDriverPtr driver, for (i = 0; i < vm->def->ngraphics; ++i) { virDomainGraphicsDefPtr graphics = vm->def->graphics[i]; - if (graphics->nListens > 0 && - (graphics->listens[0].type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS || - graphics->listens[0].type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK)) { - switch (graphics->type) { - case VIR_DOMAIN_GRAPHICS_TYPE_VNC: - if (qemuProcessVNCAllocatePorts(driver, graphics, allocate) < 0) - goto cleanup; - break; - - case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: - if (qemuProcessSPICEAllocatePorts(driver, graphics, allocate) < 0) - goto cleanup; - break; - - case VIR_DOMAIN_GRAPHICS_TYPE_SDL: - case VIR_DOMAIN_GRAPHICS_TYPE_RDP: - case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP: - case VIR_DOMAIN_GRAPHICS_TYPE_LAST: - break; - } - } + if (qemuProcessGraphicsAllocatePorts(driver, graphics, allocate) < 0) + goto cleanup; if (qemuProcessGraphicsSetupListen(driver, graphics, vm) < 0) goto cleanup;