Module: wine Branch: master Commit: 159c23e1372fcf80fcc15cca185f5718107b5920 URL: http://source.winehq.org/git/wine.git/?a=commit;h=159c23e1372fcf80fcc15cca18...
Author: Jacek Caban jacek@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 {