module.cpp revision a9d57a8b0b7d020df59b6466a8ecb863c9ba9b0a
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * XPCOM module implementation functions
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Copyright (C) 2006-2014 Oracle Corporation
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync */
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync/* Make sure all the stdint.h macros are included - must come first! */
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync#ifndef __STDC_LIMIT_MACROS
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# define __STDC_LIMIT_MACROS
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifndef __STDC_CONSTANT_MACROS
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# define __STDC_CONSTANT_MACROS
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <nsIGenericFactory.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// generated file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "VirtualBox_XPCOM.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync#include "AdditionsFacilityImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "ConsoleImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "ConsoleVRDPServer.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "DisplayImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef VBOX_WITH_EXTPACK
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "ExtPackManagerImpl.h"
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "GuestImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef VBOX_WITH_GUEST_CONTROL
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "GuestDirectoryImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "GuestFileImpl.h"
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync# include "GuestFsObjInfoImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "GuestProcessImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "GuestSessionImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "KeyboardImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "MachineDebuggerImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "MouseImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "NATEngineImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "NetworkAdapterImpl.h"
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync#include "ProgressImpl.h"
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync#include "RemoteUSBDeviceImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "SessionImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "SharedFolderImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "USBDeviceImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "VirtualBoxClientImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "Logging.h"
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// XPCOM glue code unfolding
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(VirtualBoxClient)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(VirtualBoxClient, IVirtualBoxClient)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(Session)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS2_CI(Session, ISession, IInternalSessionControl)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync#ifndef VBOX_COM_INPROC_API_CLIENT
2daaccf68be3773aee600c5c3e48bcf5401418a6vboxsyncNS_DECL_CLASSINFO(Guest)
0174432b2b1a760b89840ba696f7ba51def65dddvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Guest, IGuest)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync #ifdef VBOX_WITH_GUEST_CONTROL
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNS_DECL_CLASSINFO(GuestDirectory)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS2_CI(GuestDirectory, IGuestDirectory, IDirectory)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNS_DECL_CLASSINFO(GuestFile)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS2_CI(GuestFile, IGuestFile, IFile)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNS_DECL_CLASSINFO(GuestProcess)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS2_CI(GuestProcess, IGuestProcess, IProcess)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNS_DECL_CLASSINFO(GuestSession)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(GuestSession, IGuestSession)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync #endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(Keyboard)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Keyboard, IKeyboard)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(Mouse)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Mouse, IMouse)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(Display)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS2_CI(Display, IDisplay, IEventListener)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(MachineDebugger)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(MachineDebugger, IMachineDebugger)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(Progress)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Progress, IProgress)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(RemoteUSBDevice)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS2_CI(RemoteUSBDevice, IHostUSBDevice, IUSBDevice)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(SharedFolder)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(SharedFolder, ISharedFolder)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(VRDEServerInfo)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(VRDEServerInfo, IVRDEServerInfo)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync #ifdef VBOX_WITH_EXTPACK
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// deliberately omit ExtPackFile as it's unusable in the client context
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// NS_DECL_CLASSINFO(ExtPackFile)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// NS_IMPL_THREADSAFE_ISUPPORTS2_CI(ExtPackFile, IExtPackFile, IExtPackBase)
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncNS_DECL_CLASSINFO(ExtPack)
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS2_CI(ExtPack, IExtPack, IExtPackBase)
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncNS_DECL_CLASSINFO(ExtPackManager)
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(ExtPackManager, IExtPackManager)
22e281e75ed636601178296c6daebda8f1d17c59vboxsync #endif
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncNS_DECL_CLASSINFO(Console)
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Console, IConsole)
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync#endif /* VBOX_COM_INPROC_API_CLIENT */
22e281e75ed636601178296c6daebda8f1d17c59vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsync/**
22e281e75ed636601178296c6daebda8f1d17c59vboxsync * Singleton class factory that holds a reference to the created instance
22e281e75ed636601178296c6daebda8f1d17c59vboxsync * (preventing it from being destroyed) until the module is explicitly
22e281e75ed636601178296c6daebda8f1d17c59vboxsync * unloaded by the XPCOM shutdown code.
22e281e75ed636601178296c6daebda8f1d17c59vboxsync *
22e281e75ed636601178296c6daebda8f1d17c59vboxsync * Suitable for IN-PROC components.
22e281e75ed636601178296c6daebda8f1d17c59vboxsync */
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncclass SessionClassFactory : public Session
22e281e75ed636601178296c6daebda8f1d17c59vboxsync{
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncpublic:
22e281e75ed636601178296c6daebda8f1d17c59vboxsync virtual ~SessionClassFactory() {
22e281e75ed636601178296c6daebda8f1d17c59vboxsync FinalRelease();
7b80828e5760a8814fe6cd494d2715a4544fbddcvboxsync instance = 0;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync }
22e281e75ed636601178296c6daebda8f1d17c59vboxsync static nsresult getInstance (Session **inst) {
22e281e75ed636601178296c6daebda8f1d17c59vboxsync int rv = NS_OK;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync if (instance == 0) {
22e281e75ed636601178296c6daebda8f1d17c59vboxsync instance = new SessionClassFactory();
22e281e75ed636601178296c6daebda8f1d17c59vboxsync if (instance) {
22e281e75ed636601178296c6daebda8f1d17c59vboxsync instance->AddRef(); // protect FinalConstruct()
22e281e75ed636601178296c6daebda8f1d17c59vboxsync rv = instance->FinalConstruct();
22e281e75ed636601178296c6daebda8f1d17c59vboxsync if (NS_FAILED(rv))
22e281e75ed636601178296c6daebda8f1d17c59vboxsync instance->Release();
22e281e75ed636601178296c6daebda8f1d17c59vboxsync else
22e281e75ed636601178296c6daebda8f1d17c59vboxsync instance->AddRef(); // self-reference
22e281e75ed636601178296c6daebda8f1d17c59vboxsync } else {
22e281e75ed636601178296c6daebda8f1d17c59vboxsync rv = NS_ERROR_OUT_OF_MEMORY;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync }
22e281e75ed636601178296c6daebda8f1d17c59vboxsync } else {
22e281e75ed636601178296c6daebda8f1d17c59vboxsync instance->AddRef();
d1cbbd799d8912978f5146960b6780f387bb414bvboxsync }
22e281e75ed636601178296c6daebda8f1d17c59vboxsync *inst = instance;
22e281e75ed636601178296c6daebda8f1d17c59vboxsync return rv;
c17f5c90f2cb60b38ecabebce128724c6ff2d036vboxsync }
22e281e75ed636601178296c6daebda8f1d17c59vboxsync static nsresult releaseInstance () {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (instance)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync instance->Release();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return NS_OK;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprivate:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static Session *instance;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @note this is for singleton; disabled for now */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync//
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync//Session *SessionClassFactory::instance = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync//
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync//NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR_WITH_RC (
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// Session, SessionClassFactory::getInstance
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync//)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_GENERIC_FACTORY_CONSTRUCTOR_WITH_RC(Session)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_GENERIC_FACTORY_CONSTRUCTOR_WITH_RC(VirtualBoxClient)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Component definition table.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Lists all components defined in this module.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncstatic const nsModuleComponentInfo components[] =
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
b1c3cdef473df2fbc621d5da81acc82dbfb8a11avboxsync "Session component", // description
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync NS_SESSION_CID, NS_SESSION_CONTRACTID, // CID/ContractID
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync SessionConstructor, // constructor function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NULL, // registration function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NULL, // deregistration function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @note this is for singleton; disabled for now */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// SessionClassFactory::releaseInstance,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NULL, // destructor function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NS_CI_INTERFACE_GETTER_NAME(Session), // interfaces function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NULL, // language helper
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync &NS_CLASSINFO_NAME(Session) // global class info & flags
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync },
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync "VirtualBoxClient component", // description
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NS_VIRTUALBOXCLIENT_CID, NS_VIRTUALBOXCLIENT_CONTRACTID, // CID/ContractID
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VirtualBoxClientConstructor, // constructor function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NULL, // registration function
3ecf9412133496b2aeb090cfd33a286404ec59fbvboxsync NULL, // deregistration function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NULL, // destructor function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NS_CI_INTERFACE_GETTER_NAME(VirtualBoxClient), // interfaces function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NULL, // language helper
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync &NS_CLASSINFO_NAME(VirtualBoxClient) // global class info & flags
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync },
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_NSGETMODULE (VirtualBox_Client_Module, components)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */
750d4d0506a38b2e80c997075d40aad474e675fbvboxsync