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