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

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

Generated on Sun May 27 2012 04:21:53 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.