NATEngineImpl.h revision 1cd59fdf671ca60c64d77e3f7046aaecf7003824
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/* $Id$ */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/** @file
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync *
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * VirtualBox COM class implementation
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/*
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync * Copyright (C) 2006-2012 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
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync#ifndef ____H_NATENGINE
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync#define ____H_NATENGINE
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),
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync mDNSPassDomain(TRUE),
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync mDNSProxy(FALSE),
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync 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 */
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync Utf8Str mTFTPPrefix;
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync Utf8Str mTFTPBootFile;
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync Utf8Str mTFTPNextServer;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync /* DNS service */
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync BOOL mDNSPassDomain;
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync BOOL mDNSProxy;
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync 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)
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync VBOX_DEFAULT_INTERFACE_ENTRIES(INATEngine)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync END_COM_MAP()
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync DECLARE_EMPTY_CTOR_DTOR(NATEngine)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync HRESULT FinalConstruct();
b4bcdbd7ac35c938e6f71a6403fe9f3ebf106a07vboxsync HRESULT init(Machine *aParent, INetworkAdapter *aAdapter);
b4bcdbd7ac35c938e6f71a6403fe9f3ebf106a07vboxsync HRESULT init(Machine *aParent, INetworkAdapter *aAdapter, NATEngine *aThat);
b4bcdbd7ac35c938e6f71a6403fe9f3ebf106a07vboxsync HRESULT initCopy(Machine *aParent, INetworkAdapter *aAdapter, 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
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMSETTER(Network))(IN_BSTR aNetwork);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMGETTER(Network))(BSTR *aNetwork);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMSETTER(HostIP))(IN_BSTR aBindIP);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMGETTER(HostIP))(BSTR *aBindIP);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync /* TFTP attributes */
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMSETTER(TFTPPrefix))(IN_BSTR aTFTPPrefix);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMGETTER(TFTPPrefix))(BSTR *aTFTPPrefix);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMSETTER(TFTPBootFile))(IN_BSTR aTFTPBootFile);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMGETTER(TFTPBootFile))(BSTR *aTFTPBootFile);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMSETTER(TFTPNextServer))(IN_BSTR aTFTPNextServer);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMGETTER(TFTPNextServer))(BSTR *aTFTPNextServer);
62a515eec8de1b7804ec6997c0f2013fef5c5a6bvboxsync /* Alias attributes */
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMSETTER(AliasMode))(ULONG aAliasLog);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMGETTER(AliasMode))(ULONG *aAliasLog);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync /* DNS attributes */
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMSETTER(DNSPassDomain))(BOOL aDNSPassDomain);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMGETTER(DNSPassDomain))(BOOL *aDNSPassDomain);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMSETTER(DNSProxy))(BOOL aDNSProxy);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMGETTER(DNSProxy))(BOOL *aDNSProxy);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync STDMETHOD(COMGETTER(DNSUseHostResolver))(BOOL *aDNSUseHostResolver);
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync 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
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync 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;
b4bcdbd7ac35c938e6f71a6403fe9f3ebf106a07vboxsync INetworkAdapter * const mAdapter;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync};
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync#endif