Changeset 49835 in vbox
- Timestamp:
- Dec 9, 2013 11:45:07 AM (11 years ago)
- Location:
- trunk/src/VBox/NetworkServices/NAT
- Files:
-
- 2 edited
-
Makefile.kmk (modified) (1 diff)
-
VBoxNetLwipNAT.cpp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/NetworkServices/NAT/Makefile.kmk
r49735 r49835 48 48 ../NetLib/VBoxNetIntIf.cpp \ 49 49 ../NetLib/VBoxNetUDP.cpp \ 50 ../NetLib/VBoxNetARP.cpp 50 ../NetLib/VBoxNetARP.cpp \ 51 ../NetLib/ComHostUtils.cpp 51 52 52 53 VBoxNetLwipNAT_LIBS = \ -
trunk/src/VBox/NetworkServices/NAT/VBoxNetLwipNAT.cpp
r49834 r49835 70 70 #endif 71 71 72 #include <map> 72 73 #include <vector> 73 74 #include <string> … … 75 76 #include "../NetLib/VBoxNetLib.h" 76 77 #include "../NetLib/VBoxNetBaseService.h" 78 #include "../NetLib/utils.h" 77 79 #include "VBoxLwipCore.h" 78 80 … … 118 120 119 121 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 123 class VBoxNetLwipNAT: public VBoxNetBaseService, public NATNetworkEventAdapter 154 124 { 155 125 friend class NATNetworkListener; … … 185 155 /* Our NAT network descriptor in Main */ 186 156 ComPtr<INATNetwork> m_net; 187 Com ObjPtr<NATNetworkListenerImpl>m_listener;157 ComNatListenerPtr m_listener; 188 158 189 159 ComPtr<IHost> m_host; 190 Com ObjPtr<NATNetworkListenerImpl>m_vboxListener;160 ComNatListenerPtr m_vboxListener; 191 161 static INTNETSEG aXmitSeg[64]; 192 162 193 STDMETHOD(HandleEvent)(VBoxEventType_T aEventType, IEvent *pEvent);163 HRESULT HandleEvent(VBoxEventType_T aEventType, IEvent *pEvent); 194 164 195 165 const char **getHostNameservers(); … … 215 185 static VBoxNetLwipNAT *g_pLwipNat; 216 186 INTNETSEG 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 else223 return E_FAIL;224 }225 226 227 187 228 188 STDMETHODIMP VBoxNetLwipNAT::HandleEvent(VBoxEventType_T aEventType, … … 740 700 int VBoxNetLwipNAT::init() 741 701 { 742 HRESULT hrc;743 702 LogFlowFuncEnter(); 744 703 … … 748 707 749 708 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; 765 713 aNetEvents.push_back(VBoxEventType_OnNATNetworkPortForward); 766 714 aNetEvents.push_back(VBoxEventType_OnNATNetworkSetting); 767 hrc = esNet->RegisterListener(m_listener, ComSafeArrayAsInParam(aNetEvents), true);768 Assert ComRCReturn(hrc, VERR_INTERNAL_ERROR);715 rc = createNatListener(m_listener, virtualbox, this, aNetEvents); 716 AssertRCReturn(rc, rc); 769 717 770 718 771 719 // resolver changes are reported on vbox but are retrieved from 772 720 // 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()); 774 722 AssertComRCReturn(hrc, VERR_INTERNAL_ERROR); 775 723 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; 787 725 aVBoxEvents.push_back(VBoxEventType_OnHostNameResolutionConfigurationChange); 788 hrc = esVBox->RegisterListener(m_vboxListener, ComSafeArrayAsInParam(aVBoxEvents), true);789 Assert ComRCReturn(hrc, VERR_INTERNAL_ERROR);726 rc = createNatListener(m_vboxListener, virtualbox, this, aVBoxEvents); 727 AssertRCReturn(rc, rc); 790 728 791 729 BOOL fIPv6Enabled = FALSE;
Note:
See TracChangeset
for help on using the changeset viewer.

