static void request_complete(Protocol *protocol, INTERNET_ASYNC_RESULT *ar) { PROTOCOLDATA data; TRACE("(%p)->(%p)\n", protocol, ar); /* PROTOCOLDATA same as native */ memset(&data, 0, sizeof(data)); data.dwState = 0xf1000000; if(ar->dwResult) { protocol->flags |= FLAG_REQUEST_COMPLETE; if(!protocol->request) { TRACE("setting request handle %p\n", (HINTERNET)ar->dwResult); protocol->request = (HINTERNET)ar->dwResult; } if(protocol->flags & FLAG_FIRST_CONTINUE_COMPLETE) data.pData = UlongToPtr(BINDSTATUS_ENDDOWNLOADCOMPONENTS); else data.pData = UlongToPtr(BINDSTATUS_DOWNLOADINGDATA); }else { protocol->flags |= FLAG_ERROR; data.pData = UlongToPtr(ar->dwError); } if (protocol->bindf & BINDF_FROMURLMON) IInternetProtocolSink_Switch(protocol->protocol_sink, &data); else protocol_continue(protocol, &data); }
static HRESULT WINAPI BPInternetProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData) { BindProtocol *This = impl_from_IInternetProtocolSink(iface); PROTOCOLDATA *data; TRACE("(%p)->(%p)\n", This, pProtocolData); TRACE("flags %x state %x data %p cb %u\n", pProtocolData->grfFlags, pProtocolData->dwState, pProtocolData->pData, pProtocolData->cbData); data = heap_alloc(sizeof(PROTOCOLDATA)); if(!data) return E_OUTOFMEMORY; memcpy(data, pProtocolData, sizeof(PROTOCOLDATA)); if((This->pi&PI_APARTMENTTHREADED && pProtocolData->grfFlags&PI_FORCE_ASYNC) || !do_direct_notif(This)) { switch_task_t *task; task = heap_alloc(sizeof(switch_task_t)); if(!task) { heap_free(data); return E_OUTOFMEMORY; } task->data = data; push_task(This, &task->header, switch_proc); return S_OK; } return IInternetProtocolSink_Switch(This->protocol_sink_handler, data); }
static HRESULT WINAPI ProtocolProxySink_Switch(IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData) { ProtocolProxy *This = PROTSINK_THIS(iface); TRACE("(%p)->(%p)\n", This, pProtocolData); return IInternetProtocolSink_Switch(This->protocol_sink, pProtocolData); }
static HRESULT WINAPI ProtocolSinkHandler_Switch(IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData) { BindProtocol *This = impl_from_IInternetProtocolSinkHandler(iface); TRACE("(%p)->(%p)\n", This, pProtocolData); if(!This->protocol_sink) { IInternetProtocol_Continue(This->protocol_handler, pProtocolData); return S_OK; } return IInternetProtocolSink_Switch(This->protocol_sink, pProtocolData); }
static HRESULT WINAPI BPInternetProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData) { BindProtocol *This = PROTSINK_THIS(iface); TRACE("(%p)->(%p)\n", This, pProtocolData); TRACE("flags %x state %x data %p cb %u\n", pProtocolData->grfFlags, pProtocolData->dwState, pProtocolData->pData, pProtocolData->cbData); if(!This->protocol_sink) { IInternetProtocol_Continue(This->protocol, pProtocolData); return S_OK; } return IInternetProtocolSink_Switch(This->protocol_sink, pProtocolData); }
static HRESULT WINAPI BPInternetProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData) { BindProtocol *This = PROTSINK_THIS(iface); PROTOCOLDATA *data; TRACE("(%p)->(%p)\n", This, pProtocolData); TRACE("flags %x state %x data %p cb %u\n", pProtocolData->grfFlags, pProtocolData->dwState, pProtocolData->pData, pProtocolData->cbData); data = heap_alloc(sizeof(PROTOCOLDATA)); if(!data) return E_OUTOFMEMORY; memcpy(data, pProtocolData, sizeof(PROTOCOLDATA)); if(!do_direct_notif(This)) { switch_task_t *task; task = heap_alloc(sizeof(switch_task_t)); if(!task) return E_OUTOFMEMORY; task->data = data; push_task(This, &task->header, switch_proc); return S_OK; } if(!This->protocol_sink) { IInternetProtocol_Continue(This->protocol_handler, data); return S_OK; } return IInternetProtocolSink_Switch(This->protocol_sink, data); }