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