VirtualBox

source: vbox/trunk/src/VBox/Main/include/MediumAttachmentImpl.h@ 36058

Last change on this file since 36058 was 36058, checked in by vboxsync, 14 years ago

Main/BandwidthControl: Don't use direct references to bandwidth group objects in the medium attachment object. It will point to the old uninitialized instance if the settings are changed. Uses the name of the bandwidth group now instead without changing the public interface to make a backport to 4.0 possible

  • Property svn:eol-style set to native
File size: 3.3 KB
Line 
1/** @file
2 *
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2009 Oracle Corporation
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
18#ifndef ____H_MEDIUMATTACHMENTIMPL
19#define ____H_MEDIUMATTACHMENTIMPL
20
21#include "VirtualBoxBase.h"
22#include "BandwidthGroupImpl.h"
23
24class ATL_NO_VTABLE MediumAttachment :
25 public VirtualBoxBase,
26 VBOX_SCRIPTABLE_IMPL(IMediumAttachment)
27{
28public:
29 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(MediumAttachment, IMediumAttachment)
30
31 DECLARE_NOT_AGGREGATABLE(MediumAttachment)
32
33 DECLARE_PROTECT_FINAL_CONSTRUCT()
34
35 BEGIN_COM_MAP(MediumAttachment)
36 VBOX_DEFAULT_INTERFACE_ENTRIES(IMediumAttachment)
37 END_COM_MAP()
38
39 MediumAttachment() { };
40 ~MediumAttachment() { };
41
42 // public initializer/uninitializer for internal purposes only
43 HRESULT init(Machine *aParent,
44 Medium *aMedium,
45 const Bstr &aControllerName,
46 LONG aPort,
47 LONG aDevice,
48 DeviceType_T aType,
49 bool fPassthrough,
50 const Utf8Str &strBandwidthGroup);
51 void uninit();
52
53 HRESULT FinalConstruct();
54 void FinalRelease();
55
56 // IMediumAttachment properties
57 STDMETHOD(COMGETTER(Medium))(IMedium **aMedium);
58 STDMETHOD(COMGETTER(Controller))(BSTR *aController);
59 STDMETHOD(COMGETTER(Port))(LONG *aPort);
60 STDMETHOD(COMGETTER(Device))(LONG *aDevice);
61 STDMETHOD(COMGETTER(Type))(DeviceType_T *aType);
62 STDMETHOD(COMGETTER(Passthrough))(BOOL *aPassthrough);
63 STDMETHOD(COMGETTER(BandwidthGroup))(IBandwidthGroup **aBwGroup);
64
65 // public internal methods
66 void rollback();
67 void commit();
68
69 // unsafe public methods for internal purposes only (ensure there is
70 // a caller and a read lock before calling them!)
71 bool isImplicit() const;
72 void setImplicit(bool aImplicit);
73
74 const ComObjPtr<Medium>& getMedium() const;
75 Bstr getControllerName() const;
76 LONG getPort() const;
77 LONG getDevice() const;
78 DeviceType_T getType() const;
79 bool getPassthrough() const;
80 const Utf8Str& getBandwidthGroup() const;
81
82 bool matches(CBSTR aControllerName, LONG aPort, LONG aDevice);
83
84 /** Must be called from under this object's write lock. */
85 void updateMedium(const ComObjPtr<Medium> &aMedium);
86
87 /** Must be called from under this object's write lock. */
88 void updatePassthrough(bool aPassthrough);
89
90 /** Must be called from under this object's write lock. */
91 void updateBandwidthGroup(const Utf8Str &aBandwidthGroup);
92
93 /** Get a unique and somewhat descriptive name for logging. */
94 const char* getLogName(void) const { return mLogName.c_str(); }
95
96private:
97 struct Data;
98 Data *m;
99
100 Utf8Str mLogName; /**< For logging purposes */
101};
102
103#endif // ____H_MEDIUMATTACHMENTIMPL
104/* 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