Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmimefilter.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
1.7.6.1
|