NATEngineImpl.h revision cebc93936b5bb4d867e1c086dd1b206db33c31dc
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/* $Id$ */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/** @file
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync *
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * VirtualBox COM class implementation
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/*
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * Copyright (C) 2006-2009 Sun Microsystems, Inc.
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync *
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * available from http://www.virtualbox.org. This file is free software;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * you can redistribute it and/or modify it under the terms of the GNU
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * General Public License (GPL) as published by the Free Software
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync *
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * additional information or have any questions.
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync#ifndef ____H_NATDRIVER
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync#define ____H_NATDRIVER
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync#include "VirtualBoxBase.h"
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync#include <VBox/settings.h>
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsyncnamespace settings
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync{
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync struct NAT;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync}
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsyncclass ATL_NO_VTABLE NATEngine :
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync public VirtualBoxBase,
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync public VirtualBoxSupportErrorInfoImpl<NATEngine, INATEngine>,
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync public VirtualBoxSupportTranslation<NATEngine>,
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync VBOX_SCRIPTABLE_IMPL(INATEngine)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync{
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync public:
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync typedef std::map<Utf8Str, settings::NATRule> NATRuleMap;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync struct Data
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync {
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync Data(): mMtu(0),
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync mSockRcv(0),
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync mSockSnd(0),
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync mTcpRcv(0),
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync mTcpSnd(0),
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync mDnsPassDomain(TRUE),
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync mDnsProxy(FALSE),
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync mDnsUseHostResolver(FALSE) {}
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync com::Utf8Str mNetwork;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync com::Utf8Str mBindIP;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync uint32_t mMtu;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync uint32_t mSockRcv;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync uint32_t mSockSnd;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync uint32_t mTcpRcv;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync uint32_t mTcpSnd;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync /* TFTP service */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync Utf8Str mTftpPrefix;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync Utf8Str mTftpBootFile;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync Utf8Str mTftpNextServer;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync /* DNS service */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync BOOL mDnsPassDomain;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync BOOL mDnsProxy;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync BOOL mDnsUseHostResolver;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync };
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (NATEngine)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync DECLARE_NOT_AGGREGATABLE(NATEngine)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync BEGIN_COM_MAP(NATEngine)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync COM_INTERFACE_ENTRY (ISupportErrorInfo)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync COM_INTERFACE_ENTRY (INATEngine)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync COM_INTERFACE_ENTRY2 (IDispatch, INATEngine)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync END_COM_MAP()
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync DECLARE_EMPTY_CTOR_DTOR (NATEngine)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync HRESULT FinalConstruct();
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync HRESULT init(Machine *aParent);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync HRESULT init(Machine *aParent, NATEngine *aThat);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync HRESULT initCopy(Machine *aParent, NATEngine *aThat);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync bool isModified();
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync bool isReallyModified();
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync bool rollback();
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync void commit();
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync void uninit();
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync void FinalRelease();
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync HRESULT loadSettings(const settings::NAT &data);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync HRESULT saveSettings(settings::NAT &data);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMSETTER(Network)) (CBSTR aNetwork);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(Network)) (BSTR *aNetwork);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMSETTER(HostIP)) (CBSTR aBindIP);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(HostIP)) (BSTR *aBindIP);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync /* TFTP attributes */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMSETTER(TftpPrefix)) (CBSTR aTftpPrefix);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(TftpPrefix)) (BSTR *aTftpPrefix);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMSETTER(TftpBootFile)) (CBSTR aTftpBootFile);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(TftpBootFile)) (BSTR *aTftpBootFile);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMSETTER(TftpNextServer)) (CBSTR aTftpNextServer);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(TftpNextServer)) (BSTR *aTftpNextServer);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync /* DNS attributes */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMSETTER(DnsPassDomain)) (BOOL aDnsPassDomain);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(DnsPassDomain)) (BOOL *aDnsPassDomain);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMSETTER(DnsProxy)) (BOOL aDnsProxy);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(DnsProxy)) (BOOL *aDnsProxy);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(DnsUseHostResolver)) (BOOL *aDnsUseHostResolver);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMSETTER(DnsUseHostResolver)) (BOOL aDnsUseHostResolver);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(SetNetworkSettings)(ULONG aMtu, ULONG aSockSnd, ULONG aSockRcv, ULONG aTcpWndSnd, ULONG aTcpWndRcv);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(GetNetworkSettings)(ULONG *aMtu, ULONG *aSockSnd, ULONG *aSockRcv, ULONG *aTcpWndSnd, ULONG *aTcpWndRcv);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(Redirects)) (ComSafeArrayOut (BSTR, aNatRules));
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(AddRedirect)(IN_BSTR aName, PRUint32 aProto, IN_BSTR aBindIp, PRUint16 aHostPort, IN_BSTR aGuestIP, PRUint16 aGuestPort);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(RemoveRedirect)(IN_BSTR aName);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync static const wchar_t *getComponentName() { return L"NATEngine"; }
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsyncprivate:
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync Backupable<Data> mData;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync bool m_fModified;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync const ComObjPtr<NATEngine> mPeer;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync Machine * const mParent;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync NATRuleMap mNATRules;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync};
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync#endif