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

mimefilter.c
Go to the documentation of this file.
00001 /*
00002  * Copyright 2009 Jacek Caban for CodeWeavers
00003  *
00004  * This library is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU Lesser General Public
00006  * License as published by the Free Software Foundation; either
00007  * version 2.1 of the License, or (at your option) any later version.
00008  *
00009  * This library is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012  * Lesser General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU Lesser General Public
00015  * License along with this library; if not, write to the Free Software
00016  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00017  */
00018 
00019 #include "urlmon_main.h"
00020 #include "wine/debug.h"
00021 
00022 WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
00023 
00024 typedef struct {
00025     IInternetProtocol     IInternetProtocol_iface;
00026     IInternetProtocolSink IInternetProtocolSink_iface;
00027 
00028     LONG ref;
00029 } MimeFilter;
00030 
00031 static inline MimeFilter *impl_from_IInternetProtocol(IInternetProtocol *iface)
00032 {
00033     return CONTAINING_RECORD(iface, MimeFilter, IInternetProtocol_iface);
00034 }
00035 
00036 static HRESULT WINAPI MimeFilterProtocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
00037 {
00038     MimeFilter *This = impl_from_IInternetProtocol(iface);
00039 
00040     *ppv = NULL;
00041     if(IsEqualGUID(&IID_IUnknown, riid)) {
00042         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
00043         *ppv = &This->IInternetProtocol_iface;
00044     }else if(IsEqualGUID(&IID_IInternetProtocolRoot, riid)) {
00045         TRACE("(%p)->(IID_IInternetProtocolRoot %p)\n", This, ppv);
00046         *ppv = &This->IInternetProtocol_iface;
00047     }else if(IsEqualGUID(&IID_IInternetProtocol, riid)) {
00048         TRACE("(%p)->(IID_IInternetProtocol %p)\n", This, ppv);
00049         *ppv = &This->IInternetProtocol_iface;
00050     }else if(IsEqualGUID(&IID_IInternetProtocolSink, riid)) {
00051         TRACE("(%p)->(IID_IInternetProtocolSink %p)\n", This, ppv);
00052         *ppv = &This->IInternetProtocolSink_iface;
00053     }
00054 
00055     if(*ppv) {
00056         IInternetProtocol_AddRef(iface);
00057         return S_OK;
00058     }
00059 
00060     WARN("not supported interface %s\n", debugstr_guid(riid));
00061     return E_NOINTERFACE;
00062 }
00063 
00064 static ULONG WINAPI MimeFilterProtocol_AddRef(IInternetProtocol *iface)
00065 {
00066     MimeFilter *This = impl_from_IInternetProtocol(iface);
00067     LONG ref = InterlockedIncrement(&This->ref);
00068     TRACE("(%p) ref=%d\n", This, ref);
00069     return ref;
00070 }
00071 
00072 static ULONG WINAPI MimeFilterProtocol_Release(IInternetProtocol *iface)
00073 {
00074     MimeFilter *This = impl_from_IInternetProtocol(iface);
00075     LONG ref = InterlockedDecrement(&This->ref);
00076 
00077     TRACE("(%p) ref=%d\n", This, ref);
00078 
00079     if(!ref) {
00080         heap_free(This);
00081 
00082         URLMON_UnlockModule();
00083     }
00084 
00085     return ref;
00086 }
00087 
00088 static HRESULT WINAPI MimeFilterProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
00089         IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo,
00090         DWORD grfPI, HANDLE_PTR dwReserved)
00091 {
00092     MimeFilter *This = impl_from_IInternetProtocol(iface);
00093     FIXME("(%p)->(%s %p %p %08x %lx)\n", This, debugstr_w(szUrl), pOIProtSink,
00094           pOIBindInfo, grfPI, dwReserved);
00095     return E_NOTIMPL;
00096 }
00097 
00098 static HRESULT WINAPI MimeFilterProtocol_Continue(IInternetProtocol *iface, PROTOCOLDATA *pProtocolData)
00099 {
00100     MimeFilter *This = impl_from_IInternetProtocol(iface);
00101     FIXME("(%p)->(%p)\n", This, pProtocolData);
00102     return E_NOTIMPL;
00103 }
00104 
00105 static HRESULT WINAPI MimeFilterProtocol_Abort(IInternetProtocol *iface, HRESULT hrReason,
00106         DWORD dwOptions)
00107 {
00108     MimeFilter *This = impl_from_IInternetProtocol(iface);
00109     FIXME("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
00110     return E_NOTIMPL;
00111 }
00112 
00113 static HRESULT WINAPI MimeFilterProtocol_Terminate(IInternetProtocol *iface, DWORD dwOptions)
00114 {
00115     MimeFilter *This = impl_from_IInternetProtocol(iface);
00116     FIXME("(%p)->(%08x)\n", This, dwOptions);
00117     return E_NOTIMPL;
00118 }
00119 
00120 static HRESULT WINAPI MimeFilterProtocol_Suspend(IInternetProtocol *iface)
00121 {
00122     MimeFilter *This = impl_from_IInternetProtocol(iface);
00123     FIXME("(%p)\n", This);
00124     return E_NOTIMPL;
00125 }
00126 
00127 static HRESULT WINAPI MimeFilterProtocol_Resume(IInternetProtocol *iface)
00128 {
00129     MimeFilter *This = impl_from_IInternetProtocol(iface);
00130     FIXME("(%p)\n", This);
00131     return E_NOTIMPL;
00132 }
00133 
00134 static HRESULT WINAPI MimeFilterProtocol_Read(IInternetProtocol *iface, void *pv,
00135         ULONG cb, ULONG *pcbRead)
00136 {
00137     MimeFilter *This = impl_from_IInternetProtocol(iface);
00138     FIXME("(%p)->(%p %u %p)\n", This, pv, cb, pcbRead);
00139     return E_NOTIMPL;
00140 }
00141 
00142 static HRESULT WINAPI MimeFilterProtocol_Seek(IInternetProtocol *iface, LARGE_INTEGER dlibMove,
00143         DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
00144 {
00145     MimeFilter *This = impl_from_IInternetProtocol(iface);
00146     FIXME("(%p)->(%d %d %p)\n", This, dlibMove.u.LowPart, dwOrigin, plibNewPosition);
00147     return E_NOTIMPL;
00148 }
00149 
00150 static HRESULT WINAPI MimeFilterProtocol_LockRequest(IInternetProtocol *iface, DWORD dwOptions)
00151 {
00152     MimeFilter *This = impl_from_IInternetProtocol(iface);
00153     FIXME("(%p)->(%08x)\n", This, dwOptions);
00154     return E_NOTIMPL;
00155 }
00156 
00157 static HRESULT WINAPI MimeFilterProtocol_UnlockRequest(IInternetProtocol *iface)
00158 {
00159     MimeFilter *This = impl_from_IInternetProtocol(iface);
00160     FIXME("(%p)\n", This);
00161     return E_NOTIMPL;
00162 }
00163 
00164 static const IInternetProtocolVtbl MimeFilterProtocolVtbl = {
00165     MimeFilterProtocol_QueryInterface,
00166     MimeFilterProtocol_AddRef,
00167     MimeFilterProtocol_Release,
00168     MimeFilterProtocol_Start,
00169     MimeFilterProtocol_Continue,
00170     MimeFilterProtocol_Abort,
00171     MimeFilterProtocol_Terminate,
00172     MimeFilterProtocol_Suspend,
00173     MimeFilterProtocol_Resume,
00174     MimeFilterProtocol_Read,
00175     MimeFilterProtocol_Seek,
00176     MimeFilterProtocol_LockRequest,
00177     MimeFilterProtocol_UnlockRequest
00178 };
00179 
00180 static inline MimeFilter *impl_from_IInternetProtocolSink(IInternetProtocolSink *iface)
00181 {
00182     return CONTAINING_RECORD(iface, MimeFilter, IInternetProtocolSink_iface);
00183 }
00184 
00185 static HRESULT WINAPI MimeFilterSink_QueryInterface(IInternetProtocolSink *iface,
00186         REFIID riid, void **ppv)
00187 {
00188     MimeFilter *This = impl_from_IInternetProtocolSink(iface);
00189     return IInternetProtocol_QueryInterface(&This->IInternetProtocol_iface, riid, ppv);
00190 }
00191 
00192 static ULONG WINAPI MimeFilterSink_AddRef(IInternetProtocolSink *iface)
00193 {
00194     MimeFilter *This = impl_from_IInternetProtocolSink(iface);
00195     return IInternetProtocol_AddRef(&This->IInternetProtocol_iface);
00196 }
00197 
00198 static ULONG WINAPI MimeFilterSink_Release(IInternetProtocolSink *iface)
00199 {
00200     MimeFilter *This = impl_from_IInternetProtocolSink(iface);
00201     return IInternetProtocol_Release(&This->IInternetProtocol_iface);
00202 }
00203 
00204 static HRESULT WINAPI MimeFilterSink_Switch(IInternetProtocolSink *iface,
00205         PROTOCOLDATA *pProtocolData)
00206 {
00207     MimeFilter *This = impl_from_IInternetProtocolSink(iface);
00208     FIXME("(%p)->(%p)\n", This, pProtocolData);
00209     return E_NOTIMPL;
00210 }
00211 
00212 static HRESULT WINAPI MimeFilterSink_ReportProgress(IInternetProtocolSink *iface,
00213         ULONG ulStatusCode, LPCWSTR szStatusText)
00214 {
00215     MimeFilter *This = impl_from_IInternetProtocolSink(iface);
00216     FIXME("(%p)->(%u %s)\n", This, ulStatusCode, debugstr_w(szStatusText));
00217     return E_NOTIMPL;
00218 }
00219 
00220 static HRESULT WINAPI MimeFilterSink_ReportData(IInternetProtocolSink *iface,
00221         DWORD grfBSCF, ULONG ulProgress, ULONG ulProgressMax)
00222 {
00223     MimeFilter *This = impl_from_IInternetProtocolSink(iface);
00224     FIXME("(%p)->(%d %u %u)\n", This, grfBSCF, ulProgress, ulProgressMax);
00225     return E_NOTIMPL;
00226 }
00227 
00228 static HRESULT WINAPI MimeFilterSink_ReportResult(IInternetProtocolSink *iface,
00229         HRESULT hrResult, DWORD dwError, LPCWSTR szResult)
00230 {
00231     MimeFilter *This = impl_from_IInternetProtocolSink(iface);
00232     FIXME("(%p)->(%08x %d %s)\n", This, hrResult, dwError, debugstr_w(szResult));
00233     return E_NOTIMPL;
00234 }
00235 
00236 static const IInternetProtocolSinkVtbl InternetProtocolSinkVtbl = {
00237     MimeFilterSink_QueryInterface,
00238     MimeFilterSink_AddRef,
00239     MimeFilterSink_Release,
00240     MimeFilterSink_Switch,
00241     MimeFilterSink_ReportProgress,
00242     MimeFilterSink_ReportData,
00243     MimeFilterSink_ReportResult
00244 };
00245 
00246 HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
00247 {
00248     MimeFilter *ret;
00249 
00250     TRACE("(%p %p)\n", pUnkOuter, ppobj);
00251 
00252     URLMON_LockModule();
00253 
00254     ret = heap_alloc_zero(sizeof(MimeFilter));
00255 
00256     ret->IInternetProtocol_iface.lpVtbl = &MimeFilterProtocolVtbl;
00257     ret->IInternetProtocolSink_iface.lpVtbl = &InternetProtocolSinkVtbl;
00258     ret->ref = 1;
00259 
00260     *ppobj = &ret->IInternetProtocol_iface;
00261     return S_OK;
00262 }

Generated on Fri May 25 2012 04:24:47 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.