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