Hi All, I have added support for callbacks and VirtualBox version 3. I have attached the patch for the same, it is made against the head as of today. To check if the callbacks work you can run the example from examples/domain- events/events-c directory and then start a domain to see if you get any callback events. Regards, Pritesh
commit 1766765df5384cae45202c34ab20164d7c1544fe Author: pk221555 <pk221555@krishna.(none)> Date: Mon Jul 13 18:29:43 2009 +0200 libvirt: Callback and version 3.0 support diff --git a/src/Makefile.am b/src/Makefile.am index 0c284c0..9c0da2c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -133,7 +133,8 @@ OPENVZ_DRIVER_SOURCES = \ VBOX_DRIVER_SOURCES = \ vbox/vbox_XPCOMCGlue.c vbox/vbox_XPCOMCGlue.h \ vbox/vbox_driver.c vbox/vbox_driver.h \ - vbox/vbox_V2_2.c vbox/vbox_CAPI_v2_2.h + vbox/vbox_V2_2.c vbox/vbox_CAPI_v2_2.h \ + vbox/vbox_V3_0.c vbox/vbox_CAPI_v3_0.h VBOX_DRIVER_EXTRA_DIST = vbox/vbox_tmpl.c vbox/README diff --git a/src/vbox/vbox_CAPI_v3_0.h b/src/vbox/vbox_CAPI_v3_0.h new file mode 100644 index 0000000..13b4d4d --- /dev/null +++ b/src/vbox/vbox_CAPI_v3_0.h @@ -0,0 +1,5342 @@ + +/* + * DO NOT EDIT! This is a generated file. + * + * XPCOM IDL (XPIDL) definition for VirtualBox Main API (COM interfaces) + * generated from XIDL (XML interface definition). + * + * Source : src/VBox/Main/idl/VirtualBox.xidl + * Generator : src/VBox/Main/idl/xpcidl.xsl + * + * This file contains portions from the following Mozilla XPCOM files: + * xpcom/include/xpcom/nsID.h + * xpcom/include/nsIException.h + * xpcom/include/nsprpub/prtypes.h + * xpcom/include/xpcom/nsISupportsBase.h + * + * These files were originally triple-licensed (MPL/GPL2/LGPL2.1). Sun + * elects to distribute this derived work under the LGPL2.1 only. + */ + +/* + * Copyright (C) 2008-2009 Sun Microsystems, Inc. + * + * This file is part of a free software library; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General + * Public License version 2.1 as published by the Free Software + * Foundation and shipped in the "COPYING" file with this library. + * The library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY of any kind. + * + * Sun LGPL Disclaimer: For the avoidance of doubt, except that if + * any license choice other than GPL or LGPL is available it will + * apply instead, Sun elects to use only the Lesser General Public + * License version 2.1 (LGPLv2) at this time for any software where + * a choice of LGPL license versions is made available with the + * language indicating that LGPLv2 or any later version may be used, + * or where a choice of which version of the LGPL is applied is + * otherwise unspecified. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + +#ifndef ___VirtualBox_CXPCOM_h +#define ___VirtualBox_CXPCOM_h + +#ifdef __cplusplus +# include "VirtualBox_XPCOM.h" +#else /* !__cplusplus */ + +#include <stddef.h> +#include "wchar.h" + +#if defined(WIN32) + +#define PR_EXPORT(__type) extern __declspec(dllexport) __type +#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type +#define PR_IMPORT(__type) __declspec(dllimport) __type +#define PR_IMPORT_DATA(__type) __declspec(dllimport) __type + +#define PR_EXTERN(__type) extern __declspec(dllexport) __type +#define PR_IMPLEMENT(__type) __declspec(dllexport) __type +#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type +#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type + +#define PR_CALLBACK +#define PR_CALLBACK_DECL +#define PR_STATIC_CALLBACK(__x) static __x + +#elif defined(XP_BEOS) + +#define PR_EXPORT(__type) extern __declspec(dllexport) __type +#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type +#define PR_IMPORT(__type) extern __declspec(dllexport) __type +#define PR_IMPORT_DATA(__type) extern __declspec(dllexport) __type + +#define PR_EXTERN(__type) extern __declspec(dllexport) __type +#define PR_IMPLEMENT(__type) __declspec(dllexport) __type +#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type +#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type + +#define PR_CALLBACK +#define PR_CALLBACK_DECL +#define PR_STATIC_CALLBACK(__x) static __x + +#elif defined(WIN16) + +#define PR_CALLBACK_DECL __cdecl + +#if defined(_WINDLL) +#define PR_EXPORT(__type) extern __type _cdecl _export _loadds +#define PR_IMPORT(__type) extern __type _cdecl _export _loadds +#define PR_EXPORT_DATA(__type) extern __type _export +#define PR_IMPORT_DATA(__type) extern __type _export + +#define PR_EXTERN(__type) extern __type _cdecl _export _loadds +#define PR_IMPLEMENT(__type) __type _cdecl _export _loadds +#define PR_EXTERN_DATA(__type) extern __type _export +#define PR_IMPLEMENT_DATA(__type) __type _export + +#define PR_CALLBACK __cdecl __loadds +#define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK + +#else /* this must be .EXE */ +#define PR_EXPORT(__type) extern __type _cdecl _export +#define PR_IMPORT(__type) extern __type _cdecl _export +#define PR_EXPORT_DATA(__type) extern __type _export +#define PR_IMPORT_DATA(__type) extern __type _export + +#define PR_EXTERN(__type) extern __type _cdecl _export +#define PR_IMPLEMENT(__type) __type _cdecl _export +#define PR_EXTERN_DATA(__type) extern __type _export +#define PR_IMPLEMENT_DATA(__type) __type _export + +#define PR_CALLBACK __cdecl __loadds +#define PR_STATIC_CALLBACK(__x) __x PR_CALLBACK +#endif /* _WINDLL */ + +#elif defined(XP_MAC) + +#define PR_EXPORT(__type) extern __declspec(export) __type +#define PR_EXPORT_DATA(__type) extern __declspec(export) __type +#define PR_IMPORT(__type) extern __declspec(export) __type +#define PR_IMPORT_DATA(__type) extern __declspec(export) __type + +#define PR_EXTERN(__type) extern __declspec(export) __type +#define PR_IMPLEMENT(__type) __declspec(export) __type +#define PR_EXTERN_DATA(__type) extern __declspec(export) __type +#define PR_IMPLEMENT_DATA(__type) __declspec(export) __type + +#define PR_CALLBACK +#define PR_CALLBACK_DECL +#define PR_STATIC_CALLBACK(__x) static __x + +#elif defined(XP_OS2) && defined(__declspec) + +#define PR_EXPORT(__type) extern __declspec(dllexport) __type +#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type +#define PR_IMPORT(__type) __declspec(dllimport) __type +#define PR_IMPORT_DATA(__type) __declspec(dllimport) __type + +#define PR_EXTERN(__type) extern __declspec(dllexport) __type +#define PR_IMPLEMENT(__type) __declspec(dllexport) __type +#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type +#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type + +#define PR_CALLBACK +#define PR_CALLBACK_DECL +#define PR_STATIC_CALLBACK(__x) static __x + +#elif defined(XP_OS2_VACPP) + +#define PR_EXPORT(__type) extern __type +#define PR_EXPORT_DATA(__type) extern __type +#define PR_IMPORT(__type) extern __type +#define PR_IMPORT_DATA(__type) extern __type + +#define PR_EXTERN(__type) extern __type +#define PR_IMPLEMENT(__type) __type +#define PR_EXTERN_DATA(__type) extern __type +#define PR_IMPLEMENT_DATA(__type) __type +#define PR_CALLBACK _Optlink +#define PR_CALLBACK_DECL +#define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK + +#else /* Unix */ + +# ifdef VBOX_HAVE_VISIBILITY_HIDDEN +# define PR_EXPORT(__type) __attribute__((visibility("default"))) extern __type +# define PR_EXPORT_DATA(__type) __attribute__((visibility("default"))) extern __type +# define PR_IMPORT(__type) extern __type +# define PR_IMPORT_DATA(__type) extern __type +# define PR_EXTERN(__type) __attribute__((visibility("default"))) extern __type +# define PR_IMPLEMENT(__type) __attribute__((visibility("default"))) __type +# define PR_EXTERN_DATA(__type) __attribute__((visibility("default"))) extern __type +# define PR_IMPLEMENT_DATA(__type) __attribute__((visibility("default"))) __type +# define PR_CALLBACK +# define PR_CALLBACK_DECL +# define PR_STATIC_CALLBACK(__x) static __x +# else +# define PR_EXPORT(__type) extern __type +# define PR_EXPORT_DATA(__type) extern __type +# define PR_IMPORT(__type) extern __type +# define PR_IMPORT_DATA(__type) extern __type +# define PR_EXTERN(__type) extern __type +# define PR_IMPLEMENT(__type) __type +# define PR_EXTERN_DATA(__type) extern __type +# define PR_IMPLEMENT_DATA(__type) __type +# define PR_CALLBACK +# define PR_CALLBACK_DECL +# define PR_STATIC_CALLBACK(__x) static __x +# endif +#endif + +#if defined(_NSPR_BUILD_) +#define NSPR_API(__type) PR_EXPORT(__type) +#define NSPR_DATA_API(__type) PR_EXPORT_DATA(__type) +#else +#define NSPR_API(__type) PR_IMPORT(__type) +#define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type) +#endif + +typedef unsigned char PRUint8; +#if (defined(HPUX) && defined(__cplusplus) \ + && !defined(__GNUC__) && __cplusplus < 199707L) \ + || (defined(SCO) && defined(__cplusplus) \ + && !defined(__GNUC__) && __cplusplus == 1L) +typedef char PRInt8; +#else +typedef signed char PRInt8; +#endif + +#define PR_INT8_MAX 127 +#define PR_INT8_MIN (-128) +#define PR_UINT8_MAX 255U + +typedef unsigned short PRUint16; +typedef short PRInt16; + +#define PR_INT16_MAX 32767 +#define PR_INT16_MIN (-32768) +#define PR_UINT16_MAX 65535U + +typedef unsigned int PRUint32; +typedef int PRInt32; +#define PR_INT32(x) x +#define PR_UINT32(x) x ## U + +#define PR_INT32_MAX PR_INT32(2147483647) +#define PR_INT32_MIN (-PR_INT32_MAX - 1) +#define PR_UINT32_MAX PR_UINT32(4294967295) + +typedef long PRInt64; +typedef unsigned long PRUint64; +typedef int PRIntn; +typedef unsigned int PRUintn; + +typedef double PRFloat64; +typedef size_t PRSize; + +typedef ptrdiff_t PRPtrdiff; + +typedef unsigned long PRUptrdiff; + +typedef PRIntn PRBool; + +#define PR_TRUE 1 +#define PR_FALSE 0 + +typedef PRUint8 PRPackedBool; + +/* +** Status code used by some routines that have a single point of failure or +** special status return. +*/ +typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus; + +#ifndef __PRUNICHAR__ +#define __PRUNICHAR__ +#if defined(WIN32) || defined(XP_MAC) +typedef wchar_t PRUnichar; +#else +typedef PRUint16 PRUnichar; +#endif +#endif + +typedef long PRWord; +typedef unsigned long PRUword; + +#define nsnull 0 +typedef PRUint32 nsresult; + +#if defined(__GNUC__) && (__GNUC__ > 2) +#define NS_LIKELY(x) (__builtin_expect((x), 1)) +#define NS_UNLIKELY(x) (__builtin_expect((x), 0)) +#else +#define NS_LIKELY(x) (x) +#define NS_UNLIKELY(x) (x) +#endif + +#define NS_FAILED(_nsresult) (NS_UNLIKELY((_nsresult) & 0x80000000)) +#define NS_SUCCEEDED(_nsresult) (NS_LIKELY(!((_nsresult) & 0x80000000))) + +#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP +# define PR_IntervalNow VBoxNsprPR_IntervalNow +# define PR_TicksPerSecond VBoxNsprPR_TicksPerSecond +# define PR_SecondsToInterval VBoxNsprPR_SecondsToInterval +# define PR_MillisecondsToInterval VBoxNsprPR_MillisecondsToInterval +# define PR_MicrosecondsToInterval VBoxNsprPR_MicrosecondsToInterval +# define PR_IntervalToSeconds VBoxNsprPR_IntervalToSeconds +# define PR_IntervalToMilliseconds VBoxNsprPR_IntervalToMilliseconds +# define PR_IntervalToMicroseconds VBoxNsprPR_IntervalToMicroseconds +# define PR_EnterMonitor VBoxNsprPR_EnterMonitor +# define PR_ExitMonitor VBoxNsprPR_ExitMonitor +# define PR_Notify VBoxNsprPR_Notify +# define PR_NotifyAll VBoxNsprPR_NotifyAll +# define PR_Wait VBoxNsprPR_Wait +# define PR_NewMonitor VBoxNsprPR_NewMonitor +# define PR_DestroyMonitor VBoxNsprPR_DestroyMonitor +#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */ + +typedef PRUint32 PRIntervalTime; + +#define PR_INTERVAL_MIN 1000UL +#define PR_INTERVAL_MAX 100000UL +#define PR_INTERVAL_NO_WAIT 0UL +#define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL + +NSPR_API(PRIntervalTime) PR_IntervalNow(void); +NSPR_API(PRUint32) PR_TicksPerSecond(void); +NSPR_API(PRIntervalTime) PR_SecondsToInterval(PRUint32 seconds); +NSPR_API(PRIntervalTime) PR_MillisecondsToInterval(PRUint32 milli); +NSPR_API(PRIntervalTime) PR_MicrosecondsToInterval(PRUint32 micro); +NSPR_API(PRUint32) PR_IntervalToSeconds(PRIntervalTime ticks); +NSPR_API(PRUint32) PR_IntervalToMilliseconds(PRIntervalTime ticks); +NSPR_API(PRUint32) PR_IntervalToMicroseconds(PRIntervalTime ticks); + +typedef struct PRMonitor PRMonitor; + +NSPR_API(PRMonitor*) PR_NewMonitor(void); +NSPR_API(void) PR_DestroyMonitor(PRMonitor *mon); +NSPR_API(void) PR_EnterMonitor(PRMonitor *mon); +NSPR_API(PRStatus) PR_ExitMonitor(PRMonitor *mon); +NSPR_API(PRStatus) PR_Wait(PRMonitor *mon, PRIntervalTime ticks); +NSPR_API(PRStatus) PR_Notify(PRMonitor *mon); +NSPR_API(PRStatus) PR_NotifyAll(PRMonitor *mon); + +#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP +# define PR_CreateThread VBoxNsprPR_CreateThread +# define PR_JoinThread VBoxNsprPR_JoinThread +# define PR_Sleep VBoxNsprPR_Sleep +# define PR_GetCurrentThread VBoxNsprPR_GetCurrentThread +# define PR_GetThreadState VBoxNsprPR_GetThreadState +# define PR_SetThreadPrivate VBoxNsprPR_SetThreadPrivate +# define PR_GetThreadPrivate VBoxNsprPR_GetThreadPrivate +# define PR_NewThreadPrivateIndex VBoxNsprPR_NewThreadPrivateIndex +# define PR_GetThreadPriority VBoxNsprPR_GetThreadPriority +# define PR_SetThreadPriority VBoxNsprPR_SetThreadPriority +# define PR_Interrupt VBoxNsprPR_Interrupt +# define PR_ClearInterrupt VBoxNsprPR_ClearInterrupt +# define PR_BlockInterrupt VBoxNsprPR_BlockInterrupt +# define PR_UnblockInterrupt VBoxNsprPR_UnblockInterrupt +# define PR_GetThreadScope VBoxNsprPR_GetThreadScope +# define PR_GetThreadType VBoxNsprPR_GetThreadType +#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */ + +typedef struct PRThread PRThread; +typedef struct PRThreadStack PRThreadStack; + +typedef enum PRThreadType { + PR_USER_THREAD, + PR_SYSTEM_THREAD +} PRThreadType; + +typedef enum PRThreadScope { + PR_LOCAL_THREAD, + PR_GLOBAL_THREAD, + PR_GLOBAL_BOUND_THREAD +} PRThreadScope; + +typedef enum PRThreadState { + PR_JOINABLE_THREAD, + PR_UNJOINABLE_THREAD +} PRThreadState; + +typedef enum PRThreadPriority +{ + PR_PRIORITY_FIRST = 0, /* just a placeholder */ + PR_PRIORITY_LOW = 0, /* the lowest possible priority */ + PR_PRIORITY_NORMAL = 1, /* most common expected priority */ + PR_PRIORITY_HIGH = 2, /* slightly more aggressive scheduling */ + PR_PRIORITY_URGENT = 3, /* it does little good to have more than one */ + PR_PRIORITY_LAST = 3 /* this is just a placeholder */ +} PRThreadPriority; + +NSPR_API(PRThread*) PR_CreateThread(PRThreadType type, + void (PR_CALLBACK *start)(void *arg), + void *arg, + PRThreadPriority priority, + PRThreadScope scope, + PRThreadState state, + PRUint32 stackSize); +NSPR_API(PRStatus) PR_JoinThread(PRThread *thread); +NSPR_API(PRThread*) PR_GetCurrentThread(void); +#ifndef NO_NSPR_10_SUPPORT +#define PR_CurrentThread() PR_GetCurrentThread() /* for nspr1.0 compat. */ +#endif /* NO_NSPR_10_SUPPORT */ +NSPR_API(PRThreadPriority) PR_GetThreadPriority(const PRThread *thread); +NSPR_API(void) PR_SetThreadPriority(PRThread *thread, PRThreadPriority priority); + +typedef void (PR_CALLBACK *PRThreadPrivateDTOR)(void *priv); + +NSPR_API(PRStatus) PR_NewThreadPrivateIndex( + PRUintn *newIndex, PRThreadPrivateDTOR destructor); +NSPR_API(PRStatus) PR_SetThreadPrivate(PRUintn tpdIndex, void *priv); +NSPR_API(void*) PR_GetThreadPrivate(PRUintn tpdIndex); +NSPR_API(PRStatus) PR_Interrupt(PRThread *thread); +NSPR_API(void) PR_ClearInterrupt(void); +NSPR_API(void) PR_BlockInterrupt(void); +NSPR_API(void) PR_UnblockInterrupt(void); +NSPR_API(PRStatus) PR_Sleep(PRIntervalTime ticks); +NSPR_API(PRThreadScope) PR_GetThreadScope(const PRThread *thread); +NSPR_API(PRThreadType) PR_GetThreadType(const PRThread *thread); +NSPR_API(PRThreadState) PR_GetThreadState(const PRThread *thread); + +#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP +# define PR_DestroyLock VBoxNsprPR_DestroyLock +# define PR_Lock VBoxNsprPR_Lock +# define PR_NewLock VBoxNsprPR_NewLock +# define PR_Unlock VBoxNsprPR_Unlock +#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */ + +typedef struct PRLock PRLock; + +NSPR_API(PRLock*) PR_NewLock(void); +NSPR_API(void) PR_DestroyLock(PRLock *lock); +NSPR_API(void) PR_Lock(PRLock *lock); +NSPR_API(PRStatus) PR_Unlock(PRLock *lock); + +#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP +# define PR_NewCondVar VBoxNsprPR_NewCondVar +# define PR_DestroyCondVar VBoxNsprPR_DestroyCondVar +# define PR_WaitCondVar VBoxNsprPR_WaitCondVar +# define PR_NotifyCondVar VBoxNsprPR_NotifyCondVar +# define PR_NotifyAllCondVar VBoxNsprPR_NotifyAllCondVar +#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */ + +typedef struct PRCondVar PRCondVar; + +NSPR_API(PRCondVar*) PR_NewCondVar(PRLock *lock); +NSPR_API(void) PR_DestroyCondVar(PRCondVar *cvar); +NSPR_API(PRStatus) PR_WaitCondVar(PRCondVar *cvar, PRIntervalTime timeout); +NSPR_API(PRStatus) PR_NotifyCondVar(PRCondVar *cvar); +NSPR_API(PRStatus) PR_NotifyAllCondVar(PRCondVar *cvar); + +typedef struct PRCListStr PRCList; + +struct PRCListStr { + PRCList *next; + PRCList *prev; +}; + +#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP +# define PL_DestroyEvent VBoxNsplPL_DestroyEvent +# define PL_HandleEvent VBoxNsplPL_HandleEvent +# define PL_InitEvent VBoxNsplPL_InitEvent +# define PL_CreateEventQueue VBoxNsplPL_CreateEventQueue +# define PL_CreateMonitoredEventQueue VBoxNsplPL_CreateMonitoredEventQueue +# define PL_CreateNativeEventQueue VBoxNsplPL_CreateNativeEventQueue +# define PL_DequeueEvent VBoxNsplPL_DequeueEvent +# define PL_DestroyEventQueue VBoxNsplPL_DestroyEventQueue +# define PL_EventAvailable VBoxNsplPL_EventAvailable +# define PL_EventLoop VBoxNsplPL_EventLoop +# define PL_GetEvent VBoxNsplPL_GetEvent +# define PL_GetEventOwner VBoxNsplPL_GetEventOwner +# define PL_GetEventQueueMonitor VBoxNsplPL_GetEventQueueMonitor +# define PL_GetEventQueueSelectFD VBoxNsplPL_GetEventQueueSelectFD +# define PL_MapEvents VBoxNsplPL_MapEvents +# define PL_PostEvent VBoxNsplPL_PostEvent +# define PL_PostSynchronousEvent VBoxNsplPL_PostSynchronousEvent +# define PL_ProcessEventsBeforeID VBoxNsplPL_ProcessEventsBeforeID +# define PL_ProcessPendingEvents VBoxNsplPL_ProcessPendingEvents +# define PL_RegisterEventIDFunc VBoxNsplPL_RegisterEventIDFunc +# define PL_RevokeEvents VBoxNsplPL_RevokeEvents +# define PL_UnregisterEventIDFunc VBoxNsplPL_UnregisterEventIDFunc +# define PL_WaitForEvent VBoxNsplPL_WaitForEvent +# define PL_IsQueueNative VBoxNsplPL_IsQueueNative +# define PL_IsQueueOnCurrentThread VBoxNsplPL_IsQueueOnCurrentThread +# define PL_FavorPerformanceHint VBoxNsplPL_FavorPerformanceHint +#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */ + +typedef struct PLEvent PLEvent; +typedef struct PLEventQueue PLEventQueue; + +PR_EXTERN(PLEventQueue*) +PL_CreateEventQueue(const char* name, PRThread* handlerThread); +PR_EXTERN(PLEventQueue *) + PL_CreateNativeEventQueue( + const char *name, + PRThread *handlerThread + ); +PR_EXTERN(PLEventQueue *) + PL_CreateMonitoredEventQueue( + const char *name, + PRThread *handlerThread + ); +PR_EXTERN(void) +PL_DestroyEventQueue(PLEventQueue* self); +PR_EXTERN(PRMonitor*) +PL_GetEventQueueMonitor(PLEventQueue* self); + +#define PL_ENTER_EVENT_QUEUE_MONITOR(queue) \ + PR_EnterMonitor(PL_GetEventQueueMonitor(queue)) + +#define PL_EXIT_EVENT_QUEUE_MONITOR(queue) \ + PR_ExitMonitor(PL_GetEventQueueMonitor(queue)) + +PR_EXTERN(PRStatus) PL_PostEvent(PLEventQueue* self, PLEvent* event); +PR_EXTERN(void*) PL_PostSynchronousEvent(PLEventQueue* self, PLEvent* event); +PR_EXTERN(PLEvent*) PL_GetEvent(PLEventQueue* self); +PR_EXTERN(PRBool) PL_EventAvailable(PLEventQueue* self); + +typedef void (PR_CALLBACK *PLEventFunProc)(PLEvent* event, void* data, PLEventQueue* queue); + +PR_EXTERN(void) PL_MapEvents(PLEventQueue* self, PLEventFunProc fun, void* data); +PR_EXTERN(void) PL_RevokeEvents(PLEventQueue* self, void* owner); +PR_EXTERN(void) PL_ProcessPendingEvents(PLEventQueue* self); +PR_EXTERN(PLEvent*) PL_WaitForEvent(PLEventQueue* self); +PR_EXTERN(void) PL_EventLoop(PLEventQueue* self); +PR_EXTERN(PRInt32) PL_GetEventQueueSelectFD(PLEventQueue* self); +PR_EXTERN(PRBool) PL_IsQueueOnCurrentThread( PLEventQueue *queue ); +PR_EXTERN(PRBool) PL_IsQueueNative(PLEventQueue *queue); + +typedef void* (PR_CALLBACK *PLHandleEventProc)(PLEvent* self); +typedef void (PR_CALLBACK *PLDestroyEventProc)(PLEvent* self); +PR_EXTERN(void) +PL_InitEvent(PLEvent* self, void* owner, + PLHandleEventProc handler, + PLDestroyEventProc destructor); +PR_EXTERN(void*) PL_GetEventOwner(PLEvent* self); +PR_EXTERN(void) PL_HandleEvent(PLEvent* self); +PR_EXTERN(void) PL_DestroyEvent(PLEvent* self); +PR_EXTERN(void) PL_DequeueEvent(PLEvent* self, PLEventQueue* queue); +PR_EXTERN(void) PL_FavorPerformanceHint(PRBool favorPerformanceOverEventStarvation, PRUint32 starvationDelay); + +struct PLEvent { + PRCList link; + PLHandleEventProc handler; + PLDestroyEventProc destructor; + void* owner; + void* synchronousResult; + PRLock* lock; + PRCondVar* condVar; + PRBool handled; +#ifdef PL_POST_TIMINGS + PRIntervalTime postTime; +#endif +#ifdef XP_UNIX + unsigned long id; +#endif /* XP_UNIX */ + /* other fields follow... */ +}; + +#if defined(XP_WIN) || defined(XP_OS2) + +PR_EXTERN(HWND) + PL_GetNativeEventReceiverWindow( + PLEventQueue *eqp + ); +#endif /* XP_WIN || XP_OS2 */ + +#ifdef XP_UNIX + +PR_EXTERN(PRInt32) +PL_ProcessEventsBeforeID(PLEventQueue *aSelf, unsigned long aID); + +typedef unsigned long (PR_CALLBACK *PLGetEventIDFunc)(void *aClosure); + +PR_EXTERN(void) +PL_RegisterEventIDFunc(PLEventQueue *aSelf, PLGetEventIDFunc aFunc, + void *aClosure); +PR_EXTERN(void) PL_UnregisterEventIDFunc(PLEventQueue *aSelf); + +#endif /* XP_UNIX */ + +/* Standard "it worked" return value */ +#define NS_OK 0 + +#define NS_ERROR_BASE ((nsresult) 0xC1F30000) + +/* Returned when an instance is not initialized */ +#define NS_ERROR_NOT_INITIALIZED (NS_ERROR_BASE + 1) + +/* Returned when an instance is already initialized */ +#define NS_ERROR_ALREADY_INITIALIZED (NS_ERROR_BASE + 2) + +/* Returned by a not implemented function */ +#define NS_ERROR_NOT_IMPLEMENTED ((nsresult) 0x80004001L) + +/* Returned when a given interface is not supported. */ +#define NS_NOINTERFACE ((nsresult) 0x80004002L) +#define NS_ERROR_NO_INTERFACE NS_NOINTERFACE + +#define NS_ERROR_INVALID_POINTER ((nsresult) 0x80004003L) +#define NS_ERROR_NULL_POINTER NS_ERROR_INVALID_POINTER + +/* Returned when a function aborts */ +#define NS_ERROR_ABORT ((nsresult) 0x80004004L) + +/* Returned when a function fails */ +#define NS_ERROR_FAILURE ((nsresult) 0x80004005L) + +/* Returned when an unexpected error occurs */ +#define NS_ERROR_UNEXPECTED ((nsresult) 0x8000ffffL) + +/* Returned when a memory allocation fails */ +#define NS_ERROR_OUT_OF_MEMORY ((nsresult) 0x8007000eL) + +/* Returned when an illegal value is passed */ +#define NS_ERROR_ILLEGAL_VALUE ((nsresult) 0x80070057L) +#define NS_ERROR_INVALID_ARG NS_ERROR_ILLEGAL_VALUE + +/* Returned when a class doesn't allow aggregation */ +#define NS_ERROR_NO_AGGREGATION ((nsresult) 0x80040110L) + +/* Returned when an operation can't complete due to an unavailable resource */ +#define NS_ERROR_NOT_AVAILABLE ((nsresult) 0x80040111L) + +/* Returned when a class is not registered */ +#define NS_ERROR_FACTORY_NOT_REGISTERED ((nsresult) 0x80040154L) + +/* Returned when a class cannot be registered, but may be tried again later */ +#define NS_ERROR_FACTORY_REGISTER_AGAIN ((nsresult) 0x80040155L) + +/* Returned when a dynamically loaded factory couldn't be found */ +#define NS_ERROR_FACTORY_NOT_LOADED ((nsresult) 0x800401f8L) + +/* Returned when a factory doesn't support signatures */ +#define NS_ERROR_FACTORY_NO_SIGNATURE_SUPPORT \ + (NS_ERROR_BASE + 0x101) + +/* Returned when a factory already is registered */ +#define NS_ERROR_FACTORY_EXISTS (NS_ERROR_BASE + 0x100) + + +/** + * An "interface id" which can be used to uniquely identify a given + * interface. + * A "unique identifier". This is modeled after OSF DCE UUIDs. + */ + +struct nsID { + PRUint32 m0; + PRUint16 m1; + PRUint16 m2; + PRUint8 m3[8]; +}; + +typedef struct nsID nsID; +typedef nsID nsIID; + +struct nsISupports; /* forward declaration */ +struct nsIStackFrame; /* forward declaration */ +struct nsIException; /* forward declaration */ +typedef struct nsISupports nsISupports; /* forward declaration */ +typedef struct nsIStackFrame nsIStackFrame; /* forward declaration */ +typedef struct nsIException nsIException; /* forward declaration */ + +/** + * IID for the nsISupports interface + * {00000000-0000-0000-c000-000000000046} + * + * To maintain binary compatibility with COM's IUnknown, we define the IID + * of nsISupports to be the same as that of COM's IUnknown. + */ +#define NS_ISUPPORTS_IID \ + { 0x00000000, 0x0000, 0x0000, \ + {0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46} } + +/** + * Reference count values + * + * This is the return type for AddRef() and Release() in nsISupports. + * IUnknown of COM returns an unsigned long from equivalent functions. + * The following ifdef exists to maintain binary compatibility with + * IUnknown. + */ + +/** + * Basic component object model interface. Objects which implement + * this interface support runtime interface discovery (QueryInterface) + * and a reference counted memory model (AddRef/Release). This is + * modelled after the win32 IUnknown API. + */ +struct nsISupports_vtbl { + + /** + * @name Methods + */ + + /** + * A run time mechanism for interface discovery. + * @param aIID [in] A requested interface IID + * @param aInstancePtr [out] A pointer to an interface pointer to + * receive the result. + * @return NS_OK if the interface is supported by the associated + * instance, NS_NOINTERFACE if it is not. + * NS_ERROR_INVALID_POINTER if aInstancePtr is NULL. + */ + nsresult (*QueryInterface)(nsISupports *pThis, const nsID *iid, void **resultp); + /** + * Increases the reference count for this interface. + * The associated instance will not be deleted unless + * the reference count is returned to zero. + * + * @return The resulting reference count. + */ + nsresult (*AddRef)(nsISupports *pThis); + + /** + * Decreases the reference count for this interface. + * Generally, if the reference count returns to zero, + * the associated instance is deleted. + * + * @return The resulting reference count. + */ + nsresult (*Release)(nsISupports *pThis); + +}; + +struct nsISupports { + struct nsISupports_vtbl *vtbl; +}; + +/* starting interface: nsIException */ +#define NS_IEXCEPTION_IID_STR "f3a8d3b4-c424-4edc-8bf6-8974c983ba78" + +#define NS_IEXCEPTION_IID \ + {0xf3a8d3b4, 0xc424, 0x4edc, \ + { 0x8b, 0xf6, 0x89, 0x74, 0xc9, 0x83, 0xba, 0x78 }} + +struct nsIException_vtbl { + + /* Methods from the Class nsISupports */ + struct nsISupports_vtbl nsisupports; + + /* readonly attribute string message; */ + nsresult (*GetMessage)(nsIException *pThis, PRUnichar * *aMessage); + + /* readonly attribute nsresult (*result; */ + nsresult (*GetResult)(nsIException *pThis, nsresult *aResult); + + /* readonly attribute string name; */ + nsresult (*GetName)(nsIException *pThis, PRUnichar * *aName); + + /* readonly attribute string filename; */ + nsresult (*GetFilename)(nsIException *pThis, PRUnichar * *aFilename); + + /* readonly attribute PRUint32 lineNumber; */ + nsresult (*GetLineNumber)(nsIException *pThis, PRUint32 *aLineNumber); + + /* readonly attribute PRUint32 columnNumber; */ + nsresult (*GetColumnNumber)(nsIException *pThis, PRUint32 *aColumnNumber); + + /* readonly attribute nsIStackFrame location; */ + nsresult (*GetLocation)(nsIException *pThis, nsIStackFrame * *aLocation); + + /* readonly attribute nsIException inner; */ + nsresult (*GetInner)(nsIException *pThis, nsIException * *aInner); + + /* readonly attribute nsISupports data; */ + nsresult (*GetData)(nsIException *pThis, nsISupports * *aData); + + /* string toString (); */ + nsresult (*ToString)(nsIException *pThis, PRUnichar **_retval); +}; + +struct nsIException { + struct nsIException_vtbl *vtbl; +}; + +/* starting interface: nsIStackFrame */ +#define NS_ISTACKFRAME_IID_STR "91d82105-7c62-4f8b-9779-154277c0ee90" + +#define NS_ISTACKFRAME_IID \ + {0x91d82105, 0x7c62, 0x4f8b, \ + { 0x97, 0x79, 0x15, 0x42, 0x77, 0xc0, 0xee, 0x90 }} + +struct nsIStackFrame_vtbl { + + /* Methods from the Class nsISupports */ + struct nsISupports_vtbl nsisupports; + + /* readonly attribute PRUint32 language; */ + nsresult (*GetLanguage)(nsIStackFrame *pThis, PRUint32 *aLanguage); + + /* readonly attribute string languageName; */ + nsresult (*GetLanguageName)(nsIStackFrame *pThis, PRUnichar * *aLanguageName); + + /* readonly attribute string filename; */ + nsresult (*GetFilename)(nsIStackFrame *pThis, PRUnichar * *aFilename); + + /* readonly attribute string name; */ + nsresult (*GetName)(nsIStackFrame *pThis, PRUnichar * *aName); + + /* readonly attribute PRInt32 lineNumber; */ + nsresult (*GetLineNumber)(nsIStackFrame *pThis, PRInt32 *aLineNumber); + + /* readonly attribute string sourceLine; */ + nsresult (*GetSourceLine)(nsIStackFrame *pThis, PRUnichar * *aSourceLine); + + /* readonly attribute nsIStackFrame caller; */ + nsresult (*GetCaller)(nsIStackFrame *pThis, nsIStackFrame * *aCaller); + + /* string toString (); */ + nsresult (*ToString)(nsIStackFrame *pThis, PRUnichar **_retval); +}; + +struct nsIStackFrame { + struct nsIStackFrame_vtbl *vtbl; +}; + +/* starting interface: nsIEventTarget */ +#define NS_IEVENTTARGET_IID_STR "ea99ad5b-cc67-4efb-97c9-2ef620a59f2a" + +#define NS_IEVENTTARGET_IID \ + {0xea99ad5b, 0xcc67, 0x4efb, \ + { 0x97, 0xc9, 0x2e, 0xf6, 0x20, 0xa5, 0x9f, 0x2a }} + +struct nsIEventTarget; +typedef struct nsIEventTarget nsIEventTarget; + +struct nsIEventTarget_vtbl { + + struct nsISupports_vtbl nsisupports; + + nsresult (*PostEvent)(nsIEventTarget *pThis, PLEvent * aEvent); + + nsresult (*IsOnCurrentThread)(nsIEventTarget *pThis, PRBool *_retval); + +}; + +struct nsIEventTarget { + struct nsIEventTarget_vtbl *vtbl; +}; + +/* starting interface: nsIEventQueue */ +#define NS_IEVENTQUEUE_IID_STR "176afb41-00a4-11d3-9f2a-00400553eef0" + +#define NS_IEVENTQUEUE_IID \ + {0x176afb41, 0x00a4, 0x11d3, \ + { 0x9f, 0x2a, 0x00, 0x40, 0x05, 0x53, 0xee, 0xf0 }} + +struct nsIEventQueue; +typedef struct nsIEventQueue nsIEventQueue; + +struct nsIEventQueue_vtbl { + + struct nsIEventTarget_vtbl nsieventtarget; + + nsresult (*InitEvent)(nsIEventQueue *pThis, PLEvent * aEvent, void * owner, PLHandleEventProc handler, PLDestroyEventProc destructor); + + nsresult (*PostSynchronousEvent)(nsIEventQueue *pThis, PLEvent * aEvent, void * *aResult); + + nsresult (*PendingEvents)(nsIEventQueue *pThis, PRBool *_retval); + + nsresult (*ProcessPendingEvents)(nsIEventQueue *pThis); + + nsresult (*EventLoop)(nsIEventQueue *pThis); + + nsresult (*EventAvailable)(nsIEventQueue *pThis, PRBool *aResult); + + nsresult (*GetEvent)(nsIEventQueue *pThis, PLEvent * *_retval); + + nsresult (*HandleEvent)(nsIEventQueue *pThis, PLEvent * aEvent); + + nsresult (*WaitForEvent)(nsIEventQueue *pThis, PLEvent * *_retval); + + PRInt32 (*GetEventQueueSelectFD)(nsIEventQueue *pThis); + + nsresult (*Init)(nsIEventQueue *pThis, PRBool aNative); + + nsresult (*InitFromPRThread)(nsIEventQueue *pThis, PRThread * thread, PRBool aNative); + + nsresult (*InitFromPLQueue)(nsIEventQueue *pThis, PLEventQueue * aQueue); + + nsresult (*EnterMonitor)(nsIEventQueue *pThis); + + nsresult (*ExitMonitor)(nsIEventQueue *pThis); + + nsresult (*RevokeEvents)(nsIEventQueue *pThis, void * owner); + + nsresult (*GetPLEventQueue)(nsIEventQueue *pThis, PLEventQueue * *_retval); + + nsresult (*IsQueueNative)(nsIEventQueue *pThis, PRBool *_retval); + + nsresult (*StopAcceptingEvents)(nsIEventQueue *pThis); + +}; + +struct nsIEventQueue { + struct nsIEventQueue_vtbl *vtbl; +}; + + +#define VBOX_E_OBJECT_NOT_FOUND 0x80BB0001 +#define VBOX_E_INVALID_VM_STATE 0x80BB0002 +#define VBOX_E_VM_ERROR 0x80BB0003 +#define VBOX_E_FILE_ERROR 0x80BB0004 +#define VBOX_E_IPRT_ERROR 0x80BB0005 +#define VBOX_E_PDM_ERROR 0x80BB0006 +#define VBOX_E_INVALID_OBJECT_STATE 0x80BB0007 +#define VBOX_E_HOST_ERROR 0x80BB0008 +#define VBOX_E_NOT_SUPPORTED 0x80BB0009 +#define VBOX_E_XML_ERROR 0x80BB000A +#define VBOX_E_INVALID_SESSION_STATE 0x80BB000B +#define VBOX_E_OBJECT_IN_USE 0x80BB000C + + +struct IVirtualBoxErrorInfo; +struct IVirtualBoxCallback; +struct IDHCPServer; +struct IVirtualBox; +struct IVFSExplorer; +struct IAppliance; +struct IVirtualSystemDescription; +struct IInternalMachineControl; +struct IBIOSSettings; +struct IMachine; +struct IConsoleCallback; +struct IRemoteDisplayInfo; +struct IConsole; +struct IHostDVDDrive; +struct IHostFloppyDrive; +struct IHostNetworkInterface; +struct IHost; +struct ISystemProperties; +struct IGuestOSType; +struct IGuest; +struct IProgress; +struct ISnapshot; +struct IMedium; +struct IHardDiskAttachment; +struct IHardDisk; +struct IHardDiskFormat; +struct IFloppyImage; +struct IDVDImage; +struct IDVDDrive; +struct IFloppyDrive; +struct IKeyboard; +struct IMouse; +struct IFramebuffer; +struct IFramebufferOverlay; +struct IDisplay; +struct INetworkAdapter; +struct ISerialPort; +struct IParallelPort; +struct IMachineDebugger; +struct IUSBController; +struct IUSBDevice; +struct IUSBDeviceFilter; +struct IHostUSBDevice; +struct IHostUSBDeviceFilter; +struct IAudioAdapter; +struct IVRDPServer; +struct ISharedFolder; +struct IInternalSessionControl; +struct ISession; +struct IStorageController; +struct IManagedObjectRef; +struct IWebsessionManager; +struct IPerformanceMetric; +struct IPerformanceCollector; + +typedef struct IVirtualBoxErrorInfo IVirtualBoxErrorInfo; +typedef struct IVirtualBoxCallback IVirtualBoxCallback; +typedef struct IDHCPServer IDHCPServer; +typedef struct IVirtualBox IVirtualBox; +typedef struct IVFSExplorer IVFSExplorer; +typedef struct IAppliance IAppliance; +typedef struct IVirtualSystemDescription IVirtualSystemDescription; +typedef struct IInternalMachineControl IInternalMachineControl; +typedef struct IBIOSSettings IBIOSSettings; +typedef struct IMachine IMachine; +typedef struct IConsoleCallback IConsoleCallback; +typedef struct IRemoteDisplayInfo IRemoteDisplayInfo; +typedef struct IConsole IConsole; +typedef struct IHostDVDDrive IHostDVDDrive; +typedef struct IHostFloppyDrive IHostFloppyDrive; +typedef struct IHostNetworkInterface IHostNetworkInterface; +typedef struct IHost IHost; +typedef struct ISystemProperties ISystemProperties; +typedef struct IGuestOSType IGuestOSType; +typedef struct IGuest IGuest; +typedef struct IProgress IProgress; +typedef struct ISnapshot ISnapshot; +typedef struct IMedium IMedium; +typedef struct IHardDiskAttachment IHardDiskAttachment; +typedef struct IHardDisk IHardDisk; +typedef struct IHardDiskFormat IHardDiskFormat; +typedef struct IFloppyImage IFloppyImage; +typedef struct IDVDImage IDVDImage; +typedef struct IDVDDrive IDVDDrive; +typedef struct IFloppyDrive IFloppyDrive; +typedef struct IKeyboard IKeyboard; +typedef struct IMouse IMouse; +typedef struct IFramebuffer IFramebuffer; +typedef struct IFramebufferOverlay IFramebufferOverlay; +typedef struct IDisplay IDisplay; +typedef struct INetworkAdapter INetworkAdapter; +typedef struct ISerialPort ISerialPort; +typedef struct IParallelPort IParallelPort; +typedef struct IMachineDebugger IMachineDebugger; +typedef struct IUSBController IUSBController; +typedef struct IUSBDevice IUSBDevice; +typedef struct IUSBDeviceFilter IUSBDeviceFilter; +typedef struct IHostUSBDevice IHostUSBDevice; +typedef struct IHostUSBDeviceFilter IHostUSBDeviceFilter; +typedef struct IAudioAdapter IAudioAdapter; +typedef struct IVRDPServer IVRDPServer; +typedef struct ISharedFolder ISharedFolder; +typedef struct IInternalSessionControl IInternalSessionControl; +typedef struct ISession ISession; +typedef struct IStorageController IStorageController; +typedef struct IManagedObjectRef IManagedObjectRef; +typedef struct IWebsessionManager IWebsessionManager; +typedef struct IPerformanceMetric IPerformanceMetric; +typedef struct IPerformanceCollector IPerformanceCollector; + +/* Start of enum AccessMode Declaration */ +#define ACCESSMODE_IID_STR "1da0007c-ddf7-4be8-bcac-d84a1558785f" +#define ACCESSMODE_IID { \ + 0x1da0007c, 0xddf7, 0x4be8, \ + { 0xbc, 0xac, 0xd8, 0x4a, 0x15, 0x58, 0x78, 0x5f } \ +} +enum AccessMode +{ + AccessMode_ReadOnly = 1, + AccessMode_ReadWrite = 2 +}; +/* End of enum AccessMode Declaration */ + + +/* Start of enum MachineState Declaration */ +#define MACHINESTATE_IID_STR "73bf04d0-7c4f-4684-9abf-d65a9ad74343" +#define MACHINESTATE_IID { \ + 0x73bf04d0, 0x7c4f, 0x4684, \ + { 0x9a, 0xbf, 0xd6, 0x5a, 0x9a, 0xd7, 0x43, 0x43 } \ +} +enum MachineState +{ + MachineState_Null = 0, + MachineState_PoweredOff = 1, + MachineState_Saved = 2, + MachineState_Aborted = 3, + MachineState_Running = 4, + MachineState_Paused = 5, + MachineState_Stuck = 6, + MachineState_Starting = 7, + MachineState_Stopping = 8, + MachineState_Saving = 9, + MachineState_Restoring = 10, + MachineState_Discarding = 11, + MachineState_SettingUp = 12, + MachineState_FirstOnline = 4, + MachineState_LastOnline = 10, + MachineState_FirstTransient = 7, + MachineState_LastTransient = 12 +}; +/* End of enum MachineState Declaration */ + + +/* Start of enum SessionState Declaration */ +#define SESSIONSTATE_IID_STR "CF2700C0-EA4B-47ae-9725-7810114B94D8" +#define SESSIONSTATE_IID { \ + 0xCF2700C0, 0xEA4B, 0x47ae, \ + { 0x97, 0x25, 0x78, 0x10, 0x11, 0x4B, 0x94, 0xD8 } \ +} +enum SessionState +{ + SessionState_Null = 0, + SessionState_Closed = 1, + SessionState_Open = 2, + SessionState_Spawning = 3, + SessionState_Closing = 4 +}; +/* End of enum SessionState Declaration */ + + +/* Start of enum SessionType Declaration */ +#define SESSIONTYPE_IID_STR "A13C02CB-0C2C-421E-8317-AC0E8AAA153A" +#define SESSIONTYPE_IID { \ + 0xA13C02CB, 0x0C2C, 0x421E, \ + { 0x83, 0x17, 0xAC, 0x0E, 0x8A, 0xAA, 0x15, 0x3A } \ +} +enum SessionType +{ + SessionType_Null = 0, + SessionType_Direct = 1, + SessionType_Remote = 2, + SessionType_Existing = 3 +}; +/* End of enum SessionType Declaration */ + + +/* Start of enum DeviceType Declaration */ +#define DEVICETYPE_IID_STR "6d9420f7-0b56-4636-99f9-7346f1b01e57" +#define DEVICETYPE_IID { \ + 0x6d9420f7, 0x0b56, 0x4636, \ + { 0x99, 0xf9, 0x73, 0x46, 0xf1, 0xb0, 0x1e, 0x57 } \ +} +enum DeviceType +{ + DeviceType_Null = 0, + DeviceType_Floppy = 1, + DeviceType_DVD = 2, + DeviceType_HardDisk = 3, + DeviceType_Network = 4, + DeviceType_USB = 5, + DeviceType_SharedFolder = 6 +}; +/* End of enum DeviceType Declaration */ + + +/* Start of enum DeviceActivity Declaration */ +#define DEVICEACTIVITY_IID_STR "6FC8AEAA-130A-4eb5-8954-3F921422D707" +#define DEVICEACTIVITY_IID { \ + 0x6FC8AEAA, 0x130A, 0x4eb5, \ + { 0x89, 0x54, 0x3F, 0x92, 0x14, 0x22, 0xD7, 0x07 } \ +} +enum DeviceActivity +{ + DeviceActivity_Null = 0, + DeviceActivity_Idle = 1, + DeviceActivity_Reading = 2, + DeviceActivity_Writing = 3 +}; +/* End of enum DeviceActivity Declaration */ + + +/* Start of enum ClipboardMode Declaration */ +#define CLIPBOARDMODE_IID_STR "33364716-4008-4701-8f14-be0fa3d62950" +#define CLIPBOARDMODE_IID { \ + 0x33364716, 0x4008, 0x4701, \ + { 0x8f, 0x14, 0xbe, 0x0f, 0xa3, 0xd6, 0x29, 0x50 } \ +} +enum ClipboardMode +{ + ClipboardMode_Disabled = 0, + ClipboardMode_HostToGuest = 1, + ClipboardMode_GuestToHost = 2, + ClipboardMode_Bidirectional = 3 +}; +/* End of enum ClipboardMode Declaration */ + + +/* Start of enum Scope Declaration */ +#define SCOPE_IID_STR "7c91096e-499e-4eca-9f9b-9001438d7855" +#define SCOPE_IID { \ + 0x7c91096e, 0x499e, 0x4eca, \ + { 0x9f, 0x9b, 0x90, 0x01, 0x43, 0x8d, 0x78, 0x55 } \ +} +enum Scope +{ + Scope_Global = 0, + Scope_Machine = 1, + Scope_Session = 2 +}; +/* End of enum Scope Declaration */ + + +/* Start of enum GuestStatisticType Declaration */ +#define GUESTSTATISTICTYPE_IID_STR "aa7c1d71-aafe-47a8-9608-27d2d337cf55" +#define GUESTSTATISTICTYPE_IID { \ + 0xaa7c1d71, 0xaafe, 0x47a8, \ + { 0x96, 0x08, 0x27, 0xd2, 0xd3, 0x37, 0xcf, 0x55 } \ +} +enum GuestStatisticType +{ + GuestStatisticType_CPULoad_Idle = 0, + GuestStatisticType_CPULoad_Kernel = 1, + GuestStatisticType_CPULoad_User = 2, + GuestStatisticType_Threads = 3, + GuestStatisticType_Processes = 4, + GuestStatisticType_Handles = 5, + GuestStatisticType_MemoryLoad = 6, + GuestStatisticType_PhysMemTotal = 7, + GuestStatisticType_PhysMemAvailable = 8, + GuestStatisticType_PhysMemBalloon = 9, + GuestStatisticType_MemCommitTotal = 10, + GuestStatisticType_MemKernelTotal = 11, + GuestStatisticType_MemKernelPaged = 12, + GuestStatisticType_MemKernelNonpaged = 13, + GuestStatisticType_MemSystemCache = 14, + GuestStatisticType_PageFileSize = 15, + GuestStatisticType_SampleNumber = 16, + GuestStatisticType_MaxVal = 17 +}; +/* End of enum GuestStatisticType Declaration */ + + +/* Start of enum BIOSBootMenuMode Declaration */ +#define BIOSBOOTMENUMODE_IID_STR "ae4fb9f7-29d2-45b4-b2c7-d579603135d5" +#define BIOSBOOTMENUMODE_IID { \ + 0xae4fb9f7, 0x29d2, 0x45b4, \ + { 0xb2, 0xc7, 0xd5, 0x79, 0x60, 0x31, 0x35, 0xd5 } \ +} +enum BIOSBootMenuMode +{ + BIOSBootMenuMode_Disabled = 0, + BIOSBootMenuMode_MenuOnly = 1, + BIOSBootMenuMode_MessageAndMenu = 2 +}; +/* End of enum BIOSBootMenuMode Declaration */ + + +/* Start of enum DriveState Declaration */ +#define DRIVESTATE_IID_STR "cb7233b7-c519-42a5-8310-1830953cacbc" +#define DRIVESTATE_IID { \ + 0xcb7233b7, 0xc519, 0x42a5, \ + { 0x83, 0x10, 0x18, 0x30, 0x95, 0x3c, 0xac, 0xbc } \ +} +enum DriveState +{ + DriveState_Null = 0, + DriveState_NotMounted = 1, + DriveState_ImageMounted = 2, + DriveState_HostDriveCaptured = 3 +}; +/* End of enum DriveState Declaration */ + + +/* Start of enum ProcessorFeature Declaration */ +#define PROCESSORFEATURE_IID_STR "b8353b35-705d-4796-9967-ebfb7ba54af4" +#define PROCESSORFEATURE_IID { \ + 0xb8353b35, 0x705d, 0x4796, \ + { 0x99, 0x67, 0xeb, 0xfb, 0x7b, 0xa5, 0x4a, 0xf4 } \ +} +enum ProcessorFeature +{ + ProcessorFeature_HWVirtEx = 0, + ProcessorFeature_PAE = 1, + ProcessorFeature_LongMode = 2 +}; +/* End of enum ProcessorFeature Declaration */ + + +/* Start of enum VFSType Declaration */ +#define VFSTYPE_IID_STR "813999ba-b949-48a8-9230-aadc6285e2f2" +#define VFSTYPE_IID { \ + 0x813999ba, 0xb949, 0x48a8, \ + { 0x92, 0x30, 0xaa, 0xdc, 0x62, 0x85, 0xe2, 0xf2 } \ +} +enum VFSType +{ + VFSType_File = 1, + VFSType_Cloud = 2, + VFSType_S3 = 3, + VFSType_WebDav = 4 +}; +/* End of enum VFSType Declaration */ + + +/* Start of enum VFSFileType Declaration */ +#define VFSFILETYPE_IID_STR "714333cd-44e2-415f-a245-d378fa9b1242" +#define VFSFILETYPE_IID { \ + 0x714333cd, 0x44e2, 0x415f, \ + { 0xa2, 0x45, 0xd3, 0x78, 0xfa, 0x9b, 0x12, 0x42 } \ +} +enum VFSFileType +{ + VFSFileType_Unknown = 1, + VFSFileType_Fifo = 2, + VFSFileType_DevChar = 3, + VFSFileType_Directory = 4, + VFSFileType_DevBlock = 5, + VFSFileType_File = 6, + VFSFileType_SymLink = 7, + VFSFileType_Socket = 8, + VFSFileType_WhiteOut = 9 +}; +/* End of enum VFSFileType Declaration */ + + +/* Start of enum CIMOSType Declaration */ +#define CIMOSTYPE_IID_STR "86ef5f8c-18b2-4db8-a314-33721b59f89b" +#define CIMOSTYPE_IID { \ + 0x86ef5f8c, 0x18b2, 0x4db8, \ + { 0xa3, 0x14, 0x33, 0x72, 0x1b, 0x59, 0xf8, 0x9b } \ +} +enum CIMOSType +{ + CIMOSType_CIMOS_Unknown = 0, + CIMOSType_CIMOS_Other = 1, + CIMOSType_CIMOS_MACOS = 2, + CIMOSType_CIMOS_ATTUNIX = 3, + CIMOSType_CIMOS_DGUX = 4, + CIMOSType_CIMOS_DECNT = 5, + CIMOSType_CIMOS_Tru64UNIX = 6, + CIMOSType_CIMOS_OpenVMS = 7, + CIMOSType_CIMOS_HPUX = 8, + CIMOSType_CIMOS_AIX = 9, + CIMOSType_CIMOS_MVS = 10, + CIMOSType_CIMOS_OS400 = 11, + CIMOSType_CIMOS_OS2 = 12, + CIMOSType_CIMOS_JavaVM = 13, + CIMOSType_CIMOS_MSDOS = 14, + CIMOSType_CIMOS_WIN3x = 15, + CIMOSType_CIMOS_WIN95 = 16, + CIMOSType_CIMOS_WIN98 = 17, + CIMOSType_CIMOS_WINNT = 18, + CIMOSType_CIMOS_WINCE = 19, + CIMOSType_CIMOS_NCR3000 = 20, + CIMOSType_CIMOS_NetWare = 21, + CIMOSType_CIMOS_OSF = 22, + CIMOSType_CIMOS_DCOS = 23, + CIMOSType_CIMOS_ReliantUNIX = 24, + CIMOSType_CIMOS_SCOUnixWare = 25, + CIMOSType_CIMOS_SCOOpenServer = 26, + CIMOSType_CIMOS_Sequent = 27, + CIMOSType_CIMOS_IRIX = 28, + CIMOSType_CIMOS_Solaris = 29, + CIMOSType_CIMOS_SunOS = 30, + CIMOSType_CIMOS_U6000 = 31, + CIMOSType_CIMOS_ASERIES = 32, + CIMOSType_CIMOS_HPNonStopOS = 33, + CIMOSType_CIMOS_HPNonStopOSS = 34, + CIMOSType_CIMOS_BS2000 = 35, + CIMOSType_CIMOS_LINUX = 36, + CIMOSType_CIMOS_Lynx = 37, + CIMOSType_CIMOS_XENIX = 38, + CIMOSType_CIMOS_VM = 39, + CIMOSType_CIMOS_InteractiveUNIX = 40, + CIMOSType_CIMOS_BSDUNIX = 41, + CIMOSType_CIMOS_FreeBSD = 42, + CIMOSType_CIMOS_NetBSD = 43, + CIMOSType_CIMOS_GNUHurd = 44, + CIMOSType_CIMOS_OS9 = 45, + CIMOSType_CIMOS_MACHKernel = 46, + CIMOSType_CIMOS_Inferno = 47, + CIMOSType_CIMOS_QNX = 48, + CIMOSType_CIMOS_EPOC = 49, + CIMOSType_CIMOS_IxWorks = 50, + CIMOSType_CIMOS_VxWorks = 51, + CIMOSType_CIMOS_MiNT = 52, + CIMOSType_CIMOS_BeOS = 53, + CIMOSType_CIMOS_HPMPE = 54, + CIMOSType_CIMOS_NextStep = 55, + CIMOSType_CIMOS_PalmPilot = 56, + CIMOSType_CIMOS_Rhapsody = 57, + CIMOSType_CIMOS_Windows2000 = 58, + CIMOSType_CIMOS_Dedicated = 59, + CIMOSType_CIMOS_OS390 = 60, + CIMOSType_CIMOS_VSE = 61, + CIMOSType_CIMOS_TPF = 62, + CIMOSType_CIMOS_WindowsMe = 63, + CIMOSType_CIMOS_CalderaOpenUNIX = 64, + CIMOSType_CIMOS_OpenBSD = 65, + CIMOSType_CIMOS_NotApplicable = 66, + CIMOSType_CIMOS_WindowsXP = 67, + CIMOSType_CIMOS_zOS = 68, + CIMOSType_CIMOS_MicrosoftWindowsServer2003 = 69, + CIMOSType_CIMOS_MicrosoftWindowsServer2003_64 = 70, + CIMOSType_CIMOS_WindowsXP_64 = 71, + CIMOSType_CIMOS_WindowsXPEmbedded = 72, + CIMOSType_CIMOS_WindowsVista = 73, + CIMOSType_CIMOS_WindowsVista_64 = 74, + CIMOSType_CIMOS_WindowsEmbeddedforPointofService = 75, + CIMOSType_CIMOS_MicrosoftWindowsServer2008 = 76, + CIMOSType_CIMOS_MicrosoftWindowsServer2008_64 = 77, + CIMOSType_CIMOS_FreeBSD_64 = 78, + CIMOSType_CIMOS_RedHatEnterpriseLinux = 79, + CIMOSType_CIMOS_RedHatEnterpriseLinux_64 = 80, + CIMOSType_CIMOS_Solaris_64 = 81, + CIMOSType_CIMOS_SUSE = 82, + CIMOSType_CIMOS_SUSE_64 = 83, + CIMOSType_CIMOS_SLES = 84, + CIMOSType_CIMOS_SLES_64 = 85, + CIMOSType_CIMOS_NovellOES = 86, + CIMOSType_CIMOS_NovellLinuxDesktop = 87, + CIMOSType_CIMOS_SunJavaDesktopSystem = 88, + CIMOSType_CIMOS_Mandriva = 89, + CIMOSType_CIMOS_Mandriva_64 = 90, + CIMOSType_CIMOS_TurboLinux = 91, + CIMOSType_CIMOS_TurboLinux_64 = 92, + CIMOSType_CIMOS_Ubuntu = 93, + CIMOSType_CIMOS_Ubuntu_64 = 94, + CIMOSType_CIMOS_Debian = 95, + CIMOSType_CIMOS_Debian_64 = 96, + CIMOSType_CIMOS_Linux_2_4_x = 97, + CIMOSType_CIMOS_Linux_2_4_x_64 = 98, + CIMOSType_CIMOS_Linux_2_6_x = 99, + CIMOSType_CIMOS_Linux_2_6_x_64 = 100, + CIMOSType_CIMOS_Linux_64 = 101, + CIMOSType_CIMOS_Other_64 = 102 +}; +/* End of enum CIMOSType Declaration */ + + +/* Start of enum OVFResourceType Declaration */ +#define OVFRESOURCETYPE_IID_STR "646a78d7-6f04-49f4-82c4-75c28a75a4cd" +#define OVFRESOURCETYPE_IID { \ + 0x646a78d7, 0x6f04, 0x49f4, \ + { 0x82, 0xc4, 0x75, 0xc2, 0x8a, 0x75, 0xa4, 0xcd } \ +} +enum OVFResourceType +{ + OVFResourceType_Other = 1, + OVFResourceType_ComputerSystem = 2, + OVFResourceType_Processor = 3, + OVFResourceType_Memory = 4, + OVFResourceType_IDEController = 5, + OVFResourceType_ParallelSCSIHBA = 6, + OVFResourceType_FCHBA = 7, + OVFResourceType_iSCSIHBA = 8, + OVFResourceType_IBHCA = 9, + OVFResourceType_EthernetAdapter = 10, + OVFResourceType_OtherNetworkAdapter = 11, + OVFResourceType_IOSlot = 12, + OVFResourceType_IODevice = 13, + OVFResourceType_FloppyDrive = 14, + OVFResourceType_CDDrive = 15, + OVFResourceType_DVDDrive = 16, + OVFResourceType_HardDisk = 17, + OVFResourceType_OtherStorageDevice = 20, + OVFResourceType_USBController = 23, + OVFResourceType_SoundCard = 35 +}; +/* End of enum OVFResourceType Declaration */ + + +/* Start of enum VirtualSystemDescriptionType Declaration */ +#define VIRTUALSYSTEMDESCRIPTIONTYPE_IID_STR "aacc58de-5b45-4f82-ae2e-dd9a824fc3b5" +#define VIRTUALSYSTEMDESCRIPTIONTYPE_IID { \ + 0xaacc58de, 0x5b45, 0x4f82, \ + { 0xae, 0x2e, 0xdd, 0x9a, 0x82, 0x4f, 0xc3, 0xb5 } \ +} +enum VirtualSystemDescriptionType +{ + VirtualSystemDescriptionType_Ignore = 1, + VirtualSystemDescriptionType_OS = 2, + VirtualSystemDescriptionType_Name = 3, + VirtualSystemDescriptionType_Product = 4, + VirtualSystemDescriptionType_Vendor = 5, + VirtualSystemDescriptionType_Version = 6, + VirtualSystemDescriptionType_ProductUrl = 7, + VirtualSystemDescriptionType_VendorUrl = 8, + VirtualSystemDescriptionType_Description = 9, + VirtualSystemDescriptionType_License = 10, + VirtualSystemDescriptionType_Miscellaneous = 11, + VirtualSystemDescriptionType_CPU = 12, + VirtualSystemDescriptionType_Memory = 13, + VirtualSystemDescriptionType_HardDiskControllerIDE = 14, + VirtualSystemDescriptionType_HardDiskControllerSATA = 15, + VirtualSystemDescriptionType_HardDiskControllerSCSI = 16, + VirtualSystemDescriptionType_HardDiskImage = 17, + VirtualSystemDescriptionType_Floppy = 18, + VirtualSystemDescriptionType_CDROM = 19, + VirtualSystemDescriptionType_NetworkAdapter = 20, + VirtualSystemDescriptionType_USBController = 21, + VirtualSystemDescriptionType_SoundCard = 22 +}; +/* End of enum VirtualSystemDescriptionType Declaration */ + + +/* Start of enum VirtualSystemDescriptionValueType Declaration */ +#define VIRTUALSYSTEMDESCRIPTIONVALUETYPE_IID_STR "56d9403f-3425-4118-9919-36f2a9b8c77c" +#define VIRTUALSYSTEMDESCRIPTIONVALUETYPE_IID { \ + 0x56d9403f, 0x3425, 0x4118, \ + { 0x99, 0x19, 0x36, 0xf2, 0xa9, 0xb8, 0xc7, 0x7c } \ +} +enum VirtualSystemDescriptionValueType +{ + VirtualSystemDescriptionValueType_Reference = 1, + VirtualSystemDescriptionValueType_Original = 2, + VirtualSystemDescriptionValueType_Auto = 3, + VirtualSystemDescriptionValueType_ExtraConfig = 4 +}; +/* End of enum VirtualSystemDescriptionValueType Declaration */ + + +/* Start of enum HostNetworkInterfaceMediumType Declaration */ +#define HOSTNETWORKINTERFACEMEDIUMTYPE_IID_STR "1aa54aaf-2497-45a2-bfb1-8eb225e93d5b" +#define HOSTNETWORKINTERFACEMEDIUMTYPE_IID { \ + 0x1aa54aaf, 0x2497, 0x45a2, \ + { 0xbf, 0xb1, 0x8e, 0xb2, 0x25, 0xe9, 0x3d, 0x5b } \ +} +enum HostNetworkInterfaceMediumType +{ + HostNetworkInterfaceMediumType_Unknown = 0, + HostNetworkInterfaceMediumType_Ethernet = 1, + HostNetworkInterfaceMediumType_PPP = 2, + HostNetworkInterfaceMediumType_SLIP = 3 +}; +/* End of enum HostNetworkInterfaceMediumType Declaration */ + + +/* Start of enum HostNetworkInterfaceStatus Declaration */ +#define HOSTNETWORKINTERFACESTATUS_IID_STR "CC474A69-2710-434B-8D99-C38E5D5A6F41" +#define HOSTNETWORKINTERFACESTATUS_IID { \ + 0xCC474A69, 0x2710, 0x434B, \ + { 0x8D, 0x99, 0xC3, 0x8E, 0x5D, 0x5A, 0x6F, 0x41 } \ +} +enum HostNetworkInterfaceStatus +{ + HostNetworkInterfaceStatus_Unknown = 0, + HostNetworkInterfaceStatus_Up = 1, + HostNetworkInterfaceStatus_Down = 2 +}; +/* End of enum HostNetworkInterfaceStatus Declaration */ + + +/* Start of enum HostNetworkInterfaceType Declaration */ +#define HOSTNETWORKINTERFACETYPE_IID_STR "67431b00-9946-48a2-bc02-b25c5919f4f3" +#define HOSTNETWORKINTERFACETYPE_IID { \ + 0x67431b00, 0x9946, 0x48a2, \ + { 0xbc, 0x02, 0xb2, 0x5c, 0x59, 0x19, 0xf4, 0xf3 } \ +} +enum HostNetworkInterfaceType +{ + HostNetworkInterfaceType_Bridged = 1, + HostNetworkInterfaceType_HostOnly = 2 +}; +/* End of enum HostNetworkInterfaceType Declaration */ + + +/* Start of enum MediaState Declaration */ +#define MEDIASTATE_IID_STR "8b86e03c-2f1c-412a-8fbd-326f62701200" +#define MEDIASTATE_IID { \ + 0x8b86e03c, 0x2f1c, 0x412a, \ + { 0x8f, 0xbd, 0x32, 0x6f, 0x62, 0x70, 0x12, 0x00 } \ +} +enum MediaState +{ + MediaState_NotCreated = 0, + MediaState_Created = 1, + MediaState_LockedRead = 2, + MediaState_LockedWrite = 3, + MediaState_Inaccessible = 4, + MediaState_Creating = 5, + MediaState_Deleting = 6 +}; +/* End of enum MediaState Declaration */ + + +/* Start of enum HardDiskType Declaration */ +#define HARDDISKTYPE_IID_STR "a348fafd-a64e-4643-ba65-eb3896bd7e0a" +#define HARDDISKTYPE_IID { \ + 0xa348fafd, 0xa64e, 0x4643, \ + { 0xba, 0x65, 0xeb, 0x38, 0x96, 0xbd, 0x7e, 0x0a } \ +} +enum HardDiskType +{ + HardDiskType_Normal = 0, + HardDiskType_Immutable = 1, + HardDiskType_Writethrough = 2 +}; +/* End of enum HardDiskType Declaration */ + + +/* Start of enum HardDiskVariant Declaration */ +#define HARDDISKVARIANT_IID_STR "eb7fc6b3-ae23-4c5d-a1f6-e3522dd1efb0" +#define HARDDISKVARIANT_IID { \ + 0xeb7fc6b3, 0xae23, 0x4c5d, \ + { 0xa1, 0xf6, 0xe3, 0x52, 0x2d, 0xd1, 0xef, 0xb0 } \ +} +enum HardDiskVariant +{ + HardDiskVariant_Standard = 0, + HardDiskVariant_VmdkSplit2G = 0x01, + HardDiskVariant_VmdkStreamOptimized = 0x04, + HardDiskVariant_VmdkESX = 0x08, + HardDiskVariant_Fixed = 0x10000, + HardDiskVariant_Diff = 0x20000 +}; +/* End of enum HardDiskVariant Declaration */ + + +/* Start of enum DataType Declaration */ +#define DATATYPE_IID_STR "d90ea51e-a3f1-4a01-beb1-c1723c0d3ba7" +#define DATATYPE_IID { \ + 0xd90ea51e, 0xa3f1, 0x4a01, \ + { 0xbe, 0xb1, 0xc1, 0x72, 0x3c, 0x0d, 0x3b, 0xa7 } \ +} +enum DataType +{ + DataType_Int32 = 0, + DataType_Int8 = 1, + DataType_String = 2 +}; +/* End of enum DataType Declaration */ + + +/* Start of enum DataFlags Declaration */ +#define DATAFLAGS_IID_STR "86884dcf-1d6b-4f1b-b4bf-f5aa44959d60" +#define DATAFLAGS_IID { \ + 0x86884dcf, 0x1d6b, 0x4f1b, \ + { 0xb4, 0xbf, 0xf5, 0xaa, 0x44, 0x95, 0x9d, 0x60 } \ +} +enum DataFlags +{ + DataFlags_None = 0x00, + DataFlags_Mandatory = 0x01, + DataFlags_Expert = 0x02, + DataFlags_Array = 0x04, + DataFlags_FlagMask = 0x07 +}; +/* End of enum DataFlags Declaration */ + + +/* Start of enum HardDiskFormatCapabilities Declaration */ +#define HARDDISKFORMATCAPABILITIES_IID_STR "1df1e4aa-d25a-4ba6-b2a2-02f60eb5903b" +#define HARDDISKFORMATCAPABILITIES_IID { \ + 0x1df1e4aa, 0xd25a, 0x4ba6, \ + { 0xb2, 0xa2, 0x02, 0xf6, 0x0e, 0xb5, 0x90, 0x3b } \ +} +enum HardDiskFormatCapabilities +{ + HardDiskFormatCapabilities_Uuid = 0x01, + HardDiskFormatCapabilities_CreateFixed = 0x02, + HardDiskFormatCapabilities_CreateDynamic = 0x04, + HardDiskFormatCapabilities_CreateSplit2G = 0x08, + HardDiskFormatCapabilities_Differencing = 0x10, + HardDiskFormatCapabilities_Asynchronous = 0x20, + HardDiskFormatCapabilities_File = 0x40, + HardDiskFormatCapabilities_Properties = 0x80, + HardDiskFormatCapabilities_CapabilityMask = 0xFF +}; +/* End of enum HardDiskFormatCapabilities Declaration */ + + +/* Start of enum MouseButtonState Declaration */ +#define MOUSEBUTTONSTATE_IID_STR "03131722-2EC5-4173-9794-0DACA46673EF" +#define MOUSEBUTTONSTATE_IID { \ + 0x03131722, 0x2EC5, 0x4173, \ + { 0x97, 0x94, 0x0D, 0xAC, 0xA4, 0x66, 0x73, 0xEF } \ +} +enum MouseButtonState +{ + MouseButtonState_LeftButton = 0x01, + MouseButtonState_RightButton = 0x02, + MouseButtonState_MiddleButton = 0x04, + MouseButtonState_WheelUp = 0x08, + MouseButtonState_WheelDown = 0x10, + MouseButtonState_MouseStateMask = 0x1F +}; +/* End of enum MouseButtonState Declaration */ + + +/* Start of enum FramebufferPixelFormat Declaration */ +#define FRAMEBUFFERPIXELFORMAT_IID_STR "7acfd5ed-29e3-45e3-8136-73c9224f3d2d" +#define FRAMEBUFFERPIXELFORMAT_IID { \ + 0x7acfd5ed, 0x29e3, 0x45e3, \ + { 0x81, 0x36, 0x73, 0xc9, 0x22, 0x4f, 0x3d, 0x2d } \ +} +enum FramebufferPixelFormat +{ + FramebufferPixelFormat_Opaque = 0, + FramebufferPixelFormat_FOURCC_RGB = 0x32424752 +}; +/* End of enum FramebufferPixelFormat Declaration */ + + +/* Start of enum NetworkAttachmentType Declaration */ +#define NETWORKATTACHMENTTYPE_IID_STR "44bce1ee-99f7-4e8e-89fc-80597fd9eeaf" +#define NETWORKATTACHMENTTYPE_IID { \ + 0x44bce1ee, 0x99f7, 0x4e8e, \ + { 0x89, 0xfc, 0x80, 0x59, 0x7f, 0xd9, 0xee, 0xaf } \ +} +enum NetworkAttachmentType +{ + NetworkAttachmentType_Null = 0, + NetworkAttachmentType_NAT = 1, + NetworkAttachmentType_Bridged = 2, + NetworkAttachmentType_Internal = 3, + NetworkAttachmentType_HostOnly = 4 +}; +/* End of enum NetworkAttachmentType Declaration */ + + +/* Start of enum NetworkAdapterType Declaration */ +#define NETWORKADAPTERTYPE_IID_STR "50c3dfd8-07ac-4a31-baac-519c828fbf97" +#define NETWORKADAPTERTYPE_IID { \ + 0x50c3dfd8, 0x07ac, 0x4a31, \ + { 0xba, 0xac, 0x51, 0x9c, 0x82, 0x8f, 0xbf, 0x97 } \ +} +enum NetworkAdapterType +{ + NetworkAdapterType_Null = 0, + NetworkAdapterType_Am79C970A = 1, + NetworkAdapterType_Am79C973 = 2, + NetworkAdapterType_I82540EM = 3, + NetworkAdapterType_I82543GC = 4, + NetworkAdapterType_I82545EM = 5 +}; +/* End of enum NetworkAdapterType Declaration */ + + +/* Start of enum PortMode Declaration */ +#define PORTMODE_IID_STR "533b5fe3-0185-4197-86a7-17e37dd39d76" +#define PORTMODE_IID { \ + 0x533b5fe3, 0x0185, 0x4197, \ + { 0x86, 0xa7, 0x17, 0xe3, 0x7d, 0xd3, 0x9d, 0x76 } \ +} +enum PortMode +{ + PortMode_Disconnected = 0, + PortMode_HostPipe = 1, + PortMode_HostDevice = 2, + PortMode_RawFile = 3 +}; +/* End of enum PortMode Declaration */ + + +/* Start of enum USBDeviceState Declaration */ +#define USBDEVICESTATE_IID_STR "b99a2e65-67fb-4882-82fd-f3e5e8193ab4" +#define USBDEVICESTATE_IID { \ + 0xb99a2e65, 0x67fb, 0x4882, \ + { 0x82, 0xfd, 0xf3, 0xe5, 0xe8, 0x19, 0x3a, 0xb4 } \ +} +enum USBDeviceState +{ + USBDeviceState_NotSupported = 0, + USBDeviceState_Unavailable = 1, + USBDeviceState_Busy = 2, + USBDeviceState_Available = 3, + USBDeviceState_Held = 4, + USBDeviceState_Captured = 5 +}; +/* End of enum USBDeviceState Declaration */ + + +/* Start of enum USBDeviceFilterAction Declaration */ +#define USBDEVICEFILTERACTION_IID_STR "cbc30a49-2f4e-43b5-9da6-121320475933" +#define USBDEVICEFILTERACTION_IID { \ + 0xcbc30a49, 0x2f4e, 0x43b5, \ + { 0x9d, 0xa6, 0x12, 0x13, 0x20, 0x47, 0x59, 0x33 } \ +} +enum USBDeviceFilterAction +{ + USBDeviceFilterAction_Null = 0, + USBDeviceFilterAction_Ignore = 1, + USBDeviceFilterAction_Hold = 2 +}; +/* End of enum USBDeviceFilterAction Declaration */ + + +/* Start of enum AudioDriverType Declaration */ +#define AUDIODRIVERTYPE_IID_STR "4bcc3d73-c2fe-40db-b72f-0c2ca9d68496" +#define AUDIODRIVERTYPE_IID { \ + 0x4bcc3d73, 0xc2fe, 0x40db, \ + { 0xb7, 0x2f, 0x0c, 0x2c, 0xa9, 0xd6, 0x84, 0x96 } \ +} +enum AudioDriverType +{ + AudioDriverType_Null = 0, + AudioDriverType_WinMM = 1, + AudioDriverType_OSS = 2, + AudioDriverType_ALSA = 3, + AudioDriverType_DirectSound = 4, + AudioDriverType_CoreAudio = 5, + AudioDriverType_MMPM = 6, + AudioDriverType_Pulse = 7, + AudioDriverType_SolAudio = 8 +}; +/* End of enum AudioDriverType Declaration */ + + +/* Start of enum AudioControllerType Declaration */ +#define AUDIOCONTROLLERTYPE_IID_STR "7afd395c-42c3-444e-8788-3ce80292f36c" +#define AUDIOCONTROLLERTYPE_IID { \ + 0x7afd395c, 0x42c3, 0x444e, \ + { 0x87, 0x88, 0x3c, 0xe8, 0x02, 0x92, 0xf3, 0x6c } \ +} +enum AudioControllerType +{ + AudioControllerType_AC97 = 0, + AudioControllerType_SB16 = 1 +}; +/* End of enum AudioControllerType Declaration */ + + +/* Start of enum VRDPAuthType Declaration */ +#define VRDPAUTHTYPE_IID_STR "3d91887a-b67f-4b33-85bf-2da7ab1ea83a" +#define VRDPAUTHTYPE_IID { \ + 0x3d91887a, 0xb67f, 0x4b33, \ + { 0x85, 0xbf, 0x2d, 0xa7, 0xab, 0x1e, 0xa8, 0x3a } \ +} +enum VRDPAuthType +{ + VRDPAuthType_Null = 0, + VRDPAuthType_External = 1, + VRDPAuthType_Guest = 2 +}; +/* End of enum VRDPAuthType Declaration */ + + +/* Start of enum StorageBus Declaration */ +#define STORAGEBUS_IID_STR "f381fdca-5953-41d0-b2bd-0542b012698d" +#define STORAGEBUS_IID { \ + 0xf381fdca, 0x5953, 0x41d0, \ + { 0xb2, 0xbd, 0x05, 0x42, 0xb0, 0x12, 0x69, 0x8d } \ +} +enum StorageBus +{ + StorageBus_Null = 0, + StorageBus_IDE = 1, + StorageBus_SATA = 2, + StorageBus_SCSI = 3 +}; +/* End of enum StorageBus Declaration */ + + +/* Start of enum StorageControllerType Declaration */ +#define STORAGECONTROLLERTYPE_IID_STR "685387db-a837-4320-a258-08f46a22f62a" +#define STORAGECONTROLLERTYPE_IID { \ + 0x685387db, 0xa837, 0x4320, \ + { 0xa2, 0x58, 0x08, 0xf4, 0x6a, 0x22, 0xf6, 0x2a } \ +} +enum StorageControllerType +{ + StorageControllerType_Null = 0, + StorageControllerType_LsiLogic = 1, + StorageControllerType_BusLogic = 2, + StorageControllerType_IntelAhci = 3, + StorageControllerType_PIIX3 = 4, + StorageControllerType_PIIX4 = 5, + StorageControllerType_ICH6 = 6 +}; +/* End of enum StorageControllerType Declaration */ + + +/* Start of struct IVirtualBoxErrorInfo Declaration */ +#define IVIRTUALBOXERRORINFO_IID_STR "bcae7fc3-3fd0-4bac-923c-ec1596c7bc83" +#define IVIRTUALBOXERRORINFO_IID { \ + 0xbcae7fc3, 0x3fd0, 0x4bac, \ + { 0x92, 0x3c, 0xec, 0x15, 0x96, 0xc7, 0xbc, 0x83 } \ +} +struct IVirtualBoxErrorInfo_vtbl +{ + struct nsIException_vtbl nsiexception; + + nsresult (*GetResultCode)(IVirtualBoxErrorInfo *pThis, PRInt32 *resultCode); + + nsresult (*GetInterfaceID)(IVirtualBoxErrorInfo *pThis, nsID * *interfaceID); + + nsresult (*GetComponent)(IVirtualBoxErrorInfo *pThis, PRUnichar * *component); + + nsresult (*GetText)(IVirtualBoxErrorInfo *pThis, PRUnichar * *text); + + nsresult (*GetNext)(IVirtualBoxErrorInfo *pThis, IVirtualBoxErrorInfo * *next); + +}; + +struct IVirtualBoxErrorInfo +{ + struct IVirtualBoxErrorInfo_vtbl *vtbl; +}; +/* End of struct IVirtualBoxErrorInfo Declaration */ + + +/* Start of struct IVirtualBoxCallback Declaration */ +#define IVIRTUALBOXCALLBACK_IID_STR "2990059f-5bc8-4635-8415-658917cd3186" +#define IVIRTUALBOXCALLBACK_IID { \ + 0x2990059f, 0x5bc8, 0x4635, \ + { 0x84, 0x15, 0x65, 0x89, 0x17, 0xcd, 0x31, 0x86 } \ +} +struct IVirtualBoxCallback_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*OnMachineStateChange)( + IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUint32 state + ); + + nsresult (*OnMachineDataChange)( + IVirtualBoxCallback *pThis, + PRUnichar * machineId + ); + + nsresult (*OnExtraDataCanChange)( + IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * key, + PRUnichar * value, + PRUnichar * * error, + PRBool * allowChange + ); + + nsresult (*OnExtraDataChange)( + IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * key, + PRUnichar * value + ); + + nsresult (*OnMediaRegistered)( + IVirtualBoxCallback *pThis, + PRUnichar * mediaId, + PRUint32 mediaType, + PRBool registered + ); + + nsresult (*OnMachineRegistered)( + IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRBool registered + ); + + nsresult (*OnSessionStateChange)( + IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUint32 state + ); + + nsresult (*OnSnapshotTaken)( + IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * snapshotId + ); + + nsresult (*OnSnapshotDiscarded)( + IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * snapshotId + ); + + nsresult (*OnSnapshotChange)( + IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * snapshotId + ); + + nsresult (*OnGuestPropertyChange)( + IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * name, + PRUnichar * value, + PRUnichar * flags + ); + +}; + +struct IVirtualBoxCallback +{ + struct IVirtualBoxCallback_vtbl *vtbl; +}; +/* End of struct IVirtualBoxCallback Declaration */ + + +/* Start of struct IDHCPServer Declaration */ +#define IDHCPSERVER_IID_STR "6cfe387c-74fb-4ca7-bff6-973bec8af7a3" +#define IDHCPSERVER_IID { \ + 0x6cfe387c, 0x74fb, 0x4ca7, \ + { 0xbf, 0xf6, 0x97, 0x3b, 0xec, 0x8a, 0xf7, 0xa3 } \ +} +struct IDHCPServer_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetEnabled)(IDHCPServer *pThis, PRBool *enabled); + nsresult (*SetEnabled)(IDHCPServer *pThis, PRBool enabled); + + nsresult (*GetIPAddress)(IDHCPServer *pThis, PRUnichar * *IPAddress); + + nsresult (*GetNetworkMask)(IDHCPServer *pThis, PRUnichar * *networkMask); + + nsresult (*GetNetworkName)(IDHCPServer *pThis, PRUnichar * *networkName); + + nsresult (*GetLowerIP)(IDHCPServer *pThis, PRUnichar * *lowerIP); + + nsresult (*GetUpperIP)(IDHCPServer *pThis, PRUnichar * *upperIP); + + nsresult (*SetConfiguration)( + IDHCPServer *pThis, + PRUnichar * IPAddress, + PRUnichar * networkMask, + PRUnichar * FromIPAddress, + PRUnichar * ToIPAddress + ); + + nsresult (*Start)( + IDHCPServer *pThis, + PRUnichar * networkName, + PRUnichar * trunkName, + PRUnichar * trunkType + ); + + nsresult (*Stop)(IDHCPServer *pThis ); + +}; + +struct IDHCPServer +{ + struct IDHCPServer_vtbl *vtbl; +}; +/* End of struct IDHCPServer Declaration */ + + +/* Start of struct IVirtualBox Declaration */ +#define IVIRTUALBOX_IID_STR "3f4ab53a-199b-4526-a91a-93ff62e456b8" +#define IVIRTUALBOX_IID { \ + 0x3f4ab53a, 0x199b, 0x4526, \ + { 0xa9, 0x1a, 0x93, 0xff, 0x62, 0xe4, 0x56, 0xb8 } \ +} +struct IVirtualBox_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetVersion)(IVirtualBox *pThis, PRUnichar * *version); + + nsresult (*GetRevision)(IVirtualBox *pThis, PRUint32 *revision); + + nsresult (*GetPackageType)(IVirtualBox *pThis, PRUnichar * *packageType); + + nsresult (*GetHomeFolder)(IVirtualBox *pThis, PRUnichar * *homeFolder); + + nsresult (*GetSettingsFilePath)(IVirtualBox *pThis, PRUnichar * *settingsFilePath); + + nsresult (*GetSettingsFileVersion)(IVirtualBox *pThis, PRUnichar * *settingsFileVersion); + + nsresult (*GetSettingsFormatVersion)(IVirtualBox *pThis, PRUnichar * *settingsFormatVersion); + + nsresult (*GetHost)(IVirtualBox *pThis, IHost * *host); + + nsresult (*GetSystemProperties)(IVirtualBox *pThis, ISystemProperties * *systemProperties); + + nsresult (*GetMachines)(IVirtualBox *pThis, PRUint32 *machinesSize, IMachine * **machines); + + nsresult (*GetHardDisks)(IVirtualBox *pThis, PRUint32 *hardDisksSize, IHardDisk * **hardDisks); + + nsresult (*GetDVDImages)(IVirtualBox *pThis, PRUint32 *DVDImagesSize, IDVDImage * **DVDImages); + + nsresult (*GetFloppyImages)(IVirtualBox *pThis, PRUint32 *floppyImagesSize, IFloppyImage * **floppyImages); + + nsresult (*GetProgressOperations)(IVirtualBox *pThis, PRUint32 *progressOperationsSize, IProgress * **progressOperations); + + nsresult (*GetGuestOSTypes)(IVirtualBox *pThis, PRUint32 *guestOSTypesSize, IGuestOSType * **guestOSTypes); + + nsresult (*GetSharedFolders)(IVirtualBox *pThis, PRUint32 *sharedFoldersSize, ISharedFolder * **sharedFolders); + + nsresult (*GetPerformanceCollector)(IVirtualBox *pThis, IPerformanceCollector * *performanceCollector); + + nsresult (*GetDHCPServers)(IVirtualBox *pThis, PRUint32 *DHCPServersSize, IDHCPServer * **DHCPServers); + + nsresult (*CreateMachine)( + IVirtualBox *pThis, + PRUnichar * name, + PRUnichar * osTypeId, + PRUnichar * baseFolder, + PRUnichar * id, + IMachine * * machine + ); + + nsresult (*CreateLegacyMachine)( + IVirtualBox *pThis, + PRUnichar * name, + PRUnichar * osTypeId, + PRUnichar * settingsFile, + PRUnichar * id, + IMachine * * machine + ); + + nsresult (*OpenMachine)( + IVirtualBox *pThis, + PRUnichar * settingsFile, + IMachine * * machine + ); + + nsresult (*RegisterMachine)( + IVirtualBox *pThis, + IMachine * machine + ); + + nsresult (*GetMachine)( + IVirtualBox *pThis, + PRUnichar * id, + IMachine * * machine + ); + + nsresult (*FindMachine)( + IVirtualBox *pThis, + PRUnichar * name, + IMachine * * machine + ); + + nsresult (*UnregisterMachine)( + IVirtualBox *pThis, + PRUnichar * id, + IMachine * * machine + ); + + nsresult (*CreateAppliance)( + IVirtualBox *pThis, + IAppliance * * appliance + ); + + nsresult (*CreateHardDisk)( + IVirtualBox *pThis, + PRUnichar * format, + PRUnichar * location, + IHardDisk * * hardDisk + ); + + nsresult (*OpenHardDisk)( + IVirtualBox *pThis, + PRUnichar * location, + PRUint32 accessMode, + PRBool setImageId, + PRUnichar * imageId, + PRBool setParentId, + PRUnichar * parentId, + IHardDisk * * hardDisk + ); + + nsresult (*GetHardDisk)( + IVirtualBox *pThis, + PRUnichar * id, + IHardDisk * * hardDisk + ); + + nsresult (*FindHardDisk)( + IVirtualBox *pThis, + PRUnichar * location, + IHardDisk * * hardDisk + ); + + nsresult (*OpenDVDImage)( + IVirtualBox *pThis, + PRUnichar * location, + PRUnichar * id, + IDVDImage * * image + ); + + nsresult (*GetDVDImage)( + IVirtualBox *pThis, + PRUnichar * id, + IDVDImage * * image + ); + + nsresult (*FindDVDImage)( + IVirtualBox *pThis, + PRUnichar * location, + IDVDImage * * image + ); + + nsresult (*OpenFloppyImage)( + IVirtualBox *pThis, + PRUnichar * location, + PRUnichar * id, + IFloppyImage * * image + ); + + nsresult (*GetFloppyImage)( + IVirtualBox *pThis, + PRUnichar * id, + IFloppyImage * * image + ); + + nsresult (*FindFloppyImage)( + IVirtualBox *pThis, + PRUnichar * location, + IFloppyImage * * image + ); + + nsresult (*GetGuestOSType)( + IVirtualBox *pThis, + PRUnichar * id, + IGuestOSType * * type + ); + + nsresult (*CreateSharedFolder)( + IVirtualBox *pThis, + PRUnichar * name, + PRUnichar * hostPath, + PRBool writable + ); + + nsresult (*RemoveSharedFolder)( + IVirtualBox *pThis, + PRUnichar * name + ); + + nsresult (*GetNextExtraDataKey)( + IVirtualBox *pThis, + PRUnichar * key, + PRUnichar * * nextKey, + PRUnichar * * nextValue + ); + + nsresult (*GetExtraData)( + IVirtualBox *pThis, + PRUnichar * key, + PRUnichar * * value + ); + + nsresult (*SetExtraData)( + IVirtualBox *pThis, + PRUnichar * key, + PRUnichar * value + ); + + nsresult (*OpenSession)( + IVirtualBox *pThis, + ISession * session, + PRUnichar * machineId + ); + + nsresult (*OpenRemoteSession)( + IVirtualBox *pThis, + ISession * session, + PRUnichar * machineId, + PRUnichar * type, + PRUnichar * environment, + IProgress * * progress + ); + + nsresult (*OpenExistingSession)( + IVirtualBox *pThis, + ISession * session, + PRUnichar * machineId + ); + + nsresult (*RegisterCallback)( + IVirtualBox *pThis, + IVirtualBoxCallback * callback + ); + + nsresult (*UnregisterCallback)( + IVirtualBox *pThis, + IVirtualBoxCallback * callback + ); + + nsresult (*WaitForPropertyChange)( + IVirtualBox *pThis, + PRUnichar * what, + PRUint32 timeout, + PRUnichar * * changed, + PRUnichar * * values + ); + + nsresult (*SaveSettings)(IVirtualBox *pThis ); + + nsresult (*SaveSettingsWithBackup)( + IVirtualBox *pThis, + PRUnichar * * bakFileName + ); + + nsresult (*CreateDHCPServer)( + IVirtualBox *pThis, + PRUnichar * name, + IDHCPServer * * server + ); + + nsresult (*FindDHCPServerByNetworkName)( + IVirtualBox *pThis, + PRUnichar * name, + IDHCPServer * * server + ); + + nsresult (*RemoveDHCPServer)( + IVirtualBox *pThis, + IDHCPServer * server + ); + +}; + +struct IVirtualBox +{ + struct IVirtualBox_vtbl *vtbl; +}; +/* End of struct IVirtualBox Declaration */ + + +/* Start of struct IVFSExplorer Declaration */ +#define IVFSEXPLORER_IID_STR "2bb864a1-02a3-4474-a1d4-fb5f23b742e1" +#define IVFSEXPLORER_IID { \ + 0x2bb864a1, 0x02a3, 0x4474, \ + { 0xa1, 0xd4, 0xfb, 0x5f, 0x23, 0xb7, 0x42, 0xe1 } \ +} +struct IVFSExplorer_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetPath)(IVFSExplorer *pThis, PRUnichar * *path); + + nsresult (*GetType)(IVFSExplorer *pThis, PRUint32 *type); + + nsresult (*Update)( + IVFSExplorer *pThis, + IProgress * * aProgress + ); + + nsresult (*Cd)( + IVFSExplorer *pThis, + PRUnichar * aDir, + IProgress * * aProgress + ); + + nsresult (*CdUp)( + IVFSExplorer *pThis, + IProgress * * aProgress + ); + + nsresult (*EntryList)( + IVFSExplorer *pThis, + PRUint32 *aNamesSize, + PRUnichar *** aNames, + PRUint32 *aTypesSize, + PRUint32* aTypes + ); + + nsresult (*Exists)( + IVFSExplorer *pThis, + PRUint32 aNamesSize, + PRUnichar ** aNames, + PRUint32 *aExistsSize, + PRUnichar *** aExists + ); + + nsresult (*Remove)( + IVFSExplorer *pThis, + PRUint32 aNamesSize, + PRUnichar ** aNames, + IProgress * * aProgress + ); + +}; + +struct IVFSExplorer +{ + struct IVFSExplorer_vtbl *vtbl; +}; +/* End of struct IVFSExplorer Declaration */ + + +/* Start of struct IAppliance Declaration */ +#define IAPPLIANCE_IID_STR "07495095-d16c-4911-8964-5914341ced5d" +#define IAPPLIANCE_IID { \ + 0x07495095, 0xd16c, 0x4911, \ + { 0x89, 0x64, 0x59, 0x14, 0x34, 0x1c, 0xed, 0x5d } \ +} +struct IAppliance_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetPath)(IAppliance *pThis, PRUnichar * *path); + + nsresult (*GetDisks)(IAppliance *pThis, PRUint32 *disksSize, PRUnichar * **disks); + + nsresult (*GetVirtualSystemDescriptions)(IAppliance *pThis, PRUint32 *virtualSystemDescriptionsSize, IVirtualSystemDescription * **virtualSystemDescriptions); + + nsresult (*Read)( + IAppliance *pThis, + PRUnichar * file + ); + + nsresult (*Interpret)(IAppliance *pThis ); + + nsresult (*ImportMachines)( + IAppliance *pThis, + IProgress * * aProgress + ); + + nsresult (*CreateVFSExplorer)( + IAppliance *pThis, + PRUnichar * aUri, + IVFSExplorer * * aExplorer + ); + + nsresult (*Write)( + IAppliance *pThis, + PRUnichar * format, + PRUnichar * path, + IProgress * * aProgress + ); + + nsresult (*GetWarnings)( + IAppliance *pThis, + PRUint32 *aWarningsSize, + PRUnichar *** aWarnings + ); + +}; + +struct IAppliance +{ + struct IAppliance_vtbl *vtbl; +}; +/* End of struct IAppliance Declaration */ + + +/* Start of struct IVirtualSystemDescription Declaration */ +#define IVIRTUALSYSTEMDESCRIPTION_IID_STR "d7525e6c-531a-4c51-8e04-41235083a3d8" +#define IVIRTUALSYSTEMDESCRIPTION_IID { \ + 0xd7525e6c, 0x531a, 0x4c51, \ + { 0x8e, 0x04, 0x41, 0x23, 0x50, 0x83, 0xa3, 0xd8 } \ +} +struct IVirtualSystemDescription_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetCount)(IVirtualSystemDescription *pThis, PRUint32 *count); + + nsresult (*GetDescription)( + IVirtualSystemDescription *pThis, + PRUint32 *aTypesSize, + PRUint32* aTypes, + PRUint32 *aRefsSize, + PRUnichar *** aRefs, + PRUint32 *aOvfValuesSize, + PRUnichar *** aOvfValues, + PRUint32 *aVBoxValuesSize, + PRUnichar *** aVBoxValues, + PRUint32 *aExtraConfigValuesSize, + PRUnichar *** aExtraConfigValues + ); + + nsresult (*GetDescriptionByType)( + IVirtualSystemDescription *pThis, + PRUint32 aType, + PRUint32 *aTypesSize, + PRUint32* aTypes, + PRUint32 *aRefsSize, + PRUnichar *** aRefs, + PRUint32 *aOvfValuesSize, + PRUnichar *** aOvfValues, + PRUint32 *aVBoxValuesSize, + PRUnichar *** aVBoxValues, + PRUint32 *aExtraConfigValuesSize, + PRUnichar *** aExtraConfigValues + ); + + nsresult (*GetValuesByType)( + IVirtualSystemDescription *pThis, + PRUint32 aType, + PRUint32 aWhich, + PRUint32 *aValuesSize, + PRUnichar *** aValues + ); + + nsresult (*SetFinalValues)( + IVirtualSystemDescription *pThis, + PRUint32 aEnabledSize, + PRBool* aEnabled, + PRUint32 aVBoxValuesSize, + PRUnichar ** aVBoxValues, + PRUint32 aExtraConfigValuesSize, + PRUnichar ** aExtraConfigValues + ); + + nsresult (*AddDescription)( + IVirtualSystemDescription *pThis, + PRUint32 aType, + PRUnichar * aVBoxValue, + PRUnichar * aExtraConfigValue + ); + +}; + +struct IVirtualSystemDescription +{ + struct IVirtualSystemDescription_vtbl *vtbl; +}; +/* End of struct IVirtualSystemDescription Declaration */ + + +/* Start of struct IInternalMachineControl Declaration */ +#define IINTERNALMACHINECONTROL_IID_STR "ce8087d7-de92-4bbb-8140-a22fb07f37ba" +#define IINTERNALMACHINECONTROL_IID { \ + 0xce8087d7, 0xde92, 0x4bbb, \ + { 0x81, 0x40, 0xa2, 0x2f, 0xb0, 0x7f, 0x37, 0xba } \ +} +struct IInternalMachineControl_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*SetRemoveSavedState)( + IInternalMachineControl *pThis, + PRBool aRemove + ); + + nsresult (*UpdateState)( + IInternalMachineControl *pThis, + PRUint32 state + ); + + nsresult (*GetIPCId)( + IInternalMachineControl *pThis, + PRUnichar * * id + ); + + nsresult (*RunUSBDeviceFilters)( + IInternalMachineControl *pThis, + IUSBDevice * device, + PRBool * matched, + PRUint32 * maskedInterfaces + ); + + nsresult (*CaptureUSBDevice)( + IInternalMachineControl *pThis, + PRUnichar * id + ); + + nsresult (*DetachUSBDevice)( + IInternalMachineControl *pThis, + PRUnichar * id, + PRBool done + ); + + nsresult (*AutoCaptureUSBDevices)(IInternalMachineControl *pThis ); + + nsresult (*DetachAllUSBDevices)( + IInternalMachineControl *pThis, + PRBool done + ); + + nsresult (*OnSessionEnd)( + IInternalMachineControl *pThis, + ISession * session, + IProgress * * progress + ); + + nsresult (*BeginSavingState)( + IInternalMachineControl *pThis, + IProgress * progress, + PRUnichar * * stateFilePath + ); + + nsresult (*EndSavingState)( + IInternalMachineControl *pThis, + PRBool success + ); + + nsresult (*AdoptSavedState)( + IInternalMachineControl *pThis, + PRUnichar * savedStateFile + ); + + nsresult (*BeginTakingSnapshot)( + IInternalMachineControl *pThis, + IConsole * initiator, + PRUnichar * name, + PRUnichar * description, + IProgress * progress, + PRUnichar * * stateFilePath, + IProgress * * serverProgress + ); + + nsresult (*EndTakingSnapshot)( + IInternalMachineControl *pThis, + PRBool success + ); + + nsresult (*DiscardSnapshot)( + IInternalMachineControl *pThis, + IConsole * initiator, + PRUnichar * id, + PRUint32 * machineState, + IProgress * * progress + ); + + nsresult (*DiscardCurrentState)( + IInternalMachineControl *pThis, + IConsole * initiator, + PRUint32 * machineState, + IProgress * * progress + ); + + nsresult (*DiscardCurrentSnapshotAndState)( + IInternalMachineControl *pThis, + IConsole * initiator, + PRUint32 * machineState, + IProgress * * progress + ); + + nsresult (*PullGuestProperties)( + IInternalMachineControl *pThis, + PRUint32 *nameSize, + PRUnichar *** name, + PRUint32 *valueSize, + PRUnichar *** value, + PRUint32 *timestampSize, + PRUint64* timestamp, + PRUint32 *flagsSize, + PRUnichar *** flags + ); + + nsresult (*PushGuestProperties)( + IInternalMachineControl *pThis, + PRUint32 nameSize, + PRUnichar ** name, + PRUint32 valueSize, + PRUnichar ** value, + PRUint32 timestampSize, + PRUint64* timestamp, + PRUint32 flagsSize, + PRUnichar ** flags + ); + + nsresult (*PushGuestProperty)( + IInternalMachineControl *pThis, + PRUnichar * name, + PRUnichar * value, + PRUint64 timestamp, + PRUnichar * flags + ); + + nsresult (*LockMedia)(IInternalMachineControl *pThis ); + +}; + +struct IInternalMachineControl +{ + struct IInternalMachineControl_vtbl *vtbl; +}; +/* End of struct IInternalMachineControl Declaration */ + + +/* Start of struct IBIOSSettings Declaration */ +#define IBIOSSETTINGS_IID_STR "38b54279-dc35-4f5e-a431-835b867c6b5e" +#define IBIOSSETTINGS_IID { \ + 0x38b54279, 0xdc35, 0x4f5e, \ + { 0xa4, 0x31, 0x83, 0x5b, 0x86, 0x7c, 0x6b, 0x5e } \ +} +struct IBIOSSettings_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetLogoFadeIn)(IBIOSSettings *pThis, PRBool *logoFadeIn); + nsresult (*SetLogoFadeIn)(IBIOSSettings *pThis, PRBool logoFadeIn); + + nsresult (*GetLogoFadeOut)(IBIOSSettings *pThis, PRBool *logoFadeOut); + nsresult (*SetLogoFadeOut)(IBIOSSettings *pThis, PRBool logoFadeOut); + + nsresult (*GetLogoDisplayTime)(IBIOSSettings *pThis, PRUint32 *logoDisplayTime); + nsresult (*SetLogoDisplayTime)(IBIOSSettings *pThis, PRUint32 logoDisplayTime); + + nsresult (*GetLogoImagePath)(IBIOSSettings *pThis, PRUnichar * *logoImagePath); + nsresult (*SetLogoImagePath)(IBIOSSettings *pThis, PRUnichar * logoImagePath); + + nsresult (*GetBootMenuMode)(IBIOSSettings *pThis, PRUint32 *bootMenuMode); + nsresult (*SetBootMenuMode)(IBIOSSettings *pThis, PRUint32 bootMenuMode); + + nsresult (*GetACPIEnabled)(IBIOSSettings *pThis, PRBool *ACPIEnabled); + nsresult (*SetACPIEnabled)(IBIOSSettings *pThis, PRBool ACPIEnabled); + + nsresult (*GetIOAPICEnabled)(IBIOSSettings *pThis, PRBool *IOAPICEnabled); + nsresult (*SetIOAPICEnabled)(IBIOSSettings *pThis, PRBool IOAPICEnabled); + + nsresult (*GetTimeOffset)(IBIOSSettings *pThis, PRInt64 *timeOffset); + nsresult (*SetTimeOffset)(IBIOSSettings *pThis, PRInt64 timeOffset); + + nsresult (*GetPXEDebugEnabled)(IBIOSSettings *pThis, PRBool *PXEDebugEnabled); + nsresult (*SetPXEDebugEnabled)(IBIOSSettings *pThis, PRBool PXEDebugEnabled); + +}; + +struct IBIOSSettings +{ + struct IBIOSSettings_vtbl *vtbl; +}; +/* End of struct IBIOSSettings Declaration */ + + +/* Start of struct IMachine Declaration */ +#define IMACHINE_IID_STR "540dcfda-3df2-49c6-88fa-033a28c2ff85" +#define IMACHINE_IID { \ + 0x540dcfda, 0x3df2, 0x49c6, \ + { 0x88, 0xfa, 0x03, 0x3a, 0x28, 0xc2, 0xff, 0x85 } \ +} +struct IMachine_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetParent)(IMachine *pThis, IVirtualBox * *parent); + + nsresult (*GetAccessible)(IMachine *pThis, PRBool *accessible); + + nsresult (*GetAccessError)(IMachine *pThis, IVirtualBoxErrorInfo * *accessError); + + nsresult (*GetName)(IMachine *pThis, PRUnichar * *name); + nsresult (*SetName)(IMachine *pThis, PRUnichar * name); + + nsresult (*GetDescription)(IMachine *pThis, PRUnichar * *description); + nsresult (*SetDescription)(IMachine *pThis, PRUnichar * description); + + nsresult (*GetId)(IMachine *pThis, PRUnichar * *id); + + nsresult (*GetOSTypeId)(IMachine *pThis, PRUnichar * *OSTypeId); + nsresult (*SetOSTypeId)(IMachine *pThis, PRUnichar * OSTypeId); + + nsresult (*GetHardwareVersion)(IMachine *pThis, PRUnichar * *HardwareVersion); + nsresult (*SetHardwareVersion)(IMachine *pThis, PRUnichar * HardwareVersion); + + nsresult (*GetCPUCount)(IMachine *pThis, PRUint32 *CPUCount); + nsresult (*SetCPUCount)(IMachine *pThis, PRUint32 CPUCount); + + nsresult (*GetMemorySize)(IMachine *pThis, PRUint32 *memorySize); + nsresult (*SetMemorySize)(IMachine *pThis, PRUint32 memorySize); + + nsresult (*GetMemoryBalloonSize)(IMachine *pThis, PRUint32 *memoryBalloonSize); + nsresult (*SetMemoryBalloonSize)(IMachine *pThis, PRUint32 memoryBalloonSize); + + nsresult (*GetStatisticsUpdateInterval)(IMachine *pThis, PRUint32 *statisticsUpdateInterval); + nsresult (*SetStatisticsUpdateInterval)(IMachine *pThis, PRUint32 statisticsUpdateInterval); + + nsresult (*GetVRAMSize)(IMachine *pThis, PRUint32 *VRAMSize); + nsresult (*SetVRAMSize)(IMachine *pThis, PRUint32 VRAMSize); + + nsresult (*GetAccelerate3DEnabled)(IMachine *pThis, PRBool *accelerate3DEnabled); + nsresult (*SetAccelerate3DEnabled)(IMachine *pThis, PRBool accelerate3DEnabled); + + nsresult (*GetMonitorCount)(IMachine *pThis, PRUint32 *monitorCount); + nsresult (*SetMonitorCount)(IMachine *pThis, PRUint32 monitorCount); + + nsresult (*GetBIOSSettings)(IMachine *pThis, IBIOSSettings * *BIOSSettings); + + nsresult (*GetHWVirtExEnabled)(IMachine *pThis, PRBool *HWVirtExEnabled); + nsresult (*SetHWVirtExEnabled)(IMachine *pThis, PRBool HWVirtExEnabled); + + nsresult (*GetHWVirtExNestedPagingEnabled)(IMachine *pThis, PRBool *HWVirtExNestedPagingEnabled); + nsresult (*SetHWVirtExNestedPagingEnabled)(IMachine *pThis, PRBool HWVirtExNestedPagingEnabled); + + nsresult (*GetHWVirtExVPIDEnabled)(IMachine *pThis, PRBool *HWVirtExVPIDEnabled); + nsresult (*SetHWVirtExVPIDEnabled)(IMachine *pThis, PRBool HWVirtExVPIDEnabled); + + nsresult (*GetPAEEnabled)(IMachine *pThis, PRBool *PAEEnabled); + nsresult (*SetPAEEnabled)(IMachine *pThis, PRBool PAEEnabled); + + nsresult (*GetSnapshotFolder)(IMachine *pThis, PRUnichar * *snapshotFolder); + nsresult (*SetSnapshotFolder)(IMachine *pThis, PRUnichar * snapshotFolder); + + nsresult (*GetVRDPServer)(IMachine *pThis, IVRDPServer * *VRDPServer); + + nsresult (*GetHardDiskAttachments)(IMachine *pThis, PRUint32 *hardDiskAttachmentsSize, IHardDiskAttachment * **hardDiskAttachments); + + nsresult (*GetDVDDrive)(IMachine *pThis, IDVDDrive * *DVDDrive); + + nsresult (*GetFloppyDrive)(IMachine *pThis, IFloppyDrive * *floppyDrive); + + nsresult (*GetUSBController)(IMachine *pThis, IUSBController * *USBController); + + nsresult (*GetAudioAdapter)(IMachine *pThis, IAudioAdapter * *audioAdapter); + + nsresult (*GetStorageControllers)(IMachine *pThis, PRUint32 *storageControllersSize, IStorageController * **storageControllers); + + nsresult (*GetSettingsFilePath)(IMachine *pThis, PRUnichar * *settingsFilePath); + + nsresult (*GetSettingsFileVersion)(IMachine *pThis, PRUnichar * *settingsFileVersion); + + nsresult (*GetSettingsModified)(IMachine *pThis, PRBool *settingsModified); + + nsresult (*GetSessionState)(IMachine *pThis, PRUint32 *sessionState); + + nsresult (*GetSessionType)(IMachine *pThis, PRUnichar * *sessionType); + + nsresult (*GetSessionPid)(IMachine *pThis, PRUint32 *sessionPid); + + nsresult (*GetState)(IMachine *pThis, PRUint32 *state); + + nsresult (*GetLastStateChange)(IMachine *pThis, PRInt64 *lastStateChange); + + nsresult (*GetStateFilePath)(IMachine *pThis, PRUnichar * *stateFilePath); + + nsresult (*GetLogFolder)(IMachine *pThis, PRUnichar * *logFolder); + + nsresult (*GetCurrentSnapshot)(IMachine *pThis, ISnapshot * *currentSnapshot); + + nsresult (*GetSnapshotCount)(IMachine *pThis, PRUint32 *snapshotCount); + + nsresult (*GetCurrentStateModified)(IMachine *pThis, PRBool *currentStateModified); + + nsresult (*GetSharedFolders)(IMachine *pThis, PRUint32 *sharedFoldersSize, ISharedFolder * **sharedFolders); + + nsresult (*GetClipboardMode)(IMachine *pThis, PRUint32 *clipboardMode); + nsresult (*SetClipboardMode)(IMachine *pThis, PRUint32 clipboardMode); + + nsresult (*GetGuestPropertyNotificationPatterns)(IMachine *pThis, PRUnichar * *guestPropertyNotificationPatterns); + nsresult (*SetGuestPropertyNotificationPatterns)(IMachine *pThis, PRUnichar * guestPropertyNotificationPatterns); + + nsresult (*SetBootOrder)( + IMachine *pThis, + PRUint32 position, + PRUint32 device + ); + + nsresult (*GetBootOrder)( + IMachine *pThis, + PRUint32 position, + PRUint32 * device + ); + + nsresult (*AttachHardDisk)( + IMachine *pThis, + PRUnichar * id, + PRUnichar * name, + PRInt32 controllerPort, + PRInt32 device + ); + + nsresult (*GetHardDisk)( + IMachine *pThis, + PRUnichar * name, + PRInt32 controllerPort, + PRInt32 device, + IHardDisk * * hardDisk + ); + + nsresult (*DetachHardDisk)( + IMachine *pThis, + PRUnichar * name, + PRInt32 controllerPort, + PRInt32 device + ); + + nsresult (*GetHardDiskAttachmentsOfController)( + IMachine *pThis, + PRUnichar * name, + PRUint32 *hardDiskAttachmentsSize, + IHardDiskAttachment *** hardDiskAttachments + ); + + nsresult (*GetNetworkAdapter)( + IMachine *pThis, + PRUint32 slot, + INetworkAdapter * * adapter + ); + + nsresult (*AddStorageController)( + IMachine *pThis, + PRUnichar * name, + PRUint32 connectionType, + IStorageController * * controller + ); + + nsresult (*GetStorageControllerByName)( + IMachine *pThis, + PRUnichar * name, + IStorageController * * storageController + ); + + nsresult (*RemoveStorageController)( + IMachine *pThis, + PRUnichar * name + ); + + nsresult (*GetSerialPort)( + IMachine *pThis, + PRUint32 slot, + ISerialPort * * port + ); + + nsresult (*GetParallelPort)( + IMachine *pThis, + PRUint32 slot, + IParallelPort * * port + ); + + nsresult (*GetNextExtraDataKey)( + IMachine *pThis, + PRUnichar * key, + PRUnichar * * nextKey, + PRUnichar * * nextValue + ); + + nsresult (*GetExtraData)( + IMachine *pThis, + PRUnichar * key, + PRUnichar * * value + ); + + nsresult (*SetExtraData)( + IMachine *pThis, + PRUnichar * key, + PRUnichar * value + ); + + nsresult (*SaveSettings)(IMachine *pThis ); + + nsresult (*SaveSettingsWithBackup)( + IMachine *pThis, + PRUnichar * * bakFileName + ); + + nsresult (*DiscardSettings)(IMachine *pThis ); + + nsresult (*DeleteSettings)(IMachine *pThis ); + + nsresult (*Export)( + IMachine *pThis, + IAppliance * aAppliance, + IVirtualSystemDescription * * aDescription + ); + + nsresult (*GetSnapshot)( + IMachine *pThis, + PRUnichar * id, + ISnapshot * * snapshot + ); + + nsresult (*FindSnapshot)( + IMachine *pThis, + PRUnichar * name, + ISnapshot * * snapshot + ); + + nsresult (*SetCurrentSnapshot)( + IMachine *pThis, + PRUnichar * id + ); + + nsresult (*CreateSharedFolder)( + IMachine *pThis, + PRUnichar * name, + PRUnichar * hostPath, + PRBool writable + ); + + nsresult (*RemoveSharedFolder)( + IMachine *pThis, + PRUnichar * name + ); + + nsresult (*CanShowConsoleWindow)( + IMachine *pThis, + PRBool * canShow + ); + + nsresult (*ShowConsoleWindow)( + IMachine *pThis, + PRUint64 * winId + ); + + nsresult (*GetGuestProperty)( + IMachine *pThis, + PRUnichar * name, + PRUnichar * * value, + PRUint64 * timestamp, + PRUnichar * * flags + ); + + nsresult (*GetGuestPropertyValue)( + IMachine *pThis, + PRUnichar * property, + PRUnichar * * value + ); + + nsresult (*GetGuestPropertyTimestamp)( + IMachine *pThis, + PRUnichar * property, + PRUint64 * value + ); + + nsresult (*SetGuestProperty)( + IMachine *pThis, + PRUnichar * property, + PRUnichar * value, + PRUnichar * flags + ); + + nsresult (*SetGuestPropertyValue)( + IMachine *pThis, + PRUnichar * property, + PRUnichar * value + ); + + nsresult (*EnumerateGuestProperties)( + IMachine *pThis, + PRUnichar * patterns, + PRUint32 *nameSize, + PRUnichar *** name, + PRUint32 *valueSize, + PRUnichar *** value, + PRUint32 *timestampSize, + PRUint64* timestamp, + PRUint32 *flagsSize, + PRUnichar *** flags + ); + +}; + +struct IMachine +{ + struct IMachine_vtbl *vtbl; +}; +/* End of struct IMachine Declaration */ + + +/* Start of struct IConsoleCallback Declaration */ +#define ICONSOLECALLBACK_IID_STR "13dfbef3-b74d-487d-bada-2304529aefa6" +#define ICONSOLECALLBACK_IID { \ + 0x13dfbef3, 0xb74d, 0x487d, \ + { 0xba, 0xda, 0x23, 0x04, 0x52, 0x9a, 0xef, 0xa6 } \ +} +struct IConsoleCallback_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*OnMousePointerShapeChange)( + IConsoleCallback *pThis, + PRBool visible, + PRBool alpha, + PRUint32 xHot, + PRUint32 yHot, + PRUint32 width, + PRUint32 height, + PRUint8 * shape + ); + + nsresult (*OnMouseCapabilityChange)( + IConsoleCallback *pThis, + PRBool supportsAbsolute, + PRBool needsHostCursor + ); + + nsresult (*OnKeyboardLedsChange)( + IConsoleCallback *pThis, + PRBool numLock, + PRBool capsLock, + PRBool scrollLock + ); + + nsresult (*OnStateChange)( + IConsoleCallback *pThis, + PRUint32 state + ); + + nsresult (*OnAdditionsStateChange)(IConsoleCallback *pThis ); + + nsresult (*OnDVDDriveChange)(IConsoleCallback *pThis ); + + nsresult (*OnFloppyDriveChange)(IConsoleCallback *pThis ); + + nsresult (*OnNetworkAdapterChange)( + IConsoleCallback *pThis, + INetworkAdapter * networkAdapter + ); + + nsresult (*OnSerialPortChange)( + IConsoleCallback *pThis, + ISerialPort * serialPort + ); + + nsresult (*OnParallelPortChange)( + IConsoleCallback *pThis, + IParallelPort * parallelPort + ); + + nsresult (*OnStorageControllerChange)(IConsoleCallback *pThis ); + + nsresult (*OnVRDPServerChange)(IConsoleCallback *pThis ); + + nsresult (*OnUSBControllerChange)(IConsoleCallback *pThis ); + + nsresult (*OnUSBDeviceStateChange)( + IConsoleCallback *pThis, + IUSBDevice * device, + PRBool attached, + IVirtualBoxErrorInfo * error + ); + + nsresult (*OnSharedFolderChange)( + IConsoleCallback *pThis, + PRUint32 scope + ); + + nsresult (*OnRuntimeError)( + IConsoleCallback *pThis, + PRBool fatal, + PRUnichar * id, + PRUnichar * message + ); + + nsresult (*OnCanShowWindow)( + IConsoleCallback *pThis, + PRBool * canShow + ); + + nsresult (*OnShowWindow)( + IConsoleCallback *pThis, + PRUint64 * winId + ); + +}; + +struct IConsoleCallback +{ + struct IConsoleCallback_vtbl *vtbl; +}; +/* End of struct IConsoleCallback Declaration */ + + +/* Start of struct IRemoteDisplayInfo Declaration */ +#define IREMOTEDISPLAYINFO_IID_STR "550104cd-2dfd-4a6c-857d-f6f8e088e62c" +#define IREMOTEDISPLAYINFO_IID { \ + 0x550104cd, 0x2dfd, 0x4a6c, \ + { 0x85, 0x7d, 0xf6, 0xf8, 0xe0, 0x88, 0xe6, 0x2c } \ +} +struct IRemoteDisplayInfo_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetActive)(IRemoteDisplayInfo *pThis, PRBool *active); + + nsresult (*GetNumberOfClients)(IRemoteDisplayInfo *pThis, PRUint32 *numberOfClients); + + nsresult (*GetBeginTime)(IRemoteDisplayInfo *pThis, PRInt64 *beginTime); + + nsresult (*GetEndTime)(IRemoteDisplayInfo *pThis, PRInt64 *endTime); + + nsresult (*GetBytesSent)(IRemoteDisplayInfo *pThis, PRUint64 *bytesSent); + + nsresult (*GetBytesSentTotal)(IRemoteDisplayInfo *pThis, PRUint64 *bytesSentTotal); + + nsresult (*GetBytesReceived)(IRemoteDisplayInfo *pThis, PRUint64 *bytesReceived); + + nsresult (*GetBytesReceivedTotal)(IRemoteDisplayInfo *pThis, PRUint64 *bytesReceivedTotal); + + nsresult (*GetUser)(IRemoteDisplayInfo *pThis, PRUnichar * *user); + + nsresult (*GetDomain)(IRemoteDisplayInfo *pThis, PRUnichar * *domain); + + nsresult (*GetClientName)(IRemoteDisplayInfo *pThis, PRUnichar * *clientName); + + nsresult (*GetClientIP)(IRemoteDisplayInfo *pThis, PRUnichar * *clientIP); + + nsresult (*GetClientVersion)(IRemoteDisplayInfo *pThis, PRUint32 *clientVersion); + + nsresult (*GetEncryptionStyle)(IRemoteDisplayInfo *pThis, PRUint32 *encryptionStyle); + +}; + +struct IRemoteDisplayInfo +{ + struct IRemoteDisplayInfo_vtbl *vtbl; +}; +/* End of struct IRemoteDisplayInfo Declaration */ + + +/* Start of struct IConsole Declaration */ +#define ICONSOLE_IID_STR "0a51994b-cbc6-4686-94eb-d4e4023280e2" +#define ICONSOLE_IID { \ + 0x0a51994b, 0xcbc6, 0x4686, \ + { 0x94, 0xeb, 0xd4, 0xe4, 0x02, 0x32, 0x80, 0xe2 } \ +} +struct IConsole_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetMachine)(IConsole *pThis, IMachine * *machine); + + nsresult (*GetState)(IConsole *pThis, PRUint32 *state); + + nsresult (*GetGuest)(IConsole *pThis, IGuest * *guest); + + nsresult (*GetKeyboard)(IConsole *pThis, IKeyboard * *keyboard); + + nsresult (*GetMouse)(IConsole *pThis, IMouse * *mouse); + + nsresult (*GetDisplay)(IConsole *pThis, IDisplay * *display); + + nsresult (*GetDebugger)(IConsole *pThis, IMachineDebugger * *debugger); + + nsresult (*GetUSBDevices)(IConsole *pThis, PRUint32 *USBDevicesSize, IUSBDevice * **USBDevices); + + nsresult (*GetRemoteUSBDevices)(IConsole *pThis, PRUint32 *remoteUSBDevicesSize, IHostUSBDevice * **remoteUSBDevices); + + nsresult (*GetSharedFolders)(IConsole *pThis, PRUint32 *sharedFoldersSize, ISharedFolder * **sharedFolders); + + nsresult (*GetRemoteDisplayInfo)(IConsole *pThis, IRemoteDisplayInfo * *remoteDisplayInfo); + + nsresult (*PowerUp)( + IConsole *pThis, + IProgress * * progress + ); + + nsresult (*PowerUpPaused)( + IConsole *pThis, + IProgress * * progress + ); + + nsresult (*PowerDown)( + IConsole *pThis, + IProgress * * progress + ); + + nsresult (*Reset)(IConsole *pThis ); + + nsresult (*Pause)(IConsole *pThis ); + + nsresult (*Resume)(IConsole *pThis ); + + nsresult (*PowerButton)(IConsole *pThis ); + + nsresult (*SleepButton)(IConsole *pThis ); + + nsresult (*GetPowerButtonHandled)( + IConsole *pThis, + PRBool * handled + ); + + nsresult (*GetGuestEnteredACPIMode)( + IConsole *pThis, + PRBool * entered + ); + + nsresult (*SaveState)( + IConsole *pThis, + IProgress * * progress + ); + + nsresult (*AdoptSavedState)( + IConsole *pThis, + PRUnichar * savedStateFile + ); + + nsresult (*ForgetSavedState)( + IConsole *pThis, + PRBool remove + ); + + nsresult (*GetDeviceActivity)( + IConsole *pThis, + PRUint32 type, + PRUint32 * activity + ); + + nsresult (*AttachUSBDevice)( + IConsole *pThis, + PRUnichar * id + ); + + nsresult (*DetachUSBDevice)( + IConsole *pThis, + PRUnichar * id, + IUSBDevice * * device + ); + + nsresult (*FindUSBDeviceByAddress)( + IConsole *pThis, + PRUnichar * name, + IUSBDevice * * device + ); + + nsresult (*FindUSBDeviceById)( + IConsole *pThis, + PRUnichar * id, + IUSBDevice * * device + ); + + nsresult (*CreateSharedFolder)( + IConsole *pThis, + PRUnichar * name, + PRUnichar * hostPath, + PRBool writable + ); + + nsresult (*RemoveSharedFolder)( + IConsole *pThis, + PRUnichar * name + ); + + nsresult (*TakeSnapshot)( + IConsole *pThis, + PRUnichar * name, + PRUnichar * description, + IProgress * * progress + ); + + nsresult (*DiscardSnapshot)( + IConsole *pThis, + PRUnichar * id, + IProgress * * progress + ); + + nsresult (*DiscardCurrentState)( + IConsole *pThis, + IProgress * * progress + ); + + nsresult (*DiscardCurrentSnapshotAndState)( + IConsole *pThis, + IProgress * * progress + ); + + nsresult (*RegisterCallback)( + IConsole *pThis, + IConsoleCallback * callback + ); + + nsresult (*UnregisterCallback)( + IConsole *pThis, + IConsoleCallback * callback + ); + +}; + +struct IConsole +{ + struct IConsole_vtbl *vtbl; +}; +/* End of struct IConsole Declaration */ + + +/* Start of struct IHostDVDDrive Declaration */ +#define IHOSTDVDDRIVE_IID_STR "21f86694-202d-4ce4-8b05-a63ff82dbf4c" +#define IHOSTDVDDRIVE_IID { \ + 0x21f86694, 0x202d, 0x4ce4, \ + { 0x8b, 0x05, 0xa6, 0x3f, 0xf8, 0x2d, 0xbf, 0x4c } \ +} +struct IHostDVDDrive_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetName)(IHostDVDDrive *pThis, PRUnichar * *name); + + nsresult (*GetDescription)(IHostDVDDrive *pThis, PRUnichar * *description); + + nsresult (*GetUdi)(IHostDVDDrive *pThis, PRUnichar * *udi); + +}; + +struct IHostDVDDrive +{ + struct IHostDVDDrive_vtbl *vtbl; +}; +/* End of struct IHostDVDDrive Declaration */ + + +/* Start of struct IHostFloppyDrive Declaration */ +#define IHOSTFLOPPYDRIVE_IID_STR "3f02d604-e908-4919-9fd1-8a4afd68fc63" +#define IHOSTFLOPPYDRIVE_IID { \ + 0x3f02d604, 0xe908, 0x4919, \ + { 0x9f, 0xd1, 0x8a, 0x4a, 0xfd, 0x68, 0xfc, 0x63 } \ +} +struct IHostFloppyDrive_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetName)(IHostFloppyDrive *pThis, PRUnichar * *name); + + nsresult (*GetDescription)(IHostFloppyDrive *pThis, PRUnichar * *description); + + nsresult (*GetUdi)(IHostFloppyDrive *pThis, PRUnichar * *udi); + +}; + +struct IHostFloppyDrive +{ + struct IHostFloppyDrive_vtbl *vtbl; +}; +/* End of struct IHostFloppyDrive Declaration */ + + +/* Start of struct IHostNetworkInterface Declaration */ +#define IHOSTNETWORKINTERFACE_IID_STR "ce6fae58-7642-4102-b5db-c9005c2320a8" +#define IHOSTNETWORKINTERFACE_IID { \ + 0xce6fae58, 0x7642, 0x4102, \ + { 0xb5, 0xdb, 0xc9, 0x00, 0x5c, 0x23, 0x20, 0xa8 } \ +} +struct IHostNetworkInterface_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetName)(IHostNetworkInterface *pThis, PRUnichar * *name); + + nsresult (*GetId)(IHostNetworkInterface *pThis, PRUnichar * *id); + + nsresult (*GetNetworkName)(IHostNetworkInterface *pThis, PRUnichar * *networkName); + + nsresult (*GetDhcpEnabled)(IHostNetworkInterface *pThis, PRBool *dhcpEnabled); + + nsresult (*GetIPAddress)(IHostNetworkInterface *pThis, PRUnichar * *IPAddress); + + nsresult (*GetNetworkMask)(IHostNetworkInterface *pThis, PRUnichar * *networkMask); + + nsresult (*GetIPV6Supported)(IHostNetworkInterface *pThis, PRBool *IPV6Supported); + + nsresult (*GetIPV6Address)(IHostNetworkInterface *pThis, PRUnichar * *IPV6Address); + + nsresult (*GetIPV6NetworkMaskPrefixLength)(IHostNetworkInterface *pThis, PRUint32 *IPV6NetworkMaskPrefixLength); + + nsresult (*GetHardwareAddress)(IHostNetworkInterface *pThis, PRUnichar * *hardwareAddress); + + nsresult (*GetMediumType)(IHostNetworkInterface *pThis, PRUint32 *mediumType); + + nsresult (*GetStatus)(IHostNetworkInterface *pThis, PRUint32 *status); + + nsresult (*GetInterfaceType)(IHostNetworkInterface *pThis, PRUint32 *interfaceType); + + nsresult (*EnableStaticIpConfig)( + IHostNetworkInterface *pThis, + PRUnichar * IPAddress, + PRUnichar * networkMask + ); + + nsresult (*EnableStaticIpConfigV6)( + IHostNetworkInterface *pThis, + PRUnichar * IPV6Address, + PRUint32 IPV6NetworkMaskPrefixLength + ); + + nsresult (*EnableDynamicIpConfig)(IHostNetworkInterface *pThis ); + + nsresult (*DhcpRediscover)(IHostNetworkInterface *pThis ); + +}; + +struct IHostNetworkInterface +{ + struct IHostNetworkInterface_vtbl *vtbl; +}; +/* End of struct IHostNetworkInterface Declaration */ + + +/* Start of struct IHost Declaration */ +#define IHOST_IID_STR "a13b5556-5c0b-4f80-9df6-6f804f3336a1" +#define IHOST_IID { \ + 0xa13b5556, 0x5c0b, 0x4f80, \ + { 0x9d, 0xf6, 0x6f, 0x80, 0x4f, 0x33, 0x36, 0xa1 } \ +} +struct IHost_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetDVDDrives)(IHost *pThis, PRUint32 *DVDDrivesSize, IHostDVDDrive * **DVDDrives); + + nsresult (*GetFloppyDrives)(IHost *pThis, PRUint32 *floppyDrivesSize, IHostFloppyDrive * **floppyDrives); + + nsresult (*GetUSBDevices)(IHost *pThis, PRUint32 *USBDevicesSize, IHostUSBDevice * **USBDevices); + + nsresult (*GetUSBDeviceFilters)(IHost *pThis, PRUint32 *USBDeviceFiltersSize, IHostUSBDeviceFilter * **USBDeviceFilters); + + nsresult (*GetNetworkInterfaces)(IHost *pThis, PRUint32 *networkInterfacesSize, IHostNetworkInterface * **networkInterfaces); + + nsresult (*GetProcessorCount)(IHost *pThis, PRUint32 *processorCount); + + nsresult (*GetProcessorOnlineCount)(IHost *pThis, PRUint32 *processorOnlineCount); + + nsresult (*GetMemorySize)(IHost *pThis, PRUint32 *memorySize); + + nsresult (*GetMemoryAvailable)(IHost *pThis, PRUint32 *memoryAvailable); + + nsresult (*GetOperatingSystem)(IHost *pThis, PRUnichar * *operatingSystem); + + nsresult (*GetOSVersion)(IHost *pThis, PRUnichar * *OSVersion); + + nsresult (*GetUTCTime)(IHost *pThis, PRInt64 *UTCTime); + + nsresult (*GetAcceleration3DAvailable)(IHost *pThis, PRBool *Acceleration3DAvailable); + + nsresult (*GetProcessorSpeed)( + IHost *pThis, + PRUint32 cpuId, + PRUint32 * speed + ); + + nsresult (*GetProcessorFeature)( + IHost *pThis, + PRUint32 feature, + PRBool * supported + ); + + nsresult (*GetProcessorDescription)( + IHost *pThis, + PRUint32 cpuId, + PRUnichar * * description + ); + + nsresult (*CreateHostOnlyNetworkInterface)( + IHost *pThis, + IHostNetworkInterface * * hostInterface, + IProgress * * progress + ); + + nsresult (*RemoveHostOnlyNetworkInterface)( + IHost *pThis, + PRUnichar * id, + IHostNetworkInterface * * hostInterface, + IProgress * * progress + ); + + nsresult (*CreateUSBDeviceFilter)( + IHost *pThis, + PRUnichar * name, + IHostUSBDeviceFilter * * filter + ); + + nsresult (*InsertUSBDeviceFilter)( + IHost *pThis, + PRUint32 position, + IHostUSBDeviceFilter * filter + ); + + nsresult (*RemoveUSBDeviceFilter)( + IHost *pThis, + PRUint32 position, + IHostUSBDeviceFilter * * filter + ); + + nsresult (*FindHostDVDDrive)( + IHost *pThis, + PRUnichar * name, + IHostDVDDrive * * drive + ); + + nsresult (*FindHostFloppyDrive)( + IHost *pThis, + PRUnichar * name, + IHostFloppyDrive * * drive + ); + + nsresult (*FindHostNetworkInterfaceByName)( + IHost *pThis, + PRUnichar * name, + IHostNetworkInterface * * networkInterface + ); + + nsresult (*FindHostNetworkInterfaceById)( + IHost *pThis, + PRUnichar * id, + IHostNetworkInterface * * networkInterface + ); + + nsresult (*FindHostNetworkInterfacesOfType)( + IHost *pThis, + PRUint32 type, + PRUint32 *networkInterfacesSize, + IHostNetworkInterface *** networkInterfaces + ); + + nsresult (*FindUSBDeviceById)( + IHost *pThis, + PRUnichar * id, + IHostUSBDevice * * device + ); + + nsresult (*FindUSBDeviceByAddress)( + IHost *pThis, + PRUnichar * name, + IHostUSBDevice * * device + ); + +}; + +struct IHost +{ + struct IHost_vtbl *vtbl; +}; +/* End of struct IHost Declaration */ + + +/* Start of struct ISystemProperties Declaration */ +#define ISYSTEMPROPERTIES_IID_STR "9ca0f712-83f3-4631-b143-b75ef6568332" +#define ISYSTEMPROPERTIES_IID { \ + 0x9ca0f712, 0x83f3, 0x4631, \ + { 0xb1, 0x43, 0xb7, 0x5e, 0xf6, 0x56, 0x83, 0x32 } \ +} +struct ISystemProperties_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetMinGuestRAM)(ISystemProperties *pThis, PRUint32 *minGuestRAM); + + nsresult (*GetMaxGuestRAM)(ISystemProperties *pThis, PRUint32 *maxGuestRAM); + + nsresult (*GetMinGuestVRAM)(ISystemProperties *pThis, PRUint32 *minGuestVRAM); + + nsresult (*GetMaxGuestVRAM)(ISystemProperties *pThis, PRUint32 *maxGuestVRAM); + + nsresult (*GetMinGuestCPUCount)(ISystemProperties *pThis, PRUint32 *minGuestCPUCount); + + nsresult (*GetMaxGuestCPUCount)(ISystemProperties *pThis, PRUint32 *maxGuestCPUCount); + + nsresult (*GetMaxVDISize)(ISystemProperties *pThis, PRUint64 *maxVDISize); + + nsresult (*GetNetworkAdapterCount)(ISystemProperties *pThis, PRUint32 *networkAdapterCount); + + nsresult (*GetSerialPortCount)(ISystemProperties *pThis, PRUint32 *serialPortCount); + + nsresult (*GetParallelPortCount)(ISystemProperties *pThis, PRUint32 *parallelPortCount); + + nsresult (*GetMaxBootPosition)(ISystemProperties *pThis, PRUint32 *maxBootPosition); + + nsresult (*GetDefaultMachineFolder)(ISystemProperties *pThis, PRUnichar * *defaultMachineFolder); + nsresult (*SetDefaultMachineFolder)(ISystemProperties *pThis, PRUnichar * defaultMachineFolder); + + nsresult (*GetDefaultHardDiskFolder)(ISystemProperties *pThis, PRUnichar * *defaultHardDiskFolder); + nsresult (*SetDefaultHardDiskFolder)(ISystemProperties *pThis, PRUnichar * defaultHardDiskFolder); + + nsresult (*GetHardDiskFormats)(ISystemProperties *pThis, PRUint32 *hardDiskFormatsSize, IHardDiskFormat * **hardDiskFormats); + + nsresult (*GetDefaultHardDiskFormat)(ISystemProperties *pThis, PRUnichar * *defaultHardDiskFormat); + nsresult (*SetDefaultHardDiskFormat)(ISystemProperties *pThis, PRUnichar * defaultHardDiskFormat); + + nsresult (*GetRemoteDisplayAuthLibrary)(ISystemProperties *pThis, PRUnichar * *remoteDisplayAuthLibrary); + nsresult (*SetRemoteDisplayAuthLibrary)(ISystemProperties *pThis, PRUnichar * remoteDisplayAuthLibrary); + + nsresult (*GetWebServiceAuthLibrary)(ISystemProperties *pThis, PRUnichar * *webServiceAuthLibrary); + nsresult (*SetWebServiceAuthLibrary)(ISystemProperties *pThis, PRUnichar * webServiceAuthLibrary); + + nsresult (*GetLogHistoryCount)(ISystemProperties *pThis, PRUint32 *LogHistoryCount); + nsresult (*SetLogHistoryCount)(ISystemProperties *pThis, PRUint32 LogHistoryCount); + + nsresult (*GetDefaultAudioDriver)(ISystemProperties *pThis, PRUint32 *defaultAudioDriver); + +}; + +struct ISystemProperties +{ + struct ISystemProperties_vtbl *vtbl; +}; +/* End of struct ISystemProperties Declaration */ + + +/* Start of struct IGuestOSType Declaration */ +#define IGUESTOSTYPE_IID_STR "cfe9e64c-4430-435b-9e7c-e3d8e417bd58" +#define IGUESTOSTYPE_IID { \ + 0xcfe9e64c, 0x4430, 0x435b, \ + { 0x9e, 0x7c, 0xe3, 0xd8, 0xe4, 0x17, 0xbd, 0x58 } \ +} +struct IGuestOSType_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetFamilyId)(IGuestOSType *pThis, PRUnichar * *familyId); + + nsresult (*GetFamilyDescription)(IGuestOSType *pThis, PRUnichar * *familyDescription); + + nsresult (*GetId)(IGuestOSType *pThis, PRUnichar * *id); + + nsresult (*GetDescription)(IGuestOSType *pThis, PRUnichar * *description); + + nsresult (*GetIs64Bit)(IGuestOSType *pThis, PRBool *is64Bit); + + nsresult (*GetRecommendedIOAPIC)(IGuestOSType *pThis, PRBool *recommendedIOAPIC); + + nsresult (*GetRecommendedVirtEx)(IGuestOSType *pThis, PRBool *recommendedVirtEx); + + nsresult (*GetRecommendedRAM)(IGuestOSType *pThis, PRUint32 *recommendedRAM); + + nsresult (*GetRecommendedVRAM)(IGuestOSType *pThis, PRUint32 *recommendedVRAM); + + nsresult (*GetRecommendedHDD)(IGuestOSType *pThis, PRUint32 *recommendedHDD); + + nsresult (*GetAdapterType)(IGuestOSType *pThis, PRUint32 *adapterType); + +}; + +struct IGuestOSType +{ + struct IGuestOSType_vtbl *vtbl; +}; +/* End of struct IGuestOSType Declaration */ + + +/* Start of struct IGuest Declaration */ +#define IGUEST_IID_STR "d8556fca-81bc-12af-fca3-365528fa38ca" +#define IGUEST_IID { \ + 0xd8556fca, 0x81bc, 0x12af, \ + { 0xfc, 0xa3, 0x36, 0x55, 0x28, 0xfa, 0x38, 0xca } \ +} +struct IGuest_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetOSTypeId)(IGuest *pThis, PRUnichar * *OSTypeId); + + nsresult (*GetAdditionsActive)(IGuest *pThis, PRBool *additionsActive); + + nsresult (*GetAdditionsVersion)(IGuest *pThis, PRUnichar * *additionsVersion); + + nsresult (*GetSupportsSeamless)(IGuest *pThis, PRBool *supportsSeamless); + + nsresult (*GetSupportsGraphics)(IGuest *pThis, PRBool *supportsGraphics); + + nsresult (*GetMemoryBalloonSize)(IGuest *pThis, PRUint32 *memoryBalloonSize); + nsresult (*SetMemoryBalloonSize)(IGuest *pThis, PRUint32 memoryBalloonSize); + + nsresult (*GetStatisticsUpdateInterval)(IGuest *pThis, PRUint32 *statisticsUpdateInterval); + nsresult (*SetStatisticsUpdateInterval)(IGuest *pThis, PRUint32 statisticsUpdateInterval); + + nsresult (*SetCredentials)( + IGuest *pThis, + PRUnichar * userName, + PRUnichar * password, + PRUnichar * domain, + PRBool allowInteractiveLogon + ); + + nsresult (*GetStatistic)( + IGuest *pThis, + PRUint32 cpuId, + PRUint32 statistic, + PRUint32 * statVal + ); + +}; + +struct IGuest +{ + struct IGuest_vtbl *vtbl; +}; +/* End of struct IGuest Declaration */ + + +/* Start of struct IProgress Declaration */ +#define IPROGRESS_IID_STR "6fcd0198-7fc5-4c53-8c37-653ac76854b5" +#define IPROGRESS_IID { \ + 0x6fcd0198, 0x7fc5, 0x4c53, \ + { 0x8c, 0x37, 0x65, 0x3a, 0xc7, 0x68, 0x54, 0xb5 } \ +} +struct IProgress_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetId)(IProgress *pThis, PRUnichar * *id); + + nsresult (*GetDescription)(IProgress *pThis, PRUnichar * *description); + + nsresult (*GetInitiator)(IProgress *pThis, nsISupports * *initiator); + + nsresult (*GetCancelable)(IProgress *pThis, PRBool *cancelable); + + nsresult (*GetPercent)(IProgress *pThis, PRUint32 *percent); + + nsresult (*GetTimeRemaining)(IProgress *pThis, PRInt32 *timeRemaining); + + nsresult (*GetCompleted)(IProgress *pThis, PRBool *completed); + + nsresult (*GetCanceled)(IProgress *pThis, PRBool *canceled); + + nsresult (*GetResultCode)(IProgress *pThis, PRInt32 *resultCode); + + nsresult (*GetErrorInfo)(IProgress *pThis, IVirtualBoxErrorInfo * *errorInfo); + + nsresult (*GetOperationCount)(IProgress *pThis, PRUint32 *operationCount); + + nsresult (*GetOperation)(IProgress *pThis, PRUint32 *operation); + + nsresult (*GetOperationDescription)(IProgress *pThis, PRUnichar * *operationDescription); + + nsresult (*GetOperationPercent)(IProgress *pThis, PRUint32 *operationPercent); + + nsresult (*WaitForCompletion)( + IProgress *pThis, + PRInt32 timeout + ); + + nsresult (*WaitForOperationCompletion)( + IProgress *pThis, + PRUint32 operation, + PRInt32 timeout + ); + + nsresult (*Cancel)(IProgress *pThis ); + +}; + +struct IProgress +{ + struct IProgress_vtbl *vtbl; +}; +/* End of struct IProgress Declaration */ + + +/* Start of struct ISnapshot Declaration */ +#define ISNAPSHOT_IID_STR "1a2d0551-58a4-4107-857e-ef414fc42ffc" +#define ISNAPSHOT_IID { \ + 0x1a2d0551, 0x58a4, 0x4107, \ + { 0x85, 0x7e, 0xef, 0x41, 0x4f, 0xc4, 0x2f, 0xfc } \ +} +struct ISnapshot_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetId)(ISnapshot *pThis, PRUnichar * *id); + + nsresult (*GetName)(ISnapshot *pThis, PRUnichar * *name); + nsresult (*SetName)(ISnapshot *pThis, PRUnichar * name); + + nsresult (*GetDescription)(ISnapshot *pThis, PRUnichar * *description); + nsresult (*SetDescription)(ISnapshot *pThis, PRUnichar * description); + + nsresult (*GetTimeStamp)(ISnapshot *pThis, PRInt64 *timeStamp); + + nsresult (*GetOnline)(ISnapshot *pThis, PRBool *online); + + nsresult (*GetMachine)(ISnapshot *pThis, IMachine * *machine); + + nsresult (*GetParent)(ISnapshot *pThis, ISnapshot * *parent); + + nsresult (*GetChildren)(ISnapshot *pThis, PRUint32 *childrenSize, ISnapshot * **children); + +}; + +struct ISnapshot +{ + struct ISnapshot_vtbl *vtbl; +}; +/* End of struct ISnapshot Declaration */ + + +/* Start of struct IMedium Declaration */ +#define IMEDIUM_IID_STR "f585787c-7728-40f6-853a-13705426e936" +#define IMEDIUM_IID { \ + 0xf585787c, 0x7728, 0x40f6, \ + { 0x85, 0x3a, 0x13, 0x70, 0x54, 0x26, 0xe9, 0x36 } \ +} +struct IMedium_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetId)(IMedium *pThis, PRUnichar * *id); + + nsresult (*GetDescription)(IMedium *pThis, PRUnichar * *description); + nsresult (*SetDescription)(IMedium *pThis, PRUnichar * description); + + nsresult (*GetState)(IMedium *pThis, PRUint32 *state); + + nsresult (*GetLocation)(IMedium *pThis, PRUnichar * *location); + nsresult (*SetLocation)(IMedium *pThis, PRUnichar * location); + + nsresult (*GetName)(IMedium *pThis, PRUnichar * *name); + + nsresult (*GetSize)(IMedium *pThis, PRUint64 *size); + + nsresult (*GetLastAccessError)(IMedium *pThis, PRUnichar * *lastAccessError); + + nsresult (*GetMachineIds)(IMedium *pThis, PRUint32 *machineIdsSize, PRUnichar * **machineIds); + + nsresult (*GetSnapshotIds)( + IMedium *pThis, + PRUnichar * machineId, + PRUint32 *snapshotIdsSize, + PRUnichar *** snapshotIds + ); + + nsresult (*LockRead)( + IMedium *pThis, + PRUint32 * state + ); + + nsresult (*UnlockRead)( + IMedium *pThis, + PRUint32 * state + ); + + nsresult (*LockWrite)( + IMedium *pThis, + PRUint32 * state + ); + + nsresult (*UnlockWrite)( + IMedium *pThis, + PRUint32 * state + ); + + nsresult (*Close)(IMedium *pThis ); + +}; + +struct IMedium +{ + struct IMedium_vtbl *vtbl; +}; +/* End of struct IMedium Declaration */ + + +/* Start of struct IHardDiskAttachment Declaration */ +#define IHARDDISKATTACHMENT_IID_STR "b1dd04bb-93c0-4ad3-a9cf-82316e595836" +#define IHARDDISKATTACHMENT_IID { \ + 0xb1dd04bb, 0x93c0, 0x4ad3, \ + { 0xa9, 0xcf, 0x82, 0x31, 0x6e, 0x59, 0x58, 0x36 } \ +} +struct IHardDiskAttachment_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetHardDisk)(IHardDiskAttachment *pThis, IHardDisk * *hardDisk); + + nsresult (*GetController)(IHardDiskAttachment *pThis, PRUnichar * *controller); + + nsresult (*GetPort)(IHardDiskAttachment *pThis, PRInt32 *port); + + nsresult (*GetDevice)(IHardDiskAttachment *pThis, PRInt32 *device); + +}; + +struct IHardDiskAttachment +{ + struct IHardDiskAttachment_vtbl *vtbl; +}; +/* End of struct IHardDiskAttachment Declaration */ + + +/* Start of struct IHardDisk Declaration */ +#define IHARDDISK_IID_STR "62551115-83b8-4d20-925f-79e9d3c00f96" +#define IHARDDISK_IID { \ + 0x62551115, 0x83b8, 0x4d20, \ + { 0x92, 0x5f, 0x79, 0xe9, 0xd3, 0xc0, 0x0f, 0x96 } \ +} +struct IHardDisk_vtbl +{ + struct IMedium_vtbl imedium; + + nsresult (*GetFormat)(IHardDisk *pThis, PRUnichar * *format); + + nsresult (*GetType)(IHardDisk *pThis, PRUint32 *type); + nsresult (*SetType)(IHardDisk *pThis, PRUint32 type); + + nsresult (*GetParent)(IHardDisk *pThis, IHardDisk * *parent); + + nsresult (*GetChildren)(IHardDisk *pThis, PRUint32 *childrenSize, IHardDisk * **children); + + nsresult (*GetRoot)(IHardDisk *pThis, IHardDisk * *root); + + nsresult (*GetReadOnly)(IHardDisk *pThis, PRBool *readOnly); + + nsresult (*GetLogicalSize)(IHardDisk *pThis, PRUint64 *logicalSize); + + nsresult (*GetAutoReset)(IHardDisk *pThis, PRBool *autoReset); + nsresult (*SetAutoReset)(IHardDisk *pThis, PRBool autoReset); + + nsresult (*GetProperty)( + IHardDisk *pThis, + PRUnichar * name, + PRUnichar * * value + ); + + nsresult (*SetProperty)( + IHardDisk *pThis, + PRUnichar * name, + PRUnichar * value + ); + + nsresult (*GetProperties)( + IHardDisk *pThis, + PRUnichar * names, + PRUint32 *returnNamesSize, + PRUnichar *** returnNames, + PRUint32 *returnValuesSize, + PRUnichar *** returnValues + ); + + nsresult (*SetProperties)( + IHardDisk *pThis, + PRUint32 namesSize, + PRUnichar ** names, + PRUint32 valuesSize, + PRUnichar ** values + ); + + nsresult (*CreateBaseStorage)( + IHardDisk *pThis, + PRUint64 logicalSize, + PRUint32 variant, + IProgress * * progress + ); + + nsresult (*DeleteStorage)( + IHardDisk *pThis, + IProgress * * progress + ); + + nsresult (*CreateDiffStorage)( + IHardDisk *pThis, + IHardDisk * target, + PRUint32 variant, + IProgress * * progress + ); + + nsresult (*MergeTo)( + IHardDisk *pThis, + PRUnichar * targetId, + IProgress * * progress + ); + + nsresult (*CloneTo)( + IHardDisk *pThis, + IHardDisk * target, + PRUint32 variant, + IHardDisk * parent, + IProgress * * progress + ); + + nsresult (*Compact)( + IHardDisk *pThis, + IProgress * * progress + ); + + nsresult (*Reset)( + IHardDisk *pThis, + IProgress * * progress + ); + +}; + +struct IHardDisk +{ + struct IHardDisk_vtbl *vtbl; +}; +/* End of struct IHardDisk Declaration */ + + +/* Start of struct IHardDiskFormat Declaration */ +#define IHARDDISKFORMAT_IID_STR "7f3ba790-3a0b-4a8a-bac2-bb50150123c5" +#define IHARDDISKFORMAT_IID { \ + 0x7f3ba790, 0x3a0b, 0x4a8a, \ + { 0xba, 0xc2, 0xbb, 0x50, 0x15, 0x01, 0x23, 0xc5 } \ +} +struct IHardDiskFormat_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetId)(IHardDiskFormat *pThis, PRUnichar * *id); + + nsresult (*GetName)(IHardDiskFormat *pThis, PRUnichar * *name); + + nsresult (*GetFileExtensions)(IHardDiskFormat *pThis, PRUint32 *fileExtensionsSize, PRUnichar * **fileExtensions); + + nsresult (*GetCapabilities)(IHardDiskFormat *pThis, PRUint32 *capabilities); + + nsresult (*DescribeProperties)( + IHardDiskFormat *pThis, + PRUint32 *namesSize, + PRUnichar *** names, + PRUint32 *descriptionSize, + PRUnichar *** description, + PRUint32 *typesSize, + PRUint32* types, + PRUint32 *flagsSize, + PRUint32* flags, + PRUint32 *defaultsSize, + PRUnichar *** defaults + ); + +}; + +struct IHardDiskFormat +{ + struct IHardDiskFormat_vtbl *vtbl; +}; +/* End of struct IHardDiskFormat Declaration */ + + +/* Start of struct IFloppyImage Declaration */ +#define IFLOPPYIMAGE_IID_STR "faa6101f-078c-4b3a-ab75-75670c8170b3" +#define IFLOPPYIMAGE_IID { \ + 0xfaa6101f, 0x078c, 0x4b3a, \ + { 0xab, 0x75, 0x75, 0x67, 0x0c, 0x81, 0x70, 0xb3 } \ +} +struct IFloppyImage_vtbl +{ + struct IMedium_vtbl imedium; + +}; + +struct IFloppyImage +{ + struct IFloppyImage_vtbl *vtbl; +}; +/* End of struct IFloppyImage Declaration */ + + +/* Start of struct IDVDImage Declaration */ +#define IDVDIMAGE_IID_STR "b1f90bbb-e8a9-4484-9af1-3638e943f763" +#define IDVDIMAGE_IID { \ + 0xb1f90bbb, 0xe8a9, 0x4484, \ + { 0x9a, 0xf1, 0x36, 0x38, 0xe9, 0x43, 0xf7, 0x63 } \ +} +struct IDVDImage_vtbl +{ + struct IMedium_vtbl imedium; + +}; + +struct IDVDImage +{ + struct IDVDImage_vtbl *vtbl; +}; +/* End of struct IDVDImage Declaration */ + + +/* Start of struct IDVDDrive Declaration */ +#define IDVDDRIVE_IID_STR "156944d1-4c6d-4812-8f12-ab3890767ab4" +#define IDVDDRIVE_IID { \ + 0x156944d1, 0x4c6d, 0x4812, \ + { 0x8f, 0x12, 0xab, 0x38, 0x90, 0x76, 0x7a, 0xb4 } \ +} +struct IDVDDrive_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetState)(IDVDDrive *pThis, PRUint32 *state); + + nsresult (*GetPassthrough)(IDVDDrive *pThis, PRBool *passthrough); + nsresult (*SetPassthrough)(IDVDDrive *pThis, PRBool passthrough); + + nsresult (*MountImage)( + IDVDDrive *pThis, + PRUnichar * imageId + ); + + nsresult (*CaptureHostDrive)( + IDVDDrive *pThis, + IHostDVDDrive * drive + ); + + nsresult (*Unmount)(IDVDDrive *pThis ); + + nsresult (*GetImage)( + IDVDDrive *pThis, + IDVDImage * * image + ); + + nsresult (*GetHostDrive)( + IDVDDrive *pThis, + IHostDVDDrive * * drive + ); + +}; + +struct IDVDDrive +{ + struct IDVDDrive_vtbl *vtbl; +}; +/* End of struct IDVDDrive Declaration */ + + +/* Start of struct IFloppyDrive Declaration */ +#define IFLOPPYDRIVE_IID_STR "a8676d38-5cf0-4b53-85b1-aa693611ab86" +#define IFLOPPYDRIVE_IID { \ + 0xa8676d38, 0x5cf0, 0x4b53, \ + { 0x85, 0xb1, 0xaa, 0x69, 0x36, 0x11, 0xab, 0x86 } \ +} +struct IFloppyDrive_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetEnabled)(IFloppyDrive *pThis, PRBool *enabled); + nsresult (*SetEnabled)(IFloppyDrive *pThis, PRBool enabled); + + nsresult (*GetState)(IFloppyDrive *pThis, PRUint32 *state); + + nsresult (*MountImage)( + IFloppyDrive *pThis, + PRUnichar * imageId + ); + + nsresult (*CaptureHostDrive)( + IFloppyDrive *pThis, + IHostFloppyDrive * drive + ); + + nsresult (*Unmount)(IFloppyDrive *pThis ); + + nsresult (*GetImage)( + IFloppyDrive *pThis, + IFloppyImage * * image + ); + + nsresult (*GetHostDrive)( + IFloppyDrive *pThis, + IHostFloppyDrive * * drive + ); + +}; + +struct IFloppyDrive +{ + struct IFloppyDrive_vtbl *vtbl; +}; +/* End of struct IFloppyDrive Declaration */ + + +/* Start of struct IKeyboard Declaration */ +#define IKEYBOARD_IID_STR "2d1a531b-4c6e-49cc-8af6-5c857b78b5d7" +#define IKEYBOARD_IID { \ + 0x2d1a531b, 0x4c6e, 0x49cc, \ + { 0x8a, 0xf6, 0x5c, 0x85, 0x7b, 0x78, 0xb5, 0xd7 } \ +} +struct IKeyboard_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*PutScancode)( + IKeyboard *pThis, + PRInt32 scancode + ); + + nsresult (*PutScancodes)( + IKeyboard *pThis, + PRUint32 scancodesSize, + PRInt32* scancodes, + PRUint32 * codesStored + ); + + nsresult (*PutCAD)(IKeyboard *pThis ); + +}; + +struct IKeyboard +{ + struct IKeyboard_vtbl *vtbl; +}; +/* End of struct IKeyboard Declaration */ + + +/* Start of struct IMouse Declaration */ +#define IMOUSE_IID_STR "FD443EC1-0006-4F5B-9282-D72760A66916" +#define IMOUSE_IID { \ + 0xFD443EC1, 0x0006, 0x4F5B, \ + { 0x92, 0x82, 0xD7, 0x27, 0x60, 0xA6, 0x69, 0x16 } \ +} +struct IMouse_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetAbsoluteSupported)(IMouse *pThis, PRBool *absoluteSupported); + + nsresult (*PutMouseEvent)( + IMouse *pThis, + PRInt32 dx, + PRInt32 dy, + PRInt32 dz, + PRInt32 buttonState + ); + + nsresult (*PutMouseEventAbsolute)( + IMouse *pThis, + PRInt32 x, + PRInt32 y, + PRInt32 dz, + PRInt32 buttonState + ); + +}; + +struct IMouse +{ + struct IMouse_vtbl *vtbl; +}; +/* End of struct IMouse Declaration */ + + +/* Start of struct IFramebuffer Declaration */ +#define IFRAMEBUFFER_IID_STR "b7ed347a-5765-40a0-ae1c-f543eb4ddeaf" +#define IFRAMEBUFFER_IID { \ + 0xb7ed347a, 0x5765, 0x40a0, \ + { 0xae, 0x1c, 0xf5, 0x43, 0xeb, 0x4d, 0xde, 0xaf } \ +} +struct IFramebuffer_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetAddress)(IFramebuffer *pThis, PRUint8 * *address); + + nsresult (*GetWidth)(IFramebuffer *pThis, PRUint32 *width); + + nsresult (*GetHeight)(IFramebuffer *pThis, PRUint32 *height); + + nsresult (*GetBitsPerPixel)(IFramebuffer *pThis, PRUint32 *bitsPerPixel); + + nsresult (*GetBytesPerLine)(IFramebuffer *pThis, PRUint32 *bytesPerLine); + + nsresult (*GetPixelFormat)(IFramebuffer *pThis, PRUint32 *pixelFormat); + + nsresult (*GetUsesGuestVRAM)(IFramebuffer *pThis, PRBool *usesGuestVRAM); + + nsresult (*GetHeightReduction)(IFramebuffer *pThis, PRUint32 *heightReduction); + + nsresult (*GetOverlay)(IFramebuffer *pThis, IFramebufferOverlay * *overlay); + + nsresult (*GetWinId)(IFramebuffer *pThis, PRUint64 *winId); + + nsresult (*Lock)(IFramebuffer *pThis ); + + nsresult (*Unlock)(IFramebuffer *pThis ); + + nsresult (*NotifyUpdate)( + IFramebuffer *pThis, + PRUint32 x, + PRUint32 y, + PRUint32 width, + PRUint32 height + ); + + nsresult (*RequestResize)( + IFramebuffer *pThis, + PRUint32 screenId, + PRUint32 pixelFormat, + PRUint8 * VRAM, + PRUint32 bitsPerPixel, + PRUint32 bytesPerLine, + PRUint32 width, + PRUint32 height, + PRBool * finished + ); + + nsresult (*VideoModeSupported)( + IFramebuffer *pThis, + PRUint32 width, + PRUint32 height, + PRUint32 bpp, + PRBool * supported + ); + + nsresult (*GetVisibleRegion)( + IFramebuffer *pThis, + PRUint8 * rectangles, + PRUint32 count, + PRUint32 * countCopied + ); + + nsresult (*SetVisibleRegion)( + IFramebuffer *pThis, + PRUint8 * rectangles, + PRUint32 count + ); + + nsresult (*ProcessVHWACommand)( + IFramebuffer *pThis, + PRUint8 * command + ); + +}; + +struct IFramebuffer +{ + struct IFramebuffer_vtbl *vtbl; +}; +/* End of struct IFramebuffer Declaration */ + + +/* Start of struct IFramebufferOverlay Declaration */ +#define IFRAMEBUFFEROVERLAY_IID_STR "0bcc1c7e-e415-47d2-bfdb-e4c705fb0f47" +#define IFRAMEBUFFEROVERLAY_IID { \ + 0x0bcc1c7e, 0xe415, 0x47d2, \ + { 0xbf, 0xdb, 0xe4, 0xc7, 0x05, 0xfb, 0x0f, 0x47 } \ +} +struct IFramebufferOverlay_vtbl +{ + struct IFramebuffer_vtbl iframebuffer; + + nsresult (*GetX)(IFramebufferOverlay *pThis, PRUint32 *x); + + nsresult (*GetY)(IFramebufferOverlay *pThis, PRUint32 *y); + + nsresult (*GetVisible)(IFramebufferOverlay *pThis, PRBool *visible); + nsresult (*SetVisible)(IFramebufferOverlay *pThis, PRBool visible); + + nsresult (*GetAlpha)(IFramebufferOverlay *pThis, PRUint32 *alpha); + nsresult (*SetAlpha)(IFramebufferOverlay *pThis, PRUint32 alpha); + + nsresult (*Move)( + IFramebufferOverlay *pThis, + PRUint32 x, + PRUint32 y + ); + +}; + +struct IFramebufferOverlay +{ + struct IFramebufferOverlay_vtbl *vtbl; +}; +/* End of struct IFramebufferOverlay Declaration */ + + +/* Start of struct IDisplay Declaration */ +#define IDISPLAY_IID_STR "26881797-bc98-444d-ac69-820633b93ec7" +#define IDISPLAY_IID { \ + 0x26881797, 0xbc98, 0x444d, \ + { 0xac, 0x69, 0x82, 0x06, 0x33, 0xb9, 0x3e, 0xc7 } \ +} +struct IDisplay_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetWidth)(IDisplay *pThis, PRUint32 *width); + + nsresult (*GetHeight)(IDisplay *pThis, PRUint32 *height); + + nsresult (*GetBitsPerPixel)(IDisplay *pThis, PRUint32 *bitsPerPixel); + + nsresult (*SetFramebuffer)( + IDisplay *pThis, + PRUint32 screenId, + IFramebuffer * framebuffer + ); + + nsresult (*GetFramebuffer)( + IDisplay *pThis, + PRUint32 screenId, + IFramebuffer * * framebuffer, + PRInt32 * xOrigin, + PRInt32 * yOrigin + ); + + nsresult (*SetVideoModeHint)( + IDisplay *pThis, + PRUint32 width, + PRUint32 height, + PRUint32 bitsPerPixel, + PRUint32 display + ); + + nsresult (*SetSeamlessMode)( + IDisplay *pThis, + PRBool enabled + ); + + nsresult (*TakeScreenShot)( + IDisplay *pThis, + PRUint8 * address, + PRUint32 width, + PRUint32 height + ); + + nsresult (*TakeScreenShotSlow)( + IDisplay *pThis, + PRUint32 width, + PRUint32 height, + PRUint32 *screenDataSize, + PRUint8** screenData + ); + + nsresult (*DrawToScreen)( + IDisplay *pThis, + PRUint8 * address, + PRUint32 x, + PRUint32 y, + PRUint32 width, + PRUint32 height + ); + + nsresult (*InvalidateAndUpdate)(IDisplay *pThis ); + + nsresult (*ResizeCompleted)( + IDisplay *pThis, + PRUint32 screenId + ); + + nsresult (*UpdateCompleted)(IDisplay *pThis ); + + nsresult (*CompleteVHWACommand)( + IDisplay *pThis, + PRUint8 * command + ); + +}; + +struct IDisplay +{ + struct IDisplay_vtbl *vtbl; +}; +/* End of struct IDisplay Declaration */ + + +/* Start of struct INetworkAdapter Declaration */ +#define INETWORKADAPTER_IID_STR "65607a27-2b73-4d43-b4cc-0ba2c817fbde" +#define INETWORKADAPTER_IID { \ + 0x65607a27, 0x2b73, 0x4d43, \ + { 0xb4, 0xcc, 0x0b, 0xa2, 0xc8, 0x17, 0xfb, 0xde } \ +} +struct INetworkAdapter_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetAdapterType)(INetworkAdapter *pThis, PRUint32 *adapterType); + nsresult (*SetAdapterType)(INetworkAdapter *pThis, PRUint32 adapterType); + + nsresult (*GetSlot)(INetworkAdapter *pThis, PRUint32 *slot); + + nsresult (*GetEnabled)(INetworkAdapter *pThis, PRBool *enabled); + nsresult (*SetEnabled)(INetworkAdapter *pThis, PRBool enabled); + + nsresult (*GetMACAddress)(INetworkAdapter *pThis, PRUnichar * *MACAddress); + nsresult (*SetMACAddress)(INetworkAdapter *pThis, PRUnichar * MACAddress); + + nsresult (*GetAttachmentType)(INetworkAdapter *pThis, PRUint32 *attachmentType); + + nsresult (*GetHostInterface)(INetworkAdapter *pThis, PRUnichar * *hostInterface); + nsresult (*SetHostInterface)(INetworkAdapter *pThis, PRUnichar * hostInterface); + + nsresult (*GetInternalNetwork)(INetworkAdapter *pThis, PRUnichar * *internalNetwork); + nsresult (*SetInternalNetwork)(INetworkAdapter *pThis, PRUnichar * internalNetwork); + + nsresult (*GetNATNetwork)(INetworkAdapter *pThis, PRUnichar * *NATNetwork); + nsresult (*SetNATNetwork)(INetworkAdapter *pThis, PRUnichar * NATNetwork); + + nsresult (*GetCableConnected)(INetworkAdapter *pThis, PRBool *cableConnected); + nsresult (*SetCableConnected)(INetworkAdapter *pThis, PRBool cableConnected); + + nsresult (*GetLineSpeed)(INetworkAdapter *pThis, PRUint32 *lineSpeed); + nsresult (*SetLineSpeed)(INetworkAdapter *pThis, PRUint32 lineSpeed); + + nsresult (*GetTraceEnabled)(INetworkAdapter *pThis, PRBool *traceEnabled); + nsresult (*SetTraceEnabled)(INetworkAdapter *pThis, PRBool traceEnabled); + + nsresult (*GetTraceFile)(INetworkAdapter *pThis, PRUnichar * *traceFile); + nsresult (*SetTraceFile)(INetworkAdapter *pThis, PRUnichar * traceFile); + + nsresult (*AttachToNAT)(INetworkAdapter *pThis ); + + nsresult (*AttachToBridgedInterface)(INetworkAdapter *pThis ); + + nsresult (*AttachToInternalNetwork)(INetworkAdapter *pThis ); + + nsresult (*AttachToHostOnlyInterface)(INetworkAdapter *pThis ); + + nsresult (*Detach)(INetworkAdapter *pThis ); + +}; + +struct INetworkAdapter +{ + struct INetworkAdapter_vtbl *vtbl; +}; +/* End of struct INetworkAdapter Declaration */ + + +/* Start of struct ISerialPort Declaration */ +#define ISERIALPORT_IID_STR "937f6970-5103-4745-b78e-d28dcf1479a8" +#define ISERIALPORT_IID { \ + 0x937f6970, 0x5103, 0x4745, \ + { 0xb7, 0x8e, 0xd2, 0x8d, 0xcf, 0x14, 0x79, 0xa8 } \ +} +struct ISerialPort_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetSlot)(ISerialPort *pThis, PRUint32 *slot); + + nsresult (*GetEnabled)(ISerialPort *pThis, PRBool *enabled); + nsresult (*SetEnabled)(ISerialPort *pThis, PRBool enabled); + + nsresult (*GetIOBase)(ISerialPort *pThis, PRUint32 *IOBase); + nsresult (*SetIOBase)(ISerialPort *pThis, PRUint32 IOBase); + + nsresult (*GetIRQ)(ISerialPort *pThis, PRUint32 *IRQ); + nsresult (*SetIRQ)(ISerialPort *pThis, PRUint32 IRQ); + + nsresult (*GetHostMode)(ISerialPort *pThis, PRUint32 *hostMode); + nsresult (*SetHostMode)(ISerialPort *pThis, PRUint32 hostMode); + + nsresult (*GetServer)(ISerialPort *pThis, PRBool *server); + nsresult (*SetServer)(ISerialPort *pThis, PRBool server); + + nsresult (*GetPath)(ISerialPort *pThis, PRUnichar * *path); + nsresult (*SetPath)(ISerialPort *pThis, PRUnichar * path); + +}; + +struct ISerialPort +{ + struct ISerialPort_vtbl *vtbl; +}; +/* End of struct ISerialPort Declaration */ + + +/* Start of struct IParallelPort Declaration */ +#define IPARALLELPORT_IID_STR "0c925f06-dd10-4b77-8de8-294d738c3214" +#define IPARALLELPORT_IID { \ + 0x0c925f06, 0xdd10, 0x4b77, \ + { 0x8d, 0xe8, 0x29, 0x4d, 0x73, 0x8c, 0x32, 0x14 } \ +} +struct IParallelPort_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetSlot)(IParallelPort *pThis, PRUint32 *slot); + + nsresult (*GetEnabled)(IParallelPort *pThis, PRBool *enabled); + nsresult (*SetEnabled)(IParallelPort *pThis, PRBool enabled); + + nsresult (*GetIOBase)(IParallelPort *pThis, PRUint32 *IOBase); + nsresult (*SetIOBase)(IParallelPort *pThis, PRUint32 IOBase); + + nsresult (*GetIRQ)(IParallelPort *pThis, PRUint32 *IRQ); + nsresult (*SetIRQ)(IParallelPort *pThis, PRUint32 IRQ); + + nsresult (*GetPath)(IParallelPort *pThis, PRUnichar * *path); + nsresult (*SetPath)(IParallelPort *pThis, PRUnichar * path); + +}; + +struct IParallelPort +{ + struct IParallelPort_vtbl *vtbl; +}; +/* End of struct IParallelPort Declaration */ + + +/* Start of struct IMachineDebugger Declaration */ +#define IMACHINEDEBUGGER_IID_STR "b0b2a2dd-0627-4502-91c2-ddc5e77609e0" +#define IMACHINEDEBUGGER_IID { \ + 0xb0b2a2dd, 0x0627, 0x4502, \ + { 0x91, 0xc2, 0xdd, 0xc5, 0xe7, 0x76, 0x09, 0xe0 } \ +} +struct IMachineDebugger_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetSinglestep)(IMachineDebugger *pThis, PRBool *singlestep); + nsresult (*SetSinglestep)(IMachineDebugger *pThis, PRBool singlestep); + + nsresult (*GetRecompileUser)(IMachineDebugger *pThis, PRBool *recompileUser); + nsresult (*SetRecompileUser)(IMachineDebugger *pThis, PRBool recompileUser); + + nsresult (*GetRecompileSupervisor)(IMachineDebugger *pThis, PRBool *recompileSupervisor); + nsresult (*SetRecompileSupervisor)(IMachineDebugger *pThis, PRBool recompileSupervisor); + + nsresult (*GetPATMEnabled)(IMachineDebugger *pThis, PRBool *PATMEnabled); + nsresult (*SetPATMEnabled)(IMachineDebugger *pThis, PRBool PATMEnabled); + + nsresult (*GetCSAMEnabled)(IMachineDebugger *pThis, PRBool *CSAMEnabled); + nsresult (*SetCSAMEnabled)(IMachineDebugger *pThis, PRBool CSAMEnabled); + + nsresult (*GetLogEnabled)(IMachineDebugger *pThis, PRBool *logEnabled); + nsresult (*SetLogEnabled)(IMachineDebugger *pThis, PRBool logEnabled); + + nsresult (*GetHWVirtExEnabled)(IMachineDebugger *pThis, PRBool *HWVirtExEnabled); + + nsresult (*GetHWVirtExNestedPagingEnabled)(IMachineDebugger *pThis, PRBool *HWVirtExNestedPagingEnabled); + + nsresult (*GetHWVirtExVPIDEnabled)(IMachineDebugger *pThis, PRBool *HWVirtExVPIDEnabled); + + nsresult (*GetPAEEnabled)(IMachineDebugger *pThis, PRBool *PAEEnabled); + + nsresult (*GetVirtualTimeRate)(IMachineDebugger *pThis, PRUint32 *virtualTimeRate); + nsresult (*SetVirtualTimeRate)(IMachineDebugger *pThis, PRUint32 virtualTimeRate); + + nsresult (*GetVM)(IMachineDebugger *pThis, PRUint64 *VM); + + nsresult (*ResetStats)( + IMachineDebugger *pThis, + PRUnichar * pattern + ); + + nsresult (*DumpStats)( + IMachineDebugger *pThis, + PRUnichar * pattern + ); + + nsresult (*GetStats)( + IMachineDebugger *pThis, + PRUnichar * pattern, + PRBool withDescriptions, + PRUnichar * * stats + ); + + nsresult (*InjectNMI)(IMachineDebugger *pThis ); + +}; + +struct IMachineDebugger +{ + struct IMachineDebugger_vtbl *vtbl; +}; +/* End of struct IMachineDebugger Declaration */ + + +/* Start of struct IUSBController Declaration */ +#define IUSBCONTROLLER_IID_STR "238540fa-4b73-435a-a38e-4e1d9eab5c17" +#define IUSBCONTROLLER_IID { \ + 0x238540fa, 0x4b73, 0x435a, \ + { 0xa3, 0x8e, 0x4e, 0x1d, 0x9e, 0xab, 0x5c, 0x17 } \ +} +struct IUSBController_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetEnabled)(IUSBController *pThis, PRBool *enabled); + nsresult (*SetEnabled)(IUSBController *pThis, PRBool enabled); + + nsresult (*GetEnabledEhci)(IUSBController *pThis, PRBool *enabledEhci); + nsresult (*SetEnabledEhci)(IUSBController *pThis, PRBool enabledEhci); + + nsresult (*GetUSBStandard)(IUSBController *pThis, PRUint16 *USBStandard); + + nsresult (*GetDeviceFilters)(IUSBController *pThis, PRUint32 *deviceFiltersSize, IUSBDeviceFilter * **deviceFilters); + + nsresult (*CreateDeviceFilter)( + IUSBController *pThis, + PRUnichar * name, + IUSBDeviceFilter * * filter + ); + + nsresult (*InsertDeviceFilter)( + IUSBController *pThis, + PRUint32 position, + IUSBDeviceFilter * filter + ); + + nsresult (*RemoveDeviceFilter)( + IUSBController *pThis, + PRUint32 position, + IUSBDeviceFilter * * filter + ); + +}; + +struct IUSBController +{ + struct IUSBController_vtbl *vtbl; +}; +/* End of struct IUSBController Declaration */ + + +/* Start of struct IUSBDevice Declaration */ +#define IUSBDEVICE_IID_STR "f8967b0b-4483-400f-92b5-8b675d98a85b" +#define IUSBDEVICE_IID { \ + 0xf8967b0b, 0x4483, 0x400f, \ + { 0x92, 0xb5, 0x8b, 0x67, 0x5d, 0x98, 0xa8, 0x5b } \ +} +struct IUSBDevice_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetId)(IUSBDevice *pThis, PRUnichar * *id); + + nsresult (*GetVendorId)(IUSBDevice *pThis, PRUint16 *vendorId); + + nsresult (*GetProductId)(IUSBDevice *pThis, PRUint16 *productId); + + nsresult (*GetRevision)(IUSBDevice *pThis, PRUint16 *revision); + + nsresult (*GetManufacturer)(IUSBDevice *pThis, PRUnichar * *manufacturer); + + nsresult (*GetProduct)(IUSBDevice *pThis, PRUnichar * *product); + + nsresult (*GetSerialNumber)(IUSBDevice *pThis, PRUnichar * *serialNumber); + + nsresult (*GetAddress)(IUSBDevice *pThis, PRUnichar * *address); + + nsresult (*GetPort)(IUSBDevice *pThis, PRUint16 *port); + + nsresult (*GetVersion)(IUSBDevice *pThis, PRUint16 *version); + + nsresult (*GetPortVersion)(IUSBDevice *pThis, PRUint16 *portVersion); + + nsresult (*GetRemote)(IUSBDevice *pThis, PRBool *remote); + +}; + +struct IUSBDevice +{ + struct IUSBDevice_vtbl *vtbl; +}; +/* End of struct IUSBDevice Declaration */ + + +/* Start of struct IUSBDeviceFilter Declaration */ +#define IUSBDEVICEFILTER_IID_STR "d6831fb4-1a94-4c2c-96ef-8d0d6192066d" +#define IUSBDEVICEFILTER_IID { \ + 0xd6831fb4, 0x1a94, 0x4c2c, \ + { 0x96, 0xef, 0x8d, 0x0d, 0x61, 0x92, 0x06, 0x6d } \ +} +struct IUSBDeviceFilter_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetName)(IUSBDeviceFilter *pThis, PRUnichar * *name); + nsresult (*SetName)(IUSBDeviceFilter *pThis, PRUnichar * name); + + nsresult (*GetActive)(IUSBDeviceFilter *pThis, PRBool *active); + nsresult (*SetActive)(IUSBDeviceFilter *pThis, PRBool active); + + nsresult (*GetVendorId)(IUSBDeviceFilter *pThis, PRUnichar * *vendorId); + nsresult (*SetVendorId)(IUSBDeviceFilter *pThis, PRUnichar * vendorId); + + nsresult (*GetProductId)(IUSBDeviceFilter *pThis, PRUnichar * *productId); + nsresult (*SetProductId)(IUSBDeviceFilter *pThis, PRUnichar * productId); + + nsresult (*GetRevision)(IUSBDeviceFilter *pThis, PRUnichar * *revision); + nsresult (*SetRevision)(IUSBDeviceFilter *pThis, PRUnichar * revision); + + nsresult (*GetManufacturer)(IUSBDeviceFilter *pThis, PRUnichar * *manufacturer); + nsresult (*SetManufacturer)(IUSBDeviceFilter *pThis, PRUnichar * manufacturer); + + nsresult (*GetProduct)(IUSBDeviceFilter *pThis, PRUnichar * *product); + nsresult (*SetProduct)(IUSBDeviceFilter *pThis, PRUnichar * product); + + nsresult (*GetSerialNumber)(IUSBDeviceFilter *pThis, PRUnichar * *serialNumber); + nsresult (*SetSerialNumber)(IUSBDeviceFilter *pThis, PRUnichar * serialNumber); + + nsresult (*GetPort)(IUSBDeviceFilter *pThis, PRUnichar * *port); + nsresult (*SetPort)(IUSBDeviceFilter *pThis, PRUnichar * port); + + nsresult (*GetRemote)(IUSBDeviceFilter *pThis, PRUnichar * *remote); + nsresult (*SetRemote)(IUSBDeviceFilter *pThis, PRUnichar * remote); + + nsresult (*GetMaskedInterfaces)(IUSBDeviceFilter *pThis, PRUint32 *maskedInterfaces); + nsresult (*SetMaskedInterfaces)(IUSBDeviceFilter *pThis, PRUint32 maskedInterfaces); + +}; + +struct IUSBDeviceFilter +{ + struct IUSBDeviceFilter_vtbl *vtbl; +}; +/* End of struct IUSBDeviceFilter Declaration */ + + +/* Start of struct IHostUSBDevice Declaration */ +#define IHOSTUSBDEVICE_IID_STR "173b4b44-d268-4334-a00d-b6521c9a740a" +#define IHOSTUSBDEVICE_IID { \ + 0x173b4b44, 0xd268, 0x4334, \ + { 0xa0, 0x0d, 0xb6, 0x52, 0x1c, 0x9a, 0x74, 0x0a } \ +} +struct IHostUSBDevice_vtbl +{ + struct IUSBDevice_vtbl iusbdevice; + + nsresult (*GetState)(IHostUSBDevice *pThis, PRUint32 *state); + +}; + +struct IHostUSBDevice +{ + struct IHostUSBDevice_vtbl *vtbl; +}; +/* End of struct IHostUSBDevice Declaration */ + + +/* Start of struct IHostUSBDeviceFilter Declaration */ +#define IHOSTUSBDEVICEFILTER_IID_STR "4cc70246-d74a-400f-8222-3900489c0374" +#define IHOSTUSBDEVICEFILTER_IID { \ + 0x4cc70246, 0xd74a, 0x400f, \ + { 0x82, 0x22, 0x39, 0x00, 0x48, 0x9c, 0x03, 0x74 } \ +} +struct IHostUSBDeviceFilter_vtbl +{ + struct IUSBDeviceFilter_vtbl iusbdevicefilter; + + nsresult (*GetAction)(IHostUSBDeviceFilter *pThis, PRUint32 *action); + nsresult (*SetAction)(IHostUSBDeviceFilter *pThis, PRUint32 action); + +}; + +struct IHostUSBDeviceFilter +{ + struct IHostUSBDeviceFilter_vtbl *vtbl; +}; +/* End of struct IHostUSBDeviceFilter Declaration */ + + +/* Start of struct IAudioAdapter Declaration */ +#define IAUDIOADAPTER_IID_STR "921873db-5f3f-4b69-91f9-7be9e535a2cb" +#define IAUDIOADAPTER_IID { \ + 0x921873db, 0x5f3f, 0x4b69, \ + { 0x91, 0xf9, 0x7b, 0xe9, 0xe5, 0x35, 0xa2, 0xcb } \ +} +struct IAudioAdapter_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetEnabled)(IAudioAdapter *pThis, PRBool *enabled); + nsresult (*SetEnabled)(IAudioAdapter *pThis, PRBool enabled); + + nsresult (*GetAudioController)(IAudioAdapter *pThis, PRUint32 *audioController); + nsresult (*SetAudioController)(IAudioAdapter *pThis, PRUint32 audioController); + + nsresult (*GetAudioDriver)(IAudioAdapter *pThis, PRUint32 *audioDriver); + nsresult (*SetAudioDriver)(IAudioAdapter *pThis, PRUint32 audioDriver); + +}; + +struct IAudioAdapter +{ + struct IAudioAdapter_vtbl *vtbl; +}; +/* End of struct IAudioAdapter Declaration */ + + +/* Start of struct IVRDPServer Declaration */ +#define IVRDPSERVER_IID_STR "f4584ae7-6bce-474b-83d6-17d235e6aa89" +#define IVRDPSERVER_IID { \ + 0xf4584ae7, 0x6bce, 0x474b, \ + { 0x83, 0xd6, 0x17, 0xd2, 0x35, 0xe6, 0xaa, 0x89 } \ +} +struct IVRDPServer_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetEnabled)(IVRDPServer *pThis, PRBool *enabled); + nsresult (*SetEnabled)(IVRDPServer *pThis, PRBool enabled); + + nsresult (*GetPort)(IVRDPServer *pThis, PRUint32 *port); + nsresult (*SetPort)(IVRDPServer *pThis, PRUint32 port); + + nsresult (*GetNetAddress)(IVRDPServer *pThis, PRUnichar * *netAddress); + nsresult (*SetNetAddress)(IVRDPServer *pThis, PRUnichar * netAddress); + + nsresult (*GetAuthType)(IVRDPServer *pThis, PRUint32 *authType); + nsresult (*SetAuthType)(IVRDPServer *pThis, PRUint32 authType); + + nsresult (*GetAuthTimeout)(IVRDPServer *pThis, PRUint32 *authTimeout); + nsresult (*SetAuthTimeout)(IVRDPServer *pThis, PRUint32 authTimeout); + + nsresult (*GetAllowMultiConnection)(IVRDPServer *pThis, PRBool *allowMultiConnection); + nsresult (*SetAllowMultiConnection)(IVRDPServer *pThis, PRBool allowMultiConnection); + + nsresult (*GetReuseSingleConnection)(IVRDPServer *pThis, PRBool *reuseSingleConnection); + nsresult (*SetReuseSingleConnection)(IVRDPServer *pThis, PRBool reuseSingleConnection); + +}; + +struct IVRDPServer +{ + struct IVRDPServer_vtbl *vtbl; +}; +/* End of struct IVRDPServer Declaration */ + + +/* Start of struct ISharedFolder Declaration */ +#define ISHAREDFOLDER_IID_STR "64637bb2-9e17-471c-b8f3-f8968dd9884e" +#define ISHAREDFOLDER_IID { \ + 0x64637bb2, 0x9e17, 0x471c, \ + { 0xb8, 0xf3, 0xf8, 0x96, 0x8d, 0xd9, 0x88, 0x4e } \ +} +struct ISharedFolder_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetName)(ISharedFolder *pThis, PRUnichar * *name); + + nsresult (*GetHostPath)(ISharedFolder *pThis, PRUnichar * *hostPath); + + nsresult (*GetAccessible)(ISharedFolder *pThis, PRBool *accessible); + + nsresult (*GetWritable)(ISharedFolder *pThis, PRBool *writable); + + nsresult (*GetLastAccessError)(ISharedFolder *pThis, PRUnichar * *lastAccessError); + +}; + +struct ISharedFolder +{ + struct ISharedFolder_vtbl *vtbl; +}; +/* End of struct ISharedFolder Declaration */ + + +/* Start of struct IInternalSessionControl Declaration */ +#define IINTERNALSESSIONCONTROL_IID_STR "b26552e7-9534-4f47-b766-98eac648a90d" +#define IINTERNALSESSIONCONTROL_IID { \ + 0xb26552e7, 0x9534, 0x4f47, \ + { 0xb7, 0x66, 0x98, 0xea, 0xc6, 0x48, 0xa9, 0x0d } \ +} +struct IInternalSessionControl_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetPID)( + IInternalSessionControl *pThis, + PRUint32 * pid + ); + + nsresult (*GetRemoteConsole)( + IInternalSessionControl *pThis, + IConsole * * console + ); + + nsresult (*AssignMachine)( + IInternalSessionControl *pThis, + IMachine * machine + ); + + nsresult (*AssignRemoteMachine)( + IInternalSessionControl *pThis, + IMachine * machine, + IConsole * console + ); + + nsresult (*UpdateMachineState)( + IInternalSessionControl *pThis, + PRUint32 aMachineState + ); + + nsresult (*Uninitialize)(IInternalSessionControl *pThis ); + + nsresult (*OnDVDDriveChange)(IInternalSessionControl *pThis ); + + nsresult (*OnFloppyDriveChange)(IInternalSessionControl *pThis ); + + nsresult (*OnNetworkAdapterChange)( + IInternalSessionControl *pThis, + INetworkAdapter * networkAdapter + ); + + nsresult (*OnSerialPortChange)( + IInternalSessionControl *pThis, + ISerialPort * serialPort + ); + + nsresult (*OnParallelPortChange)( + IInternalSessionControl *pThis, + IParallelPort * parallelPort + ); + + nsresult (*OnStorageControllerChange)(IInternalSessionControl *pThis ); + + nsresult (*OnVRDPServerChange)(IInternalSessionControl *pThis ); + + nsresult (*OnUSBControllerChange)(IInternalSessionControl *pThis ); + + nsresult (*OnSharedFolderChange)( + IInternalSessionControl *pThis, + PRBool global + ); + + nsresult (*OnUSBDeviceAttach)( + IInternalSessionControl *pThis, + IUSBDevice * device, + IVirtualBoxErrorInfo * error, + PRUint32 maskedInterfaces + ); + + nsresult (*OnUSBDeviceDetach)( + IInternalSessionControl *pThis, + PRUnichar * id, + IVirtualBoxErrorInfo * error + ); + + nsresult (*OnShowWindow)( + IInternalSessionControl *pThis, + PRBool check, + PRBool * canShow, + PRUint64 * winId + ); + + nsresult (*AccessGuestProperty)( + IInternalSessionControl *pThis, + PRUnichar * name, + PRUnichar * value, + PRUnichar * flags, + PRBool isSetter, + PRUnichar * * retValue, + PRUint64 * retTimestamp, + PRUnichar * * retFlags + ); + + nsresult (*EnumerateGuestProperties)( + IInternalSessionControl *pThis, + PRUnichar * patterns, + PRUint32 *keySize, + PRUnichar *** key, + PRUint32 *valueSize, + PRUnichar *** value, + PRUint32 *timestampSize, + PRUint64* timestamp, + PRUint32 *flagsSize, + PRUnichar *** flags + ); + +}; + +struct IInternalSessionControl +{ + struct IInternalSessionControl_vtbl *vtbl; +}; +/* End of struct IInternalSessionControl Declaration */ + + +/* Start of struct ISession Declaration */ +#define ISESSION_IID_STR "12F4DCDB-12B2-4ec1-B7CD-DDD9F6C5BF4D" +#define ISESSION_IID { \ + 0x12F4DCDB, 0x12B2, 0x4ec1, \ + { 0xB7, 0xCD, 0xDD, 0xD9, 0xF6, 0xC5, 0xBF, 0x4D } \ +} +struct ISession_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetState)(ISession *pThis, PRUint32 *state); + + nsresult (*GetType)(ISession *pThis, PRUint32 *type); + + nsresult (*GetMachine)(ISession *pThis, IMachine * *machine); + + nsresult (*GetConsole)(ISession *pThis, IConsole * *console); + + nsresult (*Close)(ISession *pThis ); + +}; + +struct ISession +{ + struct ISession_vtbl *vtbl; +}; +/* End of struct ISession Declaration */ + + +/* Start of struct IStorageController Declaration */ +#define ISTORAGECONTROLLER_IID_STR "6bf8335b-d14a-44a5-9b45-ddc49ce7d5b2" +#define ISTORAGECONTROLLER_IID { \ + 0x6bf8335b, 0xd14a, 0x44a5, \ + { 0x9b, 0x45, 0xdd, 0xc4, 0x9c, 0xe7, 0xd5, 0xb2 } \ +} +struct IStorageController_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetName)(IStorageController *pThis, PRUnichar * *name); + + nsresult (*GetMaxDevicesPerPortCount)(IStorageController *pThis, PRUint32 *maxDevicesPerPortCount); + + nsresult (*GetMinPortCount)(IStorageController *pThis, PRUint32 *minPortCount); + + nsresult (*GetMaxPortCount)(IStorageController *pThis, PRUint32 *maxPortCount); + + nsresult (*GetInstance)(IStorageController *pThis, PRUint32 *instance); + nsresult (*SetInstance)(IStorageController *pThis, PRUint32 instance); + + nsresult (*GetPortCount)(IStorageController *pThis, PRUint32 *portCount); + nsresult (*SetPortCount)(IStorageController *pThis, PRUint32 portCount); + + nsresult (*GetBus)(IStorageController *pThis, PRUint32 *bus); + + nsresult (*GetControllerType)(IStorageController *pThis, PRUint32 *controllerType); + nsresult (*SetControllerType)(IStorageController *pThis, PRUint32 controllerType); + + nsresult (*GetIDEEmulationPort)( + IStorageController *pThis, + PRInt32 devicePosition, + PRInt32 * portNumber + ); + + nsresult (*SetIDEEmulationPort)( + IStorageController *pThis, + PRInt32 devicePosition, + PRInt32 portNumber + ); + +}; + +struct IStorageController +{ + struct IStorageController_vtbl *vtbl; +}; +/* End of struct IStorageController Declaration */ + + +/* Start of struct IPerformanceMetric Declaration */ +#define IPERFORMANCEMETRIC_IID_STR "2a1a60ae-9345-4019-ad53-d34ba41cbfe9" +#define IPERFORMANCEMETRIC_IID { \ + 0x2a1a60ae, 0x9345, 0x4019, \ + { 0xad, 0x53, 0xd3, 0x4b, 0xa4, 0x1c, 0xbf, 0xe9 } \ +} +struct IPerformanceMetric_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetMetricName)(IPerformanceMetric *pThis, PRUnichar * *metricName); + + nsresult (*GetObject)(IPerformanceMetric *pThis, nsISupports * *object); + + nsresult (*GetDescription)(IPerformanceMetric *pThis, PRUnichar * *description); + + nsresult (*GetPeriod)(IPerformanceMetric *pThis, PRUint32 *period); + + nsresult (*GetCount)(IPerformanceMetric *pThis, PRUint32 *count); + + nsresult (*GetUnit)(IPerformanceMetric *pThis, PRUnichar * *unit); + + nsresult (*GetMinimumValue)(IPerformanceMetric *pThis, PRInt32 *minimumValue); + + nsresult (*GetMaximumValue)(IPerformanceMetric *pThis, PRInt32 *maximumValue); + +}; + +struct IPerformanceMetric +{ + struct IPerformanceMetric_vtbl *vtbl; +}; +/* End of struct IPerformanceMetric Declaration */ + + +/* Start of struct IPerformanceCollector Declaration */ +#define IPERFORMANCECOLLECTOR_IID_STR "e22e1acb-ac4a-43bb-a31c-17321659b0c6" +#define IPERFORMANCECOLLECTOR_IID { \ + 0xe22e1acb, 0xac4a, 0x43bb, \ + { 0xa3, 0x1c, 0x17, 0x32, 0x16, 0x59, 0xb0, 0xc6 } \ +} +struct IPerformanceCollector_vtbl +{ + struct nsISupports_vtbl nsisupports; + + nsresult (*GetMetricNames)(IPerformanceCollector *pThis, PRUint32 *metricNamesSize, PRUnichar * **metricNames); + + nsresult (*GetMetrics)( + IPerformanceCollector *pThis, + PRUint32 metricNamesSize, + PRUnichar ** metricNames, + PRUint32 objectsSize, + nsISupports ** objects, + PRUint32 *metricsSize, + IPerformanceMetric *** metrics + ); + + nsresult (*SetupMetrics)( + IPerformanceCollector *pThis, + PRUint32 metricNamesSize, + PRUnichar ** metricNames, + PRUint32 objectsSize, + nsISupports ** objects, + PRUint32 period, + PRUint32 count, + PRUint32 *affectedMetricsSize, + IPerformanceMetric *** affectedMetrics + ); + + nsresult (*EnableMetrics)( + IPerformanceCollector *pThis, + PRUint32 metricNamesSize, + PRUnichar ** metricNames, + PRUint32 objectsSize, + nsISupports ** objects, + PRUint32 *affectedMetricsSize, + IPerformanceMetric *** affectedMetrics + ); + + nsresult (*DisableMetrics)( + IPerformanceCollector *pThis, + PRUint32 metricNamesSize, + PRUnichar ** metricNames, + PRUint32 objectsSize, + nsISupports ** objects, + PRUint32 *affectedMetricsSize, + IPerformanceMetric *** affectedMetrics + ); + + nsresult (*QueryMetricsData)( + IPerformanceCollector *pThis, + PRUint32 metricNamesSize, + PRUnichar ** metricNames, + PRUint32 objectsSize, + nsISupports ** objects, + PRUint32 *returnMetricNamesSize, + PRUnichar *** returnMetricNames, + PRUint32 *returnObjectsSize, + nsISupports ** returnObjects, + PRUint32 *returnUnitsSize, + PRUnichar *** returnUnits, + PRUint32 *returnScalesSize, + PRUint32* returnScales, + PRUint32 *returnSequenceNumbersSize, + PRUint32* returnSequenceNumbers, + PRUint32 *returnDataIndicesSize, + PRUint32* returnDataIndices, + PRUint32 *returnDataLengthsSize, + PRUint32* returnDataLengths, + PRUint32 *returnDataSize, + PRInt32** returnData + ); + +}; + +struct IPerformanceCollector +{ + struct IPerformanceCollector_vtbl *vtbl; +}; +/* End of struct IPerformanceCollector Declaration */ + + + +#define NS_VIRTUALBOX_CID { \ + 0xB1A7A4F2, 0x47B9, 0x4A1E, \ + { 0x82, 0xB2, 0x07, 0xCC, 0xD5, 0x32, 0x3C, 0x3F } \ +} +#define NS_VIRTUALBOX_CONTRACTID "@virtualbox.org/VirtualBox;1" +/* for compatibility with Win32 */ +#define CLSID_VirtualBox (nsCID) NS_VIRTUALBOX_CID + + + +#define NS_SESSION_CID { \ + 0x3C02F46D, 0xC9D2, 0x4f11, \ + { 0xA3, 0x84, 0x53, 0xF0, 0xCF, 0x91, 0x72, 0x14 } \ +} +#define NS_SESSION_CONTRACTID "@virtualbox.org/Session;1" +/* for compatibility with Win32 */ +#define CLSID_Session (nsCID) NS_SESSION_CID + + + +#endif /* !__cplusplus */ + +#ifdef IN_VBOXXPCOMC +# define VBOXXPCOMC_DECL(type) PR_EXPORT(type) +#else +# define VBOXXPCOMC_DECL(type) PR_IMPORT(type) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * Function table for dynamic linking. + * Use VBoxGetFunctions() to obtain the pointer to it. + */ +typedef struct VBOXXPCOMC +{ + /** The size of the structure. */ + unsigned cb; + /** The structure version. */ + unsigned uVersion; + + unsigned int (*pfnGetVersion)(void); + + void (*pfnComInitialize)(const char *pszVirtualBoxIID, + IVirtualBox **ppVirtualBox, + const char *pszSessionIID, + ISession **ppSession); + void (*pfnComUninitialize)(void); + + void (*pfnComUnallocMem)(void *pv); + void (*pfnUtf16Free)(PRUnichar *pwszString); + void (*pfnUtf8Free)(char *pszString); + + int (*pfnUtf16ToUtf8)(const PRUnichar *pwszString, char **ppszString); + int (*pfnUtf8ToUtf16)(const char *pszString, PRUnichar **ppwszString); + + void (*pfnGetEventQueue)(nsIEventQueue **eventQueue); + + /** Tail version, same as uVersion. */ + unsigned uEndVersion; +} VBOXXPCOMC; +/** Pointer to a const VBoxXPCOMC function table. */ +typedef VBOXXPCOMC const *PCVBOXXPCOM; + +/** The current interface version. + * For use with VBoxGetXPCOMCFunctions and to be found in + * VBOXXPCOMC::uVersion. */ +#define VBOX_XPCOMC_VERSION 0x00020000U + +VBOXXPCOMC_DECL(PCVBOXXPCOM) VBoxGetXPCOMCFunctions(unsigned uVersion); +/** Typedef for VBoxGetXPCOMCFunctions. */ +typedef PCVBOXXPCOM (*PFNVBOXGETXPCOMCFUNCTIONS)(unsigned uVersion); + +/** The symbol name of VBoxGetXPCOMCFunctions. */ +#if defined(__OS2__) +# define VBOX_GET_XPCOMC_FUNCTIONS_SYMBOL_NAME "_VBoxGetXPCOMCFunctions" +#else +# define VBOX_GET_XPCOMC_FUNCTIONS_SYMBOL_NAME "VBoxGetXPCOMCFunctions" +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* !___VirtualBox_CXPCOM_h */ diff --git a/src/vbox/vbox_V3_0.c b/src/vbox/vbox_V3_0.c new file mode 100644 index 0000000..cd8ada2 --- /dev/null +++ b/src/vbox/vbox_V3_0.c @@ -0,0 +1,37 @@ +/** @file vbox_V3_0.c + * C file to include support for multiple versions of VirtualBox + * at runtime. + */ + +/* + * Copyright (C) 2008-2009 Sun Microsystems, Inc. + * + * This file is part of a free software library; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General + * Public License version 2.1 as published by the Free Software + * Foundation and shipped in the "COPYING" file with this library. + * The library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY of any kind. + * + * Sun LGPL Disclaimer: For the avoidance of doubt, except that if + * any license choice other than GPL or LGPL is available it will + * apply instead, Sun elects to use only the Lesser General Public + * License version 2.1 (LGPLv2) at this time for any software where + * a choice of LGPL license versions is made available with the + * language indicating that LGPLv2 or any later version may be used, + * or where a choice of which version of the LGPL is applied is + * otherwise unspecified. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + +#include <config.h> + +/** The API Version */ +#define VBOX_API_VERSION 3000 +/** Version specific prefix. */ +#define NAME(name) vbox30##name + +#include "vbox_tmpl.c" diff --git a/src/vbox/vbox_driver.c b/src/vbox/vbox_driver.c index a3d5428..a863a66 100644 --- a/src/vbox/vbox_driver.c +++ b/src/vbox/vbox_driver.c @@ -41,10 +41,8 @@ extern virDriver vbox22Driver; extern virNetworkDriver vbox22NetworkDriver; -#if 0 -extern virDriver vbox25Driver; -extern virNetworkDriver vbox25NetworkDriver; -#endif +extern virDriver vbox30Driver; +extern virNetworkDriver vbox30NetworkDriver; static virDriver vboxDriverDummy; @@ -85,12 +83,10 @@ int vboxRegister(void) { DEBUG0("VirtualBox API version: 2.2"); driver = &vbox22Driver; networkDriver = &vbox22NetworkDriver; -#if 0 - } else if (uVersion >= 2002051 && uVersion < 2005051) { - DEBUG0("VirtualBox API version: 2.5"); - driver = &vbox25Driver; - networkDriver = &vbox25NetworkDriver; -#endif + } else if (uVersion >= 2002051 && uVersion < 3000051) { + DEBUG0("VirtualBox API version: 3.0"); + driver = &vbox30Driver; + networkDriver = &vbox30NetworkDriver; } else { DEBUG0("Unsupport VirtualBox API version"); } diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 3208f03..0e829e3 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -42,7 +42,9 @@ #include "domain_conf.h" #include "network_conf.h" #include "virterror_internal.h" +#include "domain_event.h" #include "uuid.h" +#include "event.h" #include "memory.h" #include "nodeinfo.h" #include "logging.h" @@ -51,11 +53,10 @@ /* This one changes from version to version. */ #if VBOX_API_VERSION == 2002 # include "vbox_CAPI_v2_2.h" -/* Commented for now, v2.5 is far far away */ -/* -#elif VBOX_API_VERSION == 2005 -# include "VBoxCAPI_v2_5.h" -*/ +#elif VBOX_API_VERSION == 3000 +# include "vbox_CAPI_v3_0.h" +#else +# error "Unsupport VBOX_API_VERSION" #endif /* Include this *last* or we'll get the wrong vbox_CAPI_*.h. */ @@ -68,6 +69,33 @@ virReportErrorHelper(conn, VIR_FROM_VBOX, code, __FILE__, \ __FUNCTION__, __LINE__, fmt) +#define DEBUGPRUnichar(strUtf16) \ +if (strUtf16) {\ + char *strUtf8 = NULL;\ +\ + g_pVBoxGlobalData->pFuncs->pfnUtf16ToUtf8(strUtf16, &strUtf8);\ + if (strUtf8) {\ + DEBUG("%s: %s", #strUtf16, strUtf8);\ + g_pVBoxGlobalData->pFuncs->pfnUtf8Free(strUtf8);\ + }\ +} + +#define DEBUGUUID(iid) \ +{\ + DEBUG (#iid ": {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",\ + (unsigned)(iid)->m0,\ + (unsigned)(iid)->m1,\ + (unsigned)(iid)->m2,\ + (unsigned)(iid)->m3[0],\ + (unsigned)(iid)->m3[1],\ + (unsigned)(iid)->m3[2],\ + (unsigned)(iid)->m3[3],\ + (unsigned)(iid)->m3[4],\ + (unsigned)(iid)->m3[5],\ + (unsigned)(iid)->m3[6],\ + (unsigned)(iid)->m3[7]);\ +}\ + typedef struct { virMutex lock; int version; @@ -80,13 +108,57 @@ typedef struct { /** Our version specific API table pointer. */ PCVBOXXPCOM pFuncs; + +#if VBOX_API_VERSION == 2002 + +} vboxGlobalData; + +#else /* !(VBOX_API_VERSION == 2002) */ + + /* An array of callbacks */ + virDomainEventCallbackListPtr domainEventCallbacks; + virDomainEventQueuePtr domainEventQueue; + + int domainEventTimer; + int domainEventDispatching; + + IVirtualBoxCallback *vboxCallback; + + nsIEventQueue *vboxQueue; + int volatile vboxCallBackRefCount; + + /* pointer back to the connection */ + virConnectPtr conn; + } vboxGlobalData; +/* g_pVBoxGlobalData has to be global variable, + * there is no other way to make the callbacks + * work other then having g_pVBoxGlobalData as + * global, because the functions namely AddRef, + * Release, etc consider it as global and you + * can't change the function definition as it + * is XPCOM nsISupport::* function and it expects + * them that way + */ + +vboxGlobalData *g_pVBoxGlobalData = NULL; + +#endif /* !(VBOX_API_VERSION == 2002) */ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml); static int vboxDomainCreate(virDomainPtr dom); static int vboxDomainUndefine(virDomainPtr dom); +static void vboxDriverLock(vboxGlobalData *data) { + virMutexLock(&data->lock); +} + +static void vboxDriverUnlock(vboxGlobalData *data) { + virMutexUnlock(&data->lock); +} + +#if VBOX_API_VERSION == 2002 static void nsIDtoChar(unsigned char *uuid, const nsID *iid) { char uuidstrsrc[VIR_UUID_STRING_BUFLEN]; char uuidstrdst[VIR_UUID_STRING_BUFLEN]; @@ -127,14 +199,6 @@ static void nsIDtoChar(unsigned char *uuid, const nsID *iid) { virUUIDParse(uuidstrdst, uuid); } -static void vboxDriverLock(vboxGlobalData *data) { - virMutexLock(&data->lock); -} - -static void vboxDriverUnlock(vboxGlobalData *data) { - virMutexUnlock(&data->lock); -} - static void nsIDFromChar(nsID *iid, const unsigned char *uuid) { char uuidstrsrc[VIR_UUID_STRING_BUFLEN]; char uuidstrdst[VIR_UUID_STRING_BUFLEN]; @@ -174,6 +238,7 @@ static void nsIDFromChar(nsID *iid, const unsigned char *uuid) { virUUIDParse(uuidstrdst, uuidinterim); memcpy(iid, uuidinterim, VIR_UUID_BUFLEN); } +#endif /* !(VBOX_API_VERSION == 2002) */ static virCapsPtr vboxCapsInit(void) { struct utsname utsname; @@ -225,10 +290,25 @@ static int vboxInitialize(virConnectPtr conn, vboxGlobalData *data) { #if VBOX_XPCOMC_VERSION == 0x00010000U data->pFuncs->pfnComInitialize(&data->vboxObj, &data->vboxSession); -#else +#else /* !(VBOX_XPCOMC_VERSION == 0x00010000U) */ data->pFuncs->pfnComInitialize(IVIRTUALBOX_IID_STR, &data->vboxObj, ISESSION_IID_STR, &data->vboxSession); -#endif + +#if VBOX_API_VERSION == 2002 + + /* No event queue functionality in 2.2.* as of now */ + +#else /* !(VBOX_API_VERSION == 2002) */ + + data->pFuncs->pfnGetEventQueue(&data->vboxQueue); + + if (data->vboxQueue == NULL) { + vboxError(conn, VIR_ERR_INTERNAL_ERROR, "nsIEventQueue object is null"); + goto cleanup; + } + +#endif /* !(VBOX_API_VERSION == 2002) */ +#endif /* !(VBOX_XPCOMC_VERSION == 0x00010000U) */ if (data->vboxObj == NULL) { vboxError(conn, VIR_ERR_INTERNAL_ERROR, "IVirtualBox object is null"); @@ -290,6 +370,11 @@ static void vboxUninitialize(vboxGlobalData *data) { virDomainObjListFree(&data->domains); virCapabilitiesFree(data->caps); +#if VBOX_API_VERSION == 2002 + /* No domainEventCallbacks in 2.2.* version */ +#else /* !(VBOX_API_VERSION == 2002) */ + VIR_FREE(data->domainEventCallbacks); +#endif /* !(VBOX_API_VERSION == 2002) */ VIR_FREE(data); } @@ -348,6 +433,22 @@ static virDrvOpenStatus vboxOpen(virConnectPtr conn, return VIR_DRV_OPEN_ERROR; } +#if VBOX_API_VERSION == 2002 + + /* No domainEventCallbacks in 2.2.* version */ + +#else /* !(VBOX_API_VERSION == 2002) */ + + if (VIR_ALLOC(data->domainEventCallbacks) < 0) { + virReportOOMError(conn); + return VIR_DRV_OPEN_ERROR; + } + + data->conn = conn; + g_pVBoxGlobalData = data; + +#endif /* !(VBOX_API_VERSION == 2002) */ + conn->privateData = data; DEBUG0("in vboxOpen"); @@ -455,7 +556,13 @@ static int vboxListDomains(virConnectPtr conn, int *ids, int nids) { machine->vtbl->GetAccessible(machine, &isAccessible); if (isAccessible) { machine->vtbl->GetState(machine, &state); - if ((state == MachineState_Running) || + if ((state == MachineState_Starting) || + (state == MachineState_Running) || + (state == MachineState_Stuck) || + (state == MachineState_Stopping) || + (state == MachineState_Saving) || + (state == MachineState_Restoring) || + (state == MachineState_Discarding) || (state == MachineState_Paused) ) { ret++; ids[j++] = i + 1; @@ -504,7 +611,13 @@ static int vboxNumOfDomains(virConnectPtr conn) { machine->vtbl->GetAccessible(machine, &isAccessible); if (isAccessible) { machine->vtbl->GetState(machine, &state); - if ((state == MachineState_Running) || + if ((state == MachineState_Starting) || + (state == MachineState_Running) || + (state == MachineState_Stuck) || + (state == MachineState_Stopping) || + (state == MachineState_Saving) || + (state == MachineState_Restoring) || + (state == MachineState_Discarding) || (state == MachineState_Paused) ) { ret++; } @@ -554,7 +667,12 @@ static virDomainPtr vboxDomainLookupByID(virConnectPtr conn, int id) { IMachine **machines = NULL; PRUint32 machineCnt = 0; virDomainPtr dom = NULL; +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char *iidUtf8 = NULL; +#endif unsigned char iidl[VIR_UUID_BUFLEN]; PRUint32 state; int i; @@ -582,16 +700,31 @@ static virDomainPtr vboxDomainLookupByID(virConnectPtr conn, int id) { machines[id]->vtbl->GetAccessible(machines[id], &isAccessible); if (isAccessible) { machines[id]->vtbl->GetState(machines[id], &state); - if ((state == MachineState_Running) || + if ((state == MachineState_Starting) || + (state == MachineState_Running) || + (state == MachineState_Stuck) || + (state == MachineState_Stopping) || + (state == MachineState_Saving) || + (state == MachineState_Restoring) || + (state == MachineState_Discarding) || (state == MachineState_Paused) ) { PRUnichar *machineNameUtf16 = NULL; - char *machineName; + char *machineNameUtf8 = NULL; machines[id]->vtbl->GetName(machines[id], &machineNameUtf16); - data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName); + data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineNameUtf8); +#if VBOX_API_VERSION == 2002 machines[id]->vtbl->GetId(machines[id], &iid); nsIDtoChar(iidl, iid); + data->pFuncs->pfnComUnallocMem(iid); +#else + machines[id]->vtbl->GetId(machines[id], &iidUtf16); + data->pFuncs->pfnUtf16ToUtf8(iidUtf16, &iidUtf8); + virUUIDParse(iidUtf8, iidl); + data->pFuncs->pfnUtf8Free(iidUtf8); + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif /* get a new domain pointer from virGetDomain, if it fails * then no need to assign the id, else assign the id, cause @@ -599,14 +732,13 @@ static virDomainPtr vboxDomainLookupByID(virConnectPtr conn, int id) { * itself, so need not worry. */ - dom = virGetDomain(conn, machineName, iidl); + dom = virGetDomain(conn, machineNameUtf8, iidl); if (dom) dom->id = id + 1; /* Cleanup all the XPCOM allocated stuff here */ - data->pFuncs->pfnComUnallocMem(iid); - data->pFuncs->pfnUtf8Free(machineName); - data->pFuncs->pfnComUnallocMem(machineNameUtf16); + data->pFuncs->pfnUtf8Free(machineNameUtf8); + data->pFuncs->pfnUtf16Free(machineNameUtf16); } } } @@ -628,8 +760,13 @@ static virDomainPtr vboxDomainLookupByUUID(virConnectPtr conn, const unsigned ch IMachine **machines = NULL; PRUint32 machineCnt = 0; virDomainPtr dom = NULL; +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; - char *machineName = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char *iidUtf8 = NULL; +#endif + char *machineNameUtf8 = NULL; PRUnichar *machineNameUtf16 = NULL; unsigned char iidl[VIR_UUID_BUFLEN]; int i, matched = 0; @@ -652,10 +789,24 @@ static virDomainPtr vboxDomainLookupByUUID(virConnectPtr conn, const unsigned ch machine->vtbl->GetAccessible(machine, &isAccessible); if (isAccessible) { +#if VBOX_API_VERSION == 2002 machine->vtbl->GetId(machine, &iid); if (!iid) continue; nsIDtoChar(iidl, iid); + data->pFuncs->pfnComUnallocMem(iid); + iid = NULL; +#else + machine->vtbl->GetId(machine, &iidUtf16); + if (!iidUtf16) + continue; + data->pFuncs->pfnUtf16ToUtf8(iidUtf16, &iidUtf8); + virUUIDParse(iidUtf8, iidl); + data->pFuncs->pfnUtf8Free(iidUtf8); + data->pFuncs->pfnUtf16Free(iidUtf16); + iidUtf8 = NULL; + iidUtf16 = NULL; +#endif if (memcmp(uuid, iidl, VIR_UUID_BUFLEN) == 0) { @@ -664,7 +815,7 @@ static virDomainPtr vboxDomainLookupByUUID(virConnectPtr conn, const unsigned ch matched = 1; machine->vtbl->GetName(machine, &machineNameUtf16); - data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName); + data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineNameUtf8); machine->vtbl->GetState(machine, &state); @@ -674,25 +825,27 @@ static virDomainPtr vboxDomainLookupByUUID(virConnectPtr conn, const unsigned ch * itself, so need not worry. */ - dom = virGetDomain(conn, machineName, iidl); + dom = virGetDomain(conn, machineNameUtf8, iidl); if (dom) - if ((state == MachineState_Running) || + if ((state == MachineState_Starting) || + (state == MachineState_Running) || + (state == MachineState_Stuck) || + (state == MachineState_Stopping) || + (state == MachineState_Saving) || + (state == MachineState_Restoring) || + (state == MachineState_Discarding) || (state == MachineState_Paused) ) dom->id = i + 1; } - if (iid) { - data->pFuncs->pfnComUnallocMem(iid); - iid = NULL; - } if (matched == 1) break; } } /* Do the cleanup and take care you dont leak any memory */ - if (machineName) - data->pFuncs->pfnUtf8Free(machineName); + if (machineNameUtf8) + data->pFuncs->pfnUtf8Free(machineNameUtf8); if (machineNameUtf16) data->pFuncs->pfnComUnallocMem(machineNameUtf16); for (i = 0; i < machineCnt; ++i) { @@ -710,8 +863,13 @@ static virDomainPtr vboxDomainLookupByName(virConnectPtr conn, const char *name) IMachine **machines = NULL; PRUint32 machineCnt = 0; virDomainPtr dom = NULL; +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; - char *machineName = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char *iidUtf8 = NULL; +#endif + char *machineNameUtf8 = NULL; PRUnichar *machineNameUtf16 = NULL; unsigned char iidl[VIR_UUID_BUFLEN]; int i, matched = 0; @@ -735,16 +893,25 @@ static virDomainPtr vboxDomainLookupByName(virConnectPtr conn, const char *name) if (isAccessible) { machine->vtbl->GetName(machine, &machineNameUtf16); - data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName); + data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineNameUtf8); - if (machineName && (STREQ(name, machineName))) { + if (STREQ(name, machineNameUtf8)) { PRUint32 state; matched = 1; +#if VBOX_API_VERSION == 2002 machine->vtbl->GetId(machine, &iid); nsIDtoChar(iidl, iid); + data->pFuncs->pfnComUnallocMem(iid); +#else + machine->vtbl->GetId(machine, &iidUtf16); + data->pFuncs->pfnUtf16ToUtf8(iidUtf16, &iidUtf8); + virUUIDParse(iidUtf8, iidl); + data->pFuncs->pfnUtf8Free(iidUtf8); + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif machine->vtbl->GetState(machine, &state); @@ -754,16 +921,22 @@ static virDomainPtr vboxDomainLookupByName(virConnectPtr conn, const char *name) * itself, so need not worry. */ - dom = virGetDomain(conn, machineName, iidl); + dom = virGetDomain(conn, machineNameUtf8, iidl); if (dom) - if ((state == MachineState_Running) || + if ((state == MachineState_Starting) || + (state == MachineState_Running) || + (state == MachineState_Stuck) || + (state == MachineState_Stopping) || + (state == MachineState_Saving) || + (state == MachineState_Restoring) || + (state == MachineState_Discarding) || (state == MachineState_Paused) ) dom->id = i + 1; } - if (machineName) { - data->pFuncs->pfnUtf8Free(machineName); - machineName = NULL; + if (machineNameUtf8) { + data->pFuncs->pfnUtf8Free(machineNameUtf8); + machineNameUtf8 = NULL; } if (machineNameUtf16) { data->pFuncs->pfnComUnallocMem(machineNameUtf16); @@ -775,8 +948,6 @@ static virDomainPtr vboxDomainLookupByName(virConnectPtr conn, const char *name) } /* Do the cleanup and take care you dont leak any memory */ - if (iid) - data->pFuncs->pfnComUnallocMem(iid); for (i = 0; i < machineCnt; ++i) { if (machines[i]) machines[i]->vtbl->nsisupports.Release((nsISupports *)machines[i]); @@ -790,21 +961,34 @@ static int vboxDomainSuspend(virDomainPtr dom) { nsresult rc; vboxGlobalData *data = dom->conn->privateData; IMachine *machine = NULL; +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif IConsole *console = NULL; PRUint32 state; int ret = -1; +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(dom->conn); goto cleanup; } +#endif if (data->vboxObj) { PRBool isAccessible = PR_FALSE; +#if VBOX_API_VERSION == 2002 nsIDFromChar(iid, dom->uuid); rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iid, &machine); +#else + virUUIDFormat(dom->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); + rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iidUtf16, &machine); +#endif if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN, "no domain with matching id %d", dom->id); @@ -820,7 +1004,11 @@ static int vboxDomainSuspend(virDomainPtr dom) { if (state == MachineState_Running) { /* set state pause */ +#if VBOX_API_VERSION == 2002 data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iid); +#else + data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iidUtf16); +#endif data->vboxSession->vtbl->GetConsole(data->vboxSession, &console); if (console) { console->vtbl->Pause(console); @@ -844,7 +1032,11 @@ cleanup: if (machine) machine->vtbl->nsisupports.Release((nsISupports *)machine); +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif return ret; } @@ -852,21 +1044,34 @@ static int vboxDomainResume(virDomainPtr dom) { nsresult rc; vboxGlobalData *data = dom->conn->privateData; IMachine *machine = NULL; +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif IConsole *console = NULL; PRUint32 state = MachineState_Null; int ret = -1; +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(dom->conn); goto cleanup; } +#endif if (data->vboxObj) { PRBool isAccessible = PR_FALSE; +#if VBOX_API_VERSION == 2002 nsIDFromChar(iid, dom->uuid); rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iid, &machine); +#else + virUUIDFormat(dom->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); + rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iidUtf16, &machine); +#endif if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN, "no domain with matching id %d", dom->id); @@ -882,7 +1087,11 @@ static int vboxDomainResume(virDomainPtr dom) { if (state == MachineState_Paused) { /* resume the machine here */ +#if VBOX_API_VERSION == 2002 data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iid); +#else + data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iidUtf16); +#endif data->vboxSession->vtbl->GetConsole(data->vboxSession, &console); if (console) { console->vtbl->Resume(console); @@ -906,7 +1115,11 @@ cleanup: if (machine) machine->vtbl->nsisupports.Release((nsISupports *)machine); +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif return ret; } @@ -914,21 +1127,34 @@ static int vboxDomainShutdown(virDomainPtr dom) { nsresult rc; vboxGlobalData *data = dom->conn->privateData; IMachine *machine = NULL; +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif IConsole *console = NULL; PRUint32 state = MachineState_Null; int ret = -1; +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(dom->conn); goto cleanup; } +#endif if(data->vboxObj) { PRBool isAccessible = PR_FALSE; +#if VBOX_API_VERSION == 2002 nsIDFromChar(iid, dom->uuid); rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iid, &machine); +#else + virUUIDFormat(dom->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); + rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iidUtf16, &machine); +#endif if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN, "no domain with matching id %d", dom->id); @@ -952,7 +1178,11 @@ static int vboxDomainShutdown(virDomainPtr dom) { goto cleanup; } +#if VBOX_API_VERSION == 2002 data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iid); +#else + data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iidUtf16); +#endif data->vboxSession->vtbl->GetConsole(data->vboxSession, &console); if (console) { console->vtbl->PowerButton(console); @@ -967,7 +1197,11 @@ cleanup: if (machine) machine->vtbl->nsisupports.Release((nsISupports *)machine); +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif return ret; } @@ -975,21 +1209,34 @@ static int vboxDomainReboot(virDomainPtr dom, unsigned int flags ATTRIBUTE_UNUSE nsresult rc; vboxGlobalData *data = dom->conn->privateData; IMachine *machine = NULL; +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif IConsole *console = NULL; PRUint32 state = MachineState_Null; int ret = -1; +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(dom->conn); goto cleanup; } +#endif if(data->vboxObj) { PRBool isAccessible = PR_FALSE; +#if VBOX_API_VERSION == 2002 nsIDFromChar(iid, dom->uuid); rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iid, &machine); +#else + virUUIDFormat(dom->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); + rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iidUtf16, &machine); +#endif if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN, "no domain with matching id %d", dom->id); @@ -1004,7 +1251,11 @@ static int vboxDomainReboot(virDomainPtr dom, unsigned int flags ATTRIBUTE_UNUSE machine->vtbl->GetState(machine, &state); if (state == MachineState_Running) { +#if VBOX_API_VERSION == 2002 data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iid); +#else + data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iidUtf16); +#endif data->vboxSession->vtbl->GetConsole(data->vboxSession, &console); if (console) { console->vtbl->Reset(console); @@ -1024,7 +1275,11 @@ cleanup: if (machine) machine->vtbl->nsisupports.Release((nsISupports *)machine); +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif return ret; } @@ -1032,21 +1287,34 @@ static int vboxDomainDestroy(virDomainPtr dom) { nsresult rc; vboxGlobalData *data = dom->conn->privateData; IMachine *machine = NULL; +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif IConsole *console = NULL; PRUint32 state = MachineState_Null; int ret = -1; +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(dom->conn); goto cleanup; } +#endif if(data->vboxObj) { PRBool isAccessible = PR_FALSE; +#if VBOX_API_VERSION == 2002 nsIDFromChar(iid, dom->uuid); rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iid, &machine); +#else + virUUIDFormat(dom->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); + rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iidUtf16, &machine); +#endif if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN, "no domain with matching id %d", dom->id); @@ -1066,12 +1334,28 @@ static int vboxDomainDestroy(virDomainPtr dom) { goto cleanup; } +#if VBOX_API_VERSION == 2002 data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iid); +#else + data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iidUtf16); +#endif data->vboxSession->vtbl->GetConsole(data->vboxSession, &console); if (console) { + +#if VBOX_API_VERSION == 2002 console->vtbl->PowerDown(console); +#else + IProgress *progress; + console->vtbl->PowerDown(console, &progress); +#endif console->vtbl->nsisupports.Release((nsISupports *)console); ret = 0; + +#if VBOX_API_VERSION == 2002 +#else + if (progress) + progress->vtbl->nsisupports.Release((nsISupports *)progress); +#endif } data->vboxSession->vtbl->Close(data->vboxSession); } @@ -1081,7 +1365,11 @@ cleanup: if (machine) machine->vtbl->nsisupports.Release((nsISupports *)machine); +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif return ret; } @@ -1098,20 +1386,33 @@ static int vboxDomainSetMemory(virDomainPtr dom, unsigned long memory) { nsresult rc; vboxGlobalData *data = dom->conn->privateData; IMachine *machine = NULL; +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif PRUint32 state = MachineState_Null; int ret = -1; +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(dom->conn); goto cleanup; } +#endif if(data->vboxObj) { PRBool isAccessible = PR_FALSE; +#if VBOX_API_VERSION == 2002 nsIDFromChar(iid, dom->uuid); rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iid, &machine); +#else + virUUIDFormat(dom->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); + rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iidUtf16, &machine); +#endif if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN, "no domain with matching id %d", dom->id); @@ -1131,7 +1432,11 @@ static int vboxDomainSetMemory(virDomainPtr dom, unsigned long memory) { goto cleanup; } +#if VBOX_API_VERSION == 2002 rc = data->vboxObj->vtbl->OpenSession(data->vboxObj, data->vboxSession, iid); +#else + rc = data->vboxObj->vtbl->OpenSession(data->vboxObj, data->vboxSession, iidUtf16); +#endif if (NS_SUCCEEDED(rc)) { rc = data->vboxSession->vtbl->GetMachine(data->vboxSession, &machine); if (NS_SUCCEEDED(rc) && machine) { @@ -1155,7 +1460,11 @@ cleanup: if (machine) machine->vtbl->nsisupports.Release((nsISupports *)machine); +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif return ret; } @@ -1275,7 +1584,12 @@ static int vboxDomainSave(virDomainPtr dom, const char *path ATTRIBUTE_UNUSED) { nsresult rc; vboxGlobalData *data = dom->conn->privateData; IConsole *console = NULL; - nsID *iid = NULL; +#if VBOX_API_VERSION == 2002 + nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif int ret = -1; /* VirtualBox currently doesn't support saving to a file @@ -1284,16 +1598,24 @@ static int vboxDomainSave(virDomainPtr dom, const char *path ATTRIBUTE_UNUSED) { * this behaviour once get the VirtualBox API in right * shape to do this */ +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(dom->conn); goto cleanup; } +#endif if(data->vboxObj) { - nsIDFromChar(iid, dom->uuid); /* Open a Session for the machine */ +#if VBOX_API_VERSION == 2002 + nsIDFromChar(iid, dom->uuid); rc = data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iid); +#else + virUUIDFormat(dom->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); + rc = data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iidUtf16); +#endif if (NS_SUCCEEDED(rc)) { rc = data->vboxSession->vtbl->GetConsole(data->vboxSession, &console); if (NS_SUCCEEDED(rc) && console) { @@ -1302,11 +1624,15 @@ static int vboxDomainSave(virDomainPtr dom, const char *path ATTRIBUTE_UNUSED) { console->vtbl->SaveState(console, &progress); if (progress) { +#if VBOX_API_VERSION == 2002 nsresult resultCode; +#else + PRInt32 resultCode; +#endif progress->vtbl->WaitForCompletion(progress, -1); progress->vtbl->GetResultCode(progress, &resultCode); - if (NS_SUCCEEDED(rc)) { + if (NS_SUCCEEDED(resultCode)) { ret = 0; } progress->vtbl->nsisupports.Release((nsISupports *)progress); @@ -1317,16 +1643,24 @@ static int vboxDomainSave(virDomainPtr dom, const char *path ATTRIBUTE_UNUSED) { } DEBUG("UUID of machine being saved:" +#if VBOX_API_VERSION == 2002 "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", (unsigned)iid->m0, (unsigned)iid->m1, (unsigned)iid->m2, (unsigned)iid->m3[0], (unsigned)iid->m3[1], (unsigned)iid->m3[2], (unsigned)iid->m3[3], (unsigned)iid->m3[4], (unsigned)iid->m3[5], (unsigned)iid->m3[6], (unsigned)iid->m3[7]); +#else + "%s", iidUtf8); +#endif } +#if VBOX_API_VERSION == 2002 cleanup: VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif return ret; } @@ -1335,14 +1669,21 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) { vboxGlobalData *data = dom->conn->privateData; virDomainDefPtr def = NULL; IMachine *machine = NULL; - nsID *iid = NULL; +#if VBOX_API_VERSION == 2002 + nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif char *ret = NULL; int gotAllABoutDef = -1; +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(dom->conn); goto cleanup; } +#endif if (VIR_ALLOC(def) < 0) { virReportOOMError(dom->conn); @@ -1350,9 +1691,15 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) { } if(data->vboxObj) { - nsIDFromChar(iid, dom->uuid); +#if VBOX_API_VERSION == 2002 + nsIDFromChar(iid, dom->uuid); rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iid, &machine); +#else + virUUIDFormat(dom->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); + rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iidUtf16, &machine); +#endif if (NS_SUCCEEDED(rc) && machine) { PRBool accessible = PR_FALSE; @@ -2220,7 +2567,11 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) { ret = virDomainDefFormat(dom->conn, def, flags); cleanup: +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif virDomainDefFree(def); return ret; } @@ -2257,7 +2608,13 @@ static int vboxListDefinedDomains(virConnectPtr conn, char ** const names, int m machine->vtbl->GetAccessible(machine, &isAccessible); if (isAccessible) { machine->vtbl->GetState(machine, &state); - if ((state != MachineState_Running) && + if ((state != MachineState_Starting) && + (state != MachineState_Running) && + (state != MachineState_Stuck) && + (state != MachineState_Stopping) && + (state != MachineState_Saving) && + (state != MachineState_Restoring) && + (state != MachineState_Discarding) && (state != MachineState_Paused) ) { machine->vtbl->GetName(machine, &machineNameUtf16); data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName); @@ -2316,7 +2673,13 @@ static int vboxNumOfDefinedDomains(virConnectPtr conn) { machine->vtbl->GetAccessible(machine, &isAccessible); if (isAccessible) { machine->vtbl->GetState(machine, &state); - if ((state != MachineState_Running) && + if ((state != MachineState_Starting) && + (state != MachineState_Running) && + (state != MachineState_Stuck) && + (state != MachineState_Stopping) && + (state != MachineState_Saving) && + (state != MachineState_Restoring) && + (state != MachineState_Discarding) && (state != MachineState_Paused) ) { ret++; } @@ -2369,12 +2732,23 @@ static int vboxDomainCreate(virDomainPtr dom) { machine->vtbl->GetAccessible(machine, &isAccessible); if (isAccessible) { +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; machine->vtbl->GetId(machine, &iid); if (!iid) continue; nsIDtoChar(iidl, iid); +#else + PRUnichar *iidUtf16 = NULL; + char *iidUtf8 = NULL; + + machine->vtbl->GetId(machine, &iidUtf16); + if (!iidUtf16) + continue; + data->pFuncs->pfnUtf16ToUtf8(iidUtf16, &iidUtf8); + virUUIDParse(iidUtf8, iidl); +#endif if (memcmp(dom->uuid, iidl, VIR_UUID_BUFLEN) == 0) { PRUint32 state = MachineState_Null; @@ -2486,7 +2860,11 @@ static int vboxDomainCreate(virDomainPtr dom) { data->vboxObj->vtbl->OpenRemoteSession(data->vboxObj, data->vboxSession, +#if VBOX_API_VERSION == 2002 iid, +#else + iidUtf16, +#endif sessionType, env, &progress ); @@ -2496,7 +2874,11 @@ static int vboxDomainCreate(virDomainPtr dom) { ret = -1; } else { PRBool completed = 0; +#if VBOX_API_VERSION == 2002 nsresult resultCode; +#else + PRInt32 resultCode; +#endif progress->vtbl->WaitForCompletion(progress, -1); rc = progress->vtbl->GetCompleted(progress, &completed); if (NS_FAILED(rc)) { @@ -2527,8 +2909,12 @@ static int vboxDomainCreate(virDomainPtr dom) { } } - if (iid) - data->pFuncs->pfnComUnallocMem(iid); +#if VBOX_API_VERSION == 2002 + data->pFuncs->pfnComUnallocMem(iid); +#else + data->pFuncs->pfnUtf8Free(iidUtf8); + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif if (ret != -1) break; } @@ -2550,13 +2936,19 @@ cleanup: static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { nsresult rc; - vboxGlobalData *data = conn->privateData; - IMachine *machine = NULL; - IBIOSSettings *bios = NULL; - virDomainPtr dom = NULL; - nsID *iid = NULL; - nsID *mchiid = NULL; - virDomainDefPtr def = NULL; + vboxGlobalData *data = conn->privateData; + IMachine *machine = NULL; + IBIOSSettings *bios = NULL; + virDomainPtr dom = NULL; +#if VBOX_API_VERSION == 2002 + nsID *iid = NULL; + nsID *mchiid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; + PRUnichar *mchiidUtf16 = NULL; +#endif + virDomainDefPtr def = NULL; PRUnichar *machineNameUtf16 = NULL; if (!(def = virDomainDefParseString(conn, data->caps, xml, @@ -2564,19 +2956,30 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { goto cleanup; } +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(conn); goto cleanup; } +#endif if (data->vboxObj) { data->pFuncs->pfnUtf8ToUtf16(def->name, &machineNameUtf16); +#if VBOX_API_VERSION == 2002 nsIDFromChar(iid, def->uuid); +#else + virUUIDFormat(def->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); +#endif rc = data->vboxObj->vtbl->CreateMachine(data->vboxObj, machineNameUtf16, NULL, NULL, +#if VBOX_API_VERSION == 2002 iid, +#else + iidUtf16, +#endif &machine); data->pFuncs->pfnUtf16Free(machineNameUtf16); @@ -2642,8 +3045,13 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { * object so open a session to it and get it back, so that * you can make changes to the machine setting */ +#if VBOX_API_VERSION == 2002 machine->vtbl->GetId(machine, &mchiid); data->vboxObj->vtbl->OpenSession(data->vboxObj, data->vboxSession, mchiid); +#else + machine->vtbl->GetId(machine, &mchiidUtf16); + data->vboxObj->vtbl->OpenSession(data->vboxObj, data->vboxSession, mchiidUtf16); +#endif data->vboxSession->vtbl->GetMachine(data->vboxSession, &machine); { /* Started:Block to set the boot device order */ @@ -2726,44 +3134,74 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { machine->vtbl->GetDVDDrive(machine, &dvdDrive); if (dvdDrive) { - IDVDImage *dvdImage = NULL; - PRUnichar *dvdfileUtf16 = NULL; - nsID *dvduuid = NULL; + IDVDImage *dvdImage = NULL; + PRUnichar *dvdfileUtf16 = NULL; +#if VBOX_API_VERSION == 2002 + nsID *dvduuid = NULL; nsID dvdemptyuuid; memset(&dvdemptyuuid, 0, sizeof(dvdemptyuuid)); +#else + char *dvduuidUtf8 = NULL; + PRUnichar *dvduuidUtf16 = NULL; + PRUnichar *dvdemptyuuidUtf16 = NULL; +#endif data->pFuncs->pfnUtf8ToUtf16(def->disks[i]->src, &dvdfileUtf16); data->vboxObj->vtbl->FindDVDImage(data->vboxObj, dvdfileUtf16, &dvdImage); if (!dvdImage) { +#if VBOX_API_VERSION == 2002 data->vboxObj->vtbl->OpenDVDImage(data->vboxObj, dvdfileUtf16, &dvdemptyuuid, &dvdImage); +#else + data->vboxObj->vtbl->OpenDVDImage(data->vboxObj, dvdfileUtf16, dvdemptyuuidUtf16, &dvdImage); +#endif } if (dvdImage) { +#if VBOX_API_VERSION == 2002 rc = dvdImage->vtbl->imedium.GetId((IMedium *)dvdImage, &dvduuid); +#else + rc = dvdImage->vtbl->imedium.GetId((IMedium *)dvdImage, &dvduuidUtf16); +#endif if (NS_FAILED(rc)) { vboxError(conn, VIR_ERR_INTERNAL_ERROR,"%s:%s, rc=%08x", "can't get the uuid of the file to be attached to cdrom", def->disks[i]->src, (unsigned)rc); } else { +#if VBOX_API_VERSION == 2002 rc = dvdDrive->vtbl->MountImage(dvdDrive, dvduuid); +#else + rc = dvdDrive->vtbl->MountImage(dvdDrive, dvduuidUtf16); +#endif if (NS_FAILED(rc)) { vboxError(conn, VIR_ERR_INTERNAL_ERROR,"%s:%s, rc=%08x", "could not attach the file to cdrom", def->disks[i]->src, (unsigned)rc); } else { - DEBUG("CD/DVDImage UUID:{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", - (unsigned)dvduuid->m0, (unsigned)dvduuid->m1, (unsigned)dvduuid->m2, - (unsigned)dvduuid->m3[0], (unsigned)dvduuid->m3[1], - (unsigned)dvduuid->m3[2], (unsigned)dvduuid->m3[3], - (unsigned)dvduuid->m3[4], (unsigned)dvduuid->m3[5], - (unsigned)dvduuid->m3[6], (unsigned)dvduuid->m3[7]); +#if VBOX_API_VERSION == 2002 + DEBUG("CD/DVDImage UUID:" + "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + (unsigned)dvduuid->m0, (unsigned)dvduuid->m1, + (unsigned)dvduuid->m2, (unsigned)dvduuid->m3[0], + (unsigned)dvduuid->m3[1], (unsigned)dvduuid->m3[2], + (unsigned)dvduuid->m3[3], (unsigned)dvduuid->m3[4], + (unsigned)dvduuid->m3[5], (unsigned)dvduuid->m3[6], + (unsigned)dvduuid->m3[7]); +#else + data->pFuncs->pfnUtf16ToUtf8(dvduuidUtf16, &dvduuidUtf8); + DEBUG("CD/DVDImage UUID: %s", dvduuidUtf8); + data->pFuncs->pfnUtf8Free(dvduuidUtf8); +#endif } - data->pFuncs->pfnComUnallocMem(dvduuid); } dvdImage->vtbl->imedium.nsisupports.Release((nsISupports *)dvdImage); } +#if VBOX_API_VERSION == 2002 + data->pFuncs->pfnComUnallocMem(dvduuid); +#else + data->pFuncs->pfnUtf16Free(dvduuidUtf16); +#endif data->pFuncs->pfnUtf16Free(dvdfileUtf16); dvdDrive->vtbl->nsisupports.Release((nsISupports *)dvdDrive); } @@ -2773,10 +3211,15 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { if (def->disks[i]->type == VIR_DOMAIN_DISK_TYPE_FILE) { IHardDisk *hardDisk = NULL; PRUnichar *hddfileUtf16 = NULL; +#if VBOX_API_VERSION == 2002 nsID *hdduuid = NULL; +#else + PRUnichar *hdduuidUtf16 = NULL; + char *hdduuidUtf8 = NULL; +#endif /* Current Limitation: Harddisk can't be connected to * Secondary Master as Secondary Master is always used - * for CD/DVD Drive, so not connect the harddisk if it + * for CD/DVD Drive, so don't connect the harddisk if it * is requested to be connected to Secondary master */ @@ -2785,14 +3228,29 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { data->vboxObj->vtbl->FindHardDisk(data->vboxObj, hddfileUtf16, &hardDisk); if (!hardDisk) { +#if VBOX_API_VERSION == 2002 + data->vboxObj->vtbl->OpenHardDisk(data->vboxObj, + hddfileUtf16, + AccessMode_ReadWrite, + &hardDisk); +#else data->vboxObj->vtbl->OpenHardDisk(data->vboxObj, hddfileUtf16, AccessMode_ReadWrite, + 0, + NULL, + 0, + NULL, &hardDisk); +#endif } if (hardDisk) { +#if VBOX_API_VERSION == 2002 rc = hardDisk->vtbl->imedium.GetId((IMedium *)hardDisk, &hdduuid); +#else + rc = hardDisk->vtbl->imedium.GetId((IMedium *)hardDisk, &hdduuidUtf16); +#endif if (NS_FAILED(rc)) { vboxError(conn, VIR_ERR_INTERNAL_ERROR,"%s:%s, rc=%08x", "can't get the uuid of the file to be attached as harddisk", @@ -2829,9 +3287,15 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { device = 1; } - rc = machine->vtbl->AttachHardDisk(machine, hdduuid, + rc = machine->vtbl->AttachHardDisk(machine, +#if VBOX_API_VERSION == 2002 + hdduuid, +#else + hdduuidUtf16, +#endif hddcnameUtf16, - channel, device); + channel, + device); data->pFuncs->pfnUtf16Free(hddcnameUtf16); if (NS_FAILED(rc)) { @@ -2839,21 +3303,31 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { "could not attach the file as harddisk", def->disks[i]->src, (unsigned)rc); } else { +#if VBOX_API_VERSION == 2002 DEBUG("Attached HDD with UUID:" "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", - (unsigned)hdduuid->m0, (unsigned)hdduuid->m1, - (unsigned)hdduuid->m2, - (unsigned)hdduuid->m3[0], (unsigned)hdduuid->m3[1], - (unsigned)hdduuid->m3[2], (unsigned)hdduuid->m3[3], - (unsigned)hdduuid->m3[4], (unsigned)hdduuid->m3[5], - (unsigned)hdduuid->m3[6], (unsigned)hdduuid->m3[7]); + (unsigned)hdduuid->m0, (unsigned)hdduuid->m1, + (unsigned)hdduuid->m2, (unsigned)hdduuid->m3[0], + (unsigned)hdduuid->m3[1], (unsigned)hdduuid->m3[2], + (unsigned)hdduuid->m3[3], (unsigned)hdduuid->m3[4], + (unsigned)hdduuid->m3[5], (unsigned)hdduuid->m3[6], + (unsigned)hdduuid->m3[7]); +#else + data->pFuncs->pfnUtf16ToUtf8(hdduuidUtf16, &hdduuidUtf8); + DEBUG("Attached HDD with UUID: %s", hdduuidUtf8); + data->pFuncs->pfnUtf8Free(hdduuidUtf8); +#endif } } } - data->pFuncs->pfnComUnallocMem(hdduuid); } hardDisk->vtbl->imedium.nsisupports.Release((nsISupports *)hardDisk); } +#if VBOX_API_VERSION == 2002 + data->pFuncs->pfnComUnallocMem(hdduuid); +#else + data->pFuncs->pfnUtf16Free(hdduuidUtf16); +#endif data->pFuncs->pfnUtf16Free(hddfileUtf16); } else if (def->disks[i]->type == VIR_DOMAIN_DISK_TYPE_BLOCK) { } @@ -2864,48 +3338,79 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { if (floppyDrive) { rc = floppyDrive->vtbl->SetEnabled(floppyDrive, 1); if (NS_SUCCEEDED(rc)) { - IFloppyImage *floppyImage = NULL; - PRUnichar *fdfileUtf16 = NULL; - nsID *fduuid = NULL; + IFloppyImage *floppyImage = NULL; + PRUnichar *fdfileUtf16 = NULL; +#if VBOX_API_VERSION == 2002 + nsID *fduuid = NULL; nsID fdemptyuuid; memset(&fdemptyuuid, 0, sizeof(fdemptyuuid)); +#else + char *fduuidUtf8 = NULL; + PRUnichar *fduuidUtf16 = NULL; + PRUnichar *fdemptyuuidUtf16 = NULL; +#endif data->pFuncs->pfnUtf8ToUtf16(def->disks[i]->src, &fdfileUtf16); - rc = data->vboxObj->vtbl->FindFloppyImage(data->vboxObj, fdfileUtf16, + rc = data->vboxObj->vtbl->FindFloppyImage(data->vboxObj, + fdfileUtf16, &floppyImage); if (!floppyImage) { - data->vboxObj->vtbl->OpenFloppyImage(data->vboxObj, fdfileUtf16, - &fdemptyuuid, &floppyImage); + data->vboxObj->vtbl->OpenFloppyImage(data->vboxObj, + fdfileUtf16, +#if VBOX_API_VERSION == 2002 + &fdemptyuuid, +#else + fdemptyuuidUtf16, +#endif + &floppyImage); } if (floppyImage) { +#if VBOX_API_VERSION == 2002 rc = floppyImage->vtbl->imedium.GetId((IMedium *)floppyImage, &fduuid); +#else + rc = floppyImage->vtbl->imedium.GetId((IMedium *)floppyImage, &fduuidUtf16); +#endif if (NS_FAILED(rc)) { vboxError(conn, VIR_ERR_INTERNAL_ERROR,"%s:%s, rc=%08x", "can't get the uuid of the file to be attached to floppy drive", def->disks[i]->src, (unsigned)rc); } else { +#if VBOX_API_VERSION == 2002 rc = floppyDrive->vtbl->MountImage(floppyDrive, fduuid); +#else + rc = floppyDrive->vtbl->MountImage(floppyDrive, fduuidUtf16); +#endif if (NS_FAILED(rc)) { vboxError(conn, VIR_ERR_INTERNAL_ERROR,"%s:%s, rc=%08x", "could not attach the file to floppy drive", def->disks[i]->src, (unsigned)rc); } else { +#if VBOX_API_VERSION == 2002 DEBUG("floppyImage UUID:" "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", - (unsigned)fduuid->m0, (unsigned)fduuid->m1, - (unsigned)fduuid->m2, - (unsigned)fduuid->m3[0], (unsigned)fduuid->m3[1], - (unsigned)fduuid->m3[2], (unsigned)fduuid->m3[3], - (unsigned)fduuid->m3[4], (unsigned)fduuid->m3[5], - (unsigned)fduuid->m3[6], (unsigned)fduuid->m3[7]); + (unsigned)fduuid->m0, (unsigned)fduuid->m1, + (unsigned)fduuid->m2, (unsigned)fduuid->m3[0], + (unsigned)fduuid->m3[1], (unsigned)fduuid->m3[2], + (unsigned)fduuid->m3[3], (unsigned)fduuid->m3[4], + (unsigned)fduuid->m3[5], (unsigned)fduuid->m3[6], + (unsigned)fduuid->m3[7]); +#else + data->pFuncs->pfnUtf16ToUtf8(fduuidUtf16, &fduuidUtf8); + DEBUG("floppyImage UUID: %s", fduuidUtf8); + data->pFuncs->pfnUtf8Free(fduuidUtf8); +#endif } - data->pFuncs->pfnComUnallocMem(fduuid); } floppyImage->vtbl->imedium.nsisupports.Release((nsISupports *)floppyImage); } +#if VBOX_API_VERSION == 2002 + data->pFuncs->pfnComUnallocMem(fduuid); +#else + data->pFuncs->pfnUtf16Free(fduuidUtf16); +#endif data->pFuncs->pfnUtf16Free(fdfileUtf16); } floppyDrive->vtbl->nsisupports.Release((nsISupports *)floppyDrive); @@ -2990,7 +3495,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { machine->vtbl->GetNetworkAdapter(machine, i, &adapter); if (adapter) { - PRUnichar *MACAddress = NULL; + PRUnichar *MACAddress = NULL; adapter->vtbl->SetEnabled(adapter, 1); @@ -3039,7 +3544,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { adapter->vtbl->AttachToHostOnlyInterface(adapter); if (def->nets[i]->data.network.name) { - g_pVBoxFuncs->pfnUtf8ToUtf16(def->nets[i]->data.network.name, &hostInterface); + data->pFuncs->pfnUtf8ToUtf16(def->nets[i]->data.network.name, &hostInterface); adapter->vtbl->SetHostInterface(adapter, hostInterface); data->pFuncs->pfnUtf16Free(hostInterface); } @@ -3450,7 +3955,11 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { */ rc = machine->vtbl->SaveSettings(machine); data->vboxSession->vtbl->Close(data->vboxSession); +#if VBOX_API_VERSION == 2002 data->pFuncs->pfnComUnallocMem(mchiid); +#else + data->pFuncs->pfnUtf16Free(mchiidUtf16); +#endif dom = virGetDomain(conn, def->name, def->uuid); if(machine) { @@ -3459,7 +3968,11 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { } } +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif virDomainDefFree(def); return dom; @@ -3467,7 +3980,11 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { cleanup: if(machine) machine->vtbl->nsisupports.Release((nsISupports *)machine); +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif virDomainDefFree(def); return NULL; } @@ -3476,16 +3993,28 @@ static int vboxDomainUndefine(virDomainPtr dom) { nsresult rc; vboxGlobalData *data = dom->conn->privateData; IMachine *machine = NULL; - nsID *iid = NULL; +#if VBOX_API_VERSION == 2002 + nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif int ret = -1; +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(dom->conn); goto cleanup; } +#endif if(data->vboxObj) { +#if VBOX_API_VERSION == 2002 nsIDFromChar(iid, dom->uuid); +#else + virUUIDFormat(dom->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); +#endif /* Block for checking if HDD's are attched to VM. * considering just IDE bus for now. Also skipped @@ -3500,7 +4029,11 @@ static int vboxDomainUndefine(virDomainPtr dom) { VIR_FREE(hddcname); /* Open a Session for the machine */ +#if VBOX_API_VERSION == 2002 rc = data->vboxObj->vtbl->OpenSession(data->vboxObj, data->vboxSession, iid); +#else + rc = data->vboxObj->vtbl->OpenSession(data->vboxObj, data->vboxSession, iidUtf16); +#endif if (NS_SUCCEEDED(rc)) { rc = data->vboxSession->vtbl->GetMachine(data->vboxSession, &machine); if (NS_SUCCEEDED(rc) && machine) { @@ -3517,13 +4050,19 @@ static int vboxDomainUndefine(virDomainPtr dom) { data->pFuncs->pfnUtf16Free(hddcnameUtf16); } +#if VBOX_API_VERSION == 2002 rc = data->vboxObj->vtbl->UnregisterMachine(data->vboxObj, iid, &machine); DEBUG("UUID of machine being undefined:{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", - (unsigned)iid->m0, (unsigned)iid->m1, (unsigned)iid->m2, - (unsigned)iid->m3[0], (unsigned)iid->m3[1], - (unsigned)iid->m3[2], (unsigned)iid->m3[3], - (unsigned)iid->m3[4], (unsigned)iid->m3[5], - (unsigned)iid->m3[6], (unsigned)iid->m3[7]); + (unsigned)iid->m0, (unsigned)iid->m1, + (unsigned)iid->m2, (unsigned)iid->m3[0], + (unsigned)iid->m3[1], (unsigned)iid->m3[2], + (unsigned)iid->m3[3], (unsigned)iid->m3[4], + (unsigned)iid->m3[5], (unsigned)iid->m3[6], + (unsigned)iid->m3[7]); +#else + rc = data->vboxObj->vtbl->UnregisterMachine(data->vboxObj, iidUtf16, &machine); + DEBUG("UUID of machine being undefined: %s", iidUtf8); +#endif if (NS_SUCCEEDED(rc) && machine){ machine->vtbl->DeleteSettings(machine); @@ -3531,11 +4070,15 @@ static int vboxDomainUndefine(virDomainPtr dom) { } } +#if VBOX_API_VERSION == 2002 cleanup: + VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif if (machine) machine->vtbl->nsisupports.Release((nsISupports *)machine); - VIR_FREE(iid); return ret; } @@ -3543,7 +4086,12 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) { nsresult rc; vboxGlobalData *data = dom->conn->privateData; IMachine *machine = NULL; - nsID *iid = NULL; +#if VBOX_API_VERSION == 2002 + nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif PRUint32 state = MachineState_Null; virDomainDefPtr def = NULL; virDomainDeviceDefPtr dev = NULL; @@ -3563,6 +4111,7 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) { goto cleanup; } +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(dom->conn); goto cleanup; @@ -3576,8 +4125,14 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) { (unsigned)iid->m3[3], (unsigned)iid->m3[4], (unsigned)iid->m3[5], (unsigned)iid->m3[6], (unsigned)iid->m3[7]); +#else + virUUIDFormat(dom->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); + DEBUG("machine uuid: %s", iidUtf8); +#endif if(data->vboxObj) { +#if VBOX_API_VERSION == 2002 rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iid, &machine); if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN, @@ -3591,16 +4146,34 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) { (unsigned)iid->m3[7]); goto cleanup; } +#else + rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iidUtf16, &machine); + if (NS_FAILED(rc)) { + vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN, + "no domain with matching uuid: %s", + iidUtf8); + goto cleanup; + } +#endif if (machine) { machine->vtbl->GetState(machine, &state); +#if VBOX_API_VERSION == 2002 if ((state == MachineState_Running) || (state == MachineState_Paused)) { rc = data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iid); } else { rc = data->vboxObj->vtbl->OpenSession(data->vboxObj, data->vboxSession, iid); } +#else + if ((state == MachineState_Running) || + (state == MachineState_Paused)) { + rc = data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iidUtf16); + } else { + rc = data->vboxObj->vtbl->OpenSession(data->vboxObj, data->vboxSession, iidUtf16); + } +#endif if (NS_SUCCEEDED(rc)) { rc = data->vboxSession->vtbl->GetMachine(data->vboxSession, &machine); if (NS_SUCCEEDED(rc) && machine) { @@ -3614,21 +4187,35 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) { */ machine->vtbl->GetDVDDrive(machine, &dvdDrive); if (dvdDrive) { - IDVDImage *dvdImage = NULL; - PRUnichar *dvdfileUtf16 = NULL; - nsID *dvduuid = NULL; + IDVDImage *dvdImage = NULL; + PRUnichar *dvdfileUtf16 = NULL; +#if VBOX_API_VERSION == 2002 + nsID *dvduuid = NULL; nsID dvdemptyuuid; memset(&dvdemptyuuid, 0, sizeof(dvdemptyuuid)); +#else + char *dvduuidUtf8 = NULL; + PRUnichar *dvduuidUtf16 = NULL; + PRUnichar *dvdemptyuuidUtf16 = NULL; +#endif data->pFuncs->pfnUtf8ToUtf16(dev->data.disk->src, &dvdfileUtf16); data->vboxObj->vtbl->FindDVDImage(data->vboxObj, dvdfileUtf16, &dvdImage); if (!dvdImage) { +#if VBOX_API_VERSION == 2002 data->vboxObj->vtbl->OpenDVDImage(data->vboxObj, dvdfileUtf16, &dvdemptyuuid, &dvdImage); +#else + data->vboxObj->vtbl->OpenDVDImage(data->vboxObj, dvdfileUtf16, dvdemptyuuidUtf16, &dvdImage); +#endif } if (dvdImage) { +#if VBOX_API_VERSION == 2002 rc = dvdImage->vtbl->imedium.GetId((IMedium *)dvdImage, &dvduuid); +#else + rc = dvdImage->vtbl->imedium.GetId((IMedium *)dvdImage, &dvduuidUtf16); +#endif if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INTERNAL_ERROR,"%s:%s, rc=%08x", "can't get the uuid of the file to be attached to cdrom", @@ -3636,13 +4223,18 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) { } else { /* unmount the previous mounted image */ dvdDrive->vtbl->Unmount(dvdDrive); +#if VBOX_API_VERSION == 2002 rc = dvdDrive->vtbl->MountImage(dvdDrive, dvduuid); +#else + rc = dvdDrive->vtbl->MountImage(dvdDrive, dvduuidUtf16); +#endif if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INTERNAL_ERROR,"%s:%s, rc=%08x", "could not attach the file to cdrom", dev->data.disk->src, (unsigned)rc); } else { ret = 0; +#if VBOX_API_VERSION == 2002 DEBUG("CD/DVD Image UUID:" "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", (unsigned)dvduuid->m0, (unsigned)dvduuid->m1, @@ -3651,12 +4243,21 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) { (unsigned)dvduuid->m3[3], (unsigned)dvduuid->m3[4], (unsigned)dvduuid->m3[5], (unsigned)dvduuid->m3[6], (unsigned)dvduuid->m3[7]); +#else + data->pFuncs->pfnUtf16ToUtf8(dvduuidUtf16, &dvduuidUtf8); + DEBUG("CD/DVDImage UUID: %s", dvduuidUtf8); + data->pFuncs->pfnUtf8Free(dvduuidUtf8); +#endif } - data->pFuncs->pfnComUnallocMem(dvduuid); } dvdImage->vtbl->imedium.nsisupports.Release((nsISupports *)dvdImage); } +#if VBOX_API_VERSION == 2002 + data->pFuncs->pfnComUnallocMem(dvduuid); +#else + data->pFuncs->pfnUtf16Free(dvduuidUtf16); +#endif data->pFuncs->pfnUtf16Free(dvdfileUtf16); dvdDrive->vtbl->nsisupports.Release((nsISupports *)dvdDrive); } @@ -3669,36 +4270,57 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) { if (floppyDrive) { rc = floppyDrive->vtbl->SetEnabled(floppyDrive, 1); if (NS_SUCCEEDED(rc)) { - IFloppyImage *floppyImage = NULL; - PRUnichar *fdfileUtf16 = NULL; - nsID *fduuid = NULL; + IFloppyImage *floppyImage = NULL; + PRUnichar *fdfileUtf16 = NULL; +#if VBOX_API_VERSION == 2002 + nsID *fduuid = NULL; nsID fdemptyuuid; memset(&fdemptyuuid, 0, sizeof(fdemptyuuid)); - +#else + char *fduuidUtf8 = NULL; + PRUnichar *fduuidUtf16 = NULL; + PRUnichar *fdemptyuuidUtf16 = NULL; +#endif data->pFuncs->pfnUtf8ToUtf16(dev->data.disk->src, &fdfileUtf16); - rc = data->vboxObj->vtbl->FindFloppyImage(data->vboxObj, fdfileUtf16, + rc = data->vboxObj->vtbl->FindFloppyImage(data->vboxObj, + fdfileUtf16, &floppyImage); if (!floppyImage) { - data->vboxObj->vtbl->OpenFloppyImage(data->vboxObj, fdfileUtf16, - &fdemptyuuid, &floppyImage); + data->vboxObj->vtbl->OpenFloppyImage(data->vboxObj, + fdfileUtf16, +#if VBOX_API_VERSION == 2002 + &fdemptyuuid, +#else + fdemptyuuidUtf16, +#endif + &floppyImage); } if (floppyImage) { +#if VBOX_API_VERSION == 2002 rc = floppyImage->vtbl->imedium.GetId((IMedium *)floppyImage, &fduuid); +#else + rc = floppyImage->vtbl->imedium.GetId((IMedium *)floppyImage, &fduuidUtf16); +#endif if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INTERNAL_ERROR,"%s:%s, rc=%08x", "can't get the uuid of the file to be attached to floppy drive", dev->data.disk->src, (unsigned)rc); } else { +#if VBOX_API_VERSION == 2002 rc = floppyDrive->vtbl->MountImage(floppyDrive, fduuid); +#else + rc = floppyDrive->vtbl->MountImage(floppyDrive, fduuidUtf16); +#endif if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INTERNAL_ERROR,"%s:%s, rc=%08x", "could not attach the file to floppy drive", dev->data.disk->src, (unsigned)rc); } else { ret = 0; +#if VBOX_API_VERSION == 2002 DEBUG("attached floppy, UUID:" "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", (unsigned)fduuid->m0, (unsigned)fduuid->m1, @@ -3707,11 +4329,20 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) { (unsigned)fduuid->m3[2], (unsigned)fduuid->m3[3], (unsigned)fduuid->m3[4], (unsigned)fduuid->m3[5], (unsigned)fduuid->m3[6], (unsigned)fduuid->m3[7]); +#else + data->pFuncs->pfnUtf16ToUtf8(fduuidUtf16, &fduuidUtf8); + DEBUG("attached floppy, UUID: %s", fduuidUtf8); + data->pFuncs->pfnUtf8Free(fduuidUtf8); +#endif } - data->pFuncs->pfnComUnallocMem(fduuid); } floppyImage->vtbl->imedium.nsisupports.Release((nsISupports *)floppyImage); } +#if VBOX_API_VERSION == 2002 + data->pFuncs->pfnComUnallocMem(fduuid); +#else + data->pFuncs->pfnUtf16Free(fduuidUtf16); +#endif data->pFuncs->pfnUtf16Free(fdfileUtf16); } floppyDrive->vtbl->nsisupports.Release((nsISupports *)floppyDrive); @@ -3735,7 +4366,11 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) { } cleanup: +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif virDomainDefFree(def); virDomainDeviceDefFree(dev); return ret; @@ -3745,7 +4380,12 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml) { nsresult rc; vboxGlobalData *data = dom->conn->privateData; IMachine *machine = NULL; - nsID *iid = NULL; +#if VBOX_API_VERSION == 2002 + nsID *iid = NULL; +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif PRUint32 state = MachineState_Null; virDomainDefPtr def = NULL; virDomainDeviceDefPtr dev = NULL; @@ -3765,6 +4405,7 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml) { goto cleanup; } +#if VBOX_API_VERSION == 2002 if (VIR_ALLOC(iid) < 0) { virReportOOMError(dom->conn); goto cleanup; @@ -3778,8 +4419,14 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml) { (unsigned)iid->m3[3], (unsigned)iid->m3[4], (unsigned)iid->m3[5], (unsigned)iid->m3[6], (unsigned)iid->m3[7]); +#else + virUUIDFormat(dom->uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); + DEBUG("machine uuid: %s", iidUtf8); +#endif if(data->vboxObj) { +#if VBOX_API_VERSION == 2002 rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iid, &machine); if (NS_FAILED(rc)) { vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN, @@ -3793,16 +4440,34 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml) { (unsigned)iid->m3[7]); goto cleanup; } +#else + rc = data->vboxObj->vtbl->GetMachine(data->vboxObj, iidUtf16, &machine); + if (NS_FAILED(rc)) { + vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN, + "no domain with matching uuid: %s", + iidUtf8); + goto cleanup; + } +#endif if (machine) { machine->vtbl->GetState(machine, &state); +#if VBOX_API_VERSION == 2002 if ((state == MachineState_Running) || (state == MachineState_Paused)) { rc = data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iid); } else { rc = data->vboxObj->vtbl->OpenSession(data->vboxObj, data->vboxSession, iid); } +#else + if ((state == MachineState_Running) || + (state == MachineState_Paused)) { + rc = data->vboxObj->vtbl->OpenExistingSession(data->vboxObj, data->vboxSession, iidUtf16); + } else { + rc = data->vboxObj->vtbl->OpenSession(data->vboxObj, data->vboxSession, iidUtf16); + } +#endif if (NS_SUCCEEDED(rc)) { rc = data->vboxSession->vtbl->GetMachine(data->vboxSession, &machine); if (NS_SUCCEEDED(rc) && machine) { @@ -3872,12 +4537,461 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml) { } cleanup: +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif virDomainDefFree(def); virDomainDeviceDefFree(dev); return ret; } +#if VBOX_API_VERSION == 2002 + /* No Callback support for VirtualBox 2.2.* series */ +#else /* !(VBOX_API_VERSION == 2002) */ + +/* Functions needed for Callbacks */ +static nsresult vboxCallbackOnMachineStateChange (IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUint32 state) { + virDomainPtr dom = NULL; + int event = 0; + int detail = 0; + + g_pVBoxGlobalData->domainEventDispatching = 1; + vboxDriverLock(g_pVBoxGlobalData); + + DEBUG("IVirtualBoxCallback: %p, State: %d", pThis, state); + DEBUGPRUnichar(machineId); + + if (machineId) { + char *machineIdUtf8 = NULL; + unsigned char uuid[VIR_UUID_BUFLEN]; + + g_pVBoxGlobalData->pFuncs->pfnUtf16ToUtf8(machineId, &machineIdUtf8); + virUUIDParse(machineIdUtf8, uuid); + + dom = vboxDomainLookupByUUID(g_pVBoxGlobalData->conn, uuid); + if (dom) { + int i = 0; + + if (state == MachineState_Starting) { + event = VIR_DOMAIN_EVENT_STARTED; + detail = VIR_DOMAIN_EVENT_STARTED_BOOTED; + } else if (state == MachineState_Restoring) { + event = VIR_DOMAIN_EVENT_STARTED; + detail = VIR_DOMAIN_EVENT_STARTED_RESTORED; + } else if (state == MachineState_Paused) { + event = VIR_DOMAIN_EVENT_SUSPENDED; + detail = VIR_DOMAIN_EVENT_SUSPENDED_PAUSED; + } else if (state == MachineState_Running) { + event = VIR_DOMAIN_EVENT_RESUMED; + detail = VIR_DOMAIN_EVENT_RESUMED_UNPAUSED; + } else if (state == MachineState_PoweredOff) { + event = VIR_DOMAIN_EVENT_STOPPED; + detail = VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN; + } else if (state == MachineState_Stopping) { + event = VIR_DOMAIN_EVENT_STOPPED; + detail = VIR_DOMAIN_EVENT_STOPPED_DESTROYED; + } else if (state == MachineState_Aborted) { + event = VIR_DOMAIN_EVENT_STOPPED; + detail = VIR_DOMAIN_EVENT_STOPPED_CRASHED; + } else if (state == MachineState_Saving) { + event = VIR_DOMAIN_EVENT_STOPPED; + detail = VIR_DOMAIN_EVENT_STOPPED_SAVED; + } else { + event = VIR_DOMAIN_EVENT_STOPPED; + detail = VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN; + } + + for (i = 0; i < g_pVBoxGlobalData->domainEventCallbacks->count; i++) { + if (g_pVBoxGlobalData->domainEventCallbacks->callbacks[i]->cb) { + g_pVBoxGlobalData->domainEventCallbacks->callbacks[i]->cb(g_pVBoxGlobalData->conn, + dom, + event, + detail, + NULL); + } + } + } + } + + virDomainEventCallbackListPurgeMarked(g_pVBoxGlobalData->domainEventCallbacks); + + vboxDriverUnlock(g_pVBoxGlobalData); + g_pVBoxGlobalData->domainEventDispatching = 1; + + return NS_OK; +} + +static nsresult vboxCallbackOnMachineDataChange (IVirtualBoxCallback *pThis, + PRUnichar * machineId) { + DEBUG("IVirtualBoxCallback: %p", pThis); + DEBUGPRUnichar(machineId); + + return NS_OK; +} + +static nsresult vboxCallbackOnExtraDataCanChange (IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * key, + PRUnichar * value, + PRUnichar * * error, + PRBool * allowChange) { + DEBUG("IVirtualBoxCallback: %p, allowChange: %s", pThis, *allowChange ? "true" : "false"); + DEBUGPRUnichar(machineId); + DEBUGPRUnichar(key); + DEBUGPRUnichar(value); + (void)error; /* so that the compiler doesn't complain about unsed variables */ + + return NS_OK; +} + +static nsresult vboxCallbackOnExtraDataChange (IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * key, + PRUnichar * value) { + DEBUG("IVirtualBoxCallback: %p", pThis); + DEBUGPRUnichar(machineId); + DEBUGPRUnichar(key); + DEBUGPRUnichar(value); + + return NS_OK; +} + +static nsresult vboxCallbackOnMediaRegistered (IVirtualBoxCallback *pThis, + PRUnichar * mediaId, + PRUint32 mediaType, + PRBool registered) { + DEBUG("IVirtualBoxCallback: %p, registered: %s", pThis, registered ? "true" : "false"); + DEBUG("mediaType: %d", mediaType); + DEBUGPRUnichar(mediaId); + + return NS_OK; +} + +static nsresult vboxCallbackOnMachineRegistered (IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRBool registered) { + virDomainPtr dom = NULL; + int event = 0; + int detail = 0; + + g_pVBoxGlobalData->domainEventDispatching = 1; + vboxDriverLock(g_pVBoxGlobalData); + + DEBUG("IVirtualBoxCallback: %p, registered: %s", pThis, registered ? "true" : "false"); + DEBUGPRUnichar(machineId); + + if (machineId) { + char *machineIdUtf8 = NULL; + unsigned char uuid[VIR_UUID_BUFLEN]; + + g_pVBoxGlobalData->pFuncs->pfnUtf16ToUtf8(machineId, &machineIdUtf8); + virUUIDParse(machineIdUtf8, uuid); + + dom = vboxDomainLookupByUUID(g_pVBoxGlobalData->conn, uuid); + if (dom) { + int i = 0; + + /* CURRENT LIMITATION: we never get the VIR_DOMAIN_EVENT_UNDEFINED + * event becuase the when the machine is de-registered the call + * to vboxDomainLookupByUUID fails and thus we don't get any + * dom pointer which is necessary (null dom pointer doesn't work) + * to show the VIR_DOMAIN_EVENT_UNDEFINED event + */ + if (registered) { + event = VIR_DOMAIN_EVENT_DEFINED; + detail = VIR_DOMAIN_EVENT_DEFINED_ADDED; + } else { + event = VIR_DOMAIN_EVENT_UNDEFINED; + detail = VIR_DOMAIN_EVENT_UNDEFINED_REMOVED; + } + + for (i = 0; i < g_pVBoxGlobalData->domainEventCallbacks->count; i++) { + if (g_pVBoxGlobalData->domainEventCallbacks->callbacks[i]->cb) { + g_pVBoxGlobalData->domainEventCallbacks->callbacks[i]->cb(g_pVBoxGlobalData->conn, + dom, + event, + detail, + NULL); + } + } + } + } + + virDomainEventCallbackListPurgeMarked(g_pVBoxGlobalData->domainEventCallbacks); + + vboxDriverUnlock(g_pVBoxGlobalData); + g_pVBoxGlobalData->domainEventDispatching = 1; + + return NS_OK; +} + +static nsresult vboxCallbackOnSessionStateChange (IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUint32 state) { + DEBUG("IVirtualBoxCallback: %p, state: %d", pThis, state); + DEBUGPRUnichar(machineId); + + return NS_OK; +} + +static nsresult vboxCallbackOnSnapshotTaken (IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * snapshotId) { + DEBUG("IVirtualBoxCallback: %p", pThis); + DEBUGPRUnichar(machineId); + DEBUGPRUnichar(snapshotId); + + return NS_OK; +} + +static nsresult vboxCallbackOnSnapshotDiscarded (IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * snapshotId) { + DEBUG("IVirtualBoxCallback: %p", pThis); + DEBUGPRUnichar(machineId); + DEBUGPRUnichar(snapshotId); + + return NS_OK; +} + +static nsresult vboxCallbackOnSnapshotChange (IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * snapshotId) { + DEBUG("IVirtualBoxCallback: %p", pThis); + DEBUGPRUnichar(machineId); + DEBUGPRUnichar(snapshotId); + + return NS_OK; +} + +static nsresult vboxCallbackOnGuestPropertyChange (IVirtualBoxCallback *pThis, + PRUnichar * machineId, + PRUnichar * name, + PRUnichar * value, + PRUnichar * flags) { + DEBUG("IVirtualBoxCallback: %p", pThis); + DEBUGPRUnichar(machineId); + DEBUGPRUnichar(name); + DEBUGPRUnichar(value); + DEBUGPRUnichar(flags); + + return NS_OK; +} + +static nsresult vboxCallbackAddRef(nsISupports *pThis) { + nsresult c; + + c = ++g_pVBoxGlobalData->vboxCallBackRefCount; + + DEBUG("pThis: %p, vboxCallback AddRef: %d", pThis, c); + + return c; +} + +static nsresult vboxCallbackRelease(nsISupports *pThis) { + nsresult c; + + c = --g_pVBoxGlobalData->vboxCallBackRefCount; + if (c == 0) { + /* delete object */ + VIR_FREE(pThis->vtbl); + VIR_FREE(pThis); + } + + DEBUG("pThis: %p, vboxCallback Release: %d", pThis, c); + + return c; +} + +static nsresult vboxCallbackQueryInterface(nsISupports *pThis, const nsID *iid, void **resultp) { + IVirtualBoxCallback *that = (IVirtualBoxCallback *)pThis; + static const nsID ivirtualboxCallbackUUID = IVIRTUALBOXCALLBACK_IID; + static const nsID isupportIID = NS_ISUPPORTS_IID; + + /* Match UUID for IVirtualBoxCallback class */ + if ( memcmp(iid, &ivirtualboxCallbackUUID, sizeof(nsID)) == 0 + || memcmp(iid, &isupportIID, sizeof(nsID)) == 0) { + g_pVBoxGlobalData->vboxCallBackRefCount++; + *resultp = that; + + DEBUG("pThis: %p, vboxCallback QueryInterface: %d", pThis, g_pVBoxGlobalData->vboxCallBackRefCount); + + return NS_OK; + } + + + DEBUG("pThis: %p, vboxCallback QueryInterface didn't find a matching interface", pThis); + DEBUGUUID(iid); + DEBUGUUID(&ivirtualboxCallbackUUID); + return NS_NOINTERFACE; +} + + +static IVirtualBoxCallback *vboxAllocCallbackObj (virConnectPtr conn) { + IVirtualBoxCallback *vboxCallback = NULL; + + /* Allocate, Initialize and return a validi + * IVirtualBoxCallback object here + */ + if ((VIR_ALLOC(vboxCallback) < 0) || (VIR_ALLOC(vboxCallback->vtbl) < 0)) { + virReportOOMError(conn); + return NULL; + } + + { + vboxCallback->vtbl->nsisupports.AddRef = &vboxCallbackAddRef; + vboxCallback->vtbl->nsisupports.Release = &vboxCallbackRelease; + vboxCallback->vtbl->nsisupports.QueryInterface = &vboxCallbackQueryInterface; + vboxCallback->vtbl->OnMachineStateChange = &vboxCallbackOnMachineStateChange; + vboxCallback->vtbl->OnMachineDataChange = &vboxCallbackOnMachineDataChange; + vboxCallback->vtbl->OnExtraDataCanChange = &vboxCallbackOnExtraDataCanChange; + vboxCallback->vtbl->OnExtraDataChange = &vboxCallbackOnExtraDataChange; + vboxCallback->vtbl->OnMediaRegistered = &vboxCallbackOnMediaRegistered; + vboxCallback->vtbl->OnMachineRegistered = &vboxCallbackOnMachineRegistered; + vboxCallback->vtbl->OnSessionStateChange = &vboxCallbackOnSessionStateChange; + vboxCallback->vtbl->OnSnapshotTaken = &vboxCallbackOnSnapshotTaken; + vboxCallback->vtbl->OnSnapshotDiscarded = &vboxCallbackOnSnapshotDiscarded; + vboxCallback->vtbl->OnSnapshotChange = &vboxCallbackOnSnapshotChange; + vboxCallback->vtbl->OnGuestPropertyChange = &vboxCallbackOnGuestPropertyChange; + g_pVBoxGlobalData->vboxCallBackRefCount = 1; + + } + + return vboxCallback; +} + +static void vboxReadCallback(int watch ATTRIBUTE_UNUSED, + int fd, + int events ATTRIBUTE_UNUSED, + void *opaque ATTRIBUTE_UNUSED) { + if (fd >= 0) { + g_pVBoxGlobalData->vboxQueue->vtbl->ProcessPendingEvents(g_pVBoxGlobalData->vboxQueue); + } else { + nsresult rc; + PLEvent *pEvent = NULL; + + rc = g_pVBoxGlobalData->vboxQueue->vtbl->WaitForEvent(g_pVBoxGlobalData->vboxQueue, &pEvent); + if (NS_SUCCEEDED(rc)) + g_pVBoxGlobalData->vboxQueue->vtbl->HandleEvent(g_pVBoxGlobalData->vboxQueue, pEvent); + } +} + +static int vboxDomainEventRegister (virConnectPtr conn, + virConnectDomainEventCallback callback, + void *opaque, + virFreeCallback freecb) { + nsresult rc; + vboxGlobalData *data = conn->privateData; + int vboxRet = -1; + int eventRet = -1; + int ret = -1; + + /* Locking has to be there as callbacks are not + * really fully thread safe + */ + vboxDriverLock(data); + + if(data->vboxObj) { + if (data->vboxCallback == NULL) { + data->vboxCallback = vboxAllocCallbackObj(conn); + if (data->vboxCallback != NULL) { + rc = data->vboxObj->vtbl->RegisterCallback(data->vboxObj, data->vboxCallback); + if (NS_SUCCEEDED(rc)) { + vboxRet = 0; + } + } + } else { + vboxRet = 0; + } + + /* Get the vbox file handle and add a event handle to it + * so that the events can be passed down to the user + */ + if (vboxRet == 0) { + PRInt32 vboxFileHandle; + vboxFileHandle = g_pVBoxGlobalData->vboxQueue->vtbl->GetEventQueueSelectFD(g_pVBoxGlobalData->vboxQueue); + + eventRet = virEventAddHandle(vboxFileHandle, VIR_EVENT_HANDLE_READABLE, vboxReadCallback, NULL, NULL); + + if (eventRet >= 0) { + /* Once a callback is registered with virtualbox, use a list + * to store the callbacks registered with libvirt so that + * later you can iterate over them + */ + + ret = virDomainEventCallbackListAdd(conn, data->domainEventCallbacks, + callback, opaque, freecb); + DEBUG("virDomainEventCallbackListAdd (ret = %d) ( conn: %p, " + "data->domainEventCallbacks: %p, callback: %p, opaque: %p, " + "freecb: %p )", ret, conn, data->domainEventCallbacks, callback, + opaque, freecb); + } + } + } + + vboxDriverUnlock(data); + + if (ret >= 0) { + return ret; + } else { + if (data->vboxObj && data->vboxCallback) { + data->vboxObj->vtbl->UnregisterCallback(data->vboxObj, data->vboxCallback); + } + return -1; + } +} + +static int vboxDomainEventDeregister (virConnectPtr conn, + virConnectDomainEventCallback callback) { + vboxGlobalData *data = conn->privateData; + int ret = -1; + + /* Locking has to be there as callbacks are not + * really fully thread safe + */ + vboxDriverLock(data); + + if (data->domainEventDispatching) + ret = virDomainEventCallbackListMarkDelete(conn, data->domainEventCallbacks, + callback); + else + ret = virDomainEventCallbackListRemove(conn, data->domainEventCallbacks, + callback); + + virEventRemoveHandle(0); + + if(data->vboxObj && data->vboxCallback) { + /* check count here of how many times register was called + * and only on the last de-register do the un-register call + */ + if (data->domainEventCallbacks && (data->domainEventCallbacks->count <= 0)) { + int i = 0; + + data->vboxObj->vtbl->UnregisterCallback(data->vboxObj, data->vboxCallback); + data->vboxCallback->vtbl->nsisupports.Release((nsISupports *)data->vboxCallback); + + /* iterate and free all the opaque objects using the + * freecb callback provided in vboxDomainEventRegister() + */ + for (i = 0; i < data->domainEventCallbacks->count; i++) { + if (data->domainEventCallbacks->callbacks[i]->freecb) { + data->domainEventCallbacks->callbacks[i]->freecb(data->domainEventCallbacks->callbacks[i]->opaque); + } + } + } + } + + vboxDriverUnlock(data); + + return ret; +} + +#endif /* !(VBOX_API_VERSION == 2002) */ + /** * The Network Functions here on */ @@ -4117,13 +5231,25 @@ static int vboxListDefinedNetworks(virConnectPtr conn, char **const names, int n static virNetworkPtr vboxNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid) { vboxGlobalData *data = conn->privateData; virNetworkPtr ret = NULL; +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; if (VIR_ALLOC(iid) < 0) { virReportOOMError(conn); goto cleanup; } + nsIDFromChar(iid, uuid); +#else + PRUnichar *iidUtf16 = NULL; + char iidUtf8[VIR_UUID_STRING_BUFLEN]; + + virUUIDFormat(uuid, iidUtf8); + data->pFuncs->pfnUtf8ToUtf16(iidUtf8, &iidUtf16); +#endif + /* TODO: "internal" networks are just strings and + * thus can't do much with them + */ if (data->vboxObj) { IHost *host = NULL; @@ -4131,8 +5257,11 @@ static virNetworkPtr vboxNetworkLookupByUUID(virConnectPtr conn, const unsigned if (host) { IHostNetworkInterface *networkInterface = NULL; - nsIDFromChar(iid, uuid); +#if VBOX_API_VERSION == 2002 host->vtbl->FindHostNetworkInterfaceById(host, iid, &networkInterface); +#else + host->vtbl->FindHostNetworkInterfaceById(host, iidUtf16, &networkInterface); +#endif if (networkInterface) { PRUint32 interfaceType = 0; @@ -4148,6 +5277,7 @@ static virNetworkPtr vboxNetworkLookupByUUID(virConnectPtr conn, const unsigned ret = virGetNetwork(conn, nameUtf8, uuid); DEBUG("Network Name: %s", nameUtf8); +#if VBOX_API_VERSION == 2002 DEBUG("Network UUID: " "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", (unsigned)iid->m0, (unsigned)iid->m1, @@ -4156,6 +5286,9 @@ static virNetworkPtr vboxNetworkLookupByUUID(virConnectPtr conn, const unsigned (unsigned)iid->m3[3], (unsigned)iid->m3[4], (unsigned)iid->m3[5], (unsigned)iid->m3[6], (unsigned)iid->m3[7]); +#else + DEBUG("Network UUID: %s", iidUtf8); +#endif data->pFuncs->pfnUtf8Free(nameUtf8); data->pFuncs->pfnUtf16Free(nameUtf16); @@ -4168,8 +5301,12 @@ static virNetworkPtr vboxNetworkLookupByUUID(virConnectPtr conn, const unsigned } } +#if VBOX_API_VERSION == 2002 cleanup: VIR_FREE(iid); +#else + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif return ret; } @@ -4196,12 +5333,11 @@ static virNetworkPtr vboxNetworkLookupByName(virConnectPtr conn, const char *nam if (interfaceType == HostNetworkInterfaceType_HostOnly) { unsigned char uuid[VIR_UUID_BUFLEN]; +#if VBOX_API_VERSION == 2002 nsID *iid = NULL; networkInterface->vtbl->GetId(networkInterface, &iid); - nsIDtoChar(uuid, iid); - ret = virGetNetwork(conn, name, uuid); DEBUG("Network Name: %s", name); @@ -4215,6 +5351,21 @@ static virNetworkPtr vboxNetworkLookupByName(virConnectPtr conn, const char *nam (unsigned)iid->m3[7]); data->pFuncs->pfnComUnallocMem(iid); +#else + PRUnichar *iidUtf16 = NULL; + char *iidUtf8 = NULL;; + + networkInterface->vtbl->GetId(networkInterface, &iidUtf16); + data->pFuncs->pfnUtf16ToUtf8(iidUtf16, &iidUtf8); + virUUIDParse(iidUtf8, uuid); + ret = virGetNetwork(conn, name, uuid); + + DEBUG("Network Name: %s", name); + DEBUG("Network UUID: %s", iidUtf8); + + data->pFuncs->pfnUtf8Free(iidUtf8); + data->pFuncs->pfnUtf16Free(iidUtf16); +#endif } networkInterface->vtbl->nsisupports.Release((nsISupports *) networkInterface); @@ -4232,18 +5383,23 @@ static virNetworkPtr vboxNetworkCreateXML(virConnectPtr conn, const char *xml) { vboxGlobalData *data = conn->privateData; virNetworkDefPtr def = NULL; virNetworkPtr ret = NULL; - nsID *iid = NULL; +#if VBOX_API_VERSION == 2002 + nsID *iid = NULL; +#else + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif char *networkNameUtf8 = NULL; if ((def = virNetworkDefParseString(conn, xml)) == NULL) goto cleanup; - if (VIR_ALLOC(iid) < 0) { + if (virAsprintf(&networkNameUtf8, "HostInterfaceNetworking-%s", def->name) < 0) { virReportOOMError(conn); goto cleanup; } - if (virAsprintf(&networkNameUtf8, "HostInterfaceNetworking-%s", def->name) < 0) { +#if VBOX_API_VERSION == 2002 + if (VIR_ALLOC(iid) < 0) { virReportOOMError(conn); goto cleanup; } @@ -4259,6 +5415,10 @@ static virNetworkPtr vboxNetworkCreateXML(virConnectPtr conn, const char *xml) { (unsigned)iid->m3[3], (unsigned)iid->m3[4], (unsigned)iid->m3[5], (unsigned)iid->m3[6], (unsigned)iid->m3[7]); +#else + virUUIDFormat(def->uuid, iidUtf8); + DEBUG("Network UUID: %s", iidUtf8); +#endif if ((data->vboxObj) && (def->forwardType == VIR_NETWORK_FORWARD_NONE)) { /* VirtualBox version 2.2.* has only one "hostonly" @@ -4283,14 +5443,22 @@ static virNetworkPtr vboxNetworkCreateXML(virConnectPtr conn, const char *xml) { if (interfaceType == HostNetworkInterfaceType_HostOnly) { unsigned char uuid[VIR_UUID_BUFLEN]; - nsID *vboxnet0IID = NULL; PRUnichar *networkNameUtf16 = NULL; - - data->pFuncs->pfnUtf8ToUtf16(networkNameUtf8 , &networkNameUtf16); +#if VBOX_API_VERSION == 2002 + nsID *vboxnet0IID = NULL; networkInterface->vtbl->GetId(networkInterface, &vboxnet0IID); - nsIDtoChar(uuid, vboxnet0IID); +#else + PRUnichar *vboxnet0IIDUtf16 = NULL; + char *vboxnet0IIDUtf8 = NULL; + + networkInterface->vtbl->GetId(networkInterface, &vboxnet0IIDUtf16); + data->pFuncs->pfnUtf16ToUtf8(vboxnet0IIDUtf16, &vboxnet0IIDUtf8); + virUUIDParse(vboxnet0IIDUtf8, uuid); +#endif + data->pFuncs->pfnUtf8ToUtf16(networkNameUtf8 , &networkNameUtf16); + /* Currently support only one dhcp server per network * with contigious address space from start to end @@ -4348,6 +5516,7 @@ static virNetworkPtr vboxNetworkCreateXML(virConnectPtr conn, const char *xml) { ret = virGetNetwork(conn, def->name, uuid); +#if VBOX_API_VERSION == 2002 DEBUG("Real Network UUID: " "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", (unsigned)vboxnet0IID->m0, (unsigned)vboxnet0IID->m1, @@ -4358,6 +5527,11 @@ static virNetworkPtr vboxNetworkCreateXML(virConnectPtr conn, const char *xml) { (unsigned)vboxnet0IID->m3[7]); data->pFuncs->pfnComUnallocMem(vboxnet0IID); +#else + DEBUG("Real Network UUID: %s", vboxnet0IIDUtf8); + data->pFuncs->pfnUtf8Free(vboxnet0IIDUtf8); + data->pFuncs->pfnUtf16Free(vboxnet0IIDUtf16); +#endif data->pFuncs->pfnUtf16Free(networkNameUtf16); } @@ -4371,7 +5545,9 @@ static virNetworkPtr vboxNetworkCreateXML(virConnectPtr conn, const char *xml) { } cleanup: +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#endif VIR_FREE(networkNameUtf8); virNetworkDefFree(def); return ret; @@ -4381,7 +5557,11 @@ static virNetworkPtr vboxNetworkDefineXML(virConnectPtr conn, const char *xml) { vboxGlobalData *data = conn->privateData; virNetworkDefPtr def = NULL; virNetworkPtr ret = NULL; - nsID *iid = NULL; +#if VBOX_API_VERSION == 2002 + nsID *iid = NULL; +#else + char iidUtf8[VIR_UUID_STRING_BUFLEN]; +#endif char *networkNameUtf8 = NULL; /* vboxNetworkDefineXML() is not exactly "network definition" @@ -4391,12 +5571,13 @@ static virNetworkPtr vboxNetworkDefineXML(virConnectPtr conn, const char *xml) { if ((def = virNetworkDefParseString(conn, xml)) == NULL) goto cleanup; - if (VIR_ALLOC(iid) < 0) { + if (virAsprintf(&networkNameUtf8, "HostInterfaceNetworking-%s", def->name) < 0) { virReportOOMError(conn); goto cleanup; } - if (virAsprintf(&networkNameUtf8, "HostInterfaceNetworking-%s", def->name) < 0) { +#if VBOX_API_VERSION == 2002 + if (VIR_ALLOC(iid) < 0) { virReportOOMError(conn); goto cleanup; } @@ -4412,6 +5593,10 @@ static virNetworkPtr vboxNetworkDefineXML(virConnectPtr conn, const char *xml) { (unsigned)iid->m3[3], (unsigned)iid->m3[4], (unsigned)iid->m3[5], (unsigned)iid->m3[6], (unsigned)iid->m3[7]); +#else + virUUIDFormat(def->uuid, iidUtf8); + DEBUG("Network UUID: %s", iidUtf8); +#endif if ((data->vboxObj) && (def->forwardType == VIR_NETWORK_FORWARD_NONE)) { /* VirtualBox version 2.2.* has only one "hostonly" @@ -4436,14 +5621,21 @@ static virNetworkPtr vboxNetworkDefineXML(virConnectPtr conn, const char *xml) { if (interfaceType == HostNetworkInterfaceType_HostOnly) { unsigned char uuid[VIR_UUID_BUFLEN]; - nsID *vboxnet0IID = NULL; PRUnichar *networkNameUtf16 = NULL; - - data->pFuncs->pfnUtf8ToUtf16(networkNameUtf8 , &networkNameUtf16); +#if VBOX_API_VERSION == 2002 + nsID *vboxnet0IID = NULL; networkInterface->vtbl->GetId(networkInterface, &vboxnet0IID); - nsIDtoChar(uuid, vboxnet0IID); +#else + PRUnichar *vboxnet0IIDUtf16 = NULL; + char *vboxnet0IIDUtf8 = NULL; + + networkInterface->vtbl->GetId(networkInterface, &vboxnet0IIDUtf16); + data->pFuncs->pfnUtf16ToUtf8(vboxnet0IIDUtf16, &vboxnet0IIDUtf8); + virUUIDParse(vboxnet0IIDUtf8, uuid); +#endif + data->pFuncs->pfnUtf8ToUtf16(networkNameUtf8 , &networkNameUtf16); /* Currently support only one dhcp server per network * with contigious address space from start to end @@ -4493,6 +5685,7 @@ static virNetworkPtr vboxNetworkDefineXML(virConnectPtr conn, const char *xml) { ret = virGetNetwork(conn, def->name, uuid); +#if VBOX_API_VERSION == 2002 DEBUG("Real Network UUID: " "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", (unsigned)vboxnet0IID->m0, (unsigned)vboxnet0IID->m1, @@ -4503,6 +5696,11 @@ static virNetworkPtr vboxNetworkDefineXML(virConnectPtr conn, const char *xml) { (unsigned)vboxnet0IID->m3[7]); data->pFuncs->pfnComUnallocMem(vboxnet0IID); +#else + DEBUG("Real Network UUID: %s", vboxnet0IIDUtf8); + data->pFuncs->pfnUtf8Free(vboxnet0IIDUtf8); + data->pFuncs->pfnUtf16Free(vboxnet0IIDUtf16); +#endif data->pFuncs->pfnUtf16Free(networkNameUtf16); } @@ -4516,7 +5714,9 @@ static virNetworkPtr vboxNetworkDefineXML(virConnectPtr conn, const char *xml) { } cleanup: +#if VBOX_API_VERSION == 2002 VIR_FREE(iid); +#endif VIR_FREE(networkNameUtf8); virNetworkDefFree(def); return ret; @@ -4774,15 +5974,23 @@ static char *vboxNetworkDumpXML(virNetworkPtr network, int flags ATTRIBUTE_UNUSE if (interfaceType == HostNetworkInterfaceType_HostOnly) { def->name = strdup(network->name); if (def->name != NULL) { - nsID *vboxnet0IID = NULL; PRUnichar *networkNameUtf16 = NULL; IDHCPServer *dhcpServer = NULL; - - data->pFuncs->pfnUtf8ToUtf16(networkNameUtf8 , &networkNameUtf16); +#if VBOX_API_VERSION == 2002 + nsID *vboxnet0IID = NULL; networkInterface->vtbl->GetId(networkInterface, &vboxnet0IID); - nsIDtoChar(def->uuid, vboxnet0IID); +#else + PRUnichar *vboxnet0IIDUtf16 = NULL; + char *vboxnet0IIDUtf8 = NULL; + + networkInterface->vtbl->GetId(networkInterface, &vboxnet0IIDUtf16); + data->pFuncs->pfnUtf16ToUtf8(vboxnet0IIDUtf16, &vboxnet0IIDUtf8); + virUUIDParse(vboxnet0IIDUtf8, def->uuid); +#endif + + data->pFuncs->pfnUtf8ToUtf16(networkNameUtf8 , &networkNameUtf16); def->forwardType = VIR_NETWORK_FORWARD_NONE; @@ -4858,7 +6066,7 @@ static char *vboxNetworkDumpXML(virNetworkPtr network, int flags ATTRIBUTE_UNUSE data->pFuncs->pfnUtf16Free(ipAddressUtf16); } - +#if VBOX_API_VERSION == 2002 DEBUG("Network UUID: " "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", (unsigned)vboxnet0IID->m0, (unsigned)vboxnet0IID->m1, @@ -4869,6 +6077,11 @@ static char *vboxNetworkDumpXML(virNetworkPtr network, int flags ATTRIBUTE_UNUSE (unsigned)vboxnet0IID->m3[7]); data->pFuncs->pfnComUnallocMem(vboxnet0IID); +#else + DEBUG("Network UUID: %s", vboxnet0IIDUtf8); + data->pFuncs->pfnUtf8Free(vboxnet0IIDUtf8); + data->pFuncs->pfnUtf16Free(vboxnet0IIDUtf16); +#endif data->pFuncs->pfnUtf16Free(networkNameUtf16); } else { vboxError(network->conn, VIR_ERR_SYSTEM_ERROR, @@ -4957,8 +6170,13 @@ virDriver NAME(Driver) = { NULL, /* domainMemoryPeek */ nodeGetCellsFreeMemory, /* nodeGetCellsFreeMemory */ nodeGetFreeMemory, /* getFreeMemory */ +#if VBOX_API_VERSION == 2002 NULL, /* domainEventRegister */ NULL, /* domainEventDeregister */ +#else + vboxDomainEventRegister, /* domainEventRegister */ + vboxDomainEventDeregister, /* domainEventDeregister */ +#endif NULL, /* domainMigratePrepare2 */ NULL, /* domainMigrateFinish2 */ NULL, /* nodeDeviceDettach */
-- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list