AdditionsFacilityImpl.h revision 7e027d388f4a1f213776e190c8dacb3b3e6dda21
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync/** @file
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync * VirtualBox COM class implementation
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync */
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync/*
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync * Copyright (C) 2011 Oracle Corporation
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync *
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync * available from http://www.virtualbox.org. This file is free software;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync * you can redistribute it and/or modify it under the terms of the GNU
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync * General Public License (GPL) as published by the Free Software
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync */
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync#ifndef ____H_ADDITIONSFACILITYIMPL
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync#define ____H_ADDITIONSFACILITYIMPL
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync#include "VirtualBoxBase.h"
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync#include <iprt/time.h>
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsyncclass Guest;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsyncclass ATL_NO_VTABLE AdditionsFacility :
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync public VirtualBoxBase,
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync VBOX_SCRIPTABLE_IMPL(IAdditionsFacility)
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync{
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsyncpublic:
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(AdditionsFacility, IAdditionsFacility)
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync DECLARE_NOT_AGGREGATABLE(AdditionsFacility)
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync BEGIN_COM_MAP(AdditionsFacility)
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync VBOX_DEFAULT_INTERFACE_ENTRIES(IAdditionsFacility)
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync END_COM_MAP()
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync DECLARE_EMPTY_CTOR_DTOR(AdditionsFacility)
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync // public initializer/uninitializer for internal purposes only
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync HRESULT init(Guest *aParent, AdditionsFacilityType_T enmFacility, AdditionsFacilityStatus_T enmStatus);
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync void uninit();
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync HRESULT FinalConstruct();
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync void FinalRelease();
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync // IAdditionsFacility properties
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync STDMETHOD(COMGETTER(ClassType))(AdditionsFacilityClass_T *aClass);
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync STDMETHOD(COMGETTER(LastUpdated))(LONG64 *aTimestamp);
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync STDMETHOD(COMGETTER(Name))(BSTR *aName);
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync STDMETHOD(COMGETTER(Status))(AdditionsFacilityStatus_T *aStatus);
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync STDMETHOD(COMGETTER(Type))(AdditionsFacilityType_T *aType);
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsyncpublic:
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync /** Facility <-> string mappings. */
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync struct FacilityInfo
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync {
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync /** The facilitie's name. */
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync const char *mName; /* utf-8 */
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync /** The facilitie's type. */
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync AdditionsFacilityType_T mType;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync /** The facilitie's class. */
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync AdditionsFacilityClass_T mClass;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync };
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync static const FacilityInfo sFacilityInfo[8];
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync // public internal methods
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync static const AdditionsFacility::FacilityInfo &typeToInfo(AdditionsFacilityType_T aType);
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync AdditionsFacilityClass_T getClass() const;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync LONG64 getLastUpdated() const;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync Bstr getName() const;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync AdditionsFacilityStatus_T getStatus() const;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync AdditionsFacilityType_T getType() const;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync HRESULT update(AdditionsFacilityStatus_T aStatus, RTTIMESPEC aTimestamp);
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsyncprivate:
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync struct Data
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync {
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync /** Timestamp of last updated status.
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync * @todo Add a UpdateRecord struct to keep track of all
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync * status changed + their time; nice for some GUIs. */
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync RTTIMESPEC mLastUpdated;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync /** The facilitie's current status. */
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync AdditionsFacilityStatus_T mStatus;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync /** The facilitie's ID/type. */
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync AdditionsFacilityType_T mType;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync } mData;
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync};
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync
cfc61eb1cf1a2418102f57ccc29ae617d165e492vboxsync#endif // ____H_ADDITIONSFACILITYIMPL