diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 17a80244921b9f4bcf0ea1bc2a24a576db5ccf88..f2ac7f95c85e6387bed6e2ac5ba0a120594d8448 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -282,19 +282,19 @@ vboxDestroyDriverConnection(void) virMutexUnlock(&vbox_driver_lock); } -static int openSessionForMachine(vboxDriverPtr data, const unsigned char *dom_uuid, vboxIIDUnion *iid, - IMachine **machine, bool checkflag) +static int openSessionForMachine(vboxDriverPtr data, const unsigned char *dom_uuid, + vboxIIDUnion *iid, IMachine **machine) { VBOX_IID_INITIALIZE(iid); vboxIIDFromUUID(iid, dom_uuid); - if (!checkflag || gVBoxAPI.getMachineForSession) { - /* Get machine for the call to VBOX_SESSION_OPEN_EXISTING */ - if (NS_FAILED(gVBoxAPI.UIVirtualBox.GetMachine(data->vboxObj, iid, machine))) { - virReportError(VIR_ERR_NO_DOMAIN, "%s", - _("no domain with matching uuid")); - return -1; - } + + /* Get machine for the call to VBOX_SESSION_OPEN_EXISTING */ + if (NS_FAILED(gVBoxAPI.UIVirtualBox.GetMachine(data->vboxObj, iid, machine))) { + virReportError(VIR_ERR_NO_DOMAIN, "%s", + _("no domain with matching uuid")); + return -1; } + return 0; } @@ -563,7 +563,7 @@ vboxDomainSave(virDomainPtr dom, const char *path ATTRIBUTE_UNUSED) */ /* Open a Session for the machine */ - if (openSessionForMachine(data, dom->uuid, &iid, &machine, true) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; rc = gVBoxAPI.UISession.OpenExisting(data, &iid, machine); @@ -2014,42 +2014,6 @@ vboxDomainDefineXML(virConnectPtr conn, const char *xml) return vboxDomainDefineXMLFlags(conn, xml, 0); } -static void -detachDevices_common(vboxDriverPtr data, vboxIIDUnion *iidu) -{ - /* Block for checking if HDD's are attched to VM. - * considering just IDE bus for now. Also skipped - * chanel=1 and device=0 (Secondary Master) as currenlty - * it is allocated to CD/DVD Drive by default. - * - * Only do this for VirtualBox 3.x and before. Since - * VirtualBox 4.0 the Unregister method can do this for use. - */ - IMachine *machine = NULL; - PRUnichar *hddcnameUtf16 = NULL; - nsresult rc; - char *hddcname; - - if (!gVBoxAPI.detachDevicesExplicitly) - VIR_WARN("This function may not work in current vbox version"); - - ignore_value(VIR_STRDUP(hddcname, "IDE")); - VBOX_UTF8_TO_UTF16(hddcname, &hddcnameUtf16); - VIR_FREE(hddcname); - - /* Open a Session for the machine */ - rc = gVBoxAPI.UISession.Open(data, iidu, machine); - if (NS_SUCCEEDED(rc)) { - rc = gVBoxAPI.UISession.GetMachine(data->vboxSession, &machine); - if (NS_SUCCEEDED(rc) && machine) { - gVBoxAPI.detachDevices(data, machine, hddcnameUtf16); - gVBoxAPI.UIMachine.SaveSettings(machine); - } - gVBoxAPI.UISession.Close(data->vboxSession); - } - VBOX_UTF16_FREE(hddcnameUtf16); -} - static int vboxDomainUndefineFlags(virDomainPtr dom, unsigned int flags) { vboxDriverPtr data = dom->conn->privateData; @@ -2067,8 +2031,6 @@ static int vboxDomainUndefineFlags(virDomainPtr dom, unsigned int flags) * VBox, so we can trivially ignore that flag. */ virCheckFlags(VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA, -1); vboxIIDFromUUID(&iid, dom->uuid); - if (gVBoxAPI.detachDevicesExplicitly) - detachDevices_common(data, &iid); rc = gVBoxAPI.unregisterMachine(data, &iid, &machine); DEBUGIID("UUID of machine being undefined", &iid); @@ -2432,7 +2394,7 @@ static int vboxDomainIsPersistent(virDomainPtr dom) if (!data->vboxObj) return ret; - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; ret = 1; @@ -2455,7 +2417,7 @@ static int vboxDomainIsUpdated(virDomainPtr dom) if (!data->vboxObj) return ret; - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; ret = 0; @@ -2479,7 +2441,7 @@ static int vboxDomainSuspend(virDomainPtr dom) if (!data->vboxObj) return ret; - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!machine) @@ -2530,7 +2492,7 @@ static int vboxDomainResume(virDomainPtr dom) if (!data->vboxObj) return ret; - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!machine) @@ -2583,7 +2545,7 @@ static int vboxDomainShutdownFlags(virDomainPtr dom, unsigned int flags) virCheckFlags(0, -1); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!machine) @@ -2640,7 +2602,7 @@ static int vboxDomainReboot(virDomainPtr dom, unsigned int flags) virCheckFlags(0, -1); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!machine) @@ -2688,7 +2650,7 @@ static int vboxDomainDestroyFlags(virDomainPtr dom, unsigned int flags) virCheckFlags(0, -1); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!machine) @@ -2752,7 +2714,7 @@ static int vboxDomainSetMemory(virDomainPtr dom, unsigned long memory) if (!data->vboxObj) return ret; - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!machine) @@ -2894,7 +2856,7 @@ static int vboxDomainGetState(virDomainPtr dom, int *state, virCheckFlags(0, -1); - if (openSessionForMachine(data, dom->uuid, &domiid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; gVBoxAPI.UIMachine.GetState(machine, &mstate); @@ -2929,7 +2891,7 @@ static int vboxDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, return -1; } - if (openSessionForMachine(data, dom->uuid, &iid, &machine, true) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) return -1; rc = gVBoxAPI.UISession.Open(data, &iid, machine); @@ -3859,7 +3821,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) /* Flags checked by virDomainDefFormat */ - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!(def = virDomainDefNew())) @@ -4131,7 +4093,7 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom, if (dev == NULL) goto cleanup; - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!machine) @@ -4263,7 +4225,7 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml) if (dev == NULL) goto cleanup; - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!machine) @@ -4487,7 +4449,7 @@ vboxSnapshotRedefine(virDomainPtr dom, if (!gVBoxAPI.vboxSnapshotRedefine) VIR_WARN("This function may not work in current version"); - if (openSessionForMachine(data, dom->uuid, &domiid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; rc = gVBoxAPI.UIMachine.SaveSettings(machine); @@ -5342,7 +5304,7 @@ vboxDomainSnapshotCreateXML(virDomainPtr dom, goto cleanup; - if (openSessionForMachine(data, dom->uuid, &domiid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; if (gVBoxAPI.vboxSnapshotRedefine) { @@ -5588,7 +5550,7 @@ static int vboxSnapshotGetReadWriteDisks(virDomainSnapshotDefPtr def, VIR_WARN("This function may not work in current version"); VBOX_IID_INITIALIZE(&snapIid); - if (openSessionForMachine(data, dom->uuid, &domiid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; if (!(snap = vboxDomainSnapshotGet(data, dom, machine, snapshot->name))) @@ -5808,7 +5770,7 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr snapshot, if (!gVBoxAPI.vboxSnapshotRedefine) VIR_WARN("This function may not work in current version"); - if (openSessionForMachine(data, dom->uuid, &domiid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; if (!(snap = vboxDomainSnapshotGet(data, dom, machine, snapshot->name))) @@ -6025,7 +5987,7 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, virCheckFlags(0, NULL); - if (openSessionForMachine(data, dom->uuid, &domiid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; if (!(snap = vboxDomainSnapshotGet(data, dom, machine, snapshot->name))) @@ -6164,7 +6126,7 @@ static int vboxDomainSnapshotNum(virDomainPtr dom, unsigned int flags) virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_ROOTS | VIR_DOMAIN_SNAPSHOT_LIST_METADATA, -1); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; /* VBox snapshots do not require libvirt to maintain any metadata. */ @@ -6210,7 +6172,7 @@ static int vboxDomainSnapshotListNames(virDomainPtr dom, char **names, virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_ROOTS | VIR_DOMAIN_SNAPSHOT_LIST_METADATA, -1); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (flags & VIR_DOMAIN_SNAPSHOT_LIST_METADATA) { @@ -6288,7 +6250,7 @@ vboxDomainSnapshotLookupByName(virDomainPtr dom, const char *name, virCheckFlags(0, NULL); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!(snapshot = vboxDomainSnapshotGet(data, dom, machine, name))) @@ -6318,7 +6280,7 @@ static int vboxDomainHasCurrentSnapshot(virDomainPtr dom, virCheckFlags(0, -1); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; rc = gVBoxAPI.UIMachine.GetCurrentSnapshot(machine, &snapshot); @@ -6359,7 +6321,7 @@ vboxDomainSnapshotGetParent(virDomainSnapshotPtr snapshot, virCheckFlags(0, NULL); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!(snap = vboxDomainSnapshotGet(data, dom, machine, snapshot->name))) @@ -6421,7 +6383,7 @@ vboxDomainSnapshotCurrent(virDomainPtr dom, unsigned int flags) virCheckFlags(0, NULL); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; rc = gVBoxAPI.UIMachine.GetCurrentSnapshot(machine, &snapshot); @@ -6480,7 +6442,7 @@ static int vboxDomainSnapshotIsCurrent(virDomainSnapshotPtr snapshot, virCheckFlags(0, -1); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; if (!(snap = vboxDomainSnapshotGet(data, dom, machine, snapshot->name))) @@ -6537,7 +6499,7 @@ static int vboxDomainSnapshotHasMetadata(virDomainSnapshotPtr snapshot, virCheckFlags(0, -1); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; /* Check that snapshot exists. If so, there is no metadata. */ @@ -6572,7 +6534,7 @@ static int vboxDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, virCheckFlags(0, -1); - if (openSessionForMachine(data, dom->uuid, &domiid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; newSnapshot = vboxDomainSnapshotGet(data, dom, machine, snapshot->name); @@ -6766,7 +6728,7 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr snapshot) goto cleanup; } - if (openSessionForMachine(data, dom->uuid, &domiid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; rc = gVBoxAPI.UIMachine.GetSettingsFilePath(machine, &settingsFilePathUtf16); if (NS_FAILED(rc)) { @@ -7174,7 +7136,7 @@ static int vboxDomainSnapshotDelete(virDomainSnapshotPtr snapshot, virCheckFlags(VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN | VIR_DOMAIN_SNAPSHOT_DELETE_METADATA_ONLY, -1); - if (openSessionForMachine(data, dom->uuid, &domiid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; snap = vboxDomainSnapshotGet(data, dom, machine, snapshot->name); @@ -7259,15 +7221,9 @@ vboxDomainScreenshot(virDomainPtr dom, if (!data->vboxObj) return ret; - if (!gVBoxAPI.supportScreenshot) { - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("virDomainScreenshot don't support for current vbox version")); - return NULL; - } - virCheckFlags(0, NULL); - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) return NULL; rc = gVBoxAPI.UIMachine.GetMonitorCount(machine, &max_screen); @@ -7714,7 +7670,7 @@ vboxDomainSendKey(virDomainPtr dom, keyUpCodes[i] = keyDownCodes[i] + 0x80; } - if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0) + if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; rc = gVBoxAPI.UISession.OpenExisting(data, &iid, machine); @@ -7857,6 +7813,7 @@ virHypervisorDriver vboxCommonDriver = { .nodeAllocPages = vboxNodeAllocPages, /* 1.2.9 */ .domainHasManagedSaveImage = vboxDomainHasManagedSaveImage, /* 1.2.13 */ .domainSendKey = vboxDomainSendKey, /* 1.2.15 */ + .domainScreenshot = vboxDomainScreenshot, /* 0.9.2 */ }; static void updateDriver(void) @@ -7865,10 +7822,6 @@ static void updateDriver(void) * We need to make sure the vboxUniformedAPI is initialized * before calling this function. */ gVBoxAPI.registerDomainEvent(&vboxCommonDriver); - if (gVBoxAPI.supportScreenshot) - vboxCommonDriver.domainScreenshot = vboxDomainScreenshot; - else - vboxCommonDriver.domainScreenshot = NULL; } virHypervisorDriverPtr vboxGetHypervisorDriver(uint32_t uVersion) diff --git a/src/vbox/vbox_storage.c b/src/vbox/vbox_storage.c index 6c92a3c1439a2321c54bd0d106cfbf8253c20fea..8ac7e1d2e369e1505eab111691e3f49f463600e5 100644 --- a/src/vbox/vbox_storage.c +++ b/src/vbox/vbox_storage.c @@ -568,14 +568,12 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags) VBOX_IID_INITIALIZE(&machineId); vboxIIDFromArrayItem(&machineId, &machineIds, i); - if (gVBoxAPI.getMachineForSession) { - if (NS_FAILED(gVBoxAPI.UIVirtualBox.GetMachine(data->vboxObj, - &machineId, - &machine))) { - virReportError(VIR_ERR_NO_DOMAIN, "%s", - _("no domain with matching uuid")); - break; - } + if (NS_FAILED(gVBoxAPI.UIVirtualBox.GetMachine(data->vboxObj, + &machineId, + &machine))) { + virReportError(VIR_ERR_NO_DOMAIN, "%s", + _("no domain with matching uuid")); + break; } if (NS_FAILED(gVBoxAPI.UISession.Open(data, &machineId, machine))) { diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index cbc8f70bb737d0e74b83dbb0f8ed39322be60024..6b3b5512e6ecfcb78bea5b8f5a43b1ad6425471c 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -3352,17 +3352,6 @@ void NAME(InstallUniformedAPI)(vboxUniformedAPI *pVBoxAPI) pVBoxAPI->domainEventCallbacks = 1; #endif /* VBOX_API_VERSION > 2002000 || VBOX_API_VERSION < 4000000 */ -#if VBOX_API_VERSION >= 4000000 - /* Get machine for the call to VBOX_SESSION_OPEN_EXISTING */ - pVBoxAPI->getMachineForSession = 1; - pVBoxAPI->detachDevicesExplicitly = 0; - pVBoxAPI->supportScreenshot = 1; -#else /* VBOX_API_VERSION < 4000000 */ - pVBoxAPI->getMachineForSession = 0; - pVBoxAPI->detachDevicesExplicitly = 1; - pVBoxAPI->supportScreenshot = 0; -#endif /* VBOX_API_VERSION < 4000000 */ - #if VBOX_API_VERSION >= 4001000 pVBoxAPI->chipsetType = 1; #else /* VBOX_API_VERSION < 4001000 */ diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h index 3892aaee9ffafdbb719194059adc850a204ec708..abb848672534000e14d291f8c054814ac1530139 100644 --- a/src/vbox/vbox_uniformed_api.h +++ b/src/vbox/vbox_uniformed_api.h @@ -594,13 +594,10 @@ typedef struct { uniformedMachineStateChecker machineStateChecker; /* vbox API features */ bool domainEventCallbacks; - bool getMachineForSession; - bool detachDevicesExplicitly; bool chipsetType; bool accelerate2DVideo; bool oldMediumInterface; bool vboxSnapshotRedefine; - bool supportScreenshot; bool networkRemoveInterface; } vboxUniformedAPI;