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