Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS BDA Proxy * FILE: dll/directx/msdvbnp/ethernetfilter.cpp * PURPOSE: IBDA_EthernetFilter interface * * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org) */#include "precomp.h"
class CEthernetFilter : public IBDA_EthernetFilter{public: STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release();
//IBDA_EthernetFilter HRESULT STDMETHODCALLTYPE GetMulticastListSize(ULONG *pulcbAddresses); HRESULT STDMETHODCALLTYPE PutMulticastList(ULONG ulcbAddresses, BYTE * pAddressList); HRESULT STDMETHODCALLTYPE GetMulticastList(ULONG *pulcbAddresses, BYTE *pAddressList); HRESULT STDMETHODCALLTYPE PutMulticastMode(ULONG ulModeMask); HRESULT STDMETHODCALLTYPE GetMulticastMode(ULONG *pulModeMask);
CEthernetFilter(IBDA_NetworkProvider * pNetworkProvider); virtual ~CEthernetFilter();
protected: IBDA_NetworkProvider * m_pNetworkProvider; ULONG m_ulcbAddresses; BYTE * m_pAddressList; ULONG m_ulModeMask;};
CEthernetFilter::CEthernetFilter( IBDA_NetworkProvider * pNetworkProvider) : m_pNetworkProvider(pNetworkProvider), m_ulcbAddresses(0), m_pAddressList(0), m_ulModeMask(0){}
CEthernetFilter::~CEthernetFilter(){ if (m_pAddressList) CoTaskMemFree(m_pAddressList);}
HRESULTSTDMETHODCALLTYPECEthernetFilter::QueryInterface( REFIID InterfaceId, PVOID* Interface){ assert(m_pNetworkProvider); return m_pNetworkProvider->QueryInterface(InterfaceId, Interface);}
ULONGSTDMETHODCALLTYPECEthernetFilter::AddRef(){ assert(m_pNetworkProvider); return m_pNetworkProvider->AddRef();}
ULONGSTDMETHODCALLTYPECEthernetFilter::Release(){ assert(m_pNetworkProvider); return m_pNetworkProvider->Release();}
//-------------------------------------------------------------------//IBDA_EthernetFilter//
HRESULTSTDMETHODCALLTYPECEthernetFilter::PutMulticastList( ULONG ulcbAddresses, BYTE * pAddressList){ if (!ulcbAddresses || !pAddressList) return E_POINTER;
if (m_pAddressList) CoTaskMemFree(m_pAddressList);
m_pAddressList = (BYTE*)CoTaskMemAlloc(ulcbAddresses); if (!m_pAddressList) return E_OUTOFMEMORY;
CopyMemory(m_pAddressList, pAddressList, ulcbAddresses); m_ulcbAddresses = ulcbAddresses; return NOERROR;}
HRESULTSTDMETHODCALLTYPECEthernetFilter::GetMulticastList( ULONG *pulcbAddresses, BYTE *pAddressList){ if (!pulcbAddresses || !pAddressList) return E_POINTER;
if (*pulcbAddresses < m_ulcbAddresses) return E_OUTOFMEMORY;
CopyMemory(pAddressList, m_pAddressList, m_ulcbAddresses); *pulcbAddresses = m_ulcbAddresses; return NOERROR;}
HRESULTSTDMETHODCALLTYPECEthernetFilter::GetMulticastListSize( ULONG *pulcbAddresses){ if (!pulcbAddresses) return E_POINTER;
*pulcbAddresses = m_ulcbAddresses; return NOERROR;}
HRESULTSTDMETHODCALLTYPECEthernetFilter::PutMulticastMode( ULONG ulModeMask){ m_ulModeMask = ulModeMask; return NOERROR;}
HRESULTSTDMETHODCALLTYPECEthernetFilter::GetMulticastMode( ULONG *pulModeMask){ *pulModeMask = m_ulModeMask; return NOERROR;}
HRESULTWINAPICEthernetFilter_fnConstructor( IBDA_NetworkProvider * pNetworkProvider, REFIID riid, LPVOID * ppv){ CEthernetFilter * filter = new CEthernetFilter(pNetworkProvider);
if (!filter) return E_OUTOFMEMORY;
if (FAILED(filter->QueryInterface(riid, ppv))) { /* not supported */ delete filter; return E_NOINTERFACE; }
return NOERROR;}