NATEngineImpl.h revision 4651430e55b9df9726347e3e3968618e540fe729
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/* $Id$ */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/** @file
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync *
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * VirtualBox COM class implementation
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/*
e64031e20c39650a7bc902a3e1aba613b9415deevboxsync * Copyright (C) 2006-2009 Oracle Corporation
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
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync#ifndef ____H_NATDRIVER
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync#define ____H_NATDRIVER
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync#include "VirtualBoxBase.h"
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync#include <VBox/settings.h>
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
4651430e55b9df9726347e3e3968618e540fe729vboxsyncnamespace settings
4651430e55b9df9726347e3e3968618e540fe729vboxsync{
4651430e55b9df9726347e3e3968618e540fe729vboxsync struct NAT;
4651430e55b9df9726347e3e3968618e540fe729vboxsync}
4651430e55b9df9726347e3e3968618e540fe729vboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsyncclass ATL_NO_VTABLE NATEngine :
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync public VirtualBoxBase,
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync VBOX_SCRIPTABLE_IMPL(INATEngine)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync{
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync public:
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync typedef std::map<Utf8Str, settings::NATRule> NATRuleMap;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync struct Data
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync {
52f9ad797d03dd054af66b02e6decc09520e726evboxsync Data() : mMtu(0),
52f9ad797d03dd054af66b02e6decc09520e726evboxsync mSockRcv(0),
52f9ad797d03dd054af66b02e6decc09520e726evboxsync mSockSnd(0),
52f9ad797d03dd054af66b02e6decc09520e726evboxsync mTcpRcv(0),
52f9ad797d03dd054af66b02e6decc09520e726evboxsync mTcpSnd(0),
52f9ad797d03dd054af66b02e6decc09520e726evboxsync mDnsPassDomain(TRUE),
52f9ad797d03dd054af66b02e6decc09520e726evboxsync mDnsProxy(FALSE),
52f9ad797d03dd054af66b02e6decc09520e726evboxsync mDnsUseHostResolver(FALSE),
52f9ad797d03dd054af66b02e6decc09520e726evboxsync mAliasMode(0)
52f9ad797d03dd054af66b02e6decc09520e726evboxsync {}
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;
62a515eec8de1b7804ec6997c0f2013fef5c5a6bvboxsync /* Alias service */
52f9ad797d03dd054af66b02e6decc09520e726evboxsync ULONG mAliasMode;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync };
e07acfb7f2dbb8bb40804024c79fd3139bdb3f24vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(NATEngine, INATEngine)
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
9ef65ad9bc1e64e6cc284af3296fc2fb19d584devboxsync STDMETHOD(COMSETTER(Network)) (IN_BSTR aNetwork);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(Network)) (BSTR *aNetwork);
9ef65ad9bc1e64e6cc284af3296fc2fb19d584devboxsync STDMETHOD(COMSETTER(HostIP)) (IN_BSTR aBindIP);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(HostIP)) (BSTR *aBindIP);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync /* TFTP attributes */
9ef65ad9bc1e64e6cc284af3296fc2fb19d584devboxsync STDMETHOD(COMSETTER(TftpPrefix)) (IN_BSTR aTftpPrefix);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(TftpPrefix)) (BSTR *aTftpPrefix);
9ef65ad9bc1e64e6cc284af3296fc2fb19d584devboxsync STDMETHOD(COMSETTER(TftpBootFile)) (IN_BSTR aTftpBootFile);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(TftpBootFile)) (BSTR *aTftpBootFile);
9ef65ad9bc1e64e6cc284af3296fc2fb19d584devboxsync STDMETHOD(COMSETTER(TftpNextServer)) (IN_BSTR aTftpNextServer);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(COMGETTER(TftpNextServer)) (BSTR *aTftpNextServer);
62a515eec8de1b7804ec6997c0f2013fef5c5a6bvboxsync /* Alias attributes */
62a515eec8de1b7804ec6997c0f2013fef5c5a6bvboxsync STDMETHOD(COMSETTER(AliasMode)) (ULONG aAliasLog);
62a515eec8de1b7804ec6997c0f2013fef5c5a6bvboxsync STDMETHOD(COMGETTER(AliasMode)) (ULONG *aAliasLog);
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));
28179bd842ee78daf579903910dedeba5dcd264bvboxsync STDMETHOD(AddRedirect)(IN_BSTR aName, NATProtocol_T aProto, IN_BSTR aBindIp, USHORT aHostPort, IN_BSTR aGuestIP, USHORT aGuestPort);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync STDMETHOD(RemoveRedirect)(IN_BSTR aName);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsyncprivate:
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync Backupable<Data> mData;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync bool m_fModified;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync const ComObjPtr<NATEngine> mPeer;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync Machine * const mParent;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync NATRuleMap mNATRules;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync};
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync#endif