mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 08:15:41 +00:00
[MSDVBNP]
- Implement IBDA_EthernetFilter, IBDA_IPV4Filter, IBDA_IPV6Filter svn path=/trunk/; revision=46569
This commit is contained in:
parent
6a86d097cb
commit
b44642d7fd
6 changed files with 585 additions and 1 deletions
169
reactos/dll/directx/msdvbnp/ethernetfilter.cpp
Normal file
169
reactos/dll/directx/msdvbnp/ethernetfilter.cpp
Normal file
|
@ -0,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;
|
||||||
|
}
|
170
reactos/dll/directx/msdvbnp/ipv4.cpp
Normal file
170
reactos/dll/directx/msdvbnp/ipv4.cpp
Normal file
|
@ -0,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;
|
||||||
|
}
|
167
reactos/dll/directx/msdvbnp/ipv6.cpp
Normal file
167
reactos/dll/directx/msdvbnp/ipv6.cpp
Normal file
|
@ -0,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;
|
||||||
|
}
|
|
@ -22,8 +22,11 @@
|
||||||
<file>classfactory.cpp</file>
|
<file>classfactory.cpp</file>
|
||||||
<file>enum_mediatypes.cpp</file>
|
<file>enum_mediatypes.cpp</file>
|
||||||
<file>enumpins.cpp</file>
|
<file>enumpins.cpp</file>
|
||||||
|
<file>ethernetfilter.cpp</file>
|
||||||
<file>msdvbnp.cpp</file>
|
<file>msdvbnp.cpp</file>
|
||||||
<file>msdvbnp.rc</file>
|
<file>msdvbnp.rc</file>
|
||||||
|
<file>ipv4.cpp</file>
|
||||||
|
<file>ipv6.cpp</file>
|
||||||
<file>networkprovider.cpp</file>
|
<file>networkprovider.cpp</file>
|
||||||
<file>pin.cpp</file>
|
<file>pin.cpp</file>
|
||||||
<file>scanningtuner.cpp</file>
|
<file>scanningtuner.cpp</file>
|
||||||
|
|
|
@ -74,6 +74,9 @@ protected:
|
||||||
GUID m_ClassID;
|
GUID m_ClassID;
|
||||||
DeviceFilterStack m_DeviceFilters;
|
DeviceFilterStack m_DeviceFilters;
|
||||||
IScanningTuner * m_Tuner;
|
IScanningTuner * m_Tuner;
|
||||||
|
IBDA_IPV6Filter * m_IPV6Filter;
|
||||||
|
IBDA_IPV4Filter * m_IPV4Filter;
|
||||||
|
IBDA_EthernetFilter * m_EthernetFilter;
|
||||||
};
|
};
|
||||||
|
|
||||||
HRESULT
|
HRESULT
|
||||||
|
@ -116,6 +119,51 @@ CNetworkProvider::QueryInterface(
|
||||||
return NOERROR;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
if (IsEqualGUID(refiid, IID_IBDA_NetworkProvider))
|
if (IsEqualGUID(refiid, IID_IBDA_NetworkProvider))
|
||||||
{
|
{
|
||||||
*Output = (IBDA_NetworkProvider*)(this);
|
*Output = (IBDA_NetworkProvider*)(this);
|
||||||
|
@ -163,7 +211,10 @@ CNetworkProvider::CNetworkProvider(LPCGUID ClassID) : m_Ref(0),
|
||||||
m_ReferenceClock(0),
|
m_ReferenceClock(0),
|
||||||
m_FilterState(State_Stopped),
|
m_FilterState(State_Stopped),
|
||||||
m_DeviceFilters(),
|
m_DeviceFilters(),
|
||||||
m_Tuner(0)
|
m_Tuner(0),
|
||||||
|
m_IPV6Filter(0),
|
||||||
|
m_IPV4Filter(0),
|
||||||
|
m_EthernetFilter(0)
|
||||||
{
|
{
|
||||||
m_Pins[0] = 0;
|
m_Pins[0] = 0;
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,30 @@ CEnumMediaTypes_fnConstructor(
|
||||||
REFIID riid,
|
REFIID riid,
|
||||||
LPVOID * ppv);
|
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
|
#ifndef _MSC_VER
|
||||||
extern const GUID CLSID_DVBTNetworkProvider;
|
extern const GUID CLSID_DVBTNetworkProvider;
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue