Jacek Caban : urlmon: Added Abort implementation to wininet-based protocols .

Alexandre Julliard julliard at winehq.org
Mon Oct 4 11:04:03 CDT 2010


Module: wine
Branch: master
Commit: 159c23e1372fcf80fcc15cca185f5718107b5920
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=159c23e1372fcf80fcc15cca185f5718107b5920

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Oct  4 14:00:17 2010 +0200

urlmon: Added Abort implementation to wininet-based protocols.

---

 dlls/urlmon/ftp.c         |    6 ++++--
 dlls/urlmon/gopher.c      |    6 ++++--
 dlls/urlmon/http.c        |    7 +++++--
 dlls/urlmon/protocol.c    |   12 ++++++++++++
 dlls/urlmon/urlmon_main.h |    1 +
 5 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/dlls/urlmon/ftp.c b/dlls/urlmon/ftp.c
index 4fa0924..86ddab7 100644
--- a/dlls/urlmon/ftp.c
+++ b/dlls/urlmon/ftp.c
@@ -186,8 +186,10 @@ static HRESULT WINAPI FtpProtocol_Abort(IInternetProtocol *iface, HRESULT hrReas
         DWORD dwOptions)
 {
     FtpProtocol *This = PROTOCOL_THIS(iface);
-    FIXME("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
+
+    return protocol_abort(&This->base, hrReason);
 }
 
 static HRESULT WINAPI FtpProtocol_Terminate(IInternetProtocol *iface, DWORD dwOptions)
diff --git a/dlls/urlmon/gopher.c b/dlls/urlmon/gopher.c
index d8781ce..4fb61b3 100644
--- a/dlls/urlmon/gopher.c
+++ b/dlls/urlmon/gopher.c
@@ -161,8 +161,10 @@ static HRESULT WINAPI GopherProtocol_Abort(IInternetProtocol *iface, HRESULT hrR
         DWORD dwOptions)
 {
     GopherProtocol *This = PROTOCOL_THIS(iface);
-    FIXME("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
+
+    return protocol_abort(&This->base, hrReason);
 }
 
 static HRESULT WINAPI GopherProtocol_Terminate(IInternetProtocol *iface, DWORD dwOptions)
diff --git a/dlls/urlmon/http.c b/dlls/urlmon/http.c
index 722ec50..52a2425 100644
--- a/dlls/urlmon/http.c
+++ b/dlls/urlmon/http.c
@@ -162,6 +162,7 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, IUri *uri, DWORD reques
             &IID_IHttpNegotiate, (void **)&This->http_negotiate);
     if (hres != S_OK) {
         WARN("IServiceProvider_QueryService IID_IHttpNegotiate failed: %08x\n", hres);
+        IServiceProvider_Release(service_provider);
         return hres;
     }
 
@@ -438,8 +439,10 @@ static HRESULT WINAPI HttpProtocol_Abort(IInternetProtocol *iface, HRESULT hrRea
         DWORD dwOptions)
 {
     HttpProtocol *This = PROTOCOL_THIS(iface);
-    FIXME("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
+
+    return protocol_abort(&This->base, hrReason);
 }
 
 static HRESULT WINAPI HttpProtocol_Terminate(IInternetProtocol *iface, DWORD dwOptions)
diff --git a/dlls/urlmon/protocol.c b/dlls/urlmon/protocol.c
index b423c67..85af513 100644
--- a/dlls/urlmon/protocol.c
+++ b/dlls/urlmon/protocol.c
@@ -428,6 +428,18 @@ HRESULT protocol_unlock_request(Protocol *protocol)
     return S_OK;
 }
 
+HRESULT protocol_abort(Protocol *protocol, HRESULT reason)
+{
+    if(!protocol->protocol_sink)
+        return S_OK;
+
+    if(protocol->flags & FLAG_RESULT_REPORTED)
+        return INET_E_RESULT_DISPATCHED;
+
+    report_result(protocol, reason);
+    return S_OK;
+}
+
 void protocol_close_connection(Protocol *protocol)
 {
     protocol->vtbl->close_connection(protocol);
diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h
index 3aada09..62e461d 100644
--- a/dlls/urlmon/urlmon_main.h
+++ b/dlls/urlmon/urlmon_main.h
@@ -115,6 +115,7 @@ HRESULT protocol_continue(Protocol*,PROTOCOLDATA*);
 HRESULT protocol_read(Protocol*,void*,ULONG,ULONG*);
 HRESULT protocol_lock_request(Protocol*);
 HRESULT protocol_unlock_request(Protocol*);
+HRESULT protocol_abort(Protocol*,HRESULT);
 void protocol_close_connection(Protocol*);
 
 typedef struct {




More information about the wine-cvs mailing list