Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenipv4.cpp
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS BDA Proxy 00004 * FILE: dll/directx/msdvbnp/ipv4.cpp 00005 * PURPOSE: IBDA_IPV4Filter interface 00006 * 00007 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org) 00008 */ 00009 #include "precomp.h" 00010 00011 class CIPV4Filter : public IBDA_IPV4Filter 00012 { 00013 public: 00014 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); 00015 STDMETHODIMP_(ULONG) AddRef(); 00016 STDMETHODIMP_(ULONG) Release(); 00017 00018 //IBDA_IPV4Filter 00019 HRESULT STDMETHODCALLTYPE GetMulticastListSize(ULONG *pulcbAddresses); 00020 HRESULT STDMETHODCALLTYPE PutMulticastList(ULONG ulcbAddresses, BYTE * pAddressList); 00021 HRESULT STDMETHODCALLTYPE GetMulticastList(ULONG *pulcbAddresses, BYTE *pAddressList); 00022 HRESULT STDMETHODCALLTYPE PutMulticastMode(ULONG ulModeMask); 00023 HRESULT STDMETHODCALLTYPE GetMulticastMode(ULONG *pulModeMask); 00024 00025 00026 CIPV4Filter(IBDA_NetworkProvider * pNetworkProvider); 00027 virtual ~CIPV4Filter(); 00028 00029 protected: 00030 IBDA_NetworkProvider * m_pNetworkProvider; 00031 ULONG m_ulcbAddresses; 00032 BYTE * m_pAddressList; 00033 ULONG m_ulModeMask; 00034 }; 00035 00036 CIPV4Filter::CIPV4Filter( 00037 IBDA_NetworkProvider * pNetworkProvider) : m_pNetworkProvider(pNetworkProvider), 00038 m_ulcbAddresses(0), 00039 m_pAddressList(0), 00040 m_ulModeMask(0) 00041 { 00042 } 00043 00044 CIPV4Filter::~CIPV4Filter() 00045 { 00046 if (m_pAddressList) 00047 CoTaskMemFree(m_pAddressList); 00048 } 00049 00050 00051 HRESULT 00052 STDMETHODCALLTYPE 00053 CIPV4Filter::QueryInterface( 00054 REFIID InterfaceId, 00055 PVOID* Interface) 00056 { 00057 assert(m_pNetworkProvider); 00058 return m_pNetworkProvider->QueryInterface(InterfaceId, Interface); 00059 } 00060 00061 ULONG 00062 STDMETHODCALLTYPE 00063 CIPV4Filter::AddRef() 00064 { 00065 assert(m_pNetworkProvider); 00066 return m_pNetworkProvider->AddRef(); 00067 } 00068 00069 ULONG 00070 STDMETHODCALLTYPE 00071 CIPV4Filter::Release() 00072 { 00073 assert(m_pNetworkProvider); 00074 return m_pNetworkProvider->Release(); 00075 } 00076 00077 //------------------------------------------------------------------- 00078 //IBDA_IPV4Filter 00079 // 00080 00081 00082 HRESULT 00083 STDMETHODCALLTYPE 00084 CIPV4Filter::GetMulticastListSize( 00085 ULONG *pulcbAddresses) 00086 { 00087 if (!pulcbAddresses) 00088 return E_POINTER; 00089 00090 *pulcbAddresses = 0; 00091 return NOERROR; 00092 } 00093 00094 HRESULT 00095 STDMETHODCALLTYPE 00096 CIPV4Filter::PutMulticastList( 00097 ULONG ulcbAddresses, 00098 BYTE * pAddressList) 00099 { 00100 if (!ulcbAddresses || !pAddressList) 00101 return E_POINTER; 00102 00103 if (m_pAddressList) 00104 CoTaskMemFree(m_pAddressList); 00105 00106 m_pAddressList = (BYTE*)CoTaskMemAlloc(ulcbAddresses); 00107 if (!m_pAddressList) 00108 return E_OUTOFMEMORY; 00109 00110 CopyMemory(m_pAddressList, pAddressList, ulcbAddresses); 00111 m_ulcbAddresses = ulcbAddresses; 00112 return NOERROR; 00113 } 00114 00115 HRESULT 00116 STDMETHODCALLTYPE 00117 CIPV4Filter::GetMulticastList( 00118 ULONG *pulcbAddresses, 00119 BYTE *pAddressList) 00120 { 00121 if (!pulcbAddresses || !pAddressList) 00122 return E_POINTER; 00123 00124 if (*pulcbAddresses < m_ulcbAddresses) 00125 return E_OUTOFMEMORY; 00126 00127 CopyMemory(pAddressList, m_pAddressList, m_ulcbAddresses); 00128 *pulcbAddresses = m_ulcbAddresses; 00129 return NOERROR; 00130 } 00131 00132 HRESULT 00133 STDMETHODCALLTYPE 00134 CIPV4Filter::PutMulticastMode( 00135 ULONG ulModeMask) 00136 { 00137 m_ulModeMask = ulModeMask; 00138 return NOERROR; 00139 } 00140 00141 HRESULT 00142 STDMETHODCALLTYPE 00143 CIPV4Filter::GetMulticastMode( 00144 ULONG *pulModeMask) 00145 { 00146 *pulModeMask = m_ulModeMask; 00147 return NOERROR; 00148 } 00149 00150 HRESULT 00151 WINAPI 00152 CIPV4Filter_fnConstructor( 00153 IBDA_NetworkProvider * pNetworkProvider, 00154 REFIID riid, 00155 LPVOID * ppv) 00156 { 00157 CIPV4Filter * filter = new CIPV4Filter(pNetworkProvider); 00158 00159 if (!filter) 00160 return E_OUTOFMEMORY; 00161 00162 if (FAILED(filter->QueryInterface(riid, ppv))) 00163 { 00164 /* not supported */ 00165 delete filter; 00166 return E_NOINTERFACE; 00167 } 00168 00169 return NOERROR; 00170 } Generated on Fri May 25 2012 04:19:45 for ReactOS by
1.7.6.1
|