2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/msdvbnp/ipv6.cpp
5 * PURPOSE: IBDA_IPV6Filter interface
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
11 class CIPV6Filter
: public IBDA_IPV6Filter
14 STDMETHODIMP
QueryInterface( REFIID InterfaceId
, PVOID
* Interface
);
15 STDMETHODIMP_(ULONG
) AddRef();
16 STDMETHODIMP_(ULONG
) Release();
19 HRESULT STDMETHODCALLTYPE
GetMulticastListSize(ULONG
*pulcbAddresses
);
20 HRESULT STDMETHODCALLTYPE
PutMulticastList(ULONG ulcbAddresses
, BYTE
* pAddressList
);
21 HRESULT STDMETHODCALLTYPE
GetMulticastList(ULONG
*pulcbAddresses
, BYTE
*pAddressList
);
22 HRESULT STDMETHODCALLTYPE
PutMulticastMode(ULONG ulModeMask
);
23 HRESULT STDMETHODCALLTYPE
GetMulticastMode(ULONG
*pulModeMask
);
25 CIPV6Filter(IBDA_NetworkProvider
* pNetworkProvider
);
26 virtual ~CIPV6Filter();
29 IBDA_NetworkProvider
* m_pNetworkProvider
;
30 ULONG m_ulcbAddresses
;
31 BYTE
* m_pAddressList
;
35 CIPV6Filter::CIPV6Filter(
36 IBDA_NetworkProvider
* pNetworkProvider
) : m_pNetworkProvider(pNetworkProvider
),
43 CIPV6Filter::~CIPV6Filter()
46 CoTaskMemFree(m_pAddressList
);
51 CIPV6Filter::QueryInterface(
55 assert(m_pNetworkProvider
);
56 return m_pNetworkProvider
->QueryInterface(InterfaceId
, Interface
);
63 assert(m_pNetworkProvider
);
64 return m_pNetworkProvider
->AddRef();
69 CIPV6Filter::Release()
71 assert(m_pNetworkProvider
);
72 return m_pNetworkProvider
->Release();
75 //-------------------------------------------------------------------
81 CIPV6Filter::GetMulticastListSize(
82 ULONG
*pulcbAddresses
)
93 CIPV6Filter::GetMulticastList(
94 ULONG
*pulcbAddresses
,
97 if (!pulcbAddresses
|| !pAddressList
)
100 if (*pulcbAddresses
< m_ulcbAddresses
)
101 return E_OUTOFMEMORY
;
103 CopyMemory(pAddressList
, m_pAddressList
, m_ulcbAddresses
);
104 *pulcbAddresses
= m_ulcbAddresses
;
110 CIPV6Filter::PutMulticastList(
114 if (!ulcbAddresses
|| !pAddressList
)
118 CoTaskMemFree(m_pAddressList
);
120 m_pAddressList
= (BYTE
*)CoTaskMemAlloc(ulcbAddresses
);
122 return E_OUTOFMEMORY
;
124 CopyMemory(m_pAddressList
, pAddressList
, ulcbAddresses
);
125 m_ulcbAddresses
= ulcbAddresses
;
131 CIPV6Filter::PutMulticastMode(
134 m_ulModeMask
= ulModeMask
;
140 CIPV6Filter::GetMulticastMode(
143 *pulModeMask
= m_ulModeMask
;
149 CIPV6Filter_fnConstructor(
150 IBDA_NetworkProvider
* pNetworkProvider
,
154 CIPV6Filter
* filter
= new CIPV6Filter(pNetworkProvider
);
157 return E_OUTOFMEMORY
;
159 if (FAILED(filter
->QueryInterface(riid
, ppv
)))
163 return E_NOINTERFACE
;