module.cpp revision f044158ee9eb7045a43f2c4ef2fbc07cb11329ae
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * XPCOM module implementation functions
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*
3f1e0eea71cabeb90529e546f16eb7aee513fde9vboxsync * 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.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* Make sure all the stdint.h macros are included - must come first! */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#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>
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// generated file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "VirtualBox_XPCOM.h"
d31ded334a29f575e23dc889b603b1a586759348vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "AdditionsFacilityImpl.h"
d31ded334a29f575e23dc889b603b1a586759348vboxsync#include "ConsoleImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "ConsoleVRDPServer.h"
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync#include "DisplayImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef VBOX_WITH_EXTPACK
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "ExtPackManagerImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "GuestImpl.h"
2f0d866e126dd288169fed591c259c1c6b4016e5vboxsync#ifdef VBOX_WITH_GUEST_CONTROL
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync# include "GuestDirectoryImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "GuestFileImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "GuestFsObjInfoImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "GuestProcessImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "GuestSessionImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync#include "KeyboardImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "MachineDebuggerImpl.h"
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync#include "MouseImpl.h"
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync#include "NATEngineImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "NetworkAdapterImpl.h"
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync#include "ProgressImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "RemoteUSBDeviceImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "SessionImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "SharedFolderImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "USBDeviceImpl.h"
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync#include "VirtualBoxClientImpl.h"
2daaccf68be3773aee600c5c3e48bcf5401418a6vboxsync
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync#include "Logging.h"
614cbe11a7e5588dc8d369e223174b1441a09359vboxsync
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync// XPCOM glue code unfolding
614cbe11a7e5588dc8d369e223174b1441a09359vboxsync
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNS_DECL_CLASSINFO(VirtualBoxClient)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(VirtualBoxClient, IVirtualBoxClient)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNS_DECL_CLASSINFO(Session)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS2_CI(Session, ISession, IInternalSessionControl)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync#ifndef VBOX_COM_INPROC_API_CLIENT
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsyncNS_DECL_CLASSINFO(Guest)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Guest, IGuest)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync #ifdef VBOX_WITH_GUEST_CONTROL
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(GuestProcess)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS2_CI(GuestProcess, IGuestProcess, IProcess)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_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(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)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(ExtPack)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_THREADSAFE_ISUPPORTS2_CI(ExtPack, IExtPack, IExtPackBase)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(ExtPackManager)
f351fab06d1e1507b72f5c574df71193061fd393vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(ExtPackManager, IExtPackManager)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync #endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_DECL_CLASSINFO(Console)
b1c3cdef473df2fbc621d5da81acc82dbfb8a11avboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Console, IConsole)
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* VBOX_COM_INPROC_API_CLIENT */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Singleton class factory that holds a reference to the created instance
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * (preventing it from being destroyed) until the module is explicitly
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * unloaded by the XPCOM shutdown code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Suitable for IN-PROC components.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass SessionClassFactory : public Session
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync virtual ~SessionClassFactory() {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync FinalRelease();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync instance = 0;
3ecf9412133496b2aeb090cfd33a286404ec59fbvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static nsresult getInstance (Session **inst) {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rv = NS_OK;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (instance == 0) {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync instance = new SessionClassFactory();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (instance) {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync instance->AddRef(); // protect FinalConstruct()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rv = instance->FinalConstruct();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (NS_FAILED(rv))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync instance->Release();
750d4d0506a38b2e80c997075d40aad474e675fbvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync instance->AddRef(); // self-reference
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync } else {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rv = NS_ERROR_OUT_OF_MEMORY;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync } else {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync instance->AddRef();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *inst = instance;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rv;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static nsresult releaseInstance () {
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync if (instance)
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync instance->Release();
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync return NS_OK;
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync }
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncprivate:
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync static Session *instance;
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync/** @note this is for singleton; disabled for now */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync//
576d4214137bce409cdcf01e8df4a0bca5e0b2d1vboxsync//Session *SessionClassFactory::instance = 0;
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync//
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync//NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR_WITH_RC (
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// Session, SessionClassFactory::getInstance
72ef2b9fc5ffc01d0dabd5052d6e8baa3a952773vboxsync//)
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync
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[] =
42c1972c22e09797b4b24afbd0ec114ed076c37cvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync "Session component", // description
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NS_SESSION_CID, NS_SESSION_CONTRACTID, // CID/ContractID
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync SessionConstructor, // constructor function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NULL, // registration function
9e4166cf5ed4940f506bc718ea6c89bf7ed252c8vboxsync NULL, // deregistration function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @note this is for singleton; disabled for now */
9e4166cf5ed4940f506bc718ea6c89bf7ed252c8vboxsync// SessionClassFactory::releaseInstance,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NULL, // destructor function
1e3cd9c9c95ff352da1331a1789b05fd012c880dvboxsync NS_CI_INTERFACE_GETTER_NAME(Session), // interfaces function
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync NULL, // language helper
22e281e75ed636601178296c6daebda8f1d17c59vboxsync &NS_CLASSINFO_NAME(Session) // global class info & flags
8a132edc1577cbe2a19cd778c1b2bea6ae5e8515vboxsync },
69deddbc68802f1cf1c3a404a9f816b8accb3385vboxsync {
3ecd8008b81f02a04220705ae0033142af363280vboxsync "VirtualBoxClient component", // description
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NS_VIRTUALBOXCLIENT_CID, NS_VIRTUALBOXCLIENT_CONTRACTID, // CID/ContractID
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VirtualBoxClientConstructor, // constructor function
576d4214137bce409cdcf01e8df4a0bca5e0b2d1vboxsync NULL, // registration function
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync NULL, // deregistration function
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync NULL, // destructor function
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync NS_CI_INTERFACE_GETTER_NAME(VirtualBoxClient), // interfaces function
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync NULL, // language helper
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync &NS_CLASSINFO_NAME(VirtualBoxClient) // global class info & flags
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync },
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync};
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNS_IMPL_NSGETMODULE (VirtualBox_Client_Module, components)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */
3ecd8008b81f02a04220705ae0033142af363280vboxsync