VirtualBox

source: vbox/trunk/src/VBox/Main/linux/module.cpp@ 1471

Last change on this file since 1471 was 1471, checked in by vboxsync, 18 years ago

Main: XPCOM: Initial implementation of auto-startable "out-of-proc" VirtualBox component (VBoxSVC).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.9 KB
Line 
1/** @file
2 *
3 * XPCOM module implementation functions
4 */
5
6/*
7 * Copyright (C) 2006 InnoTek Systemberatung GmbH
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License as published by the Free Software Foundation,
13 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
14 * distribution. VirtualBox OSE is distributed in the hope that it will
15 * be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * If you received this file as part of a commercial VirtualBox
18 * distribution, then only the terms of your commercial VirtualBox
19 * license agreement apply instead of the previous paragraph.
20 */
21
22#include <nsIGenericFactory.h>
23
24// generated file
25#include "VirtualBox_XPCOM.h"
26
27#include "GuestImpl.h"
28#include "KeyboardImpl.h"
29#include "MouseImpl.h"
30#include "DisplayImpl.h"
31#include "MachineDebuggerImpl.h"
32#include "USBDeviceImpl.h"
33#include "RemoteUSBDeviceImpl.h"
34#include "SharedFolderImpl.h"
35#include "FramebufferImpl.h"
36#include "ProgressImpl.h"
37#include "NetworkAdapterImpl.h"
38
39#include "SessionImpl.h"
40#include "ConsoleImpl.h"
41#include "ConsoleVRDPServer.h"
42
43#include "Logging.h"
44
45// XPCOM glue code unfolding
46
47NS_DECL_CLASSINFO(Guest)
48NS_IMPL_THREADSAFE_ISUPPORTS1_CI(Guest, IGuest)
49NS_DECL_CLASSINFO(Keyboard)
50NS_IMPL_THREADSAFE_ISUPPORTS1_CI(Keyboard, IKeyboard)
51NS_DECL_CLASSINFO(Mouse)
52NS_IMPL_THREADSAFE_ISUPPORTS1_CI(Mouse, IMouse)
53NS_DECL_CLASSINFO(Display)
54NS_IMPL_THREADSAFE_ISUPPORTS1_CI(Display, IDisplay)
55NS_DECL_CLASSINFO(MachineDebugger)
56NS_IMPL_THREADSAFE_ISUPPORTS1_CI(MachineDebugger, IMachineDebugger)
57NS_DECL_CLASSINFO(InternalFramebuffer)
58NS_IMPL_THREADSAFE_ISUPPORTS1_CI(InternalFramebuffer, IFramebuffer)
59NS_DECL_CLASSINFO(Progress)
60NS_IMPL_THREADSAFE_ISUPPORTS1_CI(Progress, IProgress)
61NS_DECL_CLASSINFO(CombinedProgress)
62NS_IMPL_THREADSAFE_ISUPPORTS1_CI(CombinedProgress, IProgress)
63NS_DECL_CLASSINFO(OUSBDevice)
64NS_IMPL_THREADSAFE_ISUPPORTS1_CI(OUSBDevice, IUSBDevice)
65NS_DECL_CLASSINFO(RemoteUSBDevice)
66NS_IMPL_THREADSAFE_ISUPPORTS1_CI(RemoteUSBDevice, IHostUSBDevice)
67NS_DECL_CLASSINFO(SharedFolder)
68NS_IMPL_THREADSAFE_ISUPPORTS1_CI(SharedFolder, ISharedFolder)
69NS_DECL_CLASSINFO(RemoteDisplayInfo)
70NS_IMPL_THREADSAFE_ISUPPORTS1_CI(RemoteDisplayInfo, IRemoteDisplayInfo)
71
72NS_DECL_CLASSINFO(Session)
73NS_IMPL_THREADSAFE_ISUPPORTS2_CI(Session, ISession, IInternalSessionControl)
74NS_DECL_CLASSINFO(Console)
75NS_IMPL_THREADSAFE_ISUPPORTS1_CI(Console, IConsole)
76
77COM_IMPL_READONLY_ENUM_AND_COLLECTION_EX(ComObjPtr <OUSBDevice>, IUSBDevice, OUSBDevice)
78COM_IMPL_READONLY_ENUM_AND_COLLECTION_EX(ComObjPtr <RemoteUSBDevice>, IHostUSBDevice, RemoteUSBDevice)
79COM_IMPL_READONLY_ENUM_AND_COLLECTION(SharedFolder)
80
81/**
82 * Singleton class factory that holds a reference to the created instance
83 * (preventing it from being destroyed) until the module is explicitly
84 * unloaded by the XPCOM shutdown code.
85 *
86 * Suitable for IN-PROC components.
87 */
88class SessionClassFactory : public Session
89{
90public:
91 virtual ~SessionClassFactory() {
92 FinalRelease();
93 instance = 0;
94 }
95 static nsresult getInstance (Session **inst) {
96 int rv = NS_OK;
97 if (instance == 0) {
98 instance = new SessionClassFactory();
99 if (instance) {
100 instance->AddRef(); // protect FinalConstruct()
101 rv = instance->FinalConstruct();
102 if (NS_FAILED(rv))
103 instance->Release();
104 else
105 instance->AddRef(); // self-reference
106 } else {
107 rv = NS_ERROR_OUT_OF_MEMORY;
108 }
109 } else {
110 instance->AddRef();
111 }
112 *inst = instance;
113 return rv;
114 }
115 static nsresult releaseInstance () {
116 if (instance)
117 instance->Release();
118 return NS_OK;
119 }
120
121private:
122 static Session *instance;
123};
124
125/** @note this is for singleton; disabled for now */
126//
127//Session *SessionClassFactory::instance = 0;
128//
129//NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR_WITH_RC (
130// Session, SessionClassFactory::getInstance
131//)
132
133NS_GENERIC_FACTORY_CONSTRUCTOR_WITH_RC (Session)
134
135
136/**
137 * Component definition table.
138 * Lists all components defined in this module.
139 */
140static const nsModuleComponentInfo components[] =
141{
142 {
143 "Session component", // description
144 NS_SESSION_CID, NS_SESSION_CONTRACTID, // CID/ContractID
145 SessionConstructor, // constructor function
146 NULL, // registration function
147 NULL, // deregistration function
148/** @note this is for singleton; disabled for now */
149// SessionClassFactory::releaseInstance,
150 NULL, // destructor function
151 NS_CI_INTERFACE_GETTER_NAME(Session), // interfaces function
152 NULL, // language helper
153 &NS_CLASSINFO_NAME(Session) // global class info & flags
154 }
155};
156
157NS_IMPL_NSGETMODULE (VirtualBox_Client_Module, components)
158
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette