diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c index 0d6043cdd33..be72ee16358 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 01a1b905b97..45cf14c2cc6 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 00247c8e92d..2691622e5a4 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;