cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/* $Id$ */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/** @file
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync *
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync * VirtualBox COM class implementation
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync */
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync/*
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync * Copyright (C) 2006-2013 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 <VBox/settings.h>
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync#include "NATEngineWrap.h"
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
4651430e55b9df9726347e3e3968618e540fe729vboxsyncnamespace settings
4651430e55b9df9726347e3e3968618e540fe729vboxsync{
4651430e55b9df9726347e3e3968618e540fe729vboxsync struct NAT;
4651430e55b9df9726347e3e3968618e540fe729vboxsync}
4651430e55b9df9726347e3e3968618e540fe729vboxsync
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsyncclass ATL_NO_VTABLE NATEngine :
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync public NATEngineWrap
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync{
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync public:
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync typedef std::map<Utf8Str, settings::NATRule> NATRuleMap;
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
1cd59fdf671ca60c64d77e3f7046aaecf7003824vboxsync DECLARE_EMPTY_CTOR_DTOR(NATEngine)
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync HRESULT FinalConstruct();
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync void FinalRelease();
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync
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 void uninit();
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync bool i_isModified();
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync bool i_rollback();
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync void i_commit();
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT i_loadSettings(const settings::NAT &data);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT i_saveSettings(settings::NAT &data);
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsync
cebc93936b5bb4d867e1c086dd1b206db33c31dcvboxsyncprivate:
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync // wrapped INATEngine properties
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT setNetwork(const com::Utf8Str &aNetwork);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT getNetwork(com::Utf8Str &aNetwork);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT setHostIP(const com::Utf8Str &aHostIP);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT getHostIP(com::Utf8Str &aBindIP);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync /* TFTP properties */
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT setTFTPPrefix(const com::Utf8Str &aTFTPPrefix);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT getTFTPPrefix(com::Utf8Str &aTFTPPrefix);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT setTFTPBootFile(const com::Utf8Str &aTFTPBootFile);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT getTFTPBootFile(com::Utf8Str &aTFTPBootFile);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT setTFTPNextServer(const com::Utf8Str &aTFTPNextServer);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT getTFTPNextServer(com::Utf8Str &aTFTPNextServer);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync /* DNS properties */
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT setDNSPassDomain(BOOL aDNSPassDomain);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT getDNSPassDomain(BOOL *aDNSPassDomain);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT setDNSProxy(BOOL aDNSProxy);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT getDNSProxy(BOOL *aDNSProxy);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT getDNSUseHostResolver(BOOL *aDNSUseHostResolver);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT setDNSUseHostResolver(BOOL aDNSUseHostResolver);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync /* Alias properties */
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT setAliasMode(ULONG aAliasMode);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT getAliasMode(ULONG *aAliasMode);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT getRedirects(std::vector<com::Utf8Str> &aRedirects);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT setNetworkSettings(ULONG aMtu,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync ULONG aSockSnd,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync ULONG aSockRcv,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync ULONG aTcpWndSnd,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync ULONG aTcpWndRcv);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT getNetworkSettings(ULONG *aMtu,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync ULONG *aSockSnd,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync ULONG *aSockRcv,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync ULONG *aTcpWndSnd,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync ULONG *aTcpWndRcv);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT addRedirect(const com::Utf8Str &aName,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync NATProtocol_T aProto,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync const com::Utf8Str &aHostIP,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync USHORT aHostPort,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync const com::Utf8Str &aGuestIP,
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync USHORT aGuestPort);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync HRESULT removeRedirect(const com::Utf8Str &aName);
4a4d0b7611a832602800898d4ec5da6d588b535avboxsync
3107b2cb95b2f8fdc63e118190ac8da07d08c9c8vboxsync struct Data;
3107b2cb95b2f8fdc63e118190ac8da07d08c9c8vboxsync 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