module.cpp revision a649440589a732fe4aad2af224cc72318108d855
397491e685e25e963cc77dfd0b0b169e962de846vboxsync/** @file
397491e685e25e963cc77dfd0b0b169e962de846vboxsync *
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * XPCOM module implementation functions
397491e685e25e963cc77dfd0b0b169e962de846vboxsync */
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2006-2009 Sun Microsystems, Inc.
397491e685e25e963cc77dfd0b0b169e962de846vboxsync *
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * available from http://www.virtualbox.org. This file is free software;
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * you can redistribute it and/or modify it under the terms of the GNU
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * General Public License (GPL) as published by the Free Software
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
397491e685e25e963cc77dfd0b0b169e962de846vboxsync *
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * additional information or have any questions.
397491e685e25e963cc77dfd0b0b169e962de846vboxsync */
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync/* Make sure all the stdint.h macros are included - must come first! */
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#ifndef __STDC_LIMIT_MACROS
397491e685e25e963cc77dfd0b0b169e962de846vboxsync# define __STDC_LIMIT_MACROS
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#endif
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#ifndef __STDC_CONSTANT_MACROS
397491e685e25e963cc77dfd0b0b169e962de846vboxsync# define __STDC_CONSTANT_MACROS
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#endif
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include <nsIGenericFactory.h>
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync// generated file
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "VirtualBox_XPCOM.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "GuestImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "KeyboardImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "MouseImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "DisplayImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "MachineDebuggerImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "USBDeviceImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "RemoteUSBDeviceImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "SharedFolderImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "ProgressImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "NetworkAdapterImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "SessionImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "ConsoleImpl.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "ConsoleVRDPServer.h"
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync#include "Logging.h"
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync// XPCOM glue code unfolding
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_DECL_CLASSINFO(Guest)
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Guest, IGuest)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_DECL_CLASSINFO(Keyboard)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Keyboard, IKeyboard)
7e33622becf3d7cf9a2401ac0c53d315877f6e34vboxsyncNS_DECL_CLASSINFO(Mouse)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Mouse, IMouse)
7e33622becf3d7cf9a2401ac0c53d315877f6e34vboxsyncNS_DECL_CLASSINFO(Display)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Display, IDisplay)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_DECL_CLASSINFO(MachineDebugger)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(MachineDebugger, IMachineDebugger)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_DECL_CLASSINFO(Progress)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Progress, IProgress)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_DECL_CLASSINFO(CombinedProgress)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(CombinedProgress, IProgress)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_DECL_CLASSINFO(OUSBDevice)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(OUSBDevice, IUSBDevice)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_DECL_CLASSINFO(RemoteUSBDevice)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(RemoteUSBDevice, IHostUSBDevice)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_DECL_CLASSINFO(SharedFolder)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(SharedFolder, ISharedFolder)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_DECL_CLASSINFO(RemoteDisplayInfo)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(RemoteDisplayInfo, IRemoteDisplayInfo)
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_DECL_CLASSINFO(Session)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS2_CI(Session, ISession, IInternalSessionControl)
b7a1977fd3a47a04749e45a18593ecb67ca0972bvboxsyncNS_DECL_CLASSINFO(Console)
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_THREADSAFE_ISUPPORTS1_CI(Console, IConsole)
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync/**
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * Singleton class factory that holds a reference to the created instance
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * (preventing it from being destroyed) until the module is explicitly
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * unloaded by the XPCOM shutdown code.
397491e685e25e963cc77dfd0b0b169e962de846vboxsync *
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * Suitable for IN-PROC components.
397491e685e25e963cc77dfd0b0b169e962de846vboxsync */
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncclass SessionClassFactory : public Session
397491e685e25e963cc77dfd0b0b169e962de846vboxsync{
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncpublic:
397491e685e25e963cc77dfd0b0b169e962de846vboxsync virtual ~SessionClassFactory() {
397491e685e25e963cc77dfd0b0b169e962de846vboxsync FinalRelease();
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync instance = 0;
397491e685e25e963cc77dfd0b0b169e962de846vboxsync }
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync static nsresult getInstance (Session **inst) {
397491e685e25e963cc77dfd0b0b169e962de846vboxsync int rv = NS_OK;
397491e685e25e963cc77dfd0b0b169e962de846vboxsync if (instance == 0) {
397491e685e25e963cc77dfd0b0b169e962de846vboxsync instance = new SessionClassFactory();
397491e685e25e963cc77dfd0b0b169e962de846vboxsync if (instance) {
397491e685e25e963cc77dfd0b0b169e962de846vboxsync instance->AddRef(); // protect FinalConstruct()
397491e685e25e963cc77dfd0b0b169e962de846vboxsync rv = instance->FinalConstruct();
397491e685e25e963cc77dfd0b0b169e962de846vboxsync if (NS_FAILED(rv))
397491e685e25e963cc77dfd0b0b169e962de846vboxsync instance->Release();
397491e685e25e963cc77dfd0b0b169e962de846vboxsync else
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync instance->AddRef(); // self-reference
397491e685e25e963cc77dfd0b0b169e962de846vboxsync } else {
397491e685e25e963cc77dfd0b0b169e962de846vboxsync rv = NS_ERROR_OUT_OF_MEMORY;
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync }
397491e685e25e963cc77dfd0b0b169e962de846vboxsync } else {
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync instance->AddRef();
397491e685e25e963cc77dfd0b0b169e962de846vboxsync }
397491e685e25e963cc77dfd0b0b169e962de846vboxsync *inst = instance;
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync return rv;
397491e685e25e963cc77dfd0b0b169e962de846vboxsync }
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync static nsresult releaseInstance () {
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync if (instance)
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync instance->Release();
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync return NS_OK;
397491e685e25e963cc77dfd0b0b169e962de846vboxsync }
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncprivate:
397491e685e25e963cc77dfd0b0b169e962de846vboxsync static Session *instance;
397491e685e25e963cc77dfd0b0b169e962de846vboxsync};
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync/** @note this is for singleton; disabled for now */
5708ec0dbaec388c36b5c6c2cf590f12e48748e6vboxsync//
397491e685e25e963cc77dfd0b0b169e962de846vboxsync//Session *SessionClassFactory::instance = 0;
397491e685e25e963cc77dfd0b0b169e962de846vboxsync//
397491e685e25e963cc77dfd0b0b169e962de846vboxsync//NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR_WITH_RC (
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync// Session, SessionClassFactory::getInstance
397491e685e25e963cc77dfd0b0b169e962de846vboxsync//)
5708ec0dbaec388c36b5c6c2cf590f12e48748e6vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_GENERIC_FACTORY_CONSTRUCTOR_WITH_RC (Session)
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsync/**
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * Component definition table.
397491e685e25e963cc77dfd0b0b169e962de846vboxsync * Lists all components defined in this module.
397491e685e25e963cc77dfd0b0b169e962de846vboxsync */
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsyncstatic const nsModuleComponentInfo components[] =
397491e685e25e963cc77dfd0b0b169e962de846vboxsync{
397491e685e25e963cc77dfd0b0b169e962de846vboxsync {
397491e685e25e963cc77dfd0b0b169e962de846vboxsync "Session component", // description
397491e685e25e963cc77dfd0b0b169e962de846vboxsync NS_SESSION_CID, NS_SESSION_CONTRACTID, // CID/ContractID
397491e685e25e963cc77dfd0b0b169e962de846vboxsync SessionConstructor, // constructor function
397491e685e25e963cc77dfd0b0b169e962de846vboxsync NULL, // registration function
e39cb73e9d0ef96b6ec4b35061de1b9ef733dd06vboxsync NULL, // deregistration function
397491e685e25e963cc77dfd0b0b169e962de846vboxsync/** @note this is for singleton; disabled for now */
397491e685e25e963cc77dfd0b0b169e962de846vboxsync// SessionClassFactory::releaseInstance,
397491e685e25e963cc77dfd0b0b169e962de846vboxsync NULL, // destructor function
7e33622becf3d7cf9a2401ac0c53d315877f6e34vboxsync NS_CI_INTERFACE_GETTER_NAME(Session), // interfaces function
7e33622becf3d7cf9a2401ac0c53d315877f6e34vboxsync NULL, // language helper
7e33622becf3d7cf9a2401ac0c53d315877f6e34vboxsync &NS_CLASSINFO_NAME(Session) // global class info & flags
7e33622becf3d7cf9a2401ac0c53d315877f6e34vboxsync }
397491e685e25e963cc77dfd0b0b169e962de846vboxsync};
397491e685e25e963cc77dfd0b0b169e962de846vboxsync
397491e685e25e963cc77dfd0b0b169e962de846vboxsyncNS_IMPL_NSGETMODULE (VirtualBox_Client_Module, components)
397491e685e25e963cc77dfd0b0b169e962de846vboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */
397491e685e25e963cc77dfd0b0b169e962de846vboxsync