提交 14babb49 编写于 作者: T Taowei 提交者: Michal Privoznik

vbox: Rewrite vboxDomainReboot

上级 502c43ee
...@@ -2509,3 +2509,47 @@ int vboxDomainShutdown(virDomainPtr dom) ...@@ -2509,3 +2509,47 @@ int vboxDomainShutdown(virDomainPtr dom)
{ {
return vboxDomainShutdownFlags(dom, 0); return vboxDomainShutdownFlags(dom, 0);
} }
int vboxDomainReboot(virDomainPtr dom, unsigned int flags)
{
VBOX_OBJECT_CHECK(dom->conn, int, -1);
IMachine *machine = NULL;
vboxIIDUnion iid;
IConsole *console = NULL;
PRUint32 state;
PRBool isAccessible = PR_FALSE;
virCheckFlags(0, -1);
if (openSessionForMachine(data, dom->uuid, &iid, &machine, false) < 0)
goto cleanup;
if (!machine)
goto cleanup;
gVBoxAPI.UIMachine.GetAccessible(machine, &isAccessible);
if (!isAccessible)
goto cleanup;
gVBoxAPI.UIMachine.GetState(machine, &state);
if (gVBoxAPI.machineStateChecker.Running(state)) {
gVBoxAPI.UISession.OpenExisting(data, &iid, machine);
gVBoxAPI.UISession.GetConsole(data->vboxSession, &console);
if (console) {
gVBoxAPI.UIConsole.Reset(console);
VBOX_RELEASE(console);
ret = 0;
}
gVBoxAPI.UISession.Close(data->vboxSession);
} else {
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("machine not running, so can't reboot it"));
goto cleanup;
}
cleanup:
VBOX_RELEASE(machine);
vboxIIDUnalloc(&iid);
return ret;
}
...@@ -933,55 +933,6 @@ vboxSocketParseAddrUtf16(vboxGlobalData *data, const PRUnichar *utf16, ...@@ -933,55 +933,6 @@ vboxSocketParseAddrUtf16(vboxGlobalData *data, const PRUnichar *utf16,
return result; return result;
} }
static int vboxDomainReboot(virDomainPtr dom, unsigned int flags)
{
VBOX_OBJECT_CHECK(dom->conn, int, -1);
IMachine *machine = NULL;
vboxIID iid = VBOX_IID_INITIALIZER;
IConsole *console = NULL;
PRUint32 state = MachineState_Null;
PRBool isAccessible = PR_FALSE;
nsresult rc;
virCheckFlags(0, -1);
vboxIIDFromUUID(&iid, dom->uuid);
rc = VBOX_OBJECT_GET_MACHINE(iid.value, &machine);
if (NS_FAILED(rc)) {
virReportError(VIR_ERR_NO_DOMAIN,
_("no domain with matching id %d"), dom->id);
goto cleanup;
}
if (!machine)
goto cleanup;
machine->vtbl->GetAccessible(machine, &isAccessible);
if (isAccessible) {
machine->vtbl->GetState(machine, &state);
if (state == MachineState_Running) {
VBOX_SESSION_OPEN_EXISTING(iid.value, machine);
data->vboxSession->vtbl->GetConsole(data->vboxSession, &console);
if (console) {
console->vtbl->Reset(console);
VBOX_RELEASE(console);
ret = 0;
}
VBOX_SESSION_CLOSE();
} else {
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("machine not running, so can't reboot it"));
goto cleanup;
}
}
cleanup:
VBOX_RELEASE(machine);
vboxIIDUnalloc(&iid);
return ret;
}
static int static int
vboxDomainDestroyFlags(virDomainPtr dom, vboxDomainDestroyFlags(virDomainPtr dom,
unsigned int flags) unsigned int flags)
...@@ -9898,6 +9849,12 @@ _consolePowerButton(IConsole *console) ...@@ -9898,6 +9849,12 @@ _consolePowerButton(IConsole *console)
return console->vtbl->PowerButton(console); return console->vtbl->PowerButton(console);
} }
static nsresult
_consoleReset(IConsole *console)
{
return console->vtbl->Reset(console);
}
static nsresult static nsresult
_progressWaitForCompletion(IProgress *progress, PRInt32 timeout) _progressWaitForCompletion(IProgress *progress, PRInt32 timeout)
{ {
...@@ -10424,6 +10381,7 @@ static vboxUniformedIConsole _UIConsole = { ...@@ -10424,6 +10381,7 @@ static vboxUniformedIConsole _UIConsole = {
.Pause = _consolePause, .Pause = _consolePause,
.Resume = _consoleResume, .Resume = _consoleResume,
.PowerButton = _consolePowerButton, .PowerButton = _consolePowerButton,
.Reset = _consoleReset,
}; };
static vboxUniformedIProgress _UIProgress = { static vboxUniformedIProgress _UIProgress = {
......
...@@ -240,6 +240,7 @@ typedef struct { ...@@ -240,6 +240,7 @@ typedef struct {
nsresult (*Pause)(IConsole *console); nsresult (*Pause)(IConsole *console);
nsresult (*Resume)(IConsole *console); nsresult (*Resume)(IConsole *console);
nsresult (*PowerButton)(IConsole *console); nsresult (*PowerButton)(IConsole *console);
nsresult (*Reset)(IConsole *console);
} vboxUniformedIConsole; } vboxUniformedIConsole;
/* Functions for IProgress */ /* Functions for IProgress */
...@@ -424,6 +425,7 @@ int vboxDomainSuspend(virDomainPtr dom); ...@@ -424,6 +425,7 @@ int vboxDomainSuspend(virDomainPtr dom);
int vboxDomainResume(virDomainPtr dom); int vboxDomainResume(virDomainPtr dom);
int vboxDomainShutdownFlags(virDomainPtr dom, unsigned int flags); int vboxDomainShutdownFlags(virDomainPtr dom, unsigned int flags);
int vboxDomainShutdown(virDomainPtr dom); int vboxDomainShutdown(virDomainPtr dom);
int vboxDomainReboot(virDomainPtr dom, unsigned int flags);
/* Version specified functions for installing uniformed API */ /* Version specified functions for installing uniformed API */
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI); void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册