diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index b828710431..5240fc3061 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -2748,3 +2748,30 @@ int vboxDomainGetInfo(virDomainPtr dom, virDomainInfoPtr info) cleanup: return ret; } + +int vboxDomainGetState(virDomainPtr dom, int *state, + int *reason, unsigned int flags) +{ + VBOX_OBJECT_CHECK(dom->conn, int, -1); + vboxIIDUnion domiid; + IMachine *machine = NULL; + PRUint32 mstate; + + virCheckFlags(0, -1); + + if (openSessionForMachine(data, dom->uuid, &domiid, &machine, false) < 0) + goto cleanup; + + gVBoxAPI.UIMachine.GetState(machine, &mstate); + + *state = gVBoxAPI.vboxConvertState(mstate); + + if (reason) + *reason = 0; + + ret = 0; + + cleanup: + vboxIIDUnalloc(&domiid); + return ret; +} diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 4f57762bfd..e9dd78d72a 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -955,42 +955,6 @@ static virDomainState _vboxConvertState(PRUint32 state) } } -static int -vboxDomainGetState(virDomainPtr dom, - int *state, - int *reason, - unsigned int flags) -{ - VBOX_OBJECT_CHECK(dom->conn, int, -1); - vboxIID domiid = VBOX_IID_INITIALIZER; - IMachine *machine = NULL; - PRUint32 mstate = MachineState_Null; - nsresult rc; - - virCheckFlags(0, -1); - - vboxIIDFromUUID(&domiid, dom->uuid); - rc = VBOX_OBJECT_GET_MACHINE(domiid.value, &machine); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_NO_DOMAIN, "%s", - _("no domain with matching UUID")); - goto cleanup; - } - - machine->vtbl->GetState(machine, &mstate); - - *state = _vboxConvertState(mstate); - - if (reason) - *reason = 0; - - ret = 0; - - cleanup: - vboxIIDUnalloc(&domiid); - return ret; -} - static int vboxDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, unsigned int flags) diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h index 897e10c054..0f6c8eadc4 100644 --- a/src/vbox/vbox_uniformed_api.h +++ b/src/vbox/vbox_uniformed_api.h @@ -436,6 +436,8 @@ int vboxDomainDestroy(virDomainPtr dom); char *vboxDomainGetOSType(virDomainPtr dom); int vboxDomainSetMemory(virDomainPtr dom, unsigned long memory); int vboxDomainGetInfo(virDomainPtr dom, virDomainInfoPtr info); +int vboxDomainGetState(virDomainPtr dom, int *state, + int *reason, unsigned int flags); /* Version specified functions for installing uniformed API */ void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);