ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ethernetfilter.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.