VirtualBox

source: vbox/trunk/src/VBox/Main/include/SessionImpl.h@ 14981

Last change on this file since 14981 was 14949, checked in by vboxsync, 16 years ago

Appended vim modeline to set tabstop and expand tabs (in the way
suggested by our coding guidelines).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1/** @file
2 *
3 * VBox Client Session COM Class definition
4 */
5
6/*
7 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
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 (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18 * Clara, CA 95054 USA or visit http://www.sun.com if you need
19 * additional information or have any questions.
20 */
21
22#ifndef ____H_SESSIONIMPL
23#define ____H_SESSIONIMPL
24
25#include "VirtualBoxBase.h"
26#include "ConsoleImpl.h"
27
28#ifdef RT_OS_WINDOWS
29# include "win/resource.h"
30#endif
31
32/** @def VBOX_WITH_SYS_V_IPC_SESSION_WATCHER
33 * Use SYS V IPC for watching a session.
34 * This is defined in the Makefile since it's also used by MachineImpl.h/cpp.
35 *
36 * @todo Dmitry, feel free to completely change this (and/or write a better description).
37 * (The same goes for the other darwin changes.)
38 */
39#ifdef __DOXYGEN__
40# define VBOX_WITH_SYS_V_IPC_SESSION_WATCHER
41#endif
42
43class ATL_NO_VTABLE Session :
44 public VirtualBoxBaseNEXT,
45 public VirtualBoxSupportErrorInfoImpl <Session, ISession>,
46 public VirtualBoxSupportTranslation <Session>,
47#ifdef RT_OS_WINDOWS
48 public IDispatchImpl<ISession, &IID_ISession, &LIBID_VirtualBox,
49 kTypeLibraryMajorVersion, kTypeLibraryMinorVersion>,
50 public CComCoClass<Session, &CLSID_Session>,
51#else
52 public ISession,
53#endif
54 public IInternalSessionControl
55{
56public:
57
58 DECLARE_CLASSFACTORY()
59
60 DECLARE_REGISTRY_RESOURCEID(IDR_VIRTUALBOX)
61 DECLARE_NOT_AGGREGATABLE(Session)
62
63 DECLARE_PROTECT_FINAL_CONSTRUCT()
64
65 BEGIN_COM_MAP(Session)
66 COM_INTERFACE_ENTRY(IDispatch)
67 COM_INTERFACE_ENTRY(IInternalSessionControl)
68 COM_INTERFACE_ENTRY(ISupportErrorInfo)
69 COM_INTERFACE_ENTRY(ISession)
70 END_COM_MAP()
71
72 NS_DECL_ISUPPORTS
73
74 HRESULT FinalConstruct();
75 void FinalRelease();
76
77 // public initializers/uninitializers only for internal purposes
78 HRESULT init();
79 void uninit (bool aFinalRelease);
80
81 // ISession properties
82 STDMETHOD(COMGETTER(State)) (SessionState_T *aState);
83 STDMETHOD(COMGETTER(Type)) (SessionType_T *aType);
84 STDMETHOD(COMGETTER(Machine)) (IMachine **aMachine);
85 STDMETHOD(COMGETTER(Console)) (IConsole **aConsole);
86
87 // ISession methods
88 STDMETHOD(Close)();
89
90 // IInternalSessionControl methods
91 STDMETHOD(GetPID) (ULONG *aPid);
92 STDMETHOD(GetRemoteConsole) (IConsole **aConsole);
93 STDMETHOD(AssignMachine) (IMachine *aMachine);
94 STDMETHOD(AssignRemoteMachine) (IMachine *aMachine, IConsole *aConsole);
95 STDMETHOD(UpdateMachineState) (MachineState_T aMachineState);
96 STDMETHOD(Uninitialize)();
97 STDMETHOD(OnDVDDriveChange)();
98 STDMETHOD(OnFloppyDriveChange)();
99 STDMETHOD(OnNetworkAdapterChange)(INetworkAdapter *networkAdapter);
100 STDMETHOD(OnSerialPortChange)(ISerialPort *serialPort);
101 STDMETHOD(OnParallelPortChange)(IParallelPort *parallelPort);
102 STDMETHOD(OnVRDPServerChange)();
103 STDMETHOD(OnUSBControllerChange)();
104 STDMETHOD(OnSharedFolderChange) (BOOL aGlobal);
105 STDMETHOD(OnUSBDeviceAttach) (IUSBDevice *aDevice, IVirtualBoxErrorInfo *aError, ULONG aMaskedIfs);
106 STDMETHOD(OnUSBDeviceDetach) (INPTR GUIDPARAM aId, IVirtualBoxErrorInfo *aError);
107 STDMETHOD(OnShowWindow) (BOOL aCheck, BOOL *aCanShow, ULONG64 *aWinId);
108 STDMETHOD(AccessGuestProperty) (INPTR BSTR aName, INPTR BSTR aValue, INPTR BSTR aFlags,
109 BOOL aIsSetter, BSTR *aRetValue, ULONG64 *aRetTimestamp, BSTR *aRetFlags);
110 STDMETHOD(EnumerateGuestProperties) (INPTR BSTR aPatterns,
111 ComSafeArrayOut(BSTR, aNames),
112 ComSafeArrayOut(BSTR, aValues),
113 ComSafeArrayOut(ULONG64, aTimestamps),
114 ComSafeArrayOut(BSTR, aFlags));
115
116 // for VirtualBoxSupportErrorInfoImpl
117 static const wchar_t *getComponentName() { return L"Session"; }
118
119private:
120
121 HRESULT close (bool aFinalRelease, bool aFromServer);
122 HRESULT grabIPCSemaphore();
123 void releaseIPCSemaphore();
124
125 SessionState_T mState;
126 SessionType_T mType;
127
128 ComPtr <IInternalMachineControl> mControl;
129
130 ComObjPtr <Console> mConsole;
131
132 ComPtr <IMachine> mRemoteMachine;
133 ComPtr <IConsole> mRemoteConsole;
134
135 ComPtr <IVirtualBox> mVirtualBox;
136
137 /* interprocess semaphore handle (id) for the opened machine */
138#if defined(RT_OS_WINDOWS)
139 HANDLE mIPCSem;
140 HANDLE mIPCThreadSem;
141#elif defined(RT_OS_OS2)
142 RTTHREAD mIPCThread;
143 RTSEMEVENT mIPCThreadSem;
144#elif defined(VBOX_WITH_SYS_V_IPC_SESSION_WATCHER)
145 int mIPCSem;
146#else
147# error "Port me!"
148#endif
149};
150
151#endif // ____H_SESSIONIMPL
152/* vi: set tabstop=4 shiftwidth=4 expandtab: */
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