2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/msdvbnp/ipv4.cpp
5 * PURPOSE: IBDA_IPV4Filter interface
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
11 class CIPV4Filter
: public IBDA_IPV4Filter
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
);
26 CIPV4Filter(IBDA_NetworkProvider
* pNetworkProvider
);
27 virtual ~CIPV4Filter();
30 IBDA_NetworkProvider
* m_pNetworkProvider
;
31 ULONG m_ulcbAddresses
;
32 BYTE
* m_pAddressList
;
36 CIPV4Filter::CIPV4Filter(
37 IBDA_NetworkProvider
* pNetworkProvider
) : m_pNetworkProvider(pNetworkProvider
),
44 CIPV4Filter::~CIPV4Filter()
47 CoTaskMemFree(m_pAddressList
);
53 CIPV4Filter::QueryInterface(
57 assert(m_pNetworkProvider
);
58 return m_pNetworkProvider
->QueryInterface(InterfaceId
, Interface
);
65 assert(m_pNetworkProvider
);
66 return m_pNetworkProvider
->AddRef();
71 CIPV4Filter::Release()
73 assert(m_pNetworkProvider
);
74 return m_pNetworkProvider
->Release();
77 //-------------------------------------------------------------------
84 CIPV4Filter::GetMulticastListSize(
85 ULONG
*pulcbAddresses
)
96 CIPV4Filter::PutMulticastList(
100 if (!ulcbAddresses
|| !pAddressList
)
104 CoTaskMemFree(m_pAddressList
);
106 m_pAddressList
= (BYTE
*)CoTaskMemAlloc(ulcbAddresses
);
108 return E_OUTOFMEMORY
;
110 CopyMemory(m_pAddressList
, pAddressList
, ulcbAddresses
);
111 m_ulcbAddresses
= ulcbAddresses
;
117 CIPV4Filter::GetMulticastList(
118 ULONG
*pulcbAddresses
,
121 if (!pulcbAddresses
|| !pAddressList
)
124 if (*pulcbAddresses
< m_ulcbAddresses
)
125 return E_OUTOFMEMORY
;
127 CopyMemory(pAddressList
, m_pAddressList
, m_ulcbAddresses
);
128 *pulcbAddresses
= m_ulcbAddresses
;
134 CIPV4Filter::PutMulticastMode(
137 m_ulModeMask
= ulModeMask
;
143 CIPV4Filter::GetMulticastMode(
146 *pulModeMask
= m_ulModeMask
;
152 CIPV4Filter_fnConstructor(
153 IBDA_NetworkProvider
* pNetworkProvider
,
157 CIPV4Filter
* filter
= new CIPV4Filter(pNetworkProvider
);
160 return E_OUTOFMEMORY
;
162 if (FAILED(filter
->QueryInterface(riid
, ppv
)))
166 return E_NOINTERFACE
;