HostNetworkInterfaceImpl.h revision 0010ccca43c2554000fdd0572c7b9cf5ad17ac91
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/** @file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * VirtualBox COM class implementation
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/*
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (C) 2006-2007 innotek GmbH
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This file is part of VirtualBox Open Source Edition (OSE), as
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * available from http://www.virtualbox.org. This file is free software;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * you can redistribute it and/or modify it under the terms of the GNU
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * General Public License as published by the Free Software Foundation,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * distribution. VirtualBox OSE is distributed in the hope that it will
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * be useful, but WITHOUT ANY WARRANTY of any kind.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If you received this file as part of a commercial VirtualBox
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * distribution, then only the terms of your commercial VirtualBox
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * license agreement apply instead of the previous paragraph.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifndef ____H_HOSTNETWORKINTERFACEIMPL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#define ____H_HOSTNETWORKINTERFACEIMPL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifndef RT_OS_WINDOWS
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#error This is Windows only stuff!
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#include "VirtualBoxBase.h"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#include "Collection.h"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterclass ATL_NO_VTABLE HostNetworkInterface :
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public VirtualBoxSupportErrorInfoImpl <HostNetworkInterface, IHostNetworkInterface>,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public VirtualBoxSupportTranslation <HostNetworkInterface>,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public VirtualBoxBase,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public IHostNetworkInterface
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster{
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster HostNetworkInterface();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster virtual ~HostNetworkInterface();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DECLARE_NOT_AGGREGATABLE(HostNetworkInterface)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DECLARE_PROTECT_FINAL_CONSTRUCT()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BEGIN_COM_MAP(HostNetworkInterface)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster COM_INTERFACE_ENTRY(ISupportErrorInfo)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster COM_INTERFACE_ENTRY(IHostNetworkInterface)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster END_COM_MAP()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster NS_DECL_ISUPPORTS
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // public initializer/uninitializer for internal purposes only
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster HRESULT init (Bstr interfaceName, Guid guid);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // IHostNetworkInterface properties
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster STDMETHOD(COMGETTER(Name)) (BSTR *interfaceName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster STDMETHOD(COMGETTER(Id)) (GUIDPARAMOUT guid);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // for VirtualBoxSupportErrorInfoImpl
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster static const wchar_t *getComponentName() { return L"HostNetworkInterface"; }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterprivate:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Bstr mInterfaceName;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Guid mGuid;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster};
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan FosterCOM_DECL_READONLY_ENUM_AND_COLLECTION_BEGIN (HostNetworkInterface)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster STDMETHOD(FindByName) (INPTR BSTR name, IHostNetworkInterface **networkInterface)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!name)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return E_INVALIDARG;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!networkInterface)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return E_POINTER;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *networkInterface = NULL;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Vector::value_type found;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Vector::iterator it = vec.begin();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (it != vec.end() && !found)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Bstr n;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (*it)->COMGETTER(Name) (n.asOutParam());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (n == name)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster found = *it;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ++ it;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!found)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return setError (E_INVALIDARG, HostNetworkInterfaceCollection::tr (
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "The host network interface with the given name could not be found"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return found.queryInterfaceTo (networkInterface);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster STDMETHOD(FindById) (INPTR GUIDPARAM id, IHostNetworkInterface **networkInterface)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (Guid(id).isEmpty())
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return E_INVALIDARG;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!networkInterface)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return E_POINTER;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *networkInterface = NULL;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Vector::value_type found;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Vector::iterator it = vec.begin();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (it != vec.end() && !found)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Guid g;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (*it)->COMGETTER(Id) (g.asOutParam());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (g == Guid(id))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster found = *it;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ++ it;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!found)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return setError (E_INVALIDARG, HostNetworkInterfaceCollection::tr (
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "The host network interface with the given GUID could not be found"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return found.queryInterfaceTo (networkInterface);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan FosterCOM_DECL_READONLY_ENUM_AND_COLLECTION_END (HostNetworkInterface)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif // ____H_H_HOSTNETWORKINTERFACEIMPL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster