NATEngineImpl.cpp revision 28179bd842ee78daf579903910dedeba5dcd264b
/* $Id$ */
/** @file
* Implementation of INATEngine in VBoxSVC.
*/
/*
* Copyright (C) 2010 Sun Microsystems, Inc.
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 USA or visit http://www.sun.com if you need
* additional information or have any questions.
*/
#include "NATEngineImpl.h"
#include "AutoCaller.h"
#include "Logging.h"
#include "MachineImpl.h"
#include "GuestOSTypeImpl.h"
#include <VBox/settings.h>
// constructor / destructor
////////////////////////////////////////////////////////////////////////////////
{
return S_OK;
}
{
AutoInitSpan autoInitSpan(this);
m_fModified = false;
return S_OK;
}
{
AutoInitSpan autoInitSpan(this);
{
}
return S_OK;
}
{
AutoInitSpan autoInitSpan(this);
{
}
return S_OK;
}
void NATEngine::FinalRelease()
{
uninit();
}
{
AutoUninitSpan autoUninitSpan(this);
if (autoUninitSpan.uninitDone())
return;
}
bool NATEngine::isModified()
{
bool fModified = m_fModified;
return fModified;
}
{
AutoCaller autoCaller(this);
bool fChanged = m_fModified;
if (m_fModified)
{
/* we need to check all data to see whether anything will be changed
* after rollback */
}
m_fModified = false;
return fChanged;
}
{
AutoCaller autoCaller(this);
/* sanity too */
/* lock both for writing since we modify both (mPeer is "master" so locked
* first) */
if (m_fModified)
{
if (mPeer)
{
{
}
}
}
m_fModified = false;
}
NATEngine::GetNetworkSettings(ULONG *aMtu, ULONG *aSockSnd, ULONG *aSockRcv, ULONG *aTcpWndSnd, ULONG *aTcpWndRcv)
{
AutoCaller autoCaller(this);
if (aMtu)
if (aSockSnd)
if (aSockRcv)
if (aTcpWndSnd)
if (aTcpWndRcv)
return S_OK;
}
NATEngine::SetNetworkSettings(ULONG aMtu, ULONG aSockSnd, ULONG aSockRcv, ULONG aTcpWndSnd, ULONG aTcpWndRcv)
{
AutoCaller autoCaller(this);
|| aTcpWndSnd || aTcpWndRcv)
{
m_fModified = true;
}
if (aMtu)
if (aSockSnd)
if (aSockRcv)
if (aTcpWndSnd)
if (aTcpWndRcv)
if (m_fModified)
return S_OK;
}
{
AutoCaller autoCaller(this);
size_t i = 0;
{
}
return S_OK;
}
NATEngine::AddRedirect(IN_BSTR aName, NATProtocol_T aProto, IN_BSTR aBindIp, USHORT aHostPort, IN_BSTR aGuestIP, USHORT aGuestPort)
{
AutoCaller autoCaller(this);
{
const char *proto;
switch (aProto)
{
case NATProtocol_TCP:
proto = "tcp";
break;
case NATProtocol_UDP:
proto = "udp";
break;
default:
return E_INVALIDARG;
}
}
r.u16HostPort = aHostPort;
r.strGuestIP = aGuestIP;
r.u16GuestPort = aGuestPort;
m_fModified = true;
return S_OK;
}
{
AutoCaller autoCaller(this);
return E_INVALIDARG;
m_fModified = true;
return S_OK;
}
{
AutoCaller autoCaller(this);
/* TFTP */
/* DNS */
/* port forwarding */
{
}
m_fModified = false;
return rc;
}
{
AutoCaller autoCaller(this);
/* TFTP */
/* DNS */
m_fModified = false;
return rc;
}
{
AutoCaller autoCaller(this);
{
m_fModified = true;
}
return S_OK;
}
{
AutoCaller autoCaller(this);
{
}
return S_OK;
}
{
AutoCaller autoCaller(this);
{
m_fModified = true;
}
return S_OK;
}
{
AutoCaller autoCaller(this);
return S_OK;
}
{
AutoCaller autoCaller(this);
{
m_fModified = true;
}
return S_OK;
}
{
AutoCaller autoCaller(this);
{
}
return S_OK;
}
{
AutoCaller autoCaller(this);
{
m_fModified = true;
}
return S_OK;
}
{
AutoCaller autoCaller(this);
{
}
return S_OK;
}
{
AutoCaller autoCaller(this);
{
m_fModified = true;
}
return S_OK;
}
{
AutoCaller autoCaller(this);
{
}
return S_OK;
}
/* DNS */
{
AutoCaller autoCaller(this);
{
m_fModified = true;
}
return S_OK;
}
{
AutoCaller autoCaller(this);
return S_OK;
}
{
AutoCaller autoCaller(this);
{
m_fModified = true;
}
return S_OK;
}
{
AutoCaller autoCaller(this);
return S_OK;
}
{
AutoCaller autoCaller(this);
return S_OK;
}
{
AutoCaller autoCaller(this);
{
m_fModified = true;
}
return S_OK;
}