ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ipv4.cpp
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:       See COPYING in the top level directory
00003  * PROJECT:         ReactOS BDA Proxy
00004  * FILE:            dll/directx/msdvbnp/ipv4.cpp
00005  * PURPOSE:         IBDA_IPV4Filter interface
00006  *
00007  * PROGRAMMERS:     Johannes Anderwald (janderwald@reactos.org)
00008  */
00009 #include "precomp.h"
00010 
00011 class CIPV4Filter : public IBDA_IPV4Filter
00012 {
00013 public:
00014     STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
00015     STDMETHODIMP_(ULONG) AddRef();
00016     STDMETHODIMP_(ULONG) Release();
00017 
00018     //IBDA_IPV4Filter
00019     HRESULT STDMETHODCALLTYPE GetMulticastListSize(ULONG *pulcbAddresses);
00020     HRESULT STDMETHODCALLTYPE PutMulticastList(ULONG ulcbAddresses, BYTE * pAddressList);
00021     HRESULT STDMETHODCALLTYPE GetMulticastList(ULONG *pulcbAddresses, BYTE *pAddressList);
00022     HRESULT STDMETHODCALLTYPE PutMulticastMode(ULONG ulModeMask);
00023     HRESULT STDMETHODCALLTYPE GetMulticastMode(ULONG *pulModeMask);
00024 
00025 
00026     CIPV4Filter(IBDA_NetworkProvider * pNetworkProvider);
00027     virtual ~CIPV4Filter();
00028 
00029 protected:
00030     IBDA_NetworkProvider * m_pNetworkProvider;
00031     ULONG m_ulcbAddresses;
00032     BYTE * m_pAddressList;
00033     ULONG m_ulModeMask;
00034 };
00035 
00036 CIPV4Filter::CIPV4Filter(
00037     IBDA_NetworkProvider * pNetworkProvider) : m_pNetworkProvider(pNetworkProvider),
00038                                                m_ulcbAddresses(0),
00039                                                m_pAddressList(0),
00040                                                m_ulModeMask(0)
00041 {
00042 }
00043 
00044 CIPV4Filter::~CIPV4Filter()
00045 {
00046     if (m_pAddressList)
00047         CoTaskMemFree(m_pAddressList);
00048 }
00049 
00050 
00051 HRESULT
00052 STDMETHODCALLTYPE
00053 CIPV4Filter::QueryInterface(
00054     REFIID InterfaceId,
00055     PVOID* Interface)
00056 {
00057     assert(m_pNetworkProvider);
00058     return m_pNetworkProvider->QueryInterface(InterfaceId, Interface);
00059 }
00060 
00061 ULONG
00062 STDMETHODCALLTYPE
00063 CIPV4Filter::AddRef()
00064 {
00065     assert(m_pNetworkProvider);
00066     return m_pNetworkProvider->AddRef();
00067 }
00068 
00069 ULONG
00070 STDMETHODCALLTYPE
00071 CIPV4Filter::Release()
00072 {
00073     assert(m_pNetworkProvider);
00074     return m_pNetworkProvider->Release();
00075 }
00076 
00077 //-------------------------------------------------------------------
00078 //IBDA_IPV4Filter
00079 //
00080 
00081 
00082 HRESULT
00083 STDMETHODCALLTYPE
00084 CIPV4Filter::GetMulticastListSize(
00085     ULONG *pulcbAddresses)
00086 {
00087     if (!pulcbAddresses)
00088         return E_POINTER;
00089 
00090     *pulcbAddresses = 0;
00091     return NOERROR;
00092 }
00093 
00094 HRESULT
00095 STDMETHODCALLTYPE
00096 CIPV4Filter::PutMulticastList(
00097     ULONG ulcbAddresses,
00098     BYTE * pAddressList)
00099 {
00100     if (!ulcbAddresses || !pAddressList)
00101         return E_POINTER;
00102 
00103     if (m_pAddressList)
00104         CoTaskMemFree(m_pAddressList);
00105 
00106     m_pAddressList = (BYTE*)CoTaskMemAlloc(ulcbAddresses);
00107     if (!m_pAddressList)
00108         return E_OUTOFMEMORY;
00109 
00110     CopyMemory(m_pAddressList, pAddressList, ulcbAddresses);
00111     m_ulcbAddresses = ulcbAddresses;
00112     return NOERROR;
00113 }
00114 
00115 HRESULT
00116 STDMETHODCALLTYPE
00117 CIPV4Filter::GetMulticastList(
00118     ULONG *pulcbAddresses,
00119     BYTE *pAddressList)
00120 {
00121     if (!pulcbAddresses || !pAddressList)
00122         return E_POINTER;
00123 
00124     if (*pulcbAddresses < m_ulcbAddresses)
00125         return E_OUTOFMEMORY;
00126 
00127     CopyMemory(pAddressList, m_pAddressList, m_ulcbAddresses);
00128     *pulcbAddresses = m_ulcbAddresses;
00129     return NOERROR;
00130 }
00131 
00132 HRESULT
00133 STDMETHODCALLTYPE
00134 CIPV4Filter::PutMulticastMode(
00135     ULONG ulModeMask)
00136 {
00137     m_ulModeMask = ulModeMask;
00138     return NOERROR;
00139 }
00140 
00141 HRESULT
00142 STDMETHODCALLTYPE
00143 CIPV4Filter::GetMulticastMode(
00144     ULONG *pulModeMask)
00145 {
00146     *pulModeMask = m_ulModeMask;
00147     return NOERROR;
00148 }
00149 
00150 HRESULT
00151 WINAPI
00152 CIPV4Filter_fnConstructor(
00153     IBDA_NetworkProvider * pNetworkProvider,
00154     REFIID riid,
00155     LPVOID * ppv)
00156 {
00157     CIPV4Filter * filter = new CIPV4Filter(pNetworkProvider);
00158 
00159     if (!filter)
00160         return E_OUTOFMEMORY;
00161 
00162     if (FAILED(filter->QueryInterface(riid, ppv)))
00163     {
00164         /* not supported */
00165         delete filter;
00166         return E_NOINTERFACE;
00167     }
00168 
00169     return NOERROR;
00170 }

Generated on Fri May 25 2012 04:19:45 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.