2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/msdvbnp/ethernetfilter.cpp
5 * PURPOSE: IBDA_EthernetFilter interface
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
11 class CEthernetFilter
: public IBDA_EthernetFilter
14 STDMETHODIMP
QueryInterface( REFIID InterfaceId
, PVOID
* Interface
);
16 STDMETHODIMP_(ULONG
) AddRef();
17 STDMETHODIMP_(ULONG
) Release();
20 HRESULT STDMETHODCALLTYPE
GetMulticastListSize(ULONG
*pulcbAddresses
);
21 HRESULT STDMETHODCALLTYPE
PutMulticastList(ULONG ulcbAddresses
, BYTE
* pAddressList
);
22 HRESULT STDMETHODCALLTYPE
GetMulticastList(ULONG
*pulcbAddresses
, BYTE
*pAddressList
);
23 HRESULT STDMETHODCALLTYPE
PutMulticastMode(ULONG ulModeMask
);
24 HRESULT STDMETHODCALLTYPE
GetMulticastMode(ULONG
*pulModeMask
);
27 CEthernetFilter(IBDA_NetworkProvider
* pNetworkProvider
);
28 virtual ~CEthernetFilter();
31 IBDA_NetworkProvider
* m_pNetworkProvider
;
32 ULONG m_ulcbAddresses
;
33 BYTE
* m_pAddressList
;
37 CEthernetFilter::CEthernetFilter(
38 IBDA_NetworkProvider
* pNetworkProvider
) : m_pNetworkProvider(pNetworkProvider
),
45 CEthernetFilter::~CEthernetFilter()
48 CoTaskMemFree(m_pAddressList
);
53 CEthernetFilter::QueryInterface(
57 assert(m_pNetworkProvider
);
58 return m_pNetworkProvider
->QueryInterface(InterfaceId
, Interface
);
63 CEthernetFilter::AddRef()
65 assert(m_pNetworkProvider
);
66 return m_pNetworkProvider
->AddRef();
71 CEthernetFilter::Release()
73 assert(m_pNetworkProvider
);
74 return m_pNetworkProvider
->Release();
77 //-------------------------------------------------------------------
83 CEthernetFilter::PutMulticastList(
87 if (!ulcbAddresses
|| !pAddressList
)
91 CoTaskMemFree(m_pAddressList
);
93 m_pAddressList
= (BYTE
*)CoTaskMemAlloc(ulcbAddresses
);
97 CopyMemory(m_pAddressList
, pAddressList
, ulcbAddresses
);
98 m_ulcbAddresses
= ulcbAddresses
;
104 CEthernetFilter::GetMulticastList(
105 ULONG
*pulcbAddresses
,
108 if (!pulcbAddresses
|| !pAddressList
)
111 if (*pulcbAddresses
< m_ulcbAddresses
)
112 return E_OUTOFMEMORY
;
114 CopyMemory(pAddressList
, m_pAddressList
, m_ulcbAddresses
);
115 *pulcbAddresses
= m_ulcbAddresses
;
121 CEthernetFilter::GetMulticastListSize(
122 ULONG
*pulcbAddresses
)
127 *pulcbAddresses
= m_ulcbAddresses
;
133 CEthernetFilter::PutMulticastMode(
136 m_ulModeMask
= ulModeMask
;
142 CEthernetFilter::GetMulticastMode(
145 *pulModeMask
= m_ulModeMask
;
151 CEthernetFilter_fnConstructor(
152 IBDA_NetworkProvider
* pNetworkProvider
,
156 CEthernetFilter
* filter
= new CEthernetFilter(pNetworkProvider
);
159 return E_OUTOFMEMORY
;
161 if (FAILED(filter
->QueryInterface(riid
, ppv
)))
165 return E_NOINTERFACE
;