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