VBoxManageMisc.cpp revision a126a5a0d184e3245a585414758011d1d095b35f
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* $Id$ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VBoxManage - VirtualBox's command-line interface.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Copyright (C) 2006-2009 Oracle Corporation
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync */
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync/*******************************************************************************
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync* Header Files *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync*******************************************************************************/
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifndef VBOX_ONLY_DOCS
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/com/com.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/com/string.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/com/Guid.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/com/array.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/com/ErrorInfo.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/com/errorprint.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/com/EventQueue.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync#include <VBox/com/VirtualBox.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <vector>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <list>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* !VBOX_ONLY_DOCS */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync#include <iprt/asm.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/buildconfig.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/cidr.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/ctype.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/dir.h>
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync#include <iprt/env.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/err.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/file.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/initterm.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/param.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/path.h>
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync#include <iprt/stream.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/string.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/stdarg.h>
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync#include <iprt/thread.h>
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync#include <iprt/uuid.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/getopt.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/ctype.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/version.h>
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync#include <VBox/log.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "VBoxManage.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncusing namespace com;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
0174432b2b1a760b89840ba696f7ba51def65dddvboxsyncint handleRegisterVM(HandlerArg *a)
2daaccf68be3773aee600c5c3e48bcf5401418a6vboxsync{
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync HRESULT rc;
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync if (a->argc != 1)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync return errorSyntax(USAGE_REGISTERVM, "Incorrect number of parameters");
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync ComPtr<IMachine> machine;
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync /** @todo Ugly hack to get both the API interpretation of relative paths
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync * and the client's interpretation of relative paths. Remove after the API
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync * has been redesigned. */
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync rc = a->virtualBox->OpenMachine(Bstr(a->argv[0]), machine.asOutParam());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (rc == VBOX_E_FILE_ERROR)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync char szVMFileAbs[RTPATH_MAX] = "";
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int vrc = RTPathAbs(a->argv[0], szVMFileAbs, sizeof(szVMFileAbs));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(vrc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync RTPrintf("Cannot convert filename \"%s\" to absolute path\n", a->argv[0]);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return 1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(a->virtualBox, OpenMachine(Bstr(szVMFileAbs), machine.asOutParam()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else if (FAILED(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(a->virtualBox, OpenMachine(Bstr(a->argv[0]), machine.asOutParam()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (SUCCEEDED(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ASSERT(machine);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(a->virtualBox, RegisterMachine(machine));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return SUCCEEDED(rc) ? 0 : 1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncstatic const RTGETOPTDEF g_aUnregisterVMOptions[] =
22e281e75ed636601178296c6daebda8f1d17c59vboxsync{
22e281e75ed636601178296c6daebda8f1d17c59vboxsync { "--delete", 'd', RTGETOPT_REQ_NOTHING },
22e281e75ed636601178296c6daebda8f1d17c59vboxsync { "-delete", 'd', RTGETOPT_REQ_NOTHING }, // deprecated
22e281e75ed636601178296c6daebda8f1d17c59vboxsync};
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncint handleUnregisterVM(HandlerArg *a)
22e281e75ed636601178296c6daebda8f1d17c59vboxsync{
22e281e75ed636601178296c6daebda8f1d17c59vboxsync HRESULT rc;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync const char *VMName = NULL;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync bool fDelete = false;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync int c;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync RTGETOPTUNION ValueUnion;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync RTGETOPTSTATE GetState;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync // start at 0 because main() has hacked both the argc and argv given to us
22e281e75ed636601178296c6daebda8f1d17c59vboxsync RTGetOptInit(&GetState, a->argc, a->argv, g_aUnregisterVMOptions, RT_ELEMENTS(g_aUnregisterVMOptions),
22e281e75ed636601178296c6daebda8f1d17c59vboxsync 0, RTGETOPTINIT_FLAGS_NO_STD_OPTS);
22e281e75ed636601178296c6daebda8f1d17c59vboxsync while ((c = RTGetOpt(&GetState, &ValueUnion)))
22e281e75ed636601178296c6daebda8f1d17c59vboxsync {
22e281e75ed636601178296c6daebda8f1d17c59vboxsync switch (c)
22e281e75ed636601178296c6daebda8f1d17c59vboxsync {
22e281e75ed636601178296c6daebda8f1d17c59vboxsync case 'd': // --delete
7b80828e5760a8814fe6cd494d2715a4544fbddcvboxsync fDelete = true;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync break;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync case VINF_GETOPT_NOT_OPTION:
22e281e75ed636601178296c6daebda8f1d17c59vboxsync if (!VMName)
22e281e75ed636601178296c6daebda8f1d17c59vboxsync VMName = ValueUnion.psz;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync else
22e281e75ed636601178296c6daebda8f1d17c59vboxsync return errorSyntax(USAGE_UNREGISTERVM, "Invalid parameter '%s'", ValueUnion.psz);
22e281e75ed636601178296c6daebda8f1d17c59vboxsync break;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync default:
22e281e75ed636601178296c6daebda8f1d17c59vboxsync if (c > 0)
22e281e75ed636601178296c6daebda8f1d17c59vboxsync {
22e281e75ed636601178296c6daebda8f1d17c59vboxsync if (RT_C_IS_PRINT(c))
22e281e75ed636601178296c6daebda8f1d17c59vboxsync return errorSyntax(USAGE_UNREGISTERVM, "Invalid option -%c", c);
22e281e75ed636601178296c6daebda8f1d17c59vboxsync else
22e281e75ed636601178296c6daebda8f1d17c59vboxsync return errorSyntax(USAGE_UNREGISTERVM, "Invalid option case %i", c);
22e281e75ed636601178296c6daebda8f1d17c59vboxsync }
d1cbbd799d8912978f5146960b6780f387bb414bvboxsync else if (c == VERR_GETOPT_UNKNOWN_OPTION)
22e281e75ed636601178296c6daebda8f1d17c59vboxsync return errorSyntax(USAGE_UNREGISTERVM, "unknown option: %s\n", ValueUnion.psz);
22e281e75ed636601178296c6daebda8f1d17c59vboxsync else if (ValueUnion.pDef)
c17f5c90f2cb60b38ecabebce128724c6ff2d036vboxsync return errorSyntax(USAGE_UNREGISTERVM, "%s: %Rrs", ValueUnion.pDef->pszLong, c);
22e281e75ed636601178296c6daebda8f1d17c59vboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorSyntax(USAGE_UNREGISTERVM, "error: %Rrs", c);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* check for required options */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!VMName)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorSyntax(USAGE_UNREGISTERVM, "VM name required");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ComPtr<IMachine> machine;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* assume it's a UUID */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = a->virtualBox->GetMachine(Guid(VMName).toUtf16(), machine.asOutParam());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (FAILED(rc) || !machine)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* must be a name */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(VMName), machine.asOutParam()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (machine)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Bstr uuid;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync machine->COMGETTER(Id)(uuid.asOutParam());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync machine = NULL;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(a->virtualBox, UnregisterMachine(uuid, machine.asOutParam()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (SUCCEEDED(rc) && machine && fDelete)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(machine, DeleteSettings());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return SUCCEEDED(rc) ? 0 : 1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
b1c3cdef473df2fbc621d5da81acc82dbfb8a11avboxsyncint handleCreateVM(HandlerArg *a)
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Bstr baseFolder;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Bstr settingsFile;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Bstr name;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Bstr osTypeId;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync RTUUID id;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fRegister = false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync RTUuidClear(&id);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < a->argc; i++)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if ( !strcmp(a->argv[i], "--basefolder")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || !strcmp(a->argv[i], "-basefolder"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (a->argc <= i + 1)
3ecf9412133496b2aeb090cfd33a286404ec59fbvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync i++;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync baseFolder = a->argv[i];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else if ( !strcmp(a->argv[i], "--settingsfile")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || !strcmp(a->argv[i], "-settingsfile"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (a->argc <= i + 1)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync i++;
750d4d0506a38b2e80c997075d40aad474e675fbvboxsync settingsFile = a->argv[i];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else if ( !strcmp(a->argv[i], "--name")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || !strcmp(a->argv[i], "-name"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (a->argc <= i + 1)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync i++;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync name = a->argv[i];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else if ( !strcmp(a->argv[i], "--ostype")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || !strcmp(a->argv[i], "-ostype"))
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync {
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync if (a->argc <= i + 1)
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync i++;
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync osTypeId = a->argv[i];
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync }
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync else if ( !strcmp(a->argv[i], "--uuid")
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync || !strcmp(a->argv[i], "-uuid"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync if (a->argc <= i + 1)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
576d4214137bce409cdcf01e8df4a0bca5e0b2d1vboxsync i++;
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync if (RT_FAILURE(RTUuidFromStr(&id, a->argv[i])))
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync return errorArgument("Invalid UUID format %s\n", a->argv[i]);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
72ef2b9fc5ffc01d0dabd5052d6e8baa3a952773vboxsync else if ( !strcmp(a->argv[i], "--register")
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync || !strcmp(a->argv[i], "-register"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync fRegister = true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorSyntax(USAGE_CREATEVM, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!name)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorSyntax(USAGE_CREATEVM, "Parameter --name is required");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
42c1972c22e09797b4b24afbd0ec114ed076c37cvboxsync if (!baseFolder.isEmpty() && !settingsFile.isEmpty())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorSyntax(USAGE_CREATEVM, "Cannot specify both --basefolder and --settingsfile together");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync do
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ComPtr<IMachine> machine;
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (settingsFile.isEmpty())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR_BREAK(a->virtualBox,
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync CreateMachine(name, osTypeId, baseFolder, Guid(id).toUtf16(), FALSE, machine.asOutParam()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
909f4391cc20b4a3a9a2d3f8718084b669663ab2vboxsync CHECK_ERROR_BREAK(a->virtualBox,
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync CreateLegacyMachine(name, osTypeId, settingsFile, Guid(id).toUtf16(), machine.asOutParam()));
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync CHECK_ERROR_BREAK(machine, SaveSettings());
8a132edc1577cbe2a19cd778c1b2bea6ae5e8515vboxsync if (fRegister)
3ecd8008b81f02a04220705ae0033142af363280vboxsync {
3ecd8008b81f02a04220705ae0033142af363280vboxsync CHECK_ERROR_BREAK(a->virtualBox, RegisterMachine(machine));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Bstr uuid;
576d4214137bce409cdcf01e8df4a0bca5e0b2d1vboxsync CHECK_ERROR_BREAK(machine, COMGETTER(Id)(uuid.asOutParam()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR_BREAK(machine, COMGETTER(SettingsFilePath)(settingsFile.asOutParam()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync RTPrintf("Virtual machine '%ls' is created%s.\n"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync "UUID: %s\n"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync "Settings file: '%ls'\n",
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync name.raw(), fRegister ? " and registered" : "",
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Utf8Str(uuid).raw(), settingsFile.raw());
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync }
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync while (0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return SUCCEEDED(rc) ? 0 : 1;
3ecd8008b81f02a04220705ae0033142af363280vboxsync}
3ecd8008b81f02a04220705ae0033142af363280vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncint handleStartVM(HandlerArg *a)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const char *VMName = NULL;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Bstr sessionType = "gui";
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static const RTGETOPTDEF s_aStartVMOptions[] =
247b55faa8d054157f2481e68caca36f4dc9542cvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync { "--type", 't', RTGETOPT_REQ_STRING },
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync { "-type", 't', RTGETOPT_REQ_STRING }, // deprecated
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync };
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync int c;
57399ab65e2825c324fb9dcb4642d4ae2c232509vboxsync RTGETOPTUNION ValueUnion;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync RTGETOPTSTATE GetState;
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync // start at 0 because main() has hacked both the argc and argv given to us
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync RTGetOptInit(&GetState, a->argc, a->argv, s_aStartVMOptions, RT_ELEMENTS(s_aStartVMOptions),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync 0, RTGETOPTINIT_FLAGS_NO_STD_OPTS);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync while ((c = RTGetOpt(&GetState, &ValueUnion)))
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync switch (c)
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case 't': // --type
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!RTStrICmp(ValueUnion.psz, "gui"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync sessionType = "gui";
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef VBOX_WITH_VBOXSDL
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync else if (!RTStrICmp(ValueUnion.psz, "sdl"))
22e281e75ed636601178296c6daebda8f1d17c59vboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync sessionType = "sdl";
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
247b55faa8d054157f2481e68caca36f4dc9542cvboxsync#ifdef VBOX_WITH_VRDP
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else if (!RTStrICmp(ValueUnion.psz, "vrdp"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync sessionType = "vrdp";
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync }
22e281e75ed636601178296c6daebda8f1d17c59vboxsync#endif
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync#ifdef VBOX_WITH_HEADLESS
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync else if (!RTStrICmp(ValueUnion.psz, "capture"))
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync sessionType = "capture";
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync else if (!RTStrICmp(ValueUnion.psz, "headless"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync sessionType = "headless";
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync return errorArgument("Invalid session type '%s'", ValueUnion.psz);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync break;
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync case VINF_GETOPT_NOT_OPTION:
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync if (!VMName)
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync VMName = ValueUnion.psz;
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync else
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync return errorSyntax(USAGE_STARTVM, "Invalid parameter '%s'", ValueUnion.psz);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync break;
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync default:
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync if (c > 0)
e50404712a2b5234c42bdf9740bddab5729ba188vboxsync {
57399ab65e2825c324fb9dcb4642d4ae2c232509vboxsync if (RT_C_IS_PRINT(c))
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync return errorSyntax(USAGE_STARTVM, "Invalid option -%c", c);
57399ab65e2825c324fb9dcb4642d4ae2c232509vboxsync else
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync return errorSyntax(USAGE_STARTVM, "Invalid option case %i", c);
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync }
1843553dbdf4e46417158b4c6348c503adf10740vboxsync else if (c == VERR_GETOPT_UNKNOWN_OPTION)
1843553dbdf4e46417158b4c6348c503adf10740vboxsync return errorSyntax(USAGE_STARTVM, "unknown option: %s\n", ValueUnion.psz);
22e281e75ed636601178296c6daebda8f1d17c59vboxsync else if (ValueUnion.pDef)
e0b9d3c357adf9b7d05f55540e86f22943fc4b23vboxsync return errorSyntax(USAGE_STARTVM, "%s: %Rrs", ValueUnion.pDef->pszLong, c);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync else
806d0b554daa555364af5f87bc96eccbe760db7avboxsync return errorSyntax(USAGE_STARTVM, "error: %Rrs", c);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync }
1843553dbdf4e46417158b4c6348c503adf10740vboxsync }
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync /* check for required options */
1843553dbdf4e46417158b4c6348c503adf10740vboxsync if (!VMName)
1843553dbdf4e46417158b4c6348c503adf10740vboxsync return errorSyntax(USAGE_STARTVM, "VM name required");
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync ComPtr<IMachine> machine;
1843553dbdf4e46417158b4c6348c503adf10740vboxsync /* assume it's a UUID */
1843553dbdf4e46417158b4c6348c503adf10740vboxsync rc = a->virtualBox->GetMachine(Guid(VMName).toUtf16(), machine.asOutParam());
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync if (FAILED(rc) || !machine)
1843553dbdf4e46417158b4c6348c503adf10740vboxsync {
ebbb1f6c7e8bae363a4efda4b35b58c8467d24bcvboxsync /* must be a name */
1843553dbdf4e46417158b4c6348c503adf10740vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(VMName), machine.asOutParam()));
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync }
1843553dbdf4e46417158b4c6348c503adf10740vboxsync if (machine)
1843553dbdf4e46417158b4c6348c503adf10740vboxsync {
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync Bstr uuid;
1843553dbdf4e46417158b4c6348c503adf10740vboxsync machine->COMGETTER(Id)(uuid.asOutParam());
1843553dbdf4e46417158b4c6348c503adf10740vboxsync
ebbb1f6c7e8bae363a4efda4b35b58c8467d24bcvboxsync
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync Bstr env;
1843553dbdf4e46417158b4c6348c503adf10740vboxsync#if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS)
1843553dbdf4e46417158b4c6348c503adf10740vboxsync /* make sure the VM process will start on the same display as VBoxManage */
22e281e75ed636601178296c6daebda8f1d17c59vboxsync Utf8Str str;
e0b9d3c357adf9b7d05f55540e86f22943fc4b23vboxsync const char *pszDisplay = RTEnvGet("DISPLAY");
1843553dbdf4e46417158b4c6348c503adf10740vboxsync if (pszDisplay)
806d0b554daa555364af5f87bc96eccbe760db7avboxsync str = Utf8StrFmt("DISPLAY=%s\n", pszDisplay);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync const char *pszXAuth = RTEnvGet("XAUTHORITY");
1843553dbdf4e46417158b4c6348c503adf10740vboxsync if (pszXAuth)
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync str.append(Utf8StrFmt("XAUTHORITY=%s\n", pszXAuth));
1843553dbdf4e46417158b4c6348c503adf10740vboxsync env = str;
1843553dbdf4e46417158b4c6348c503adf10740vboxsync#endif
1843553dbdf4e46417158b4c6348c503adf10740vboxsync ComPtr<IProgress> progress;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync CHECK_ERROR_RET(a->virtualBox, OpenRemoteSession(a->session, uuid, sessionType,
1843553dbdf4e46417158b4c6348c503adf10740vboxsync env, progress.asOutParam()), rc);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync RTPrintf("Waiting for the VM to power on...\n");
1843553dbdf4e46417158b4c6348c503adf10740vboxsync CHECK_ERROR_RET(progress, WaitForCompletion(-1), 1);
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync BOOL completed;
ebbb1f6c7e8bae363a4efda4b35b58c8467d24bcvboxsync CHECK_ERROR_RET(progress, COMGETTER(Completed)(&completed), rc);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync ASSERT(completed);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync LONG iRc;
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync CHECK_ERROR_RET(progress, COMGETTER(ResultCode)(&iRc), rc);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync if (FAILED(iRc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ComPtr<IVirtualBoxErrorInfo> errorInfo;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR_RET(progress, COMGETTER(ErrorInfo)(errorInfo.asOutParam()), 1);
22e281e75ed636601178296c6daebda8f1d17c59vboxsync ErrorInfo info(errorInfo, COM_IIDOF(IVirtualBoxErrorInfo));
e52f819639386db020b2a635b47a415248c7fbf9vboxsync com::GluePrintErrorInfo(info);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync RTPrintf("VM has been successfully started.\n");
22e281e75ed636601178296c6daebda8f1d17c59vboxsync }
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync }
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync /* it's important to always close sessions */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync a->session->Close();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync return SUCCEEDED(rc) ? 0 : 1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncint handleDiscardState(HandlerArg *a)
0e77737b0ba913683e614db11463b31ca67aacbevboxsync{
0e77737b0ba913683e614db11463b31ca67aacbevboxsync HRESULT rc;
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync
0e77737b0ba913683e614db11463b31ca67aacbevboxsync if (a->argc != 1)
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync return errorSyntax(USAGE_DISCARDSTATE, "Incorrect number of parameters");
0e77737b0ba913683e614db11463b31ca67aacbevboxsync
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync ComPtr<IMachine> machine;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync /* assume it's a UUID */
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync if (FAILED(rc) || !machine)
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync {
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync /* must be a name */
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync }
22e281e75ed636601178296c6daebda8f1d17c59vboxsync if (machine)
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync {
22e281e75ed636601178296c6daebda8f1d17c59vboxsync do
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync {
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync /* we have to open a session for this task */
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync Bstr guid;
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync machine->COMGETTER(Id)(guid.asOutParam());
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync CHECK_ERROR_BREAK(a->virtualBox, OpenSession(a->session, guid));
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync do
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync {
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync ComPtr<IConsole> console;
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync CHECK_ERROR_BREAK(a->session, COMGETTER(Console)(console.asOutParam()));
0e77737b0ba913683e614db11463b31ca67aacbevboxsync CHECK_ERROR_BREAK(console, ForgetSavedState(true));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync } while (0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR_BREAK(a->session, Close());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync } while (0);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync return SUCCEEDED(rc) ? 0 : 1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
8e972b677df5ee27b99211fc7e456a5aa50f3e68vboxsync
8e972b677df5ee27b99211fc7e456a5aa50f3e68vboxsyncint handleAdoptState(HandlerArg *a)
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync if (a->argc != 2)
e0b9d3c357adf9b7d05f55540e86f22943fc4b23vboxsync return errorSyntax(USAGE_ADOPTSTATE, "Incorrect number of parameters");
42c1972c22e09797b4b24afbd0ec114ed076c37cvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ComPtr<IMachine> machine;
806d0b554daa555364af5f87bc96eccbe760db7avboxsync /* assume it's a UUID */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync if (FAILED(rc) || !machine)
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync {
806d0b554daa555364af5f87bc96eccbe760db7avboxsync /* must be a name */
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
806d0b554daa555364af5f87bc96eccbe760db7avboxsync }
806d0b554daa555364af5f87bc96eccbe760db7avboxsync if (machine)
806d0b554daa555364af5f87bc96eccbe760db7avboxsync {
806d0b554daa555364af5f87bc96eccbe760db7avboxsync do
22e281e75ed636601178296c6daebda8f1d17c59vboxsync {
806d0b554daa555364af5f87bc96eccbe760db7avboxsync /* we have to open a session for this task */
806d0b554daa555364af5f87bc96eccbe760db7avboxsync Bstr guid;
806d0b554daa555364af5f87bc96eccbe760db7avboxsync machine->COMGETTER(Id)(guid.asOutParam());
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync CHECK_ERROR_BREAK(a->virtualBox, OpenSession(a->session, guid));
806d0b554daa555364af5f87bc96eccbe760db7avboxsync do
806d0b554daa555364af5f87bc96eccbe760db7avboxsync {
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync ComPtr<IConsole> console;
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync CHECK_ERROR_BREAK(a->session, COMGETTER(Console)(console.asOutParam()));
806d0b554daa555364af5f87bc96eccbe760db7avboxsync CHECK_ERROR_BREAK(console, AdoptSavedState(Bstr(a->argv[1])));
806d0b554daa555364af5f87bc96eccbe760db7avboxsync } while (0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR_BREAK(a->session, Close());
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync } while (0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
806d0b554daa555364af5f87bc96eccbe760db7avboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return SUCCEEDED(rc) ? 0 : 1;
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync}
806d0b554daa555364af5f87bc96eccbe760db7avboxsync
806d0b554daa555364af5f87bc96eccbe760db7avboxsyncint handleGetExtraData(HandlerArg *a)
22e281e75ed636601178296c6daebda8f1d17c59vboxsync{
42c1972c22e09797b4b24afbd0ec114ed076c37cvboxsync HRESULT rc = S_OK;
e0b9d3c357adf9b7d05f55540e86f22943fc4b23vboxsync
806d0b554daa555364af5f87bc96eccbe760db7avboxsync if (a->argc != 2)
e149c362e69e5f0bbd82da11fd8163b2d29c3a72vboxsync return errorSyntax(USAGE_GETEXTRADATA, "Incorrect number of parameters");
806d0b554daa555364af5f87bc96eccbe760db7avboxsync
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync /* global data? */
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync if (!strcmp(a->argv[0], "global"))
806d0b554daa555364af5f87bc96eccbe760db7avboxsync {
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync /* enumeration? */
806d0b554daa555364af5f87bc96eccbe760db7avboxsync if (!strcmp(a->argv[1], "enumerate"))
806d0b554daa555364af5f87bc96eccbe760db7avboxsync {
806d0b554daa555364af5f87bc96eccbe760db7avboxsync SafeArray<BSTR> aKeys;
806d0b554daa555364af5f87bc96eccbe760db7avboxsync CHECK_ERROR(a->virtualBox, GetExtraDataKeys(ComSafeArrayAsOutParam(aKeys)));
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
806d0b554daa555364af5f87bc96eccbe760db7avboxsync for (size_t i = 0;
806d0b554daa555364af5f87bc96eccbe760db7avboxsync i < aKeys.size();
806d0b554daa555364af5f87bc96eccbe760db7avboxsync ++i)
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync {
806d0b554daa555364af5f87bc96eccbe760db7avboxsync Bstr bstrKey(aKeys[i]);
806d0b554daa555364af5f87bc96eccbe760db7avboxsync Bstr bstrValue;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(a->virtualBox, GetExtraData(bstrKey, bstrValue.asOutParam()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync RTPrintf("Key: %lS, Value: %lS\n", bstrKey.raw(), bstrValue.raw());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
e0b9d3c357adf9b7d05f55540e86f22943fc4b23vboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync Bstr value;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(a->virtualBox, GetExtraData(Bstr(a->argv[1]), value.asOutParam()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!value.isEmpty())
22e281e75ed636601178296c6daebda8f1d17c59vboxsync RTPrintf("Value: %lS\n", value.raw());
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync RTPrintf("No value set!\n");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync ComPtr<IMachine> machine;
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync /* assume it's a UUID */
22e281e75ed636601178296c6daebda8f1d17c59vboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync if (FAILED(rc) || !machine)
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync {
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync /* must be a name */
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
22e281e75ed636601178296c6daebda8f1d17c59vboxsync }
e0b9d3c357adf9b7d05f55540e86f22943fc4b23vboxsync if (machine)
42c1972c22e09797b4b24afbd0ec114ed076c37cvboxsync {
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync /* enumeration? */
806d0b554daa555364af5f87bc96eccbe760db7avboxsync if (!strcmp(a->argv[1], "enumerate"))
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync {
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync SafeArray<BSTR> aKeys;
3cac8f8c6923a3a89ecfccda5e89ad75f48658e0vboxsync CHECK_ERROR(machine, GetExtraDataKeys(ComSafeArrayAsOutParam(aKeys)));
3cac8f8c6923a3a89ecfccda5e89ad75f48658e0vboxsync
3cac8f8c6923a3a89ecfccda5e89ad75f48658e0vboxsync for (size_t i = 0;
3cac8f8c6923a3a89ecfccda5e89ad75f48658e0vboxsync i < aKeys.size();
03319aeaef07ef63a404237f2cb56199131f4a03vboxsync ++i)
1157941288c9533575a655c660af55d13da31eefvboxsync {
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync Bstr bstrKey(aKeys[i]);
1157941288c9533575a655c660af55d13da31eefvboxsync Bstr bstrValue;
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync CHECK_ERROR(machine, GetExtraData(bstrKey, bstrValue.asOutParam()));
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync RTPrintf("Key: %lS, Value: %lS\n", bstrKey.raw(), bstrValue.raw());
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync }
22e281e75ed636601178296c6daebda8f1d17c59vboxsync }
8e8844a522f5d335f177a0313b03067d79cce201vboxsync else
7bae75e0b207aa4d4cad2a951271ad1a0e8ab9fdvboxsync {
7bae75e0b207aa4d4cad2a951271ad1a0e8ab9fdvboxsync Bstr value;
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync CHECK_ERROR(machine, GetExtraData(Bstr(a->argv[1]), value.asOutParam()));
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync if (!value.isEmpty())
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync RTPrintf("Value: %lS\n", value.raw());
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync else
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync RTPrintf("No value set!\n");
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync }
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync }
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync }
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync return SUCCEEDED(rc) ? 0 : 1;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync}
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsyncint handleSetExtraData(HandlerArg *a)
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync{
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync HRESULT rc = S_OK;
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync if (a->argc < 2)
e0b9d3c357adf9b7d05f55540e86f22943fc4b23vboxsync return errorSyntax(USAGE_SETEXTRADATA, "Not enough parameters");
42c1972c22e09797b4b24afbd0ec114ed076c37cvboxsync
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync /* global data? */
e149c362e69e5f0bbd82da11fd8163b2d29c3a72vboxsync if (!strcmp(a->argv[0], "global"))
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync {
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync if (a->argc < 3)
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync CHECK_ERROR(a->virtualBox, SetExtraData(Bstr(a->argv[1]), NULL));
57399ab65e2825c324fb9dcb4642d4ae2c232509vboxsync else if (a->argc == 3)
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync CHECK_ERROR(a->virtualBox, SetExtraData(Bstr(a->argv[1]), Bstr(a->argv[2])));
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync else
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync return errorSyntax(USAGE_SETEXTRADATA, "Too many parameters");
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync }
22e281e75ed636601178296c6daebda8f1d17c59vboxsync else
8e8844a522f5d335f177a0313b03067d79cce201vboxsync {
7bae75e0b207aa4d4cad2a951271ad1a0e8ab9fdvboxsync ComPtr<IMachine> machine;
7bae75e0b207aa4d4cad2a951271ad1a0e8ab9fdvboxsync /* assume it's a UUID */
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync if (FAILED(rc) || !machine)
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync {
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync /* must be a name */
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync }
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync if (machine)
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync {
3cac8f8c6923a3a89ecfccda5e89ad75f48658e0vboxsync if (a->argc < 3)
3cac8f8c6923a3a89ecfccda5e89ad75f48658e0vboxsync CHECK_ERROR(machine, SetExtraData(Bstr(a->argv[1]), NULL));
7082d29724f6c3788977a51591b0379fd3acbf72vboxsync else if (a->argc == 3)
7082d29724f6c3788977a51591b0379fd3acbf72vboxsync CHECK_ERROR(machine, SetExtraData(Bstr(a->argv[1]), Bstr(a->argv[2])));
7082d29724f6c3788977a51591b0379fd3acbf72vboxsync else
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync return errorSyntax(USAGE_SETEXTRADATA, "Too many parameters");
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync }
46b1ac1c3302722f93e787d0f0693965e88f5ceevboxsync }
22e281e75ed636601178296c6daebda8f1d17c59vboxsync return SUCCEEDED(rc) ? 0 : 1;
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync}
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsyncint handleSetProperty(HandlerArg *a)
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync{
f827fea1108b8f8a1a5f63318f6ec3cf4a9e7010vboxsync HRESULT rc;
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync /* there must be two arguments: property name and value */
42c1972c22e09797b4b24afbd0ec114ed076c37cvboxsync if (a->argc != 2)
e0b9d3c357adf9b7d05f55540e86f22943fc4b23vboxsync return errorSyntax(USAGE_SETPROPERTY, "Incorrect number of parameters");
5cf54b3ffeb7ee90685dcaec329ef71a729f5947vboxsync
806d0b554daa555364af5f87bc96eccbe760db7avboxsync ComPtr<ISystemProperties> systemProperties;
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync a->virtualBox->COMGETTER(SystemProperties)(systemProperties.asOutParam());
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync if (!strcmp(a->argv[0], "hdfolder"))
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync {
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync /* reset to default? */
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync if (!strcmp(a->argv[1], "default"))
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultHardDiskFolder)(NULL));
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync else
22e281e75ed636601178296c6daebda8f1d17c59vboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultHardDiskFolder)(Bstr(a->argv[1])));
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync }
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync else if (!strcmp(a->argv[0], "machinefolder"))
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync {
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync /* reset to default? */
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync if (!strcmp(a->argv[1], "default"))
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultMachineFolder)(NULL));
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync else
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultMachineFolder)(Bstr(a->argv[1])));
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync }
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync else if (!strcmp(a->argv[0], "vrdpauthlibrary"))
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync {
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync /* reset to default? */
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync if (!strcmp(a->argv[1], "default"))
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync CHECK_ERROR(systemProperties, COMSETTER(RemoteDisplayAuthLibrary)(NULL));
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync else
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync CHECK_ERROR(systemProperties, COMSETTER(RemoteDisplayAuthLibrary)(Bstr(a->argv[1])));
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync }
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync else if (!strcmp(a->argv[0], "websrvauthlibrary"))
22e281e75ed636601178296c6daebda8f1d17c59vboxsync {
42c1972c22e09797b4b24afbd0ec114ed076c37cvboxsync /* reset to default? */
e0b9d3c357adf9b7d05f55540e86f22943fc4b23vboxsync if (!strcmp(a->argv[1], "default"))
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync CHECK_ERROR(systemProperties, COMSETTER(WebServiceAuthLibrary)(NULL));
e149c362e69e5f0bbd82da11fd8163b2d29c3a72vboxsync else
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync CHECK_ERROR(systemProperties, COMSETTER(WebServiceAuthLibrary)(Bstr(a->argv[1])));
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync }
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync else if (!strcmp(a->argv[0], "loghistorycount"))
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync {
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync uint32_t uVal;
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync int vrc;
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync vrc = RTStrToUInt32Ex(a->argv[1], NULL, 0, &uVal);
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync if (vrc != VINF_SUCCESS)
22e281e75ed636601178296c6daebda8f1d17c59vboxsync return errorArgument("Error parsing Log history count '%s'", a->argv[1]);
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync CHECK_ERROR(systemProperties, COMSETTER(LogHistoryCount)(uVal));
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync }
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync else
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync return errorSyntax(USAGE_SETPROPERTY, "Invalid parameter '%s'", a->argv[0]);
6f0193f5a9287559d34a75f438c2682d8fb08038vboxsync
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync return SUCCEEDED(rc) ? 0 : 1;
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync}
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsyncint handleSharedFolder(HandlerArg *a)
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync{
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync HRESULT rc;
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync /* we need at least a command and target */
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync if (a->argc < 2)
22e281e75ed636601178296c6daebda8f1d17c59vboxsync return errorSyntax(USAGE_SHAREDFOLDER, "Not enough parameters");
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync ComPtr<IMachine> machine;
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync /* assume it's a UUID */
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[1]), machine.asOutParam());
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync if (FAILED(rc) || !machine)
22e281e75ed636601178296c6daebda8f1d17c59vboxsync {
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync /* must be a name */
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[1]), machine.asOutParam()));
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync }
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync if (!machine)
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync return 1;
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync Bstr uuid;
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync machine->COMGETTER(Id)(uuid.asOutParam());
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync if (!strcmp(a->argv[0], "add"))
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync {
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync /* we need at least four more parameters */
22e281e75ed636601178296c6daebda8f1d17c59vboxsync if (a->argc < 5)
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Not enough parameters");
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync char *name = NULL;
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync char *hostpath = NULL;
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync bool fTransient = false;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync bool fWritable = true;
8e8844a522f5d335f177a0313b03067d79cce201vboxsync
8e8844a522f5d335f177a0313b03067d79cce201vboxsync for (int i = 2; i < a->argc; i++)
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync {
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync if ( !strcmp(a->argv[i], "--name")
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync || !strcmp(a->argv[i], "-name"))
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync {
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync if (a->argc <= i + 1 || !*a->argv[i+1])
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync i++;
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync name = a->argv[i];
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync }
3cac8f8c6923a3a89ecfccda5e89ad75f48658e0vboxsync else if ( !strcmp(a->argv[i], "--hostpath")
3cac8f8c6923a3a89ecfccda5e89ad75f48658e0vboxsync || !strcmp(a->argv[i], "-hostpath"))
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync {
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync if (a->argc <= i + 1 || !*a->argv[i+1])
e0b9d3c357adf9b7d05f55540e86f22943fc4b23vboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync i++;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync hostpath = a->argv[i];
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync }
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync else if ( !strcmp(a->argv[i], "--readonly")
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync || !strcmp(a->argv[i], "-readonly"))
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync {
22e281e75ed636601178296c6daebda8f1d17c59vboxsync fWritable = false;
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync }
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync else if ( !strcmp(a->argv[i], "--transient")
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync || !strcmp(a->argv[i], "-transient"))
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync {
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync fTransient = true;
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync }
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync else
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw());
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync }
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync if (NULL != strstr(name, " "))
22e281e75ed636601178296c6daebda8f1d17c59vboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "No spaces allowed in parameter '-name'!");
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync /* required arguments */
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync if (!name || !hostpath)
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync {
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Parameters --name and --hostpath are required");
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync }
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync
5db1d52ffbcaa46c3d944c6c2d9c552306817d9avboxsync if (fTransient)
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync {
3cac8f8c6923a3a89ecfccda5e89ad75f48658e0vboxsync ComPtr <IConsole> console;
3cac8f8c6923a3a89ecfccda5e89ad75f48658e0vboxsync
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync /* open an existing session for the VM */
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync CHECK_ERROR_RET(a->virtualBox, OpenExistingSession(a->session, uuid), 1);
e0b9d3c357adf9b7d05f55540e86f22943fc4b23vboxsync /* get the session machine */
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync CHECK_ERROR_RET(a->session, COMGETTER(Machine)(machine.asOutParam()), 1);
22e281e75ed636601178296c6daebda8f1d17c59vboxsync /* get the session console */
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync CHECK_ERROR_RET(a->session, COMGETTER(Console)(console.asOutParam()), 1);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync CHECK_ERROR(console, CreateSharedFolder(Bstr(name), Bstr(hostpath), fWritable));
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync if (console)
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync a->session->Close();
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync }
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync else
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync {
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync /* open a session for the VM */
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync CHECK_ERROR_RET(a->virtualBox, OpenSession(a->session, uuid), 1);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync /* get the mutable session machine */
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync a->session->COMGETTER(Machine)(machine.asOutParam());
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync CHECK_ERROR(machine, CreateSharedFolder(Bstr(name), Bstr(hostpath), fWritable));
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
6ae4b1c72625a8e5c369effea7f018b578d733c4vboxsync if (SUCCEEDED(rc))
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync CHECK_ERROR(machine, SaveSettings());
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync a->session->Close();
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync }
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync }
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync else if (!strcmp(a->argv[0], "remove"))
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* we need at least two more parameters */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (a->argc < 3)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Not enough parameters");
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync char *name = NULL;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fTransient = false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 2; i < a->argc; i++)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if ( !strcmp(a->argv[i], "--name")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || !strcmp(a->argv[i], "-name"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (a->argc <= i + 1 || !*a->argv[i+1])
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync i++;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync name = a->argv[i];
fdc5224bd8d9a60af82da5809e3d6729c9bc69cbvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else if ( !strcmp(a->argv[i], "--transient")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || !strcmp(a->argv[i], "-transient"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync fTransient = true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* required arguments */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!name)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Parameter --name is required");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (fTransient)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ComPtr <IConsole> console;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* open an existing session for the VM */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR_RET(a->virtualBox, OpenExistingSession(a->session, uuid), 1);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* get the session machine */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR_RET(a->session, COMGETTER(Machine)(machine.asOutParam()), 1);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* get the session console */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR_RET(a->session, COMGETTER(Console)(console.asOutParam()), 1);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync CHECK_ERROR(console, RemoveSharedFolder(Bstr(name)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (console)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync a->session->Close();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
5b6e2c9a765c3c72295acc15791af8a700746956vboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* open a session for the VM */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR_RET(a->virtualBox, OpenSession(a->session, uuid), 1);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* get the mutable session machine */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync a->session->COMGETTER(Machine)(machine.asOutParam());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync CHECK_ERROR(machine, RemoveSharedFolder(Bstr(name)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* commit and close the session */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(machine, SaveSettings());
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync a->session->Close();
5ace91141404400247438502a84a418fba00c8cfvboxsync }
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync }
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorSyntax(USAGE_SETPROPERTY, "Invalid parameter '%s'", Utf8Str(a->argv[0]).raw());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
5ace91141404400247438502a84a418fba00c8cfvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncint handleVMStatistics(HandlerArg *a)
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync{
fdc5224bd8d9a60af82da5809e3d6729c9bc69cbvboxsync HRESULT rc;
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync /* at least one option: the UUID or name of the VM */
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync if (a->argc < 1)
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync return errorSyntax(USAGE_VM_STATISTICS, "Incorrect number of parameters");
08bc90fc2848c80bf8270bedc883745b8398e186vboxsync
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync /* try to find the given machine */
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync ComPtr <IMachine> machine;
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync Bstr uuid (a->argv[0]);
3cac8f8c6923a3a89ecfccda5e89ad75f48658e0vboxsync if (!Guid (a->argv[0]).isEmpty())
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync CHECK_ERROR(a->virtualBox, GetMachine(uuid, machine.asOutParam()));
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync else
5ace91141404400247438502a84a418fba00c8cfvboxsync {
5ace91141404400247438502a84a418fba00c8cfvboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
5ace91141404400247438502a84a418fba00c8cfvboxsync if (SUCCEEDED (rc))
5ace91141404400247438502a84a418fba00c8cfvboxsync machine->COMGETTER(Id)(uuid.asOutParam());
5ace91141404400247438502a84a418fba00c8cfvboxsync }
5ace91141404400247438502a84a418fba00c8cfvboxsync if (FAILED(rc))
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync return 1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
49748bb305bd71f672cd083af208f4bb08c5d6abvboxsync /* parse arguments. */
49748bb305bd71f672cd083af208f4bb08c5d6abvboxsync bool fReset = false;
49748bb305bd71f672cd083af208f4bb08c5d6abvboxsync bool fWithDescriptions = false;
49748bb305bd71f672cd083af208f4bb08c5d6abvboxsync const char *pszPattern = NULL; /* all */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 1; i < a->argc; i++)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if ( !strcmp(a->argv[i], "--pattern")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || !strcmp(a->argv[i], "-pattern"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pszPattern)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorSyntax(USAGE_VM_STATISTICS, "Multiple --patterns options is not permitted");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (i + 1 >= a->argc)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pszPattern = a->argv[++i];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else if ( !strcmp(a->argv[i], "--descriptions")
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync || !strcmp(a->argv[i], "-descriptions"))
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync fWithDescriptions = true;
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync /* add: --file <filename> and --formatted */
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync else if ( !strcmp(a->argv[i], "--reset")
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync || !strcmp(a->argv[i], "-reset"))
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync fReset = true;
7c3417bbf525c03163d54d151a277a981d5d61b6vboxsync else
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync return errorSyntax(USAGE_VM_STATISTICS, "Unknown option '%s'", a->argv[i]);
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync }
8b984478b755f4d3091b977d9beac9fb7434279fvboxsync if (fReset && fWithDescriptions)
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync return errorSyntax(USAGE_VM_STATISTICS, "The --reset and --descriptions options does not mix");
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync
51d4024e2984de499ecd878341898f71f55cf9e0vboxsync /* open an existing session for the VM. */
8b984478b755f4d3091b977d9beac9fb7434279fvboxsync CHECK_ERROR(a->virtualBox, OpenExistingSession(a->session, uuid));
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync if (SUCCEEDED(rc))
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync {
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync /* get the session console. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ComPtr <IConsole> console;
fdc5224bd8d9a60af82da5809e3d6729c9bc69cbvboxsync CHECK_ERROR(a->session, COMGETTER(Console)(console.asOutParam()));
fdc5224bd8d9a60af82da5809e3d6729c9bc69cbvboxsync if (SUCCEEDED(rc))
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* get the machine debugger. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ComPtr <IMachineDebugger> debugger;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(console, COMGETTER(Debugger)(debugger.asOutParam()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (SUCCEEDED(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (fReset)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(debugger, ResetStats(Bstr(pszPattern)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Bstr stats;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_ERROR(debugger, GetStats(Bstr(pszPattern), fWithDescriptions, stats.asOutParam()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (SUCCEEDED(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* if (fFormatted)
42c1972c22e09797b4b24afbd0ec114ed076c37cvboxsync { big mess }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync RTPrintf("%ls\n", stats.raw());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync a->session->Close();
3cbb4f9a6a320e58ed398ef7aaa004cc8727abc5vboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return SUCCEEDED(rc) ? 0 : 1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync