VirtualBox

Ignore:
Timestamp:
Nov 8, 2010 10:16:25 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
67471
Message:

Main,NAT: Managing port-forwarding at runtime. (xTracker/#4835).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/NATEngineImpl.cpp

    r33517 r33825  
    3232////////////////////////////////////////////////////////////////////////////////
    3333
    34 NATEngine::NATEngine():mParent(NULL){}
     34NATEngine::NATEngine():mParent(NULL), mAdapter(NULL){}
    3535NATEngine::~NATEngine(){}
    3636
     
    4040}
    4141
    42 HRESULT NATEngine::init(Machine *aParent)
     42HRESULT NATEngine::init(Machine *aParent, INetworkAdapter *aAdapter)
    4343{
    4444    AutoInitSpan autoInitSpan(this);
     
    5050    mData->mBindIP.setNull();
    5151    unconst(mParent) = aParent;
    52     return S_OK;
    53 }
    54 
    55 HRESULT NATEngine::init(Machine *aParent, NATEngine *aThat)
     52    unconst(mAdapter) = aAdapter;
     53    return S_OK;
     54}
     55
     56HRESULT NATEngine::init(Machine *aParent, INetworkAdapter *aAdapter, NATEngine *aThat)
    5657{
    5758    AutoInitSpan autoInitSpan(this);
     
    7273    }
    7374    unconst(mParent) = aParent;
     75    unconst(mAdapter) = aAdapter;
    7476    unconst(mPeer) = aThat;
    7577    autoInitSpan.setSucceeded();
     
    7779}
    7880
    79 HRESULT NATEngine::initCopy (Machine *aParent, NATEngine *aThat)
     81HRESULT NATEngine::initCopy (Machine *aParent, INetworkAdapter *aAdapter, NATEngine *aThat)
    8082{
    8183    AutoInitSpan autoInitSpan(this);
     
    9698        mNATRules.insert(std::make_pair(it->first, it->second));
    9799    }
     100    unconst(mAdapter) = aAdapter;
    98101    unconst(mParent) = aParent;
    99102    autoInitSpan.setSucceeded();
     
    265268    Utf8Str name = aName;
    266269    settings::NATRule r;
     270    const char *proto;
     271    switch (aProto)
     272    {
     273        case NATProtocol_TCP:
     274            proto = "tcp";
     275            break;
     276        case NATProtocol_UDP:
     277            proto = "udp";
     278            break;
     279        default:
     280            return E_INVALIDARG;
     281    }
    267282    if (name.isEmpty())
    268     {
    269         const char *proto;
    270         switch (aProto)
    271         {
    272             case NATProtocol_TCP:
    273                 proto = "tcp";
    274                 break;
    275             case NATProtocol_UDP:
    276                 proto = "udp";
    277                 break;
    278             default:
    279                 return E_INVALIDARG;
    280         }
    281283        name = Utf8StrFmt("%s_%d_%d", proto, aHostPort, aGuestPort);
    282     }
    283284    r.strName = name.c_str();
    284285    r.u32Proto = aProto;
     
    290291    mParent->setModified(Machine::IsModified_NetworkAdapters);
    291292    m_fModified = true;
     293    alock.release();
     294    mParent->onNATRedirectRuleChange(mAdapter, FALSE, Bstr(name).raw(), aProto, Bstr(r.strHostIP).raw(), r.u16HostPort, Bstr(r.strGuestIP).raw(), r.u16GuestPort);
    292295    return S_OK;
    293296}
     
    300303
    301304    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    302     Utf8Str rule;
    303305    NATRuleMap::iterator it = mNATRules.find(aName);
    304306    if (it == mNATRules.end())
    305307        return E_INVALIDARG;
    306308    mData.backup();
     309    settings::NATRule r = it->second;
     310    Utf8Str strHostIP = r.strHostIP;
     311    Utf8Str strGuestIP = r.strGuestIP;
     312    NATProtocol_T proto = r.u32Proto;
     313    uint16_t u16HostPort = r.u16HostPort;
     314    uint16_t u16GuestPort = r.u16GuestPort;
     315                                                   
    307316    mNATRules.erase(it);
    308317    mParent->setModified(Machine::IsModified_NetworkAdapters);
    309318    m_fModified = true;
     319    alock.release();
     320    mParent->onNATRedirectRuleChange(mAdapter, TRUE, aName, proto, Bstr(strHostIP).raw(), u16HostPort, Bstr(strGuestIP).raw(), u16GuestPort);
    310321    return S_OK;
    311322}
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette