Author: janderwald Date: Mon Mar 29 15:12:16 2010 New Revision: 46569
URL: http://svn.reactos.org/svn/reactos?rev=46569&view=rev Log: [MSDVBNP] - Implement IBDA_EthernetFilter, IBDA_IPV4Filter, IBDA_IPV6Filter
Added: trunk/reactos/dll/directx/msdvbnp/ethernetfilter.cpp (with props) trunk/reactos/dll/directx/msdvbnp/ipv4.cpp (with props) trunk/reactos/dll/directx/msdvbnp/ipv6.cpp (with props) Modified: trunk/reactos/dll/directx/msdvbnp/msdvbnp.rbuild trunk/reactos/dll/directx/msdvbnp/networkprovider.cpp trunk/reactos/dll/directx/msdvbnp/precomp.h
Added: trunk/reactos/dll/directx/msdvbnp/ethernetfilter.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/msdvbnp/etherne... ============================================================================== --- trunk/reactos/dll/directx/msdvbnp/ethernetfilter.cpp (added) +++ trunk/reactos/dll/directx/msdvbnp/ethernetfilter.cpp [iso-8859-1] Mon Mar 29 15:12:16 2010 @@ -1,0 +1,169 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS BDA Proxy + * FILE: dll/directx/msdvbnp/ethernetfilter.cpp + * PURPOSE: IBDA_EthernetFilter interface + * + * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org) + */ +#include "precomp.h" + +class CEthernetFilter : public IBDA_EthernetFilter +{ +public: + STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); + + STDMETHODIMP_(ULONG) AddRef(); + STDMETHODIMP_(ULONG) Release(); + + //IBDA_EthernetFilter + 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); + + + CEthernetFilter(IBDA_NetworkProvider * pNetworkProvider); + virtual ~CEthernetFilter(); + +protected: + IBDA_NetworkProvider * m_pNetworkProvider; + ULONG m_ulcbAddresses; + BYTE * m_pAddressList; + ULONG m_ulModeMask; +}; + +CEthernetFilter::CEthernetFilter( + IBDA_NetworkProvider * pNetworkProvider) : m_pNetworkProvider(pNetworkProvider), + m_ulcbAddresses(0), + m_pAddressList(0), + m_ulModeMask(0) +{ +} + +CEthernetFilter::~CEthernetFilter() +{ + if (m_pAddressList) + CoTaskMemFree(m_pAddressList); +} + +HRESULT +STDMETHODCALLTYPE +CEthernetFilter::QueryInterface( + REFIID InterfaceId, + PVOID* Interface) +{ + assert(m_pNetworkProvider); + return m_pNetworkProvider->QueryInterface(InterfaceId, Interface); +} + +ULONG +STDMETHODCALLTYPE +CEthernetFilter::AddRef() +{ + assert(m_pNetworkProvider); + return m_pNetworkProvider->AddRef(); +} + +ULONG +STDMETHODCALLTYPE +CEthernetFilter::Release() +{ + assert(m_pNetworkProvider); + return m_pNetworkProvider->Release(); +} + +//------------------------------------------------------------------- +//IBDA_EthernetFilter +// + +HRESULT +STDMETHODCALLTYPE +CEthernetFilter::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; +} + +HRESULT +STDMETHODCALLTYPE +CEthernetFilter::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; +} + +HRESULT +STDMETHODCALLTYPE +CEthernetFilter::GetMulticastListSize( + ULONG *pulcbAddresses) +{ + if (!pulcbAddresses) + return E_POINTER; + + *pulcbAddresses = m_ulcbAddresses; + return NOERROR; +} + +HRESULT +STDMETHODCALLTYPE +CEthernetFilter::PutMulticastMode( + ULONG ulModeMask) +{ + m_ulModeMask = ulModeMask; + return NOERROR; +} + +HRESULT +STDMETHODCALLTYPE +CEthernetFilter::GetMulticastMode( + ULONG *pulModeMask) +{ + *pulModeMask = m_ulModeMask; + return NOERROR; +} + +HRESULT +WINAPI +CEthernetFilter_fnConstructor( + IBDA_NetworkProvider * pNetworkProvider, + REFIID riid, + LPVOID * ppv) +{ + CEthernetFilter * filter = new CEthernetFilter(pNetworkProvider); + + if (!filter) + return E_OUTOFMEMORY; + + if (FAILED(filter->QueryInterface(riid, ppv))) + { + /* not supported */ + delete filter; + return E_NOINTERFACE; + } + + return NOERROR; +}
Propchange: trunk/reactos/dll/directx/msdvbnp/ethernetfilter.cpp ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/directx/msdvbnp/ipv4.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/msdvbnp/ipv4.cp... ============================================================================== --- trunk/reactos/dll/directx/msdvbnp/ipv4.cpp (added) +++ trunk/reactos/dll/directx/msdvbnp/ipv4.cpp [iso-8859-1] Mon Mar 29 15:12:16 2010 @@ -1,0 +1,170 @@ +/* + * 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 (janderwald@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); +} + + +HRESULT +STDMETHODCALLTYPE +CIPV4Filter::QueryInterface( + REFIID InterfaceId, + PVOID* Interface) +{ + assert(m_pNetworkProvider); + return m_pNetworkProvider->QueryInterface(InterfaceId, Interface); +} + +ULONG +STDMETHODCALLTYPE +CIPV4Filter::AddRef() +{ + assert(m_pNetworkProvider); + return m_pNetworkProvider->AddRef(); +} + +ULONG +STDMETHODCALLTYPE +CIPV4Filter::Release() +{ + assert(m_pNetworkProvider); + return m_pNetworkProvider->Release(); +} + +//------------------------------------------------------------------- +//IBDA_IPV4Filter +// + + +HRESULT +STDMETHODCALLTYPE +CIPV4Filter::GetMulticastListSize( + ULONG *pulcbAddresses) +{ + if (!pulcbAddresses) + return E_POINTER; + + *pulcbAddresses = 0; + return NOERROR; +} + +HRESULT +STDMETHODCALLTYPE +CIPV4Filter::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; +} + +HRESULT +STDMETHODCALLTYPE +CIPV4Filter::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; +} + +HRESULT +STDMETHODCALLTYPE +CIPV4Filter::PutMulticastMode( + ULONG ulModeMask) +{ + m_ulModeMask = ulModeMask; + return NOERROR; +} + +HRESULT +STDMETHODCALLTYPE +CIPV4Filter::GetMulticastMode( + ULONG *pulModeMask) +{ + *pulModeMask = m_ulModeMask; + return NOERROR; +} + +HRESULT +WINAPI +CIPV4Filter_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; +}
Propchange: trunk/reactos/dll/directx/msdvbnp/ipv4.cpp ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/directx/msdvbnp/ipv6.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/msdvbnp/ipv6.cp... ============================================================================== --- trunk/reactos/dll/directx/msdvbnp/ipv6.cpp (added) +++ trunk/reactos/dll/directx/msdvbnp/ipv6.cpp [iso-8859-1] Mon Mar 29 15:12:16 2010 @@ -1,0 +1,167 @@ +/* + * 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 (janderwald@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); +} + +HRESULT +STDMETHODCALLTYPE +CIPV6Filter::QueryInterface( + REFIID InterfaceId, + PVOID* Interface) +{ + assert(m_pNetworkProvider); + return m_pNetworkProvider->QueryInterface(InterfaceId, Interface); +} + +ULONG +STDMETHODCALLTYPE +CIPV6Filter::AddRef() +{ + assert(m_pNetworkProvider); + return m_pNetworkProvider->AddRef(); +} + +ULONG +STDMETHODCALLTYPE +CIPV6Filter::Release() +{ + assert(m_pNetworkProvider); + return m_pNetworkProvider->Release(); +} + +//------------------------------------------------------------------- +//IBDA_IPV6Filter +// + +HRESULT +STDMETHODCALLTYPE +CIPV6Filter::GetMulticastListSize( + ULONG *pulcbAddresses) +{ + if (!pulcbAddresses) + return E_POINTER; + + *pulcbAddresses = 0; + return NOERROR; +} + +HRESULT +STDMETHODCALLTYPE +CIPV6Filter::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; +} + +HRESULT +STDMETHODCALLTYPE +CIPV6Filter::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; +} + +HRESULT +STDMETHODCALLTYPE +CIPV6Filter::PutMulticastMode( + ULONG ulModeMask) +{ + m_ulModeMask = ulModeMask; + return NOERROR; +} + +HRESULT +STDMETHODCALLTYPE +CIPV6Filter::GetMulticastMode( + ULONG *pulModeMask) +{ + *pulModeMask = m_ulModeMask; + return NOERROR; +} + +HRESULT +WINAPI +CIPV6Filter_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; +}
Propchange: trunk/reactos/dll/directx/msdvbnp/ipv6.cpp ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/reactos/dll/directx/msdvbnp/msdvbnp.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/msdvbnp/msdvbnp... ============================================================================== --- trunk/reactos/dll/directx/msdvbnp/msdvbnp.rbuild [iso-8859-1] (original) +++ trunk/reactos/dll/directx/msdvbnp/msdvbnp.rbuild [iso-8859-1] Mon Mar 29 15:12:16 2010 @@ -22,8 +22,11 @@ <file>classfactory.cpp</file> <file>enum_mediatypes.cpp</file> <file>enumpins.cpp</file> + <file>ethernetfilter.cpp</file> <file>msdvbnp.cpp</file> <file>msdvbnp.rc</file> + <file>ipv4.cpp</file> + <file>ipv6.cpp</file> <file>networkprovider.cpp</file> <file>pin.cpp</file> <file>scanningtuner.cpp</file>
Modified: trunk/reactos/dll/directx/msdvbnp/networkprovider.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/msdvbnp/network... ============================================================================== --- trunk/reactos/dll/directx/msdvbnp/networkprovider.cpp [iso-8859-1] (original) +++ trunk/reactos/dll/directx/msdvbnp/networkprovider.cpp [iso-8859-1] Mon Mar 29 15:12:16 2010 @@ -74,6 +74,9 @@ GUID m_ClassID; DeviceFilterStack m_DeviceFilters; IScanningTuner * m_Tuner; + IBDA_IPV6Filter * m_IPV6Filter; + IBDA_IPV4Filter * m_IPV4Filter; + IBDA_EthernetFilter * m_EthernetFilter; };
HRESULT @@ -112,6 +115,51 @@ } m_Tuner->AddRef(); *Output = (IUnknown*)m_Tuner; + + return NOERROR; + } + + if (IsEqualGUID(refiid, IID_IBDA_IPV6Filter)) + { + // construct scanning tuner + if (!m_IPV6Filter) + { + HRESULT hr = CIPV6Filter_fnConstructor((IBDA_NetworkProvider*)this, refiid, (void**)&m_IPV6Filter); + if (FAILED(hr)) + return hr; + } + m_IPV6Filter->AddRef(); + *Output = (IUnknown*)m_IPV6Filter; + + return NOERROR; + } + + if (IsEqualGUID(refiid, IID_IBDA_IPV4Filter)) + { + // construct scanning tuner + if (!m_IPV4Filter) + { + HRESULT hr = CIPV4Filter_fnConstructor((IBDA_NetworkProvider*)this, refiid, (void**)&m_IPV4Filter); + if (FAILED(hr)) + return hr; + } + m_IPV4Filter->AddRef(); + *Output = (IUnknown*)m_IPV4Filter; + + return NOERROR; + } + + if (IsEqualGUID(refiid, IID_IBDA_EthernetFilter)) + { + // construct scanning tuner + if (!m_EthernetFilter) + { + HRESULT hr = CIPV4Filter_fnConstructor((IBDA_NetworkProvider*)this, refiid, (void**)&m_EthernetFilter); + if (FAILED(hr)) + return hr; + } + m_EthernetFilter->AddRef(); + *Output = (IUnknown*)m_EthernetFilter;
return NOERROR; } @@ -163,7 +211,10 @@ m_ReferenceClock(0), m_FilterState(State_Stopped), m_DeviceFilters(), - m_Tuner(0) + m_Tuner(0), + m_IPV6Filter(0), + m_IPV4Filter(0), + m_EthernetFilter(0) { m_Pins[0] = 0;
Modified: trunk/reactos/dll/directx/msdvbnp/precomp.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/msdvbnp/precomp... ============================================================================== --- trunk/reactos/dll/directx/msdvbnp/precomp.h [iso-8859-1] (original) +++ trunk/reactos/dll/directx/msdvbnp/precomp.h [iso-8859-1] Mon Mar 29 15:12:16 2010 @@ -82,6 +82,30 @@ REFIID riid, LPVOID * ppv);
+/* ethernetfilter.cpp */ +HRESULT +WINAPI +CEthernetFilter_fnConstructor( + IBDA_NetworkProvider * pNetworkProvider, + REFIID riid, + LPVOID * ppv); + +/* ipv6.cpp */ +HRESULT +WINAPI +CIPV6Filter_fnConstructor( + IBDA_NetworkProvider * pNetworkProvider, + REFIID riid, + LPVOID * ppv); + +/* ipv4.cpp */ +HRESULT +WINAPI +CIPV4Filter_fnConstructor( + IBDA_NetworkProvider * pNetworkProvider, + REFIID riid, + LPVOID * ppv); + #ifndef _MSC_VER extern const GUID CLSID_DVBTNetworkProvider; #endif