Piotr Caban : urlmon: Forward IWinInetHttpInfo calls to protocol implementations.
Alexandre Julliard
julliard at winehq.org
Tue Mar 29 11:43:05 CDT 2011
Module: wine
Branch: master
Commit: e1c1b937ebbc4c91ea2415d60e985ea0cead0c09
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e1c1b937ebbc4c91ea2415d60e985ea0cead0c09
Author: Piotr Caban <piotr at codeweavers.com>
Date: Mon Mar 28 23:38:07 2011 +0200
urlmon: Forward IWinInetHttpInfo calls to protocol implementations.
---
dlls/urlmon/binding.c | 28 +++++++++++++++-------------
dlls/urlmon/bindprot.c | 6 +++++-
dlls/urlmon/urlmon_main.h | 1 +
3 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c
index 0d6043c..be72ee1 100644
--- a/dlls/urlmon/binding.c
+++ b/dlls/urlmon/binding.c
@@ -762,19 +762,11 @@ static HRESULT WINAPI Binding_QueryInterface(IBinding *iface, REFIID riid, void
*ppv = &This->IWinInetHttpInfo_iface;
}else if(IsEqualGUID(&IID_IWinInetHttpInfo, riid)) {
- IWinInetHttpInfo *http_info;
- HRESULT hres;
-
TRACE("(%p)->(IID_IWinInetHttpInfo %p)\n", This, ppv);
- if(!This->protocol->wininet_info)
+ if(!This->protocol->wininet_http_info)
return E_NOINTERFACE;
- hres = IWinInetInfo_QueryInterface(This->protocol->wininet_info, &IID_IWinInetHttpInfo, (void**)&http_info);
- if(FAILED(hres))
- return E_NOINTERFACE;
-
- IWinInetHttpInfo_Release(http_info);
*ppv = &This->IWinInetHttpInfo_iface;
}
@@ -1259,16 +1251,26 @@ static HRESULT WINAPI WinInetHttpInfo_QueryOption(IWinInetHttpInfo *iface, DWORD
void *pBuffer, DWORD *pcbBuffer)
{
Binding *This = impl_from_IWinInetHttpInfo(iface);
- FIXME("(%p)->(%x %p %p)\n", This, dwOption, pBuffer, pcbBuffer);
- return E_NOTIMPL;
+ TRACE("(%p)->(%x %p %p)\n", This, dwOption, pBuffer, pcbBuffer);
+
+ if(!This->protocol->wininet_info)
+ return E_FAIL;
+
+ return IWinInetInfo_QueryOption(This->protocol->wininet_info,
+ dwOption, pBuffer, pcbBuffer);
}
static HRESULT WINAPI WinInetHttpInfo_QueryInfo(IWinInetHttpInfo *iface, DWORD dwOption,
void *pBuffer, DWORD *pcbBuffer, DWORD *pdwFlags, DWORD *pdwReserved)
{
Binding *This = impl_from_IWinInetHttpInfo(iface);
- FIXME("(%p)->(%x %p %p %p %p)\n", This, dwOption, pBuffer, pcbBuffer, pdwFlags, pdwReserved);
- return E_NOTIMPL;
+ TRACE("(%p)->(%x %p %p %p %p)\n", This, dwOption, pBuffer, pcbBuffer, pdwFlags, pdwReserved);
+
+ if(!This->protocol->wininet_http_info)
+ return E_FAIL;
+
+ return IWinInetHttpInfo_QueryInfo(This->protocol->wininet_http_info,
+ dwOption, pBuffer, pcbBuffer, pdwFlags, pdwReserved);
}
static const IWinInetHttpInfoVtbl WinInetHttpInfoVtbl = {
diff --git a/dlls/urlmon/bindprot.c b/dlls/urlmon/bindprot.c
index 01a1b90..45cf14c 100644
--- a/dlls/urlmon/bindprot.c
+++ b/dlls/urlmon/bindprot.c
@@ -329,6 +329,8 @@ static ULONG WINAPI BindProtocol_Release(IInternetProtocolEx *iface)
if(!ref) {
if(This->wininet_info)
IWinInetInfo_Release(This->wininet_info);
+ if(This->wininet_http_info)
+ IWinInetHttpInfo_Release(This->wininet_http_info);
if(This->protocol)
IInternetProtocol_Release(This->protocol);
if(This->bind_info)
@@ -523,8 +525,10 @@ static HRESULT WINAPI BindProtocol_StartEx(IInternetProtocolEx *iface, IUri *pUr
This->protocol = protocol;
- if(urlmon_protocol)
+ if(urlmon_protocol) {
IInternetProtocol_QueryInterface(protocol, &IID_IWinInetInfo, (void**)&This->wininet_info);
+ IInternetProtocol_QueryInterface(protocol, &IID_IWinInetHttpInfo, (void**)&This->wininet_http_info);
+ }
set_binding_sink(This, pOIProtSink, pOIBindInfo);
diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h
index 00247c8..2691622 100644
--- a/dlls/urlmon/urlmon_main.h
+++ b/dlls/urlmon/urlmon_main.h
@@ -180,6 +180,7 @@ typedef struct {
IInternetProtocolSink *protocol_sink;
IServiceProvider *service_provider;
IWinInetInfo *wininet_info;
+ IWinInetHttpInfo *wininet_http_info;
struct {
IInternetProtocol IInternetProtocol_iface;
More information about the wine-cvs
mailing list