static HRESULT WINAPI BindProtocol_Continue(IInternetProtocol *iface, PROTOCOLDATA *pProtocolData) { BindProtocol *This = PROTOCOL_THIS(iface); TRACE("(%p)->(%p)\n", This, pProtocolData); return IInternetProtocol_Continue(This->protocol, pProtocolData); }
static HRESULT WINAPI BindProtocol_Continue(IInternetProtocolEx *iface, PROTOCOLDATA *pProtocolData) { BindProtocol *This = impl_from_IInternetProtocolEx(iface); TRACE("(%p)->(%p)\n", This, pProtocolData); return IInternetProtocol_Continue(This->protocol_handler, pProtocolData); }
static void switch_proc(BindProtocol *bind, task_header_t *t) { switch_task_t *task = (switch_task_t*)t; IInternetProtocol_Continue(bind->protocol_handler, task->data); heap_free(task); }
static HRESULT WINAPI ProtocolHandler_Continue(IInternetProtocol *iface, PROTOCOLDATA *pProtocolData) { BindProtocol *This = impl_from_IInternetProtocol(iface); HRESULT hres; TRACE("(%p)->(%p)\n", This, pProtocolData); hres = IInternetProtocol_Continue(This->protocol, pProtocolData); heap_free(pProtocolData); return hres; }
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); }