Commit 4121ac12 authored by David Hedberg's avatar David Hedberg Committed by Alexandre Julliard

urlmon: Add new on_error function to protocol vtbl.

parent 2b5c18c3
......@@ -99,13 +99,19 @@ static void FtpProtocol_close_connection(Protocol *prot)
{
}
static void FtpProtocol_on_error(Protocol *prot, DWORD error)
{
FIXME("(%p) %d - stub\n", prot, error);
}
#undef ASYNCPROTOCOL_THIS
static const ProtocolVtbl AsyncProtocolVtbl = {
FtpProtocol_open_request,
FtpProtocol_end_request,
FtpProtocol_start_downloading,
FtpProtocol_close_connection
FtpProtocol_close_connection,
FtpProtocol_on_error
};
static HRESULT WINAPI FtpProtocol_QueryInterface(IInternetProtocolEx *iface, REFIID riid, void **ppv)
......
......@@ -70,13 +70,19 @@ static void GopherProtocol_close_connection(Protocol *prot)
{
}
static void GopherProtocol_on_error(Protocol *prot, DWORD error)
{
FIXME("(%p) %d - stub\n", prot, error);
}
#undef ASYNCPROTOCOL_THIS
static const ProtocolVtbl AsyncProtocolVtbl = {
GopherProtocol_open_request,
GopherProtocol_end_request,
GopherProtocol_start_downloading,
GopherProtocol_close_connection
GopherProtocol_close_connection,
GopherProtocol_on_error
};
#define PROTOCOL_THIS(iface) DEFINE_THIS(GopherProtocol, IInternetProtocol, iface)
......
......@@ -388,13 +388,19 @@ static void HttpProtocol_close_connection(Protocol *prot)
}
}
static void HttpProtocol_on_error(Protocol *prot, DWORD error)
{
FIXME("(%p) %d - stub\n", prot, error);
}
#undef ASYNCPROTOCOL_THIS
static const ProtocolVtbl AsyncProtocolVtbl = {
HttpProtocol_open_request,
HttpProtocol_end_request,
HttpProtocol_start_downloading,
HttpProtocol_close_connection
HttpProtocol_close_connection,
HttpProtocol_on_error
};
static HRESULT WINAPI HttpProtocol_QueryInterface(IInternetProtocolEx *iface, REFIID riid, void **ppv)
......
......@@ -76,11 +76,11 @@ static void request_complete(Protocol *protocol, INTERNET_ASYNC_RESULT *ar)
TRACE("(%p)->(%p)\n", protocol, ar);
if(!ar->dwResult) {
WARN("request failed: %d\n", ar->dwError);
return;
}
/* PROTOCOLDATA same as native */
memset(&data, 0, sizeof(data));
data.dwState = 0xf1000000;
if(ar->dwResult) {
protocol->flags |= FLAG_REQUEST_COMPLETE;
if(!protocol->request) {
......@@ -88,14 +88,16 @@ static void request_complete(Protocol *protocol, INTERNET_ASYNC_RESULT *ar)
protocol->request = (HINTERNET)ar->dwResult;
}
/* PROTOCOLDATA same as native */
memset(&data, 0, sizeof(data));
data.dwState = 0xf1000000;
if(protocol->flags & FLAG_FIRST_CONTINUE_COMPLETE)
data.pData = (LPVOID)BINDSTATUS_ENDDOWNLOADCOMPONENTS;
else
data.pData = (LPVOID)BINDSTATUS_DOWNLOADINGDATA;
}else {
protocol->flags |= FLAG_ERROR;
data.pData = (LPVOID)ar->dwError;
}
if (protocol->bindf & BINDF_FROMURLMON)
IInternetProtocolSink_Switch(protocol->protocol_sink, &data);
else
......@@ -301,6 +303,12 @@ HRESULT protocol_continue(Protocol *protocol, PROTOCOLDATA *data)
return S_OK;
}
if(protocol->flags & FLAG_ERROR) {
protocol->flags &= ~FLAG_ERROR;
protocol->vtbl->on_error(protocol, (DWORD)data->pData);
return S_OK;
}
if(protocol->post_stream)
return write_post_stream(protocol);
......
......@@ -113,6 +113,7 @@ struct ProtocolVtbl {
HRESULT (*end_request)(Protocol*);
HRESULT (*start_downloading)(Protocol*);
void (*close_connection)(Protocol*);
void (*on_error)(Protocol*,DWORD);
};
/* Flags are needed for, among other things, return HRESULTs from the Read function
......@@ -144,6 +145,7 @@ struct ProtocolVtbl {
#define FLAG_ALL_DATA_READ 0x0008
#define FLAG_LAST_DATA_REPORTED 0x0010
#define FLAG_RESULT_REPORTED 0x0020
#define FLAG_ERROR 0x0040
HRESULT protocol_start(Protocol*,IInternetProtocol*,IUri*,IInternetProtocolSink*,IInternetBindInfo*);
HRESULT protocol_continue(Protocol*,PROTOCOLDATA*);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment