Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS BDA Proxy * FILE: dll/directx/msdvbnp/ipv4.cpp * PURPOSE: IBDA_IPV4Filter interface * * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org) */#include "precomp.h"
class CIPV4Filter : public IBDA_IPV4Filter{public: STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release();
//IBDA_IPV4Filter 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);
CIPV4Filter(IBDA_NetworkProvider * pNetworkProvider); virtual ~CIPV4Filter();
protected: IBDA_NetworkProvider * m_pNetworkProvider; ULONG m_ulcbAddresses; BYTE * m_pAddressList; ULONG m_ulModeMask;};
CIPV4Filter::CIPV4Filter( IBDA_NetworkProvider * pNetworkProvider) : m_pNetworkProvider(pNetworkProvider), m_ulcbAddresses(0), m_pAddressList(0), m_ulModeMask(0){}
CIPV4Filter::~CIPV4Filter(){ if (m_pAddressList) CoTaskMemFree(m_pAddressList);}
HRESULTSTDMETHODCALLTYPECIPV4Filter::QueryInterface( REFIID InterfaceId, PVOID* Interface){ assert(m_pNetworkProvider); return m_pNetworkProvider->QueryInterface(InterfaceId, Interface);}
ULONGSTDMETHODCALLTYPECIPV4Filter::AddRef(){ assert(m_pNetworkProvider); return m_pNetworkProvider->AddRef();}
ULONGSTDMETHODCALLTYPECIPV4Filter::Release(){ assert(m_pNetworkProvider); return m_pNetworkProvider->Release();}
//-------------------------------------------------------------------//IBDA_IPV4Filter//
HRESULTSTDMETHODCALLTYPECIPV4Filter::GetMulticastListSize( ULONG *pulcbAddresses){ if (!pulcbAddresses) return E_POINTER;
*pulcbAddresses = 0; return NOERROR;}
HRESULTSTDMETHODCALLTYPECIPV4Filter::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;}
HRESULTSTDMETHODCALLTYPECIPV4Filter::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;}
HRESULTSTDMETHODCALLTYPECIPV4Filter::PutMulticastMode( ULONG ulModeMask){ m_ulModeMask = ulModeMask; return NOERROR;}
HRESULTSTDMETHODCALLTYPECIPV4Filter::GetMulticastMode( ULONG *pulModeMask){ *pulModeMask = m_ulModeMask; return NOERROR;}
HRESULTWINAPICIPV4Filter_fnConstructor( IBDA_NetworkProvider * pNetworkProvider, REFIID riid, LPVOID * ppv){ CIPV4Filter * filter = new CIPV4Filter(pNetworkProvider);
if (!filter) return E_OUTOFMEMORY;
if (FAILED(filter->QueryInterface(riid, ppv))) { /* not supported */ delete filter; return E_NOINTERFACE; }
return NOERROR;}