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