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