VirtualBox

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

Last change on this file since 42178 was 41925, checked in by vboxsync, 13 years ago

allow to change the clipboard mode during runtime (API change including 'VBoxManage controlvm' change)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
Line 
1/** @file
2 *
3 * VBox Client Session COM Class definition
4 */
5
6/*
7 * Copyright (C) 2006-2010 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.215389.xyz. 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
18#ifndef ____H_SESSIONIMPL
19#define ____H_SESSIONIMPL
20
21#include "VirtualBoxBase.h"
22#include "ConsoleImpl.h"
23
24#ifdef RT_OS_WINDOWS
25# include "win/resource.h"
26#endif
27
28/** @def VBOX_WITH_SYS_V_IPC_SESSION_WATCHER
29 * Use SYS V IPC for watching a session.
30 * This is defined in the Makefile since it's also used by MachineImpl.h/cpp.
31 */
32#ifdef DOXYGEN_RUNNING
33# define VBOX_WITH_SYS_V_IPC_SESSION_WATCHER
34#endif
35
36#ifdef RT_OS_WINDOWS
37[threading(free)]
38#endif
39class ATL_NO_VTABLE Session :
40 public VirtualBoxBase,
41 VBOX_SCRIPTABLE_IMPL(ISession),
42 VBOX_SCRIPTABLE_IMPL(IInternalSessionControl)
43#ifdef RT_OS_WINDOWS
44 , public CComCoClass<Session, &CLSID_Session>
45#endif
46{
47public:
48
49 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(Session, ISession)
50
51 DECLARE_CLASSFACTORY()
52
53 DECLARE_REGISTRY_RESOURCEID(IDR_VIRTUALBOX)
54 DECLARE_NOT_AGGREGATABLE(Session)
55
56 DECLARE_PROTECT_FINAL_CONSTRUCT()
57
58 BEGIN_COM_MAP(Session)
59 VBOX_DEFAULT_INTERFACE_ENTRIES(ISession)
60 COM_INTERFACE_ENTRY2(IDispatch, IInternalSessionControl)
61 COM_INTERFACE_ENTRY(IInternalSessionControl)
62 END_COM_MAP()
63
64 HRESULT FinalConstruct();
65 void FinalRelease();
66
67 // public initializers/uninitializers only for internal purposes
68 HRESULT init();
69 void uninit();
70
71 // ISession properties
72 STDMETHOD(COMGETTER(State))(SessionState_T *aState);
73 STDMETHOD(COMGETTER(Type))(SessionType_T *aType);
74 STDMETHOD(COMGETTER(Machine))(IMachine **aMachine);
75 STDMETHOD(COMGETTER(Console))(IConsole **aConsole);
76
77 // ISession methods
78 STDMETHOD(UnlockMachine)();
79
80 // IInternalSessionControl methods
81 STDMETHOD(GetPID)(ULONG *aPid);
82 STDMETHOD(GetRemoteConsole)(IConsole **aConsole);
83 STDMETHOD(AssignMachine)(IMachine *aMachine);
84 STDMETHOD(AssignRemoteMachine)(IMachine *aMachine, IConsole *aConsole);
85 STDMETHOD(UpdateMachineState)(MachineState_T aMachineState);
86 STDMETHOD(Uninitialize)();
87 STDMETHOD(OnNetworkAdapterChange)(INetworkAdapter *networkAdapter, BOOL changeAdapter);
88 STDMETHOD(OnSerialPortChange)(ISerialPort *serialPort);
89 STDMETHOD(OnParallelPortChange)(IParallelPort *parallelPort);
90 STDMETHOD(OnStorageControllerChange)();
91 STDMETHOD(OnMediumChange)(IMediumAttachment *aMediumAttachment, BOOL aForce);
92 STDMETHOD(OnCPUChange)(ULONG aCPU, BOOL aRemove);
93 STDMETHOD(OnCPUExecutionCapChange)(ULONG aExecutionCap);
94 STDMETHOD(OnVRDEServerChange)(BOOL aRestart);
95 STDMETHOD(OnUSBControllerChange)();
96 STDMETHOD(OnSharedFolderChange)(BOOL aGlobal);
97 STDMETHOD(OnClipboardModeChange)(ClipboardMode_T aClipboardMode);
98 STDMETHOD(OnUSBDeviceAttach)(IUSBDevice *aDevice, IVirtualBoxErrorInfo *aError, ULONG aMaskedIfs);
99 STDMETHOD(OnUSBDeviceDetach)(IN_BSTR aId, IVirtualBoxErrorInfo *aError);
100 STDMETHOD(OnShowWindow)(BOOL aCheck, BOOL *aCanShow, LONG64 *aWinId);
101 STDMETHOD(OnBandwidthGroupChange)(IBandwidthGroup *aBandwidthGroup);
102 STDMETHOD(OnStorageDeviceChange)(IMediumAttachment *aMediumAttachment, BOOL aRemove);
103 STDMETHOD(AccessGuestProperty)(IN_BSTR aName, IN_BSTR aValue, IN_BSTR aFlags,
104 BOOL aIsSetter, BSTR *aRetValue, LONG64 *aRetTimestamp, BSTR *aRetFlags);
105 STDMETHOD(EnumerateGuestProperties)(IN_BSTR aPatterns,
106 ComSafeArrayOut(BSTR, aNames),
107 ComSafeArrayOut(BSTR, aValues),
108 ComSafeArrayOut(LONG64, aTimestamps),
109 ComSafeArrayOut(BSTR, aFlags));
110 STDMETHOD(OnlineMergeMedium)(IMediumAttachment *aMediumAttachment,
111 ULONG aSourceIdx, ULONG aTargetIdx,
112 IMedium *aSource, IMedium *aTarget,
113 BOOL aMergeForward, IMedium *aParentForTarget,
114 ComSafeArrayIn(IMedium *, aChildrenToReparent),
115 IProgress *aProgress);
116 STDMETHOD(EnableVMMStatistics)(BOOL aEnable);
117
118private:
119
120 HRESULT unlockMachine(bool aFinalRelease, bool aFromServer);
121 HRESULT grabIPCSemaphore();
122 void releaseIPCSemaphore();
123
124 SessionState_T mState;
125 SessionType_T mType;
126
127 ComPtr<IInternalMachineControl> mControl;
128
129 ComObjPtr<Console> mConsole;
130
131 ComPtr<IMachine> mRemoteMachine;
132 ComPtr<IConsole> mRemoteConsole;
133
134 ComPtr<IVirtualBox> mVirtualBox;
135
136 /* interprocess semaphore handle (id) for the opened machine */
137#if defined(RT_OS_WINDOWS)
138 HANDLE mIPCSem;
139 HANDLE mIPCThreadSem;
140#elif defined(RT_OS_OS2)
141 RTTHREAD mIPCThread;
142 RTSEMEVENT mIPCThreadSem;
143#elif defined(VBOX_WITH_SYS_V_IPC_SESSION_WATCHER)
144 int mIPCSem;
145#else
146# error "Port me!"
147#endif
148};
149
150#endif // ____H_SESSIONIMPL
151/* vi: set tabstop=4 shiftwidth=4 expandtab: */
Note: See TracBrowser for help on using the repository browser.

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