Module: wine Branch: master Commit: 11a6f3539f6b3cf4ab61fbc1a64f7ea0a024a974 URL: http://source.winehq.org/git/wine.git/?a=commit;h=11a6f3539f6b3cf4ab61fbc1a6...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Apr 7 00:14:26 2009 +0200
urlmon: Added DeCompMimeFilter stub implementation.
---
dlls/urlmon/Makefile.in | 1 + dlls/urlmon/mimefilter.c | 192 +++++++++++++++++++++++++++++++++++++++++++++ dlls/urlmon/urlmon_main.c | 5 +- dlls/urlmon/urlmon_main.h | 1 + 4 files changed, 198 insertions(+), 1 deletions(-)
diff --git a/dlls/urlmon/Makefile.in b/dlls/urlmon/Makefile.in index 825eab2..bd6a256 100644 --- a/dlls/urlmon/Makefile.in +++ b/dlls/urlmon/Makefile.in @@ -17,6 +17,7 @@ C_SRCS = \ gopher.c \ http.c \ internet.c \ + mimefilter.c \ mk.c \ protocol.c \ regsvr.c \ diff --git a/dlls/urlmon/mimefilter.c b/dlls/urlmon/mimefilter.c new file mode 100644 index 0000000..9964612 --- /dev/null +++ b/dlls/urlmon/mimefilter.c @@ -0,0 +1,192 @@ +/* + * Copyright 2009 Jacek Caban for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "urlmon_main.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(urlmon); + +typedef struct { + const IInternetProtocolVtbl *lpIInternetProtocolVtbl; + + LONG ref; +} MimeFilter; + +#define PROTOCOL(x) ((IInternetProtocol*) &(x)->lpIInternetProtocolVtbl) + +#define PROTOCOL_THIS(iface) DEFINE_THIS(MimeFilter, IInternetProtocol, iface) + +static HRESULT WINAPI MimeFilterProtocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + + *ppv = NULL; + if(IsEqualGUID(&IID_IUnknown, riid)) { + TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); + *ppv = PROTOCOL(This); + }else if(IsEqualGUID(&IID_IInternetProtocolRoot, riid)) { + TRACE("(%p)->(IID_IInternetProtocolRoot %p)\n", This, ppv); + *ppv = PROTOCOL(This); + }else if(IsEqualGUID(&IID_IInternetProtocol, riid)) { + TRACE("(%p)->(IID_IInternetProtocol %p)\n", This, ppv); + *ppv = PROTOCOL(This); + } + + if(*ppv) { + IInternetProtocol_AddRef(iface); + return S_OK; + } + + WARN("not supported interface %s\n", debugstr_guid(riid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI MimeFilterProtocol_AddRef(IInternetProtocol *iface) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + LONG ref = InterlockedIncrement(&This->ref); + TRACE("(%p) ref=%d\n", This, ref); + return ref; +} + +static ULONG WINAPI MimeFilterProtocol_Release(IInternetProtocol *iface) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if(!ref) { + heap_free(This); + + URLMON_UnlockModule(); + } + + return ref; +} + +static HRESULT WINAPI MimeFilterProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl, + IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, + DWORD grfPI, HANDLE_PTR dwReserved) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + FIXME("(%p)->(%s %p %p %08x %lx)\n", This, debugstr_w(szUrl), pOIProtSink, + pOIBindInfo, grfPI, dwReserved); + return E_NOTIMPL; +} + +static HRESULT WINAPI MimeFilterProtocol_Continue(IInternetProtocol *iface, PROTOCOLDATA *pProtocolData) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + FIXME("(%p)->(%p)\n", This, pProtocolData); + return E_NOTIMPL; +} + +static HRESULT WINAPI MimeFilterProtocol_Abort(IInternetProtocol *iface, HRESULT hrReason, + DWORD dwOptions) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + FIXME("(%p)->(%08x %08x)\n", This, hrReason, dwOptions); + return E_NOTIMPL; +} + +static HRESULT WINAPI MimeFilterProtocol_Terminate(IInternetProtocol *iface, DWORD dwOptions) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + FIXME("(%p)->(%08x)\n", This, dwOptions); + return E_NOTIMPL; +} + +static HRESULT WINAPI MimeFilterProtocol_Suspend(IInternetProtocol *iface) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI MimeFilterProtocol_Resume(IInternetProtocol *iface) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI MimeFilterProtocol_Read(IInternetProtocol *iface, void *pv, + ULONG cb, ULONG *pcbRead) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + FIXME("(%p)->(%p %u %p)\n", This, pv, cb, pcbRead); + return E_NOTIMPL; +} + +static HRESULT WINAPI MimeFilterProtocol_Seek(IInternetProtocol *iface, LARGE_INTEGER dlibMove, + DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + FIXME("(%p)->(%d %d %p)\n", This, dlibMove.u.LowPart, dwOrigin, plibNewPosition); + return E_NOTIMPL; +} + +static HRESULT WINAPI MimeFilterProtocol_LockRequest(IInternetProtocol *iface, DWORD dwOptions) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + FIXME("(%p)->(%08x)\n", This, dwOptions); + return E_NOTIMPL; +} + +static HRESULT WINAPI MimeFilterProtocol_UnlockRequest(IInternetProtocol *iface) +{ + MimeFilter *This = PROTOCOL_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +#undef PROTOCOL_THIS + +static const IInternetProtocolVtbl MimeFilterProtocolVtbl = { + MimeFilterProtocol_QueryInterface, + MimeFilterProtocol_AddRef, + MimeFilterProtocol_Release, + MimeFilterProtocol_Start, + MimeFilterProtocol_Continue, + MimeFilterProtocol_Abort, + MimeFilterProtocol_Terminate, + MimeFilterProtocol_Suspend, + MimeFilterProtocol_Resume, + MimeFilterProtocol_Read, + MimeFilterProtocol_Seek, + MimeFilterProtocol_LockRequest, + MimeFilterProtocol_UnlockRequest +}; + +HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj) +{ + MimeFilter *ret; + + TRACE("(%p %p)\n", pUnkOuter, ppobj); + + URLMON_LockModule(); + + ret = heap_alloc_zero(sizeof(MimeFilter)); + + ret->lpIInternetProtocolVtbl = &MimeFilterProtocolVtbl; + ret->ref = 1; + + *ppobj = PROTOCOL(ret); + return S_OK; +} diff --git a/dlls/urlmon/urlmon_main.c b/dlls/urlmon/urlmon_main.c index ad1b07b..8561937 100644 --- a/dlls/urlmon/urlmon_main.c +++ b/dlls/urlmon/urlmon_main.c @@ -187,6 +187,8 @@ static const ClassFactory ZoneManagerCF = { &ClassFactoryVtbl, ZoneMgrImpl_Construct}; static const ClassFactory StdURLMonikerCF = { &ClassFactoryVtbl, StdURLMoniker_Construct}; +static const ClassFactory MimeFilterCF = + { &ClassFactoryVtbl, MimeFilter_Construct};
struct object_creation_info { @@ -212,7 +214,8 @@ static const struct object_creation_info object_creation[] = { &CLSID_MkProtocol, CLASSFACTORY(&MkProtocolCF), wszMk }, { &CLSID_InternetSecurityManager, CLASSFACTORY(&SecurityManagerCF), NULL }, { &CLSID_InternetZoneManager, CLASSFACTORY(&ZoneManagerCF), NULL }, - { &CLSID_StdURLMoniker, CLASSFACTORY(&StdURLMonikerCF), NULL } + { &CLSID_StdURLMoniker, CLASSFACTORY(&StdURLMonikerCF), NULL }, + { &CLSID_DeCompMimeFilter, CLASSFACTORY(&MimeFilterCF), NULL } };
static void init_session(BOOL init) diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h index 0d9a966..1ee2eec 100644 --- a/dlls/urlmon/urlmon_main.h +++ b/dlls/urlmon/urlmon_main.h @@ -45,6 +45,7 @@ extern HRESULT HttpSProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT FtpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT GopherProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT MkProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); +extern HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
/********************************************************************** * Dll lifetime tracking declaration for urlmon.dll