Module: wine Branch: master Commit: e1c1b937ebbc4c91ea2415d60e985ea0cead0c09 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e1c1b937ebbc4c91ea2415d60e...
Author: Piotr Caban piotr@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;