VirtualBox

Changeset 49835 in vbox


Ignore:
Timestamp:
Dec 9, 2013 11:45:07 AM (11 years ago)
Author:
vboxsync
Message:

VBoxNetLwipNAT.cpp: uses exported functions and listener declaration.

Location:
trunk/src/VBox/NetworkServices/NAT
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/NetworkServices/NAT/Makefile.kmk

    r49735 r49835  
    4848        ../NetLib/VBoxNetIntIf.cpp \
    4949        ../NetLib/VBoxNetUDP.cpp \
    50         ../NetLib/VBoxNetARP.cpp
     50        ../NetLib/VBoxNetARP.cpp \
     51        ../NetLib/ComHostUtils.cpp
    5152
    5253VBoxNetLwipNAT_LIBS = \
  • trunk/src/VBox/NetworkServices/NAT/VBoxNetLwipNAT.cpp

    r49834 r49835  
    7070#endif
    7171
     72#include <map>
    7273#include <vector>
    7374#include <string>
     
    7576#include "../NetLib/VBoxNetLib.h"
    7677#include "../NetLib/VBoxNetBaseService.h"
     78#include "../NetLib/utils.h"
    7779#include "VBoxLwipCore.h"
    7880
     
    118120
    119121
    120 class VBoxNetLwipNAT;
    121 
    122 
    123 class NATNetworkListener
    124 {
    125 public:
    126     NATNetworkListener():m_pNAT(NULL){}
    127 
    128     HRESULT init(VBoxNetLwipNAT *pNAT)
    129     {
    130         AssertPtrReturn(pNAT, E_INVALIDARG);
    131 
    132         m_pNAT = pNAT;
    133         return S_OK;
    134     }
    135 
    136     HRESULT init()
    137     {
    138         m_pNAT = NULL;
    139         return S_OK;
    140     }
    141 
    142     void uninit() { m_pNAT = NULL; }
    143 
    144     STDMETHOD(HandleEvent)(VBoxEventType_T aEventType, IEvent *pEvent);
    145 
    146 private:
    147     VBoxNetLwipNAT *m_pNAT;
    148 };
    149 typedef ListenerImpl<NATNetworkListener, VBoxNetLwipNAT *> NATNetworkListenerImpl;
    150 VBOX_LISTENER_DECLARE(NATNetworkListenerImpl)
    151 
    152 
    153 class VBoxNetLwipNAT: public VBoxNetBaseService
     122
     123class VBoxNetLwipNAT: public VBoxNetBaseService, public NATNetworkEventAdapter
    154124{
    155125    friend class NATNetworkListener;
     
    185155    /* Our NAT network descriptor in Main */
    186156    ComPtr<INATNetwork> m_net;
    187     ComObjPtr<NATNetworkListenerImpl> m_listener;
     157    ComNatListenerPtr m_listener;
    188158
    189159    ComPtr<IHost> m_host;
    190     ComObjPtr<NATNetworkListenerImpl> m_vboxListener;
     160    ComNatListenerPtr m_vboxListener;
    191161    static INTNETSEG aXmitSeg[64];
    192162
    193     STDMETHOD(HandleEvent)(VBoxEventType_T aEventType, IEvent *pEvent);
     163    HRESULT HandleEvent(VBoxEventType_T aEventType, IEvent *pEvent);
    194164
    195165    const char **getHostNameservers();
     
    215185static VBoxNetLwipNAT *g_pLwipNat;
    216186INTNETSEG VBoxNetLwipNAT::aXmitSeg[64];
    217 
    218 STDMETHODIMP NATNetworkListener::HandleEvent(VBoxEventType_T aEventType, IEvent *pEvent)
    219 {
    220     if (m_pNAT)
    221         return m_pNAT->HandleEvent(aEventType, pEvent);
    222     else
    223         return E_FAIL;
    224 }
    225 
    226 
    227187
    228188STDMETHODIMP VBoxNetLwipNAT::HandleEvent(VBoxEventType_T aEventType,
     
    740700int VBoxNetLwipNAT::init()
    741701{
    742     HRESULT hrc;
    743702    LogFlowFuncEnter();
    744703
     
    748707
    749708    std::string networkName = getNetwork();
    750     hrc = virtualbox->FindNATNetworkByName(com::Bstr(networkName.c_str()).raw(),
    751                                                   m_net.asOutParam());
    752     AssertComRCReturn(hrc, VERR_NOT_FOUND);
    753 
    754     hrc = m_listener.createObject();
    755     AssertComRCReturn(hrc, VERR_INTERNAL_ERROR);
    756 
    757     hrc = m_listener->init(new NATNetworkListener(), this);
    758     AssertComRCReturn(hrc, VERR_INTERNAL_ERROR);
    759 
    760     ComPtr<IEventSource> esNet;
    761     hrc = m_net->COMGETTER(EventSource)(esNet.asOutParam());
    762     AssertComRC(hrc);
    763 
    764     com::SafeArray<VBoxEventType_T> aNetEvents;
     709    rc = findNatNetwork(virtualbox, networkName, m_net);
     710    AssertRCReturn(rc, rc);
     711
     712    ComEventTypeArray aNetEvents;
    765713    aNetEvents.push_back(VBoxEventType_OnNATNetworkPortForward);
    766714    aNetEvents.push_back(VBoxEventType_OnNATNetworkSetting);
    767     hrc = esNet->RegisterListener(m_listener, ComSafeArrayAsInParam(aNetEvents), true);
    768     AssertComRCReturn(hrc, VERR_INTERNAL_ERROR);
     715    rc = createNatListener(m_listener, virtualbox, this, aNetEvents);
     716    AssertRCReturn(rc, rc);
    769717
    770718
    771719    // resolver changes are reported on vbox but are retrieved from
    772720    // host so stash a pointer for future lookups
    773     hrc = virtualbox->COMGETTER(Host)(m_host.asOutParam());
     721    HRESULT hrc = virtualbox->COMGETTER(Host)(m_host.asOutParam());
    774722    AssertComRCReturn(hrc, VERR_INTERNAL_ERROR);
    775723
    776     hrc = m_vboxListener.createObject();
    777     AssertComRCReturn(hrc, VERR_INTERNAL_ERROR);
    778 
    779     hrc = m_vboxListener->init(new NATNetworkListener(), this);
    780     AssertComRCReturn(hrc, VERR_INTERNAL_ERROR);
    781 
    782     ComPtr<IEventSource> esVBox;
    783     hrc = virtualbox->COMGETTER(EventSource)(esVBox.asOutParam());
    784     AssertComRC(hrc);
    785 
    786     com::SafeArray<VBoxEventType_T> aVBoxEvents;
     724    ComEventTypeArray aVBoxEvents;
    787725    aVBoxEvents.push_back(VBoxEventType_OnHostNameResolutionConfigurationChange);
    788     hrc = esVBox->RegisterListener(m_vboxListener, ComSafeArrayAsInParam(aVBoxEvents), true);
    789     AssertComRCReturn(hrc, VERR_INTERNAL_ERROR);
     726    rc = createNatListener(m_vboxListener, virtualbox, this, aVBoxEvents);
     727    AssertRCReturn(rc, rc);
    790728
    791729    BOOL fIPv6Enabled = FALSE;
Note: See TracChangeset for help on using the changeset viewer.

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