ReactOS  0.4.15-dev-1392-g3014417
bindprot.c File Reference
#include "urlmon_main.h"
#include "wine/debug.h"
Include dependency graph for bindprot.c:

Go to the source code of this file.

Classes

struct  _task_header_t
 
struct  switch_task_t
 
struct  on_progress_task_t
 
struct  report_data_task_t
 
struct  report_result_task_t
 

Macros

#define BUFFER_SIZE   2048
 
#define MIME_TEST_SIZE   255
 
#define WM_MK_CONTINUE   (WM_USER+101)
 
#define WM_MK_RELEASE   (WM_USER+102)
 

Typedefs

typedef void(* task_proc_t) (BindProtocol *, task_header_t *)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (urlmon)
 
static void process_tasks (BindProtocol *This)
 
static LRESULT WINAPI notif_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
static BOOL WINAPI register_notif_wnd_class (INIT_ONCE *once, void *param, void **context)
 
void unregister_notif_wnd_class (void)
 
HWND get_notif_hwnd (void)
 
void release_notif_hwnd (HWND hwnd)
 
static void push_task (BindProtocol *This, task_header_t *task, task_proc_t proc)
 
static BOOL is_apartment_thread (BindProtocol *This)
 
static BOOL do_direct_notif (BindProtocol *This)
 
static HRESULT handle_mime_filter (BindProtocol *This, IInternetProtocol *mime_filter)
 
static void mime_available (BindProtocol *This, LPCWSTR mime, BOOL verified)
 
static BindProtocolimpl_from_IInternetProtocolEx (IInternetProtocolEx *iface)
 
static HRESULT WINAPI BindProtocol_QueryInterface (IInternetProtocolEx *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI BindProtocol_AddRef (IInternetProtocolEx *iface)
 
static void release_protocol_handler (BindProtocol *This)
 
static ULONG WINAPI BindProtocol_Release (IInternetProtocolEx *iface)
 
static HRESULT WINAPI BindProtocol_Start (IInternetProtocolEx *iface, LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE_PTR dwReserved)
 
static HRESULT WINAPI BindProtocol_Continue (IInternetProtocolEx *iface, PROTOCOLDATA *pProtocolData)
 
static HRESULT WINAPI BindProtocol_Abort (IInternetProtocolEx *iface, HRESULT hrReason, DWORD dwOptions)
 
static HRESULT WINAPI BindProtocol_Terminate (IInternetProtocolEx *iface, DWORD dwOptions)
 
static HRESULT WINAPI BindProtocol_Suspend (IInternetProtocolEx *iface)
 
static HRESULT WINAPI BindProtocol_Resume (IInternetProtocolEx *iface)
 
static HRESULT WINAPI BindProtocol_Read (IInternetProtocolEx *iface, void *pv, ULONG cb, ULONG *pcbRead)
 
static HRESULT WINAPI BindProtocol_Seek (IInternetProtocolEx *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
 
static HRESULT WINAPI BindProtocol_LockRequest (IInternetProtocolEx *iface, DWORD dwOptions)
 
static HRESULT WINAPI BindProtocol_UnlockRequest (IInternetProtocolEx *iface)
 
static HRESULT WINAPI BindProtocol_StartEx (IInternetProtocolEx *iface, IUri *pUri, IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE *dwReserved)
 
void set_binding_sink (BindProtocol *This, IInternetProtocolSink *sink, IInternetBindInfo *bind_info)
 
static BindProtocolimpl_from_IInternetProtocol (IInternetProtocol *iface)
 
static HRESULT WINAPI ProtocolHandler_QueryInterface (IInternetProtocol *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ProtocolHandler_AddRef (IInternetProtocol *iface)
 
static ULONG WINAPI ProtocolHandler_Release (IInternetProtocol *iface)
 
static HRESULT WINAPI ProtocolHandler_Start (IInternetProtocol *iface, LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE_PTR dwReserved)
 
static HRESULT WINAPI ProtocolHandler_Continue (IInternetProtocol *iface, PROTOCOLDATA *pProtocolData)
 
static HRESULT WINAPI ProtocolHandler_Abort (IInternetProtocol *iface, HRESULT hrReason, DWORD dwOptions)
 
static HRESULT WINAPI ProtocolHandler_Terminate (IInternetProtocol *iface, DWORD dwOptions)
 
static HRESULT WINAPI ProtocolHandler_Suspend (IInternetProtocol *iface)
 
static HRESULT WINAPI ProtocolHandler_Resume (IInternetProtocol *iface)
 
static HRESULT WINAPI ProtocolHandler_Read (IInternetProtocol *iface, void *pv, ULONG cb, ULONG *pcbRead)
 
static HRESULT WINAPI ProtocolHandler_Seek (IInternetProtocol *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
 
static HRESULT WINAPI ProtocolHandler_LockRequest (IInternetProtocol *iface, DWORD dwOptions)
 
static HRESULT WINAPI ProtocolHandler_UnlockRequest (IInternetProtocol *iface)
 
static BindProtocolimpl_from_IInternetProtocolSinkHandler (IInternetProtocolSink *iface)
 
static HRESULT WINAPI ProtocolSinkHandler_QueryInterface (IInternetProtocolSink *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI ProtocolSinkHandler_AddRef (IInternetProtocolSink *iface)
 
static ULONG WINAPI ProtocolSinkHandler_Release (IInternetProtocolSink *iface)
 
static HRESULT WINAPI ProtocolSinkHandler_Switch (IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData)
 
static HRESULT WINAPI ProtocolSinkHandler_ReportProgress (IInternetProtocolSink *iface, ULONG status_code, LPCWSTR status_text)
 
static HRESULT WINAPI ProtocolSinkHandler_ReportData (IInternetProtocolSink *iface, DWORD bscf, ULONG progress, ULONG progress_max)
 
static HRESULT handle_redirect (BindProtocol *This, const WCHAR *url)
 
static HRESULT WINAPI ProtocolSinkHandler_ReportResult (IInternetProtocolSink *iface, HRESULT hrResult, DWORD dwError, LPCWSTR szResult)
 
static BindProtocolimpl_from_IInternetBindInfo (IInternetBindInfo *iface)
 
static HRESULT WINAPI BindInfo_QueryInterface (IInternetBindInfo *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI BindInfo_AddRef (IInternetBindInfo *iface)
 
static ULONG WINAPI BindInfo_Release (IInternetBindInfo *iface)
 
static HRESULT WINAPI BindInfo_GetBindInfo (IInternetBindInfo *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
 
static HRESULT WINAPI BindInfo_GetBindString (IInternetBindInfo *iface, ULONG ulStringType, LPOLESTR *ppwzStr, ULONG cEl, ULONG *pcElFetched)
 
static BindProtocolimpl_from_IInternetPriority (IInternetPriority *iface)
 
static HRESULT WINAPI InternetPriority_QueryInterface (IInternetPriority *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI InternetPriority_AddRef (IInternetPriority *iface)
 
static ULONG WINAPI InternetPriority_Release (IInternetPriority *iface)
 
static HRESULT WINAPI InternetPriority_SetPriority (IInternetPriority *iface, LONG nPriority)
 
static HRESULT WINAPI InternetPriority_GetPriority (IInternetPriority *iface, LONG *pnPriority)
 
static BindProtocolimpl_from_IInternetProtocolSink (IInternetProtocolSink *iface)
 
static HRESULT WINAPI BPInternetProtocolSink_QueryInterface (IInternetProtocolSink *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI BPInternetProtocolSink_AddRef (IInternetProtocolSink *iface)
 
static ULONG WINAPI BPInternetProtocolSink_Release (IInternetProtocolSink *iface)
 
static void switch_proc (BindProtocol *bind, task_header_t *t)
 
static HRESULT WINAPI BPInternetProtocolSink_Switch (IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData)
 
static void on_progress_proc (BindProtocol *This, task_header_t *t)
 
static HRESULT WINAPI BPInternetProtocolSink_ReportProgress (IInternetProtocolSink *iface, ULONG ulStatusCode, LPCWSTR szStatusText)
 
static void report_data_proc (BindProtocol *This, task_header_t *t)
 
static HRESULT WINAPI BPInternetProtocolSink_ReportData (IInternetProtocolSink *iface, DWORD grfBSCF, ULONG ulProgress, ULONG ulProgressMax)
 
static void report_result_proc (BindProtocol *This, task_header_t *t)
 
static HRESULT WINAPI BPInternetProtocolSink_ReportResult (IInternetProtocolSink *iface, HRESULT hrResult, DWORD dwError, LPCWSTR szResult)
 
static BindProtocolimpl_from_IServiceProvider (IServiceProvider *iface)
 
static HRESULT WINAPI BPServiceProvider_QueryInterface (IServiceProvider *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI BPServiceProvider_AddRef (IServiceProvider *iface)
 
static ULONG WINAPI BPServiceProvider_Release (IServiceProvider *iface)
 
static HRESULT WINAPI BPServiceProvider_QueryService (IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
 
HRESULT create_binding_protocol (BindProtocol **protocol)
 

Variables

static const WCHAR wszURLMonikerNotificationWindow []
 
static ATOM notif_wnd_class
 
static const IInternetProtocolExVtbl BindProtocolVtbl
 
static const IInternetProtocolVtbl InternetProtocolHandlerVtbl
 
static const IInternetProtocolSinkVtbl InternetProtocolSinkHandlerVtbl
 
static const IInternetBindInfoVtbl InternetBindInfoVtbl
 
static const IInternetPriorityVtbl InternetPriorityVtbl
 
static const IInternetProtocolSinkVtbl InternetProtocolSinkVtbl
 
static const IServiceProviderVtbl ServiceProviderVtbl
 

Macro Definition Documentation

◆ BUFFER_SIZE

#define BUFFER_SIZE   2048

Definition at line 31 of file bindprot.c.

◆ MIME_TEST_SIZE

#define MIME_TEST_SIZE   255

Definition at line 32 of file bindprot.c.

◆ WM_MK_CONTINUE

#define WM_MK_CONTINUE   (WM_USER+101)

Definition at line 34 of file bindprot.c.

◆ WM_MK_RELEASE

#define WM_MK_RELEASE   (WM_USER+102)

Definition at line 35 of file bindprot.c.

Typedef Documentation

◆ task_proc_t

typedef void(* task_proc_t) (BindProtocol *, task_header_t *)

Definition at line 24 of file bindprot.c.

Function Documentation

◆ BindInfo_AddRef()

static ULONG WINAPI BindInfo_AddRef ( IInternetBindInfo iface)
static

Definition at line 1069 of file bindprot.c.

1070 {
1072  return IInternetProtocolEx_AddRef(&This->IInternetProtocolEx_iface);
1073 }
static BindProtocol * impl_from_IInternetBindInfo(IInternetBindInfo *iface)
Definition: bindprot.c:1057

◆ BindInfo_GetBindInfo()

static HRESULT WINAPI BindInfo_GetBindInfo ( IInternetBindInfo iface,
DWORD grfBINDF,
BINDINFO *  pbindinfo 
)
static

Definition at line 1081 of file bindprot.c.

1083 {
1085  HRESULT hres;
1086 
1087  TRACE("(%p)->(%p %p)\n", This, grfBINDF, pbindinfo);
1088 
1089  hres = IInternetBindInfo_GetBindInfo(This->bind_info, grfBINDF, pbindinfo);
1090  if(FAILED(hres)) {
1091  WARN("GetBindInfo failed: %08x\n", hres);
1092  return hres;
1093  }
1094 
1095  if((pbindinfo->dwOptions & BINDINFO_OPTIONS_DISABLEAUTOREDIRECTS) && !This->redirect_callback) {
1097 
1098  hres = IInternetProtocolSink_QueryInterface(This->protocol_sink, &IID_IServiceProvider, (void**)&service_provider);
1099  if(SUCCEEDED(hres)) {
1100  hres = IServiceProvider_QueryService(service_provider, &IID_IBindCallbackRedirect, &IID_IBindCallbackRedirect,
1101  (void**)&This->redirect_callback);
1102  IServiceProvider_Release(service_provider);
1103  }
1104  }
1105 
1106  *grfBINDF |= BINDF_FROMURLMON;
1107  return hres;
1108 }
#define WARN(fmt,...)
Definition: debug.h:112
if SUCCEEDED(hr)
static IServiceProvider service_provider
Definition: mimeole.c:1313
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
static BindProtocol * impl_from_IInternetBindInfo(IInternetBindInfo *iface)
Definition: bindprot.c:1057

◆ BindInfo_GetBindString()

static HRESULT WINAPI BindInfo_GetBindString ( IInternetBindInfo iface,
ULONG  ulStringType,
LPOLESTR ppwzStr,
ULONG  cEl,
ULONG pcElFetched 
)
static

Definition at line 1110 of file bindprot.c.

1112 {
1114 
1115  TRACE("(%p)->(%d %p %d %p)\n", This, ulStringType, ppwzStr, cEl, pcElFetched);
1116 
1117  return IInternetBindInfo_GetBindString(This->bind_info, ulStringType, ppwzStr, cEl, pcElFetched);
1118 }
#define TRACE(s)
Definition: solgame.cpp:4
static BindProtocol * impl_from_IInternetBindInfo(IInternetBindInfo *iface)
Definition: bindprot.c:1057

◆ BindInfo_QueryInterface()

static HRESULT WINAPI BindInfo_QueryInterface ( IInternetBindInfo iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1062 of file bindprot.c.

1064 {
1066  return IInternetProtocolEx_QueryInterface(&This->IInternetProtocolEx_iface, riid, ppv);
1067 }
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
static BindProtocol * impl_from_IInternetBindInfo(IInternetBindInfo *iface)
Definition: bindprot.c:1057

◆ BindInfo_Release()

static ULONG WINAPI BindInfo_Release ( IInternetBindInfo iface)
static

Definition at line 1075 of file bindprot.c.

1076 {
1078  return IInternetProtocolEx_Release(&This->IInternetProtocolEx_iface);
1079 }
static BindProtocol * impl_from_IInternetBindInfo(IInternetBindInfo *iface)
Definition: bindprot.c:1057

◆ BindProtocol_Abort()

static HRESULT WINAPI BindProtocol_Abort ( IInternetProtocolEx iface,
HRESULT  hrReason,
DWORD  dwOptions 
)
static

Definition at line 395 of file bindprot.c.

397 {
399 
400  TRACE("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
401 
402  return IInternetProtocol_Abort(This->protocol_handler, hrReason, dwOptions);
403 }
DWORD dwOptions
Definition: solitaire.cpp:23
#define TRACE(s)
Definition: solgame.cpp:4
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250

◆ BindProtocol_AddRef()

static ULONG WINAPI BindProtocol_AddRef ( IInternetProtocolEx iface)
static

Definition at line 302 of file bindprot.c.

303 {
306  TRACE("(%p) ref=%d\n", This, ref);
307  return ref;
308 }
Definition: send.c:48
long LONG
Definition: pedump.c:60
GLenum GLint ref
Definition: glext.h:6028
#define TRACE(s)
Definition: solgame.cpp:4
#define InterlockedIncrement
Definition: armddk.h:53
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250

◆ BindProtocol_Continue()

static HRESULT WINAPI BindProtocol_Continue ( IInternetProtocolEx iface,
PROTOCOLDATA *  pProtocolData 
)
static

Definition at line 386 of file bindprot.c.

387 {
389 
390  TRACE("(%p)->(%p)\n", This, pProtocolData);
391 
392  return IInternetProtocol_Continue(This->protocol_handler, pProtocolData);
393 }
#define TRACE(s)
Definition: solgame.cpp:4
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250

◆ BindProtocol_LockRequest()

static HRESULT WINAPI BindProtocol_LockRequest ( IInternetProtocolEx iface,
DWORD  dwOptions 
)
static

Definition at line 448 of file bindprot.c.

449 {
451 
452  TRACE("(%p)->(%08x)\n", This, dwOptions);
453 
454  return IInternetProtocol_LockRequest(This->protocol_handler, dwOptions);
455 }
DWORD dwOptions
Definition: solitaire.cpp:23
#define TRACE(s)
Definition: solgame.cpp:4
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250

◆ BindProtocol_QueryInterface()

static HRESULT WINAPI BindProtocol_QueryInterface ( IInternetProtocolEx iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 255 of file bindprot.c.

256 {
258 
259  *ppv = NULL;
260  if(IsEqualGUID(&IID_IUnknown, riid)) {
261  TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
262  *ppv = &This->IInternetProtocolEx_iface;
263  }else if(IsEqualGUID(&IID_IInternetProtocolRoot, riid)) {
264  TRACE("(%p)->(IID_IInternetProtocolRoot %p)\n", This, ppv);
265  *ppv = &This->IInternetProtocolEx_iface;
266  }else if(IsEqualGUID(&IID_IInternetProtocol, riid)) {
267  TRACE("(%p)->(IID_IInternetProtocol %p)\n", This, ppv);
268  *ppv = &This->IInternetProtocolEx_iface;
269  }else if(IsEqualGUID(&IID_IInternetProtocolEx, riid)) {
270  TRACE("(%p)->(IID_IInternetProtocolEx %p)\n", This, ppv);
271  *ppv = &This->IInternetProtocolEx_iface;
272  }else if(IsEqualGUID(&IID_IInternetBindInfo, riid)) {
273  TRACE("(%p)->(IID_IInternetBindInfo %p)\n", This, ppv);
274  *ppv = &This->IInternetBindInfo_iface;
275  }else if(IsEqualGUID(&IID_IInternetPriority, riid)) {
276  TRACE("(%p)->(IID_IInternetPriority %p)\n", This, ppv);
277  *ppv = &This->IInternetPriority_iface;
278  }else if(IsEqualGUID(&IID_IAuthenticate, riid)) {
279  FIXME("(%p)->(IID_IAuthenticate %p)\n", This, ppv);
280  }else if(IsEqualGUID(&IID_IServiceProvider, riid)) {
281  TRACE("(%p)->(IID_IServiceProvider %p)\n", This, ppv);
282  *ppv = &This->IServiceProvider_iface;
283  }else if(IsEqualGUID(&IID_IInternetProtocolSink, riid)) {
284  TRACE("(%p)->(IID_IInternetProtocolSink %p)\n", This, ppv);
285  *ppv = &This->IInternetProtocolSink_iface;
286  }else if(This->protocol_unk) {
287  HRESULT hres;
288  hres = IUnknown_QueryInterface(This->protocol_unk, riid, ppv);
289  TRACE("(%p) aggregated handler returned %08x for %s\n", This, hres, debugstr_guid(riid));
290  return hres;
291  }else {
292  WARN("not supported interface %s\n", debugstr_guid(riid));
293  }
294 
295  if(!*ppv)
296  return E_NOINTERFACE;
297 
298  IUnknown_AddRef((IUnknown*)*ppv);
299  return S_OK;
300 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
#define WARN(fmt,...)
Definition: debug.h:112
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define FIXME(fmt,...)
Definition: debug.h:111
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
const GUID IID_IUnknown
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250

◆ BindProtocol_Read()

static HRESULT WINAPI BindProtocol_Read ( IInternetProtocolEx iface,
void pv,
ULONG  cb,
ULONG pcbRead 
)
static

Definition at line 428 of file bindprot.c.

430 {
432 
433  TRACE("(%p)->(%p %u %p)\n", This, pv, cb, pcbRead);
434 
435  if(pcbRead)
436  *pcbRead = 0;
437  return IInternetProtocol_Read(This->protocol_handler, pv, cb, pcbRead);
438 }
#define TRACE(s)
Definition: solgame.cpp:4
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250
static HMODULE MODULEINFO DWORD cb
Definition: module.c:32

◆ BindProtocol_Release()

static ULONG WINAPI BindProtocol_Release ( IInternetProtocolEx iface)
static

Definition at line 331 of file bindprot.c.

332 {
335 
336  TRACE("(%p) ref=%d\n", This, ref);
337 
338  if(!ref) {
340  if(This->redirect_callback)
341  IBindCallbackRedirect_Release(This->redirect_callback);
342  if(This->bind_info)
343  IInternetBindInfo_Release(This->bind_info);
344  if(This->uri)
345  IUri_Release(This->uri);
346  SysFreeString(This->display_uri);
347 
349 
350  if(This->notif_hwnd)
351  release_notif_hwnd(This->notif_hwnd);
352  This->section.DebugInfo->Spare[0] = 0;
353  DeleteCriticalSection(&This->section);
354 
355  heap_free(This->mime);
356  heap_free(This);
357 
359  }
360 
361  return ref;
362 }
Definition: send.c:48
long LONG
Definition: pedump.c:60
static void release_protocol_handler(BindProtocol *This)
Definition: bindprot.c:310
GLenum GLint ref
Definition: glext.h:6028
static void URLMON_UnlockModule(void)
Definition: urlmon_main.h:69
#define TRACE(s)
Definition: solgame.cpp:4
void release_notif_hwnd(HWND hwnd)
Definition: bindprot.c:141
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define InterlockedDecrement
Definition: armddk.h:52
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define NULL
Definition: types.h:112
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250
void set_binding_sink(BindProtocol *This, IInternetProtocolSink *sink, IInternetBindInfo *bind_info)
Definition: bindprot.c:564
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

◆ BindProtocol_Resume()

static HRESULT WINAPI BindProtocol_Resume ( IInternetProtocolEx iface)
static

Definition at line 421 of file bindprot.c.

422 {
424  FIXME("(%p)\n", This);
425  return E_NOTIMPL;
426 }
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_NOTIMPL
Definition: ddrawi.h:99
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250

◆ BindProtocol_Seek()

static HRESULT WINAPI BindProtocol_Seek ( IInternetProtocolEx iface,
LARGE_INTEGER  dlibMove,
DWORD  dwOrigin,
ULARGE_INTEGER plibNewPosition 
)
static

Definition at line 440 of file bindprot.c.

442 {
444  FIXME("(%p)->(%d %d %p)\n", This, dlibMove.u.LowPart, dwOrigin, plibNewPosition);
445  return E_NOTIMPL;
446 }
#define FIXME(fmt,...)
Definition: debug.h:111
struct _LARGE_INTEGER::@2277 u
#define E_NOTIMPL
Definition: ddrawi.h:99
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250

◆ BindProtocol_Start()

static HRESULT WINAPI BindProtocol_Start ( IInternetProtocolEx iface,
LPCWSTR  szUrl,
IInternetProtocolSink pOIProtSink,
IInternetBindInfo pOIBindInfo,
DWORD  grfPI,
HANDLE_PTR  dwReserved 
)
static

Definition at line 364 of file bindprot.c.

367 {
369  IUri *uri;
370  HRESULT hres;
371 
372  TRACE("(%p)->(%s %p %p %08x %lx)\n", This, debugstr_w(szUrl), pOIProtSink,
373  pOIBindInfo, grfPI, dwReserved);
374 
375  hres = CreateUri(szUrl, Uri_CREATE_FILE_USE_DOS_PATH, 0, &uri);
376  if(FAILED(hres))
377  return hres;
378 
379  hres = IInternetProtocolEx_StartEx(&This->IInternetProtocolEx_iface, uri, pOIProtSink,
380  pOIBindInfo, grfPI, (HANDLE*)dwReserved);
381 
382  IUri_Release(uri);
383  return hres;
384 }
const char * uri
Definition: sec_mgr.c:1588
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:90
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250
HRESULT WINAPI CreateUri(LPCWSTR pwzURI, DWORD dwFlags, DWORD_PTR dwReserved, IUri **ppURI)
Definition: uri.c:5700

◆ BindProtocol_StartEx()

static HRESULT WINAPI BindProtocol_StartEx ( IInternetProtocolEx iface,
IUri pUri,
IInternetProtocolSink pOIProtSink,
IInternetBindInfo pOIBindInfo,
DWORD  grfPI,
HANDLE dwReserved 
)
static

Definition at line 466 of file bindprot.c.

469 {
472  IInternetProtocolEx *protocolex;
475  CLSID clsid = IID_NULL;
476  IUnknown *protocol_unk = NULL;
477  LPOLESTR clsid_str;
478  HRESULT hres;
479 
480  TRACE("(%p)->(%p %p %p %08x %p)\n", This, pUri, pOIProtSink, pOIBindInfo, grfPI, dwReserved);
481 
482  if(!pUri || !pOIProtSink || !pOIBindInfo)
483  return E_INVALIDARG;
484 
485  This->pi = grfPI;
486 
487  if(This->uri) {
488  SysFreeString(This->display_uri);
489  IUri_Release(This->uri);
490  }
491  IUri_AddRef(pUri);
492  This->uri = pUri;
493 
494  hres = IInternetProtocolSink_QueryInterface(pOIProtSink, &IID_IServiceProvider,
495  (void**)&service_provider);
496  if(SUCCEEDED(hres)) {
497  /* FIXME: What's protocol CLSID here? */
498  IServiceProvider_QueryService(service_provider, &IID_IInternetProtocol,
499  &IID_IInternetProtocol, (void**)&protocol);
500  IServiceProvider_Release(service_provider);
501  }
502 
503  if(!protocol) {
504  IClassFactory *cf;
505 
506  hres = get_protocol_handler(pUri, &clsid, &cf);
507  if(FAILED(hres))
508  return hres;
509 
510  hres = IClassFactory_CreateInstance(cf, (IUnknown*)&This->IInternetBindInfo_iface,
511  &IID_IUnknown, (void**)&protocol_unk);
512  if(SUCCEEDED(hres)) {
513  hres = IUnknown_QueryInterface(protocol_unk, &IID_IInternetProtocol, (void**)&protocol);
514  if(SUCCEEDED(hres))
515  This->protocol_unk = protocol_unk;
516  else
517  IUnknown_Release(protocol_unk);
518  }
519  else if(hres == CLASS_E_NOAGGREGATION)
520  hres = IClassFactory_CreateInstance(cf, NULL, &IID_IInternetProtocol, (void**)&protocol);
521 
522  IClassFactory_Release(cf);
523  if(FAILED(hres))
524  return hres;
525  }
526 
527  StringFromCLSID(&clsid, &clsid_str);
528  IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_PROTOCOLCLASSID, clsid_str);
529  CoTaskMemFree(clsid_str);
530 
531  This->protocol_unk = protocol_unk;
532  This->protocol = protocol;
533 
534  if(!protocol_unk)
535  protocol_unk = (IUnknown*)protocol;
536 
537  set_binding_sink(This, pOIProtSink, pOIBindInfo);
538 
539  hres = IUnknown_QueryInterface(protocol_unk, &IID_IInternetPriority, (void**)&priority);
540  if(SUCCEEDED(hres)) {
541  IInternetPriority_SetPriority(priority, This->priority);
542  IInternetPriority_Release(priority);
543  }
544 
545  hres = IUnknown_QueryInterface(protocol_unk, &IID_IInternetProtocolEx, (void**)&protocolex);
546  if(SUCCEEDED(hres)) {
547  hres = IInternetProtocolEx_StartEx(protocolex, pUri, &This->IInternetProtocolSink_iface,
548  &This->IInternetBindInfo_iface, 0, NULL);
549  IInternetProtocolEx_Release(protocolex);
550  }else {
551  hres = IUri_GetDisplayUri(pUri, &This->display_uri);
552  if(FAILED(hres))
553  return hres;
554 
555  hres = IInternetProtocol_Start(protocol, This->display_uri, &This->IInternetProtocolSink_iface,
556  &This->IInternetBindInfo_iface, 0, 0);
557  }
558 
559  if(SUCCEEDED(hres))
561  return hres;
562 }
static IClassFactory * cf
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
static void process_tasks(BindProtocol *This)
Definition: bindprot.c:37
static LPOLESTR
Definition: stg_prop.c:27
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:90
if SUCCEEDED(hr)
#define E_INVALIDARG
Definition: ddrawi.h:101
WDF_INTERRUPT_PRIORITY priority
static IServiceProvider service_provider
Definition: mimeole.c:1313
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
const GUID IID_IUnknown
REFCLSID clsid
Definition: msctf.c:82
#define IID_NULL
Definition: guiddef.h:98
HRESULT get_protocol_handler(IUri *uri, CLSID *clsid, IClassFactory **ret)
Definition: session.c:220
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:2662
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define NULL
Definition: types.h:112
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250
void set_binding_sink(BindProtocol *This, IInternetProtocolSink *sink, IInternetBindInfo *bind_info)
Definition: bindprot.c:564
HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR *idstr)
Definition: compobj.c:2412

◆ BindProtocol_Suspend()

static HRESULT WINAPI BindProtocol_Suspend ( IInternetProtocolEx iface)
static

Definition at line 414 of file bindprot.c.

415 {
417  FIXME("(%p)\n", This);
418  return E_NOTIMPL;
419 }
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_NOTIMPL
Definition: ddrawi.h:99
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250

◆ BindProtocol_Terminate()

static HRESULT WINAPI BindProtocol_Terminate ( IInternetProtocolEx iface,
DWORD  dwOptions 
)
static

Definition at line 405 of file bindprot.c.

406 {
408 
409  TRACE("(%p)->(%08x)\n", This, dwOptions);
410 
411  return IInternetProtocol_Terminate(This->protocol_handler, dwOptions);
412 }
DWORD dwOptions
Definition: solitaire.cpp:23
#define TRACE(s)
Definition: solgame.cpp:4
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250

◆ BindProtocol_UnlockRequest()

static HRESULT WINAPI BindProtocol_UnlockRequest ( IInternetProtocolEx iface)
static

Definition at line 457 of file bindprot.c.

458 {
460 
461  TRACE("(%p)\n", This);
462 
463  return IInternetProtocol_UnlockRequest(This->protocol_handler);
464 }
#define TRACE(s)
Definition: solgame.cpp:4
static BindProtocol * impl_from_IInternetProtocolEx(IInternetProtocolEx *iface)
Definition: bindprot.c:250

◆ BPInternetProtocolSink_AddRef()

static ULONG WINAPI BPInternetProtocolSink_AddRef ( IInternetProtocolSink iface)
static

Definition at line 1193 of file bindprot.c.

1194 {
1196  return IInternetProtocolEx_AddRef(&This->IInternetProtocolEx_iface);
1197 }
static BindProtocol * impl_from_IInternetProtocolSink(IInternetProtocolSink *iface)
Definition: bindprot.c:1181

◆ BPInternetProtocolSink_QueryInterface()

static HRESULT WINAPI BPInternetProtocolSink_QueryInterface ( IInternetProtocolSink iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1186 of file bindprot.c.

1188 {
1190  return IInternetProtocolEx_QueryInterface(&This->IInternetProtocolEx_iface, riid, ppv);
1191 }
static BindProtocol * impl_from_IInternetProtocolSink(IInternetProtocolSink *iface)
Definition: bindprot.c:1181
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39

◆ BPInternetProtocolSink_Release()

static ULONG WINAPI BPInternetProtocolSink_Release ( IInternetProtocolSink iface)
static

Definition at line 1199 of file bindprot.c.

1200 {
1202  return IInternetProtocolEx_Release(&This->IInternetProtocolEx_iface);
1203 }
static BindProtocol * impl_from_IInternetProtocolSink(IInternetProtocolSink *iface)
Definition: bindprot.c:1181

◆ BPInternetProtocolSink_ReportData()

static HRESULT WINAPI BPInternetProtocolSink_ReportData ( IInternetProtocolSink iface,
DWORD  grfBSCF,
ULONG  ulProgress,
ULONG  ulProgressMax 
)
static

Definition at line 1312 of file bindprot.c.

1314 {
1316 
1317  TRACE("(%p)->(%x %u %u)\n", This, grfBSCF, ulProgress, ulProgressMax);
1318 
1319  if(!This->protocol_sink)
1320  return S_OK;
1321 
1322  if(!do_direct_notif(This)) {
1323  report_data_task_t *task;
1324 
1325  task = heap_alloc(sizeof(report_data_task_t));
1326  if(!task)
1327  return E_OUTOFMEMORY;
1328 
1329  task->bscf = grfBSCF;
1330  task->progress = ulProgress;
1331  task->progress_max = ulProgressMax;
1332 
1334  return S_OK;
1335  }
1336 
1337  return IInternetProtocolSink_ReportData(This->protocol_sink_handler,
1338  grfBSCF, ulProgress, ulProgressMax);
1339 }
static BindProtocol * impl_from_IInternetProtocolSink(IInternetProtocolSink *iface)
Definition: bindprot.c:1181
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define TRACE(s)
Definition: solgame.cpp:4
static void report_data_proc(BindProtocol *This, task_header_t *t)
Definition: bindprot.c:1302
static void push_task(BindProtocol *This, task_header_t *task, task_proc_t proc)
Definition: bindprot.c:159
static BOOL do_direct_notif(BindProtocol *This)
Definition: bindprot.c:189
#define S_OK
Definition: intsafe.h:51
task_header_t header
Definition: bindprot.c:1296

◆ BPInternetProtocolSink_ReportProgress()

static HRESULT WINAPI BPInternetProtocolSink_ReportProgress ( IInternetProtocolSink iface,
ULONG  ulStatusCode,
LPCWSTR  szStatusText 
)
static

Definition at line 1272 of file bindprot.c.

1274 {
1276 
1277  TRACE("(%p)->(%u %s)\n", This, ulStatusCode, debugstr_w(szStatusText));
1278 
1279  if(do_direct_notif(This)) {
1280  IInternetProtocolSink_ReportProgress(This->protocol_sink_handler, ulStatusCode, szStatusText);
1281  }else {
1282  on_progress_task_t *task;
1283 
1284  task = heap_alloc(sizeof(on_progress_task_t));
1285 
1286  task->status_code = ulStatusCode;
1287  task->status_text = heap_strdupW(szStatusText);
1288 
1290  }
1291 
1292  return S_OK;
1293 }
static BindProtocol * impl_from_IInternetProtocolSink(IInternetProtocolSink *iface)
Definition: bindprot.c:1181
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
static WCHAR * heap_strdupW(const WCHAR *str)
Definition: propsheet.c:178
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
static void push_task(BindProtocol *This, task_header_t *task, task_proc_t proc)
Definition: bindprot.c:159
static void on_progress_proc(BindProtocol *This, task_header_t *t)
Definition: bindprot.c:1262
static BOOL do_direct_notif(BindProtocol *This)
Definition: bindprot.c:189
#define S_OK
Definition: intsafe.h:51
task_header_t header
Definition: bindprot.c:1256

◆ BPInternetProtocolSink_ReportResult()

static HRESULT WINAPI BPInternetProtocolSink_ReportResult ( IInternetProtocolSink iface,
HRESULT  hrResult,
DWORD  dwError,
LPCWSTR  szResult 
)
static

Definition at line 1359 of file bindprot.c.

1361 {
1363 
1364  TRACE("(%p)->(%08x %d %s)\n", This, hrResult, dwError, debugstr_w(szResult));
1365 
1366  if(!This->protocol_sink)
1367  return E_FAIL;
1368  This->reported_result = TRUE;
1369 
1370  if(!do_direct_notif(This)) {
1371  report_result_task_t *task;
1372 
1373  task = heap_alloc(sizeof(report_result_task_t));
1374  if(!task)
1375  return E_OUTOFMEMORY;
1376 
1377  task->hres = hrResult;
1378  task->err = dwError;
1379  task->str = heap_strdupW(szResult);
1380 
1382  return S_OK;
1383  }
1384 
1385  return IInternetProtocolSink_ReportResult(This->protocol_sink_handler, hrResult, dwError, szResult);
1386 }
static BindProtocol * impl_from_IInternetProtocolSink(IInternetProtocolSink *iface)
Definition: bindprot.c:1181
#define TRUE
Definition: types.h:120
#define E_FAIL
Definition: ddrawi.h:102
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
task_header_t header
Definition: bindprot.c:1342
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static WCHAR * heap_strdupW(const WCHAR *str)
Definition: propsheet.c:178
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
static void push_task(BindProtocol *This, task_header_t *task, task_proc_t proc)
Definition: bindprot.c:159
static BOOL do_direct_notif(BindProtocol *This)
Definition: bindprot.c:189
#define S_OK
Definition: intsafe.h:51
static void report_result_proc(BindProtocol *This, task_header_t *t)
Definition: bindprot.c:1349

◆ BPInternetProtocolSink_Switch()

static HRESULT WINAPI BPInternetProtocolSink_Switch ( IInternetProtocolSink iface,
PROTOCOLDATA *  pProtocolData 
)
static

Definition at line 1219 of file bindprot.c.

1221 {
1223  PROTOCOLDATA *data;
1224 
1225  TRACE("(%p)->(%p)\n", This, pProtocolData);
1226 
1227  TRACE("flags %x state %x data %p cb %u\n", pProtocolData->grfFlags, pProtocolData->dwState,
1228  pProtocolData->pData, pProtocolData->cbData);
1229 
1230  data = heap_alloc(sizeof(PROTOCOLDATA));
1231  if(!data)
1232  return E_OUTOFMEMORY;
1233  memcpy(data, pProtocolData, sizeof(PROTOCOLDATA));
1234 
1235  if((This->pi&PI_APARTMENTTHREADED && pProtocolData->grfFlags&PI_FORCE_ASYNC)
1236  || !do_direct_notif(This)) {
1237  switch_task_t *task;
1238 
1239  task = heap_alloc(sizeof(switch_task_t));
1240  if(!task)
1241  {
1242  heap_free(data);
1243  return E_OUTOFMEMORY;
1244  }
1245 
1246  task->data = data;
1247 
1248  push_task(This, &task->header, switch_proc);
1249  return S_OK;
1250  }
1251 
1252  return IInternetProtocolSink_Switch(This->protocol_sink_handler, data);
1253 }
static BindProtocol * impl_from_IInternetProtocolSink(IInternetProtocolSink *iface)
Definition: bindprot.c:1181
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define TRACE(s)
Definition: solgame.cpp:4
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static void push_task(BindProtocol *This, task_header_t *task, task_proc_t proc)
Definition: bindprot.c:159
static BOOL do_direct_notif(BindProtocol *This)
Definition: bindprot.c:189
PROTOCOLDATA * data
Definition: bindprot.c:1207
#define S_OK
Definition: intsafe.h:51
task_header_t header
Definition: bindprot.c:1206
static void switch_proc(BindProtocol *bind, task_header_t *t)
Definition: bindprot.c:1210
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

◆ BPServiceProvider_AddRef()

static ULONG WINAPI BPServiceProvider_AddRef ( IServiceProvider iface)
static

Definition at line 1410 of file bindprot.c.

1411 {
1413  return IInternetProtocolEx_AddRef(&This->IInternetProtocolEx_iface);
1414 }
static BindProtocol * impl_from_IServiceProvider(IServiceProvider *iface)
Definition: bindprot.c:1398

◆ BPServiceProvider_QueryInterface()

static HRESULT WINAPI BPServiceProvider_QueryInterface ( IServiceProvider iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1403 of file bindprot.c.

1405 {
1407  return IInternetProtocolEx_QueryInterface(&This->IInternetProtocolEx_iface, riid, ppv);
1408 }
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
static BindProtocol * impl_from_IServiceProvider(IServiceProvider *iface)
Definition: bindprot.c:1398

◆ BPServiceProvider_QueryService()

static HRESULT WINAPI BPServiceProvider_QueryService ( IServiceProvider iface,
REFGUID  guidService,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1422 of file bindprot.c.

1424 {
1426 
1427  TRACE("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
1428 
1429  if(!This->service_provider)
1430  return E_NOINTERFACE;
1431 
1432  return IServiceProvider_QueryService(This->service_provider, guidService, riid, ppv);
1433 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
static BindProtocol * impl_from_IServiceProvider(IServiceProvider *iface)
Definition: bindprot.c:1398
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4

◆ BPServiceProvider_Release()

static ULONG WINAPI BPServiceProvider_Release ( IServiceProvider iface)
static

Definition at line 1416 of file bindprot.c.

1417 {
1419  return IInternetProtocolEx_Release(&This->IInternetProtocolEx_iface);
1420 }
static BindProtocol * impl_from_IServiceProvider(IServiceProvider *iface)
Definition: bindprot.c:1398

◆ create_binding_protocol()

HRESULT create_binding_protocol ( BindProtocol **  protocol)

Definition at line 1442 of file bindprot.c.

1443 {
1444  BindProtocol *ret = heap_alloc_zero(sizeof(BindProtocol));
1445 
1446  ret->IInternetProtocolEx_iface.lpVtbl = &BindProtocolVtbl;
1447  ret->IInternetBindInfo_iface.lpVtbl = &InternetBindInfoVtbl;
1448  ret->IInternetPriority_iface.lpVtbl = &InternetPriorityVtbl;
1449  ret->IServiceProvider_iface.lpVtbl = &ServiceProviderVtbl;
1450  ret->IInternetProtocolSink_iface.lpVtbl = &InternetProtocolSinkVtbl;
1451 
1452  ret->default_protocol_handler.IInternetProtocol_iface.lpVtbl = &InternetProtocolHandlerVtbl;
1453  ret->default_protocol_handler.IInternetProtocolSink_iface.lpVtbl = &InternetProtocolSinkHandlerVtbl;
1454 
1455  ret->ref = 1;
1456  ret->apartment_thread = GetCurrentThreadId();
1457  ret->notif_hwnd = get_notif_hwnd();
1458  ret->protocol_handler = &ret->default_protocol_handler.IInternetProtocol_iface;
1459  ret->protocol_sink_handler = &ret->default_protocol_handler.IInternetProtocolSink_iface;
1460  InitializeCriticalSection(&ret->section);
1461  ret->section.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": BindProtocol.section");
1462 
1464 
1465  *protocol = ret;
1466  return S_OK;
1467 }
static const IInternetProtocolExVtbl BindProtocolVtbl
Definition: bindprot.c:588
#define DWORD_PTR
Definition: treelist.c:76
static const IInternetProtocolSinkVtbl InternetProtocolSinkVtbl
Definition: bindprot.c:1388
static const IInternetPriorityVtbl InternetPriorityVtbl
Definition: bindprot.c:1172
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Definition: synch.c:751
DWORD WINAPI GetCurrentThreadId(VOID)
Definition: thread.c:458
static const IInternetBindInfoVtbl InternetBindInfoVtbl
Definition: bindprot.c:1120
HWND get_notif_hwnd(void)
Definition: bindprot.c:111
int ret
static const IInternetProtocolVtbl InternetProtocolHandlerVtbl
Definition: bindprot.c:825
#define S_OK
Definition: intsafe.h:51
static const IServiceProviderVtbl ServiceProviderVtbl
Definition: bindprot.c:1435
static const IInternetProtocolSinkVtbl InternetProtocolSinkHandlerVtbl
Definition: bindprot.c:1047
static void URLMON_LockModule(void)
Definition: urlmon_main.h:68

Referenced by Binding_Create(), and InternetSession_CreateBinding().

◆ do_direct_notif()

static BOOL do_direct_notif ( BindProtocol This)
inlinestatic

Definition at line 189 of file bindprot.c.

190 {
191  return !(This->pi & PI_APARTMENTTHREADED) || (is_apartment_thread(This) && !This->continue_call);
192 }
static BOOL is_apartment_thread(BindProtocol *This)
Definition: bindprot.c:184

Referenced by BPInternetProtocolSink_ReportData(), BPInternetProtocolSink_ReportProgress(), BPInternetProtocolSink_ReportResult(), and BPInternetProtocolSink_Switch().

◆ get_notif_hwnd()

HWND get_notif_hwnd ( void  )

Definition at line 111 of file bindprot.c.

112 {
113  tls_data_t *tls_data;
114 
115  static INIT_ONCE init_once = INIT_ONCE_STATIC_INIT;
116 
117  tls_data = get_tls_data();
118  if(!tls_data)
119  return NULL;
120 
121  if(tls_data->notif_hwnd_cnt) {
122  tls_data->notif_hwnd_cnt++;
123  return tls_data->notif_hwnd;
124  }
125 
127  if(!notif_wnd_class)
128  return NULL;
129 
132  NULL, hProxyDll, NULL);
133  if(tls_data->notif_hwnd)
134  tls_data->notif_hwnd_cnt++;
135 
136  TRACE("hwnd = %p\n", tls_data->notif_hwnd);
137 
138  return tls_data->notif_hwnd;
139 }
static const WCHAR wszURLMonikerNotificationWindow[]
Definition: bindprot.c:86
static ATOM notif_wnd_class
Definition: bindprot.c:90
HWND notif_hwnd
Definition: urlmon_main.h:226
#define INIT_ONCE_STATIC_INIT
Definition: winbase.h:593
#define HWND_MESSAGE
Definition: winuser.h:1196
BOOL NTAPI InitOnceExecuteOnce(INIT_ONCE *once, PINIT_ONCE_FN func, void *param, void **context)
#define TRACE(s)
Definition: solgame.cpp:4
static BOOL WINAPI register_notif_wnd_class(INIT_ONCE *once, void *param, void **context)
Definition: bindprot.c:92
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
DWORD notif_hwnd_cnt
Definition: urlmon_main.h:227
#define NULL
Definition: types.h:112
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
tls_data_t * get_tls_data(void)
Definition: urlmon_main.c:62

Referenced by Binding_Create(), and create_binding_protocol().

◆ handle_mime_filter()

static HRESULT handle_mime_filter ( BindProtocol This,
IInternetProtocol mime_filter 
)
static

Definition at line 194 of file bindprot.c.

195 {
196  PROTOCOLFILTERDATA filter_data = { sizeof(PROTOCOLFILTERDATA), NULL, NULL, NULL, 0 };
197  HRESULT hres;
198 
199  hres = IInternetProtocol_QueryInterface(mime_filter, &IID_IInternetProtocolSink, (void**)&This->protocol_sink_handler);
200  if(FAILED(hres)) {
201  This->protocol_sink_handler = &This->default_protocol_handler.IInternetProtocolSink_iface;
202  return hres;
203  }
204 
205  IInternetProtocol_AddRef(mime_filter);
206  This->protocol_handler = mime_filter;
207 
208  filter_data.pProtocol = &This->default_protocol_handler.IInternetProtocol_iface;
209  hres = IInternetProtocol_Start(mime_filter, This->mime, &This->default_protocol_handler.IInternetProtocolSink_iface,
210  &This->IInternetBindInfo_iface, PI_FILTER_MODE|PI_FORCE_ASYNC,
211  (HANDLE_PTR)&filter_data);
212  if(FAILED(hres)) {
213  IInternetProtocolSink_Release(This->protocol_sink_handler);
214  IInternetProtocol_Release(This->protocol_handler);
215  This->protocol_sink_handler = &This->default_protocol_handler.IInternetProtocolSink_iface;
216  This->protocol_handler = &This->default_protocol_handler.IInternetProtocol_iface;
217  return hres;
218  }
219 
220  /* NOTE: IE9 calls it on the new protocol_sink. It doesn't make sense so it seems to be a bug there. */
221  IInternetProtocolSink_ReportProgress(This->protocol_sink, BINDSTATUS_LOADINGMIMEHANDLER, NULL);
222 
223  return S_OK;
224 }
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
GET_FEATURE_FROM_THREAD_RESTRICTED struct _tagPROTOCOLFILTERDATA PROTOCOLFILTERDATA
#define S_OK
Definition: intsafe.h:51
unsigned long HANDLE_PTR
Definition: basetsd.h:78
#define NULL
Definition: types.h:112

Referenced by mime_available().

◆ handle_redirect()

static HRESULT handle_redirect ( BindProtocol This,
const WCHAR url 
)
static

Definition at line 1005 of file bindprot.c.

1006 {
1007  HRESULT hres;
1008 
1009  if(This->redirect_callback) {
1010  VARIANT_BOOL cancel = VARIANT_FALSE;
1011  IBindCallbackRedirect_Redirect(This->redirect_callback, url, &cancel);
1012  if(cancel)
1013  return INET_E_REDIRECT_FAILED;
1014  }
1015 
1016  if(This->protocol_sink) {
1017  hres = IInternetProtocolSink_ReportProgress(This->protocol_sink, BINDSTATUS_REDIRECTING, url);
1018  if(FAILED(hres))
1019  return hres;
1020  }
1021 
1022  IInternetProtocol_Terminate(This->protocol, 0); /* should this be done in StartEx? */
1024 
1025  return IInternetProtocolEx_Start(&This->IInternetProtocolEx_iface, url, This->protocol_sink, This->bind_info, This->pi, 0);
1026 }
short VARIANT_BOOL
Definition: compat.h:2149
static void release_protocol_handler(BindProtocol *This)
Definition: bindprot.c:310
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
static const WCHAR url[]
Definition: encode.c:1432

Referenced by ProtocolSinkHandler_ReportResult().

◆ impl_from_IInternetBindInfo()

static BindProtocol* impl_from_IInternetBindInfo ( IInternetBindInfo iface)
inlinestatic

Definition at line 1057 of file bindprot.c.

1058 {
1059  return CONTAINING_RECORD(iface, BindProtocol, IInternetBindInfo_iface);
1060 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

Referenced by BindInfo_AddRef(), BindInfo_GetBindInfo(), BindInfo_GetBindString(), BindInfo_QueryInterface(), and BindInfo_Release().

◆ impl_from_IInternetPriority()

static BindProtocol* impl_from_IInternetPriority ( IInternetPriority iface)
inlinestatic

Definition at line 1128 of file bindprot.c.

1129 {
1130  return CONTAINING_RECORD(iface, BindProtocol, IInternetPriority_iface);
1131 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

Referenced by InternetPriority_AddRef(), InternetPriority_GetPriority(), InternetPriority_QueryInterface(), InternetPriority_Release(), and InternetPriority_SetPriority().

◆ impl_from_IInternetProtocol()

static BindProtocol* impl_from_IInternetProtocol ( IInternetProtocol iface)
inlinestatic

Definition at line 605 of file bindprot.c.

606 {
607  return CONTAINING_RECORD(iface, BindProtocol, default_protocol_handler.IInternetProtocol_iface);
608 }
IInternetProtocol IInternetProtocol_iface
Definition: urlmon_main.h:192
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

Referenced by ProtocolHandler_Abort(), ProtocolHandler_AddRef(), ProtocolHandler_Continue(), ProtocolHandler_LockRequest(), ProtocolHandler_QueryInterface(), ProtocolHandler_Read(), ProtocolHandler_Release(), ProtocolHandler_Resume(), ProtocolHandler_Seek(), ProtocolHandler_Suspend(), ProtocolHandler_Terminate(), and ProtocolHandler_UnlockRequest().

◆ impl_from_IInternetProtocolEx()

static BindProtocol* impl_from_IInternetProtocolEx ( IInternetProtocolEx iface)
inlinestatic

Definition at line 250 of file bindprot.c.

251 {
252  return CONTAINING_RECORD(iface, BindProtocol, IInternetProtocolEx_iface);
253 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

Referenced by BindProtocol_Abort(), BindProtocol_AddRef(), BindProtocol_Continue(), BindProtocol_LockRequest(), BindProtocol_QueryInterface(), BindProtocol_Read(), BindProtocol_Release(), BindProtocol_Resume(), BindProtocol_Seek(), BindProtocol_Start(), BindProtocol_StartEx(), BindProtocol_Suspend(), BindProtocol_Terminate(), and BindProtocol_UnlockRequest().

◆ impl_from_IInternetProtocolSink()

static BindProtocol* impl_from_IInternetProtocolSink ( IInternetProtocolSink iface)
inlinestatic

Definition at line 1181 of file bindprot.c.

1182 {
1183  return CONTAINING_RECORD(iface, BindProtocol, IInternetProtocolSink_iface);
1184 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

Referenced by BPInternetProtocolSink_AddRef(), BPInternetProtocolSink_QueryInterface(), BPInternetProtocolSink_Release(), BPInternetProtocolSink_ReportData(), BPInternetProtocolSink_ReportProgress(), BPInternetProtocolSink_ReportResult(), and BPInternetProtocolSink_Switch().

◆ impl_from_IInternetProtocolSinkHandler()

static BindProtocol* impl_from_IInternetProtocolSinkHandler ( IInternetProtocolSink iface)
inlinestatic

Definition at line 841 of file bindprot.c.

842 {
843  return CONTAINING_RECORD(iface, BindProtocol, default_protocol_handler.IInternetProtocolSink_iface);
844 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
IInternetProtocolSink IInternetProtocolSink_iface
Definition: urlmon_main.h:179

Referenced by ProtocolSinkHandler_AddRef(), ProtocolSinkHandler_QueryInterface(), ProtocolSinkHandler_Release(), ProtocolSinkHandler_ReportData(), ProtocolSinkHandler_ReportProgress(), ProtocolSinkHandler_ReportResult(), and ProtocolSinkHandler_Switch().

◆ impl_from_IServiceProvider()

static BindProtocol* impl_from_IServiceProvider ( IServiceProvider iface)
inlinestatic

Definition at line 1398 of file bindprot.c.

1399 {
1400  return CONTAINING_RECORD(iface, BindProtocol, IServiceProvider_iface);
1401 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

Referenced by BPServiceProvider_AddRef(), BPServiceProvider_QueryInterface(), BPServiceProvider_QueryService(), and BPServiceProvider_Release().

◆ InternetPriority_AddRef()

static ULONG WINAPI InternetPriority_AddRef ( IInternetPriority iface)
static

Definition at line 1140 of file bindprot.c.

1141 {
1143  return IInternetProtocolEx_AddRef(&This->IInternetProtocolEx_iface);
1144 }
static BindProtocol * impl_from_IInternetPriority(IInternetPriority *iface)
Definition: bindprot.c:1128

◆ InternetPriority_GetPriority()

static HRESULT WINAPI InternetPriority_GetPriority ( IInternetPriority iface,
LONG pnPriority 
)
static

Definition at line 1162 of file bindprot.c.

1163 {
1165 
1166  TRACE("(%p)->(%p)\n", This, pnPriority);
1167 
1168  *pnPriority = This->priority;
1169  return S_OK;
1170 }
#define TRACE(s)
Definition: solgame.cpp:4
static BindProtocol * impl_from_IInternetPriority(IInternetPriority *iface)
Definition: bindprot.c:1128
#define S_OK
Definition: intsafe.h:51

◆ InternetPriority_QueryInterface()

static HRESULT WINAPI InternetPriority_QueryInterface ( IInternetPriority iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1133 of file bindprot.c.

1135 {
1137  return IInternetProtocolEx_QueryInterface(&This->IInternetProtocolEx_iface, riid, ppv);
1138 }
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
static BindProtocol * impl_from_IInternetPriority(IInternetPriority *iface)
Definition: bindprot.c:1128

◆ InternetPriority_Release()

static ULONG WINAPI InternetPriority_Release ( IInternetPriority iface)
static

Definition at line 1146 of file bindprot.c.

1147 {
1149  return IInternetProtocolEx_Release(&This->IInternetProtocolEx_iface);
1150 }
static BindProtocol * impl_from_IInternetPriority(IInternetPriority *iface)
Definition: bindprot.c:1128

◆ InternetPriority_SetPriority()

static HRESULT WINAPI InternetPriority_SetPriority ( IInternetPriority iface,
LONG  nPriority 
)
static

Definition at line 1152 of file bindprot.c.

1153 {
1155 
1156  TRACE("(%p)->(%d)\n", This, nPriority);
1157 
1158  This->priority = nPriority;
1159  return S_OK;
1160 }
#define TRACE(s)
Definition: solgame.cpp:4
static BindProtocol * impl_from_IInternetPriority(IInternetPriority *iface)
Definition: bindprot.c:1128
#define S_OK
Definition: intsafe.h:51

◆ is_apartment_thread()

static BOOL is_apartment_thread ( BindProtocol This)
inlinestatic

Definition at line 184 of file bindprot.c.

185 {
186  return This->apartment_thread == GetCurrentThreadId();
187 }
DWORD WINAPI GetCurrentThreadId(VOID)
Definition: thread.c:458

Referenced by do_direct_notif(), ProtocolHandler_Read(), and ProtocolSinkHandler_ReportData().

◆ mime_available()

static void mime_available ( BindProtocol This,
LPCWSTR  mime,
BOOL  verified 
)
static

Definition at line 226 of file bindprot.c.

227 {
229  HRESULT hres;
230 
231  heap_free(This->mime);
232  This->mime = heap_strdupW(mime);
233 
234  if(This->protocol_handler==&This->default_protocol_handler.IInternetProtocol_iface
235  && (mime_filter = get_mime_filter(mime))) {
236  TRACE("Got mime filter for %s\n", debugstr_w(mime));
237 
239  IInternetProtocol_Release(mime_filter);
240  if(FAILED(hres))
241  FIXME("MIME filter failed: %08x\n", hres);
242  }
243 
244  if(This->reported_mime || verified || !(This->pi & PI_MIMEVERIFICATION)) {
245  This->reported_mime = TRUE;
246  IInternetProtocolSink_ReportProgress(This->protocol_sink, BINDSTATUS_MIMETYPEAVAILABLE, mime);
247  }
248 }
static HRESULT handle_mime_filter(BindProtocol *This, IInternetProtocol *mime_filter)
Definition: bindprot.c:194
const WCHAR * mime
Definition: mimefilter.c:512
#define TRUE
Definition: types.h:120
static WCHAR * heap_strdupW(const WCHAR *str)
Definition: propsheet.c:178
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
IInternetProtocol * get_mime_filter(LPCWSTR mime)
Definition: session.c:250
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by ProtocolSinkHandler_ReportProgress().

◆ notif_wnd_proc()

static LRESULT WINAPI notif_wnd_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 62 of file bindprot.c.

63 {
64  switch(msg) {
65  case WM_MK_CONTINUE: {
67 
69 
70  IInternetProtocolEx_Release(&This->IInternetProtocolEx_iface);
71  return 0;
72  }
73  case WM_MK_RELEASE: {
75 
76  if(!--data->notif_hwnd_cnt) {
78  data->notif_hwnd = NULL;
79  }
80  }
81  }
82 
83  return DefWindowProcW(hwnd, msg, wParam, lParam);
84 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
static void process_tasks(BindProtocol *This)
Definition: bindprot.c:37
BOOL WINAPI DestroyWindow(_In_ HWND)
WPARAM wParam
Definition: combotst.c:138
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_MK_CONTINUE
Definition: bindprot.c:34
#define WM_MK_RELEASE
Definition: bindprot.c:35
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define NULL
Definition: types.h:112
#define msg(x)
Definition: auth_time.c:54
tls_data_t * get_tls_data(void)
Definition: urlmon_main.c:62
LPARAM lParam
Definition: combotst.c:139

Referenced by register_notif_wnd_class().

◆ on_progress_proc()

static void on_progress_proc ( BindProtocol This,
task_header_t t 
)
static

Definition at line 1262 of file bindprot.c.

1263 {
1265 
1266  IInternetProtocolSink_ReportProgress(This->protocol_sink_handler, task->status_code, task->status_text);
1267 
1268  heap_free(task->status_text);
1269  heap_free(task);
1270 }
GLdouble GLdouble t
Definition: gl.h:2047
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by BPInternetProtocolSink_ReportProgress().

◆ process_tasks()

static void process_tasks ( BindProtocol This)
static

Definition at line 37 of file bindprot.c.

38 {
39  task_header_t *task;
40 
41  while(1) {
42  EnterCriticalSection(&This->section);
43 
44  task = This->task_queue_head;
45  if(task) {
46  This->task_queue_head = task->next;
47  if(!This->task_queue_head)
48  This->task_queue_tail = NULL;
49  }
50 
51  LeaveCriticalSection(&This->section);
52 
53  if(!task)
54  break;
55 
56  This->continue_call++;
57  task->proc(This, task);
58  This->continue_call--;
59  }
60 }
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
async_task_proc_t proc
Definition: internet.h:390
#define NULL
Definition: types.h:112
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

Referenced by BindProtocol_StartEx(), and notif_wnd_proc().

◆ ProtocolHandler_Abort()

static HRESULT WINAPI ProtocolHandler_Abort ( IInternetProtocol iface,
HRESULT  hrReason,
DWORD  dwOptions 
)
static

Definition at line 683 of file bindprot.c.

685 {
687 
688  TRACE("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
689 
690  if(This->protocol && !This->reported_result)
691  return IInternetProtocol_Abort(This->protocol, hrReason, dwOptions);
692 
693  return S_OK;
694 }
DWORD dwOptions
Definition: solitaire.cpp:23
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:51

◆ ProtocolHandler_AddRef()

static ULONG WINAPI ProtocolHandler_AddRef ( IInternetProtocol iface)
static

Definition at line 638 of file bindprot.c.

639 {
641  return IInternetProtocolEx_AddRef(&This->IInternetProtocolEx_iface);
642 }
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605

◆ ProtocolHandler_Continue()

static HRESULT WINAPI ProtocolHandler_Continue ( IInternetProtocol iface,
PROTOCOLDATA *  pProtocolData 
)
static

Definition at line 658 of file bindprot.c.

659 {
662  HRESULT hres;
663 
664  TRACE("(%p)->(%p)\n", This, pProtocolData);
665 
666  /* FIXME: This should not be needed. */
667  if(!This->protocol) {
668  if(!This->protocol_unk)
669  return E_FAIL;
670  hres = IUnknown_QueryInterface(This->protocol_unk, &IID_IInternetProtocol, (void**)&protocol);
671  if(FAILED(hres))
672  return E_FAIL;
673  }
674 
675  hres = IInternetProtocol_Continue(protocol ? protocol : This->protocol, pProtocolData);
676 
677  heap_free(pProtocolData);
678  if(protocol)
679  IInternetProtocol_Release(protocol);
680  return hres;
681 }
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605
#define E_FAIL
Definition: ddrawi.h:102
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
#define NULL
Definition: types.h:112
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

◆ ProtocolHandler_LockRequest()

static HRESULT WINAPI ProtocolHandler_LockRequest ( IInternetProtocol iface,
DWORD  dwOptions 
)
static

Definition at line 807 of file bindprot.c.

808 {
810 
811  TRACE("(%p)->(%08x)\n", This, dwOptions);
812 
813  return IInternetProtocol_LockRequest(This->protocol, dwOptions);
814 }
DWORD dwOptions
Definition: solitaire.cpp:23
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605
#define TRACE(s)
Definition: solgame.cpp:4

◆ ProtocolHandler_QueryInterface()

static HRESULT WINAPI ProtocolHandler_QueryInterface ( IInternetProtocol iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 610 of file bindprot.c.

611 {
613 
614  *ppv = NULL;
615  if(IsEqualGUID(&IID_IUnknown, riid)) {
616  TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
617  *ppv = &This->default_protocol_handler.IInternetProtocol_iface;
618  }else if(IsEqualGUID(&IID_IInternetProtocolRoot, riid)) {
619  TRACE("(%p)->(IID_IInternetProtocolRoot %p)\n", This, ppv);
620  *ppv = &This->default_protocol_handler.IInternetProtocol_iface;
621  }else if(IsEqualGUID(&IID_IInternetProtocol, riid)) {
622  TRACE("(%p)->(IID_IInternetProtocol %p)\n", This, ppv);
623  *ppv = &This->default_protocol_handler.IInternetProtocol_iface;
624  }else if(IsEqualGUID(&IID_IInternetProtocolSink, riid)) {
625  TRACE("(%p)->(IID_IInternetProtocolSink %p)\n", This, ppv);
626  *ppv = &This->default_protocol_handler.IInternetProtocolSink_iface;
627  }
628 
629  if(*ppv) {
630  IInternetProtocol_AddRef(iface);
631  return S_OK;
632  }
633 
634  WARN("not supported interface %s\n", debugstr_guid(riid));
635  return E_NOINTERFACE;
636 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
#define WARN(fmt,...)
Definition: debug.h:112
REFIID LPVOID * ppv
Definition: atlbase.h:39
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
const GUID IID_IUnknown
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112

◆ ProtocolHandler_Read()

static HRESULT WINAPI ProtocolHandler_Read ( IInternetProtocol iface,
void pv,
ULONG  cb,
ULONG pcbRead 
)
static

Definition at line 747 of file bindprot.c.

749 {
751  ULONG read = 0;
752  HRESULT hres = S_OK;
753 
754  TRACE("(%p)->(%p %u %p)\n", This, pv, cb, pcbRead);
755 
756  if(This->buf_size) {
757  read = min(cb, This->buf_size);
758  memcpy(pv, This->buf, read);
759 
760  if(read == This->buf_size) {
761  heap_free(This->buf);
762  This->buf = NULL;
763  }else {
764  memmove(This->buf, This->buf+cb, This->buf_size-cb);
765  }
766 
767  This->buf_size -= read;
768  }
769 
770  if(read < cb) {
772  ULONG cread = 0;
773 
774  /* FIXME: We shouldn't need it, but out binding code currently depends on it. */
775  if(!This->protocol && This->protocol_unk) {
776  hres = IUnknown_QueryInterface(This->protocol_unk, &IID_IInternetProtocol,
777  (void**)&protocol);
778  if(FAILED(hres))
779  return E_ABORT;
780  }else {
781  protocol = This->protocol;
782  }
783 
785  This->continue_call++;
786  hres = IInternetProtocol_Read(protocol, (BYTE*)pv+read, cb-read, &cread);
788  This->continue_call--;
789  read += cread;
790 
791  if(!This->protocol)
792  IInternetProtocol_Release(protocol);
793  }
794 
795  *pcbRead = read;
796  return hres;
797 }
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
static BOOL is_apartment_thread(BindProtocol *This)
Definition: bindprot.c:184
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define E_ABORT
Definition: winerror.h:2366
unsigned char BYTE
Definition: xxhash.c:193
#define S_OK
Definition: intsafe.h:51
#define min(a, b)
Definition: monoChain.cc:55
#define NULL
Definition: types.h:112
static HMODULE MODULEINFO DWORD cb
Definition: module.c:32
unsigned int ULONG
Definition: retypes.h:1
_CRTIMP int __cdecl read(_In_ int _FileHandle, _Out_writes_bytes_(_MaxCharCount) void *_DstBuf, _In_ unsigned int _MaxCharCount)
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

◆ ProtocolHandler_Release()

static ULONG WINAPI ProtocolHandler_Release ( IInternetProtocol iface)
static

Definition at line 644 of file bindprot.c.

645 {
647  return IInternetProtocolEx_Release(&This->IInternetProtocolEx_iface);
648 }
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605

◆ ProtocolHandler_Resume()

static HRESULT WINAPI ProtocolHandler_Resume ( IInternetProtocol iface)
static

Definition at line 740 of file bindprot.c.

741 {
743  FIXME("(%p)\n", This);
744  return E_NOTIMPL;
745 }
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ ProtocolHandler_Seek()

static HRESULT WINAPI ProtocolHandler_Seek ( IInternetProtocol iface,
LARGE_INTEGER  dlibMove,
DWORD  dwOrigin,
ULARGE_INTEGER plibNewPosition 
)
static

Definition at line 799 of file bindprot.c.

801 {
803  FIXME("(%p)->(%d %d %p)\n", This, dlibMove.u.LowPart, dwOrigin, plibNewPosition);
804  return E_NOTIMPL;
805 }
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605
#define FIXME(fmt,...)
Definition: debug.h:111
struct _LARGE_INTEGER::@2277 u
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ ProtocolHandler_Start()

static HRESULT WINAPI ProtocolHandler_Start ( IInternetProtocol iface,
LPCWSTR  szUrl,
IInternetProtocolSink pOIProtSink,
IInternetBindInfo pOIBindInfo,
DWORD  grfPI,
HANDLE_PTR  dwReserved 
)
static

Definition at line 650 of file bindprot.c.

653 {
654  ERR("Should not be called\n");
655  return E_NOTIMPL;
656 }
#define ERR(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ ProtocolHandler_Suspend()

static HRESULT WINAPI ProtocolHandler_Suspend ( IInternetProtocol iface)
static

Definition at line 733 of file bindprot.c.

734 {
736  FIXME("(%p)\n", This);
737  return E_NOTIMPL;
738 }
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ ProtocolHandler_Terminate()

static HRESULT WINAPI ProtocolHandler_Terminate ( IInternetProtocol iface,
DWORD  dwOptions 
)
static

Definition at line 696 of file bindprot.c.

697 {
699 
700  TRACE("(%p)->(%08x)\n", This, dwOptions);
701 
702  if(!This->reported_result)
703  return E_FAIL;
704 
705  /* This may get released in Terminate call. */
706  IInternetProtocolEx_AddRef(&This->IInternetProtocolEx_iface);
707 
708  if(This->protocol) {
709  IInternetProtocol_Terminate(This->protocol, 0);
710 
711  if (This->protocol_unk) {
712  IInternetProtocol_Release(This->protocol);
713  This->protocol = NULL;
714  }
715  }
716 
718 
719  if(This->bind_info) {
720  IInternetBindInfo_Release(This->bind_info);
721  This->bind_info = NULL;
722  }
723 
724  if(This->redirect_callback) {
725  IBindCallbackRedirect_Release(This->redirect_callback);
726  This->redirect_callback = NULL;
727  }
728 
729  IInternetProtocolEx_Release(&This->IInternetProtocolEx_iface);
730  return S_OK;
731 }
DWORD dwOptions
Definition: solitaire.cpp:23
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605
#define E_FAIL
Definition: ddrawi.h:102
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
void set_binding_sink(BindProtocol *This, IInternetProtocolSink *sink, IInternetBindInfo *bind_info)
Definition: bindprot.c:564

◆ ProtocolHandler_UnlockRequest()

static HRESULT WINAPI ProtocolHandler_UnlockRequest ( IInternetProtocol iface)
static

Definition at line 816 of file bindprot.c.

817 {
819 
820  TRACE("(%p)\n", This);
821 
822  return IInternetProtocol_UnlockRequest(This->protocol);
823 }
static BindProtocol * impl_from_IInternetProtocol(IInternetProtocol *iface)
Definition: bindprot.c:605
#define TRACE(s)
Definition: solgame.cpp:4

◆ ProtocolSinkHandler_AddRef()

static ULONG WINAPI ProtocolSinkHandler_AddRef ( IInternetProtocolSink iface)
static

Definition at line 854 of file bindprot.c.

855 {
857  return IInternetProtocolEx_AddRef(&This->IInternetProtocolEx_iface);
858 }
static BindProtocol * impl_from_IInternetProtocolSinkHandler(IInternetProtocolSink *iface)
Definition: bindprot.c:841

◆ ProtocolSinkHandler_QueryInterface()

static HRESULT WINAPI ProtocolSinkHandler_QueryInterface ( IInternetProtocolSink iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 846 of file bindprot.c.

848 {
850  return IInternetProtocol_QueryInterface(&This->default_protocol_handler.IInternetProtocol_iface,
851  riid, ppvObject);
852 }
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppvObject
Definition: precomp.h:44
static BindProtocol * impl_from_IInternetProtocolSinkHandler(IInternetProtocolSink *iface)
Definition: bindprot.c:841

◆ ProtocolSinkHandler_Release()

static ULONG WINAPI ProtocolSinkHandler_Release ( IInternetProtocolSink iface)
static

Definition at line 860 of file bindprot.c.

861 {
863  return IInternetProtocolEx_Release(&This->IInternetProtocolEx_iface);
864 }
static BindProtocol * impl_from_IInternetProtocolSinkHandler(IInternetProtocolSink *iface)
Definition: bindprot.c:841

◆ ProtocolSinkHandler_ReportData()

static HRESULT WINAPI ProtocolSinkHandler_ReportData ( IInternetProtocolSink iface,
DWORD  bscf,
ULONG  progress,
ULONG  progress_max 
)
static

Definition at line 922 of file bindprot.c.

924 {
926 
927  TRACE("(%p)->(%x %u %u)\n", This, bscf, progress, progress_max);
928 
929  This->bscf = bscf;
930  This->progress = progress;
931  This->progress_max = progress_max;
932 
933  if(!This->protocol_sink)
934  return S_OK;
935 
936  if((This->pi & PI_MIMEVERIFICATION) && !This->reported_mime) {
938  DWORD read = 0;
939  LPWSTR mime;
940  HRESULT hres;
941 
942  do {
943  read = 0;
945  This->continue_call++;
946  hres = IInternetProtocol_Read(This->protocol, buf,
947  sizeof(buf)-This->buf_size, &read);
949  This->continue_call--;
950  if(FAILED(hres) && hres != E_PENDING)
951  return hres;
952 
953  if(!This->buf) {
954  This->buf = heap_alloc(BUFFER_SIZE);
955  if(!This->buf)
956  return E_OUTOFMEMORY;
957  }else if(read + This->buf_size > BUFFER_SIZE) {
958  BYTE *tmp;
959 
960  tmp = heap_realloc(This->buf, read+This->buf_size);
961  if(!tmp)
962  return E_OUTOFMEMORY;
963  This->buf = tmp;
964  }
965 
966  memcpy(This->buf+This->buf_size, buf, read);
967  This->buf_size += read;
968  }while(This->buf_size < MIME_TEST_SIZE && hres == S_OK);
969 
970  if(This->buf_size < MIME_TEST_SIZE && hres != S_FALSE)
971  return S_OK;
972 
973  bscf = BSCF_FIRSTDATANOTIFICATION;
974  if(hres == S_FALSE)
975  bscf |= BSCF_LASTDATANOTIFICATION|BSCF_DATAFULLYAVAILABLE;
976 
977  if(!This->reported_mime) {
978  BSTR raw_uri;
979 
980  hres = IUri_GetRawUri(This->uri, &raw_uri);
981  if(FAILED(hres))
982  return hres;
983 
984  hres = FindMimeFromData(NULL, raw_uri, This->buf, min(This->buf_size, MIME_TEST_SIZE),
985  This->mime, 0, &mime, 0);
986  SysFreeString(raw_uri);
987  if(FAILED(hres))
988  return hres;
989 
990  heap_free(This->mime);
991  This->mime = heap_strdupW(mime);
993  This->reported_mime = TRUE;
994  if(This->protocol_sink)
995  IInternetProtocolSink_ReportProgress(This->protocol_sink, BINDSTATUS_MIMETYPEAVAILABLE, This->mime);
996  }
997  }
998 
999  if(!This->protocol_sink)
1000  return S_OK;
1001 
1002  return IInternetProtocolSink_ReportData(This->protocol_sink, bscf, progress, progress_max);
1003 }
#define BUFFER_SIZE
Definition: bindprot.c:31
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
const WCHAR * mime
Definition: mimefilter.c:512
#define TRUE
Definition: types.h:120
static BOOL is_apartment_thread(BindProtocol *This)
Definition: bindprot.c:184
OLECHAR * BSTR
Definition: compat.h:2152
static void * heap_realloc(void *mem, size_t len)
Definition: appwiz.h:70
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static WCHAR * heap_strdupW(const WCHAR *str)
Definition: propsheet.c:178
#define S_FALSE
Definition: winerror.h:2357
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
unsigned char BYTE
Definition: xxhash.c:193
#define S_OK
Definition: intsafe.h:51
#define min(a, b)
Definition: monoChain.cc:55
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define NULL
Definition: types.h:112
cd_progress_ptr progress
Definition: cdjpeg.h:152
static BindProtocol * impl_from_IInternetProtocolSinkHandler(IInternetProtocolSink *iface)
Definition: bindprot.c:841
#define MIME_TEST_SIZE
Definition: bindprot.c:32
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define E_PENDING
Definition: dinput.h:172
HRESULT WINAPI FindMimeFromData(LPBC pBC, LPCWSTR pwzUrl, LPVOID pBuffer, DWORD cbSize, LPCWSTR pwzMimeProposed, DWORD dwMimeFlags, LPWSTR *ppwzMimeOut, DWORD dwReserved)
Definition: mimefilter.c:680
_CRTIMP int __cdecl read(_In_ int _FileHandle, _Out_writes_bytes_(_MaxCharCount) void *_DstBuf, _In_ unsigned int _MaxCharCount)
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

◆ ProtocolSinkHandler_ReportProgress()

static HRESULT WINAPI ProtocolSinkHandler_ReportProgress ( IInternetProtocolSink iface,
ULONG  status_code,
LPCWSTR  status_text 
)
static

Definition at line 881 of file bindprot.c.

883 {
885 
886  TRACE("(%p)->(%s %s)\n", This, debugstr_bindstatus(status_code), debugstr_w(status_text));
887 
888  if(!This->protocol_sink)
889  return S_OK;
890 
891  switch(status_code) {
892  case BINDSTATUS_FINDINGRESOURCE:
893  case BINDSTATUS_CONNECTING:
894  case BINDSTATUS_REDIRECTING:
895  case BINDSTATUS_SENDINGREQUEST:
896  case BINDSTATUS_CACHEFILENAMEAVAILABLE:
897  case BINDSTATUS_DIRECTBIND:
898  case BINDSTATUS_ACCEPTRANGES:
899  case BINDSTATUS_DECODING:
900  IInternetProtocolSink_ReportProgress(This->protocol_sink, status_code, status_text);
901  break;
902 
903  case BINDSTATUS_BEGINDOWNLOADDATA:
904  IInternetProtocolSink_ReportData(This->protocol_sink, This->bscf, This->progress, This->progress_max);
905  break;
906 
907  case BINDSTATUS_MIMETYPEAVAILABLE:
908  mime_available(This, status_text, FALSE);
909  break;
910 
911  case BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE:
912  mime_available(This, status_text, TRUE);
913  break;
914 
915  default:
916  FIXME("unsupported ulStatusCode %u\n", status_code);
917  }
918 
919  return S_OK;
920 }
#define TRUE
Definition: types.h:120
static void mime_available(BindProtocol *This, LPCWSTR mime, BOOL verified)
Definition: bindprot.c:226
#define FALSE
Definition: types.h:117
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
#define TRACE(s)
Definition: solgame.cpp:4
const char * debugstr_bindstatus(ULONG status)
Definition: urlmon_main.c:175
#define S_OK
Definition: intsafe.h:51
static BindProtocol * impl_from_IInternetProtocolSinkHandler(IInternetProtocolSink *iface)
Definition: bindprot.c:841

◆ ProtocolSinkHandler_ReportResult()

static HRESULT WINAPI ProtocolSinkHandler_ReportResult ( IInternetProtocolSink iface,
HRESULT  hrResult,
DWORD  dwError,
LPCWSTR  szResult 
)
static

Definition at line 1028 of file bindprot.c.

1030 {
1032 
1033  TRACE("(%p)->(%08x %d %s)\n", This, hrResult, dwError, debugstr_w(szResult));
1034 
1035  if(hrResult == INET_E_REDIRECT_FAILED) {
1036  hrResult = handle_redirect(This, szResult);
1037  if(hrResult == S_OK)
1038  return S_OK;
1039  szResult = NULL;
1040  }
1041 
1042  if(This->protocol_sink)
1043  return IInternetProtocolSink_ReportResult(This->protocol_sink, hrResult, dwError, szResult);
1044  return S_OK;
1045 }
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
static HRESULT handle_redirect(BindProtocol *This, const WCHAR *url)
Definition: bindprot.c:1005
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
static BindProtocol * impl_from_IInternetProtocolSinkHandler(IInternetProtocolSink *iface)
Definition: bindprot.c:841

◆ ProtocolSinkHandler_Switch()

static HRESULT WINAPI ProtocolSinkHandler_Switch ( IInternetProtocolSink iface,
PROTOCOLDATA *  pProtocolData 
)
static

Definition at line 866 of file bindprot.c.

868 {
870 
871  TRACE("(%p)->(%p)\n", This, pProtocolData);
872 
873  if(!This->protocol_sink) {
874  IInternetProtocol_Continue(This->protocol_handler, pProtocolData);
875  return S_OK;
876  }
877 
878  return IInternetProtocolSink_Switch(This->protocol_sink, pProtocolData);
879 }
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:51
static BindProtocol * impl_from_IInternetProtocolSinkHandler(IInternetProtocolSink *iface)
Definition: bindprot.c:841

◆ push_task()

static void push_task ( BindProtocol This,
task_header_t task,
task_proc_t  proc 
)
static

Definition at line 159 of file bindprot.c.

160 {
161  BOOL do_post = FALSE;
162 
163  task->proc = proc;
164  task->next = NULL;
165 
166  EnterCriticalSection(&This->section);
167 
168  if(This->task_queue_tail) {
169  This->task_queue_tail->next = task;
170  This->task_queue_tail = task;
171  }else {
172  This->task_queue_tail = This->task_queue_head = task;
173  do_post = !This->continue_call;
174  }
175 
176  LeaveCriticalSection(&This->section);
177 
178  if(do_post) {
179  IInternetProtocolEx_AddRef(&This->IInternetProtocolEx_iface);
180  PostMessageW(This->notif_hwnd, WM_MK_CONTINUE, 0, (LPARAM)This);
181  }
182 }
static HANDLE proc()
Definition: pdb.c:32
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define WM_MK_CONTINUE
Definition: bindprot.c:34
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
LONG_PTR LPARAM
Definition: windef.h:208
async_task_proc_t proc
Definition: internet.h:390
#define NULL
Definition: types.h:112
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

Referenced by BPInternetProtocolSink_ReportData(), BPInternetProtocolSink_ReportProgress(), BPInternetProtocolSink_ReportResult(), and BPInternetProtocolSink_Switch().

◆ register_notif_wnd_class()

static BOOL WINAPI register_notif_wnd_class ( INIT_ONCE once,
void param,
void **  context 
)
static

Definition at line 92 of file bindprot.c.

93 {
94  static WNDCLASSEXW wndclass = {
95  sizeof(wndclass), 0, notif_wnd_proc, 0, 0,
96  NULL, NULL, NULL, NULL, NULL,
98  };
99 
100  wndclass.hInstance = hProxyDll;
101  notif_wnd_class = RegisterClassExW(&wndclass);
102  return TRUE;
103 }
static const WCHAR wszURLMonikerNotificationWindow[]
Definition: bindprot.c:86
static ATOM notif_wnd_class
Definition: bindprot.c:90
#define TRUE
Definition: types.h:120
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
static LRESULT WINAPI notif_wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: bindprot.c:62
HINSTANCE hInstance
Definition: winuser.h:3196
#define NULL
Definition: types.h:112

Referenced by get_notif_hwnd().

◆ release_notif_hwnd()

void release_notif_hwnd ( HWND  hwnd)

Definition at line 141 of file bindprot.c.

142 {
144 
145  if(!data)
146  return;
147 
148  if(data->notif_hwnd != hwnd) {
149  PostMessageW(data->notif_hwnd, WM_MK_RELEASE, 0, 0);
150  return;
151  }
152 
153  if(!--data->notif_hwnd_cnt) {
154  DestroyWindow(data->notif_hwnd);
155  data->notif_hwnd = NULL;
156  }
157 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
BOOL WINAPI DestroyWindow(_In_ HWND)
#define WM_MK_RELEASE
Definition: bindprot.c:35
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define NULL
Definition: types.h:112
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
tls_data_t * get_tls_data(void)
Definition: urlmon_main.c:62

Referenced by Binding_Release(), and BindProtocol_Release().

◆ release_protocol_handler()

static void release_protocol_handler ( BindProtocol This)
static

Definition at line 310 of file bindprot.c.

311 {
312  if(This->protocol) {
313  IInternetProtocol_Release(This->protocol);
314  This->protocol = NULL;
315  }
316  if(This->protocol_handler && This->protocol_handler != &This->default_protocol_handler.IInternetProtocol_iface) {
317  IInternetProtocol_Release(This->protocol_handler);
318  This->protocol_handler = &This->default_protocol_handler.IInternetProtocol_iface;
319  }
320  if(This->protocol_sink_handler &&
321  This->protocol_sink_handler != &This->default_protocol_handler.IInternetProtocolSink_iface) {
322  IInternetProtocolSink_Release(This->protocol_sink_handler);
323  This->protocol_sink_handler = &This->default_protocol_handler.IInternetProtocolSink_iface;
324  }
325  if(This->protocol_unk) {
326  IUnknown_Release(This->protocol_unk);
327  This->protocol_unk = NULL;
328  }
329 }
#define NULL
Definition: types.h:112

Referenced by BindProtocol_Release(), and handle_redirect().

◆ report_data_proc()

static void report_data_proc ( BindProtocol This,
task_header_t t 
)
static

Definition at line 1302 of file bindprot.c.

1303 {
1305 
1306  IInternetProtocolSink_ReportData(This->protocol_sink_handler,
1307  task->bscf, task->progress, task->progress_max);
1308 
1309  heap_free(task);
1310 }
GLdouble GLdouble t
Definition: gl.h:2047
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by BPInternetProtocolSink_ReportData().

◆ report_result_proc()

static void report_result_proc ( BindProtocol This,
task_header_t t 
)
static

Definition at line 1349 of file bindprot.c.

1350 {
1352 
1353  IInternetProtocolSink_ReportResult(This->protocol_sink_handler, task->hres, task->err, task->str);
1354 
1355  heap_free(task->str);
1356  heap_free(task);
1357 }
GLdouble GLdouble t
Definition: gl.h:2047
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by BPInternetProtocolSink_ReportResult().

◆ set_binding_sink()

void set_binding_sink ( BindProtocol This,
IInternetProtocolSink sink,
IInternetBindInfo bind_info 
)

Definition at line 564 of file bindprot.c.

565 {
566  IInternetProtocolSink *prev_sink;
568 
569  if(sink)
570  IInternetProtocolSink_AddRef(sink);
571  prev_sink = InterlockedExchangePointer((void**)&This->protocol_sink, sink);
572  if(prev_sink)
573  IInternetProtocolSink_Release(prev_sink);
574 
575  if(sink)
576  IInternetProtocolSink_QueryInterface(sink, &IID_IServiceProvider, (void**)&service_provider);
577  service_provider = InterlockedExchangePointer((void**)&This->service_provider, service_provider);
578  if(service_provider)
579  IServiceProvider_Release(service_provider);
580 
581  if(bind_info)
582  IInternetBindInfo_AddRef(bind_info);
583  bind_info = InterlockedExchangePointer((void**)&This->bind_info, bind_info);
584  if(bind_info)
585  IInternetBindInfo_Release(bind_info);
586 }
GLsizei GLenum GLboolean sink
Definition: glext.h:5672
static IServiceProvider service_provider
Definition: mimeole.c:1313
#define InterlockedExchangePointer(Target, Value)
Definition: dshow.h:45
#define NULL
Definition: types.h:112
static IInternetBindInfo bind_info
Definition: mimeole.c:1273

Referenced by BindProtocol_Release(), BindProtocol_StartEx(), ProtocolHandler_Terminate(), and start_binding().

◆ switch_proc()

static void switch_proc ( BindProtocol bind,
task_header_t t 
)
static

Definition at line 1210 of file bindprot.c.

1211 {
1212  switch_task_t *task = (switch_task_t*)t;
1213 
1214  IInternetProtocol_Continue(bind->protocol_handler, task->data);
1215 
1216  heap_free(task);
1217 }
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
Definition: socklife.c:36
GLdouble GLdouble t
Definition: gl.h:2047
PROTOCOLDATA * data
Definition: bindprot.c:1207
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by BPInternetProtocolSink_Switch().

◆ unregister_notif_wnd_class()

void unregister_notif_wnd_class ( void  )

Definition at line 105 of file bindprot.c.

106 {
107  if(notif_wnd_class)
109 }
static ATOM notif_wnd_class
Definition: bindprot.c:90
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Referenced by process_detach().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( urlmon  )

Variable Documentation

◆ BindProtocolVtbl

const IInternetProtocolExVtbl BindProtocolVtbl
static
Initial value:
= {
}
static HRESULT WINAPI BindProtocol_Suspend(IInternetProtocolEx *iface)
Definition: bindprot.c:414
static HRESULT WINAPI BindProtocol_Read(IInternetProtocolEx *iface, void *pv, ULONG cb, ULONG *pcbRead)
Definition: bindprot.c:428
static HRESULT WINAPI BindProtocol_Continue(IInternetProtocolEx *iface, PROTOCOLDATA *pProtocolData)
Definition: bindprot.c:386
static HRESULT WINAPI BindProtocol_Seek(IInternetProtocolEx *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
Definition: bindprot.c:440
static HRESULT WINAPI BindProtocol_LockRequest(IInternetProtocolEx *iface, DWORD dwOptions)
Definition: bindprot.c:448
static HRESULT WINAPI BindProtocol_StartEx(IInternetProtocolEx *iface, IUri *pUri, IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE *dwReserved)
Definition: bindprot.c:466
static HRESULT WINAPI BindProtocol_Start(IInternetProtocolEx *iface, LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE_PTR dwReserved)
Definition: bindprot.c:364
static ULONG WINAPI BindProtocol_Release(IInternetProtocolEx *iface)
Definition: bindprot.c:331
static HRESULT WINAPI BindProtocol_QueryInterface(IInternetProtocolEx *iface, REFIID riid, void **ppv)
Definition: bindprot.c:255
static HRESULT WINAPI BindProtocol_UnlockRequest(IInternetProtocolEx *iface)
Definition: bindprot.c:457
static HRESULT WINAPI BindProtocol_Terminate(IInternetProtocolEx *iface, DWORD dwOptions)
Definition: bindprot.c:405
static HRESULT WINAPI BindProtocol_Abort(IInternetProtocolEx *iface, HRESULT hrReason, DWORD dwOptions)
Definition: bindprot.c:395
static ULONG WINAPI BindProtocol_AddRef(IInternetProtocolEx *iface)
Definition: bindprot.c:302
static HRESULT WINAPI BindProtocol_Resume(IInternetProtocolEx *iface)
Definition: bindprot.c:421

Definition at line 588 of file bindprot.c.

Referenced by create_binding_protocol().

◆ InternetBindInfoVtbl

const IInternetBindInfoVtbl InternetBindInfoVtbl
static
Initial value:
= {
}
static ULONG WINAPI BindInfo_AddRef(IInternetBindInfo *iface)
Definition: bindprot.c:1069
static ULONG WINAPI BindInfo_Release(IInternetBindInfo *iface)
Definition: bindprot.c:1075
static HRESULT WINAPI BindInfo_GetBindInfo(IInternetBindInfo *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
Definition: bindprot.c:1081
static HRESULT WINAPI BindInfo_QueryInterface(IInternetBindInfo *iface, REFIID riid, void **ppv)
Definition: bindprot.c:1062
static HRESULT WINAPI BindInfo_GetBindString(IInternetBindInfo *iface, ULONG ulStringType, LPOLESTR *ppwzStr, ULONG cEl, ULONG *pcElFetched)
Definition: bindprot.c:1110

Definition at line 1120 of file bindprot.c.

Referenced by create_binding_protocol().

◆ InternetPriorityVtbl

const IInternetPriorityVtbl InternetPriorityVtbl
static
Initial value:
= {
}
static HRESULT WINAPI InternetPriority_QueryInterface(IInternetPriority *iface, REFIID riid, void **ppv)
Definition: bindprot.c:1133
static ULONG WINAPI InternetPriority_Release(IInternetPriority *iface)
Definition: bindprot.c:1146
static HRESULT WINAPI InternetPriority_SetPriority(IInternetPriority *iface, LONG nPriority)
Definition: bindprot.c:1152
static HRESULT WINAPI InternetPriority_GetPriority(IInternetPriority *iface, LONG *pnPriority)
Definition: bindprot.c:1162
static ULONG WINAPI InternetPriority_AddRef(IInternetPriority *iface)
Definition: bindprot.c:1140

Definition at line 1172 of file bindprot.c.

Referenced by create_binding_protocol().

◆ InternetProtocolHandlerVtbl

const IInternetProtocolVtbl InternetProtocolHandlerVtbl
static
Initial value:
= {
}
static HRESULT WINAPI ProtocolHandler_Resume(IInternetProtocol *iface)
Definition: bindprot.c:740
static ULONG WINAPI ProtocolHandler_AddRef(IInternetProtocol *iface)
Definition: bindprot.c:638
static HRESULT WINAPI ProtocolHandler_Suspend(IInternetProtocol *iface)
Definition: bindprot.c:733
static HRESULT WINAPI ProtocolHandler_UnlockRequest(IInternetProtocol *iface)
Definition: bindprot.c:816
static HRESULT WINAPI ProtocolHandler_Read(IInternetProtocol *iface, void *pv, ULONG cb, ULONG *pcbRead)
Definition: bindprot.c:747
static HRESULT WINAPI ProtocolHandler_Start(IInternetProtocol *iface, LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE_PTR dwReserved)
Definition: bindprot.c:650
static HRESULT WINAPI ProtocolHandler_Terminate(IInternetProtocol *iface, DWORD dwOptions)
Definition: bindprot.c:696
static HRESULT WINAPI ProtocolHandler_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
Definition: bindprot.c:610
static HRESULT WINAPI ProtocolHandler_Seek(IInternetProtocol *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
Definition: bindprot.c:799
static HRESULT WINAPI ProtocolHandler_Abort(IInternetProtocol *iface, HRESULT hrReason, DWORD dwOptions)
Definition: bindprot.c:683
static ULONG WINAPI ProtocolHandler_Release(IInternetProtocol *iface)
Definition: bindprot.c:644
static HRESULT WINAPI ProtocolHandler_Continue(IInternetProtocol *iface, PROTOCOLDATA *pProtocolData)
Definition: bindprot.c:658
static HRESULT WINAPI ProtocolHandler_LockRequest(IInternetProtocol *iface, DWORD dwOptions)
Definition: bindprot.c:807

Definition at line 825 of file bindprot.c.

Referenced by create_binding_protocol().

◆ InternetProtocolSinkHandlerVtbl

const IInternetProtocolSinkVtbl InternetProtocolSinkHandlerVtbl
static
Initial value:
= {
}
static HRESULT WINAPI ProtocolSinkHandler_Switch(IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData)
Definition: bindprot.c:866
static HRESULT WINAPI ProtocolSinkHandler_QueryInterface(IInternetProtocolSink *iface, REFIID riid, void **ppvObject)
Definition: bindprot.c:846
static ULONG WINAPI ProtocolSinkHandler_Release(IInternetProtocolSink *iface)
Definition: bindprot.c:860
static HRESULT WINAPI ProtocolSinkHandler_ReportProgress(IInternetProtocolSink *iface, ULONG status_code, LPCWSTR status_text)
Definition: bindprot.c:881
static ULONG WINAPI ProtocolSinkHandler_AddRef(IInternetProtocolSink *iface)
Definition: bindprot.c:854
static HRESULT WINAPI ProtocolSinkHandler_ReportResult(IInternetProtocolSink *iface, HRESULT hrResult, DWORD dwError, LPCWSTR szResult)
Definition: bindprot.c:1028
static HRESULT WINAPI ProtocolSinkHandler_ReportData(IInternetProtocolSink *iface, DWORD bscf, ULONG progress, ULONG progress_max)
Definition: bindprot.c:922

Definition at line 1047 of file bindprot.c.

Referenced by create_binding_protocol().

◆ InternetProtocolSinkVtbl

const IInternetProtocolSinkVtbl InternetProtocolSinkVtbl
static
Initial value:
= {
}
static ULONG WINAPI BPInternetProtocolSink_AddRef(IInternetProtocolSink *iface)
Definition: bindprot.c:1193
static HRESULT WINAPI BPInternetProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData)
Definition: bindprot.c:1219
static HRESULT WINAPI BPInternetProtocolSink_ReportData(IInternetProtocolSink *iface, DWORD grfBSCF, ULONG ulProgress, ULONG ulProgressMax)
Definition: bindprot.c:1312
static HRESULT WINAPI BPInternetProtocolSink_ReportResult(IInternetProtocolSink *iface, HRESULT hrResult, DWORD dwError, LPCWSTR szResult)
Definition: bindprot.c:1359
static HRESULT WINAPI BPInternetProtocolSink_QueryInterface(IInternetProtocolSink *iface, REFIID riid, void **ppv)
Definition: bindprot.c:1186
static ULONG WINAPI BPInternetProtocolSink_Release(IInternetProtocolSink *iface)
Definition: bindprot.c:1199
static HRESULT WINAPI BPInternetProtocolSink_ReportProgress(IInternetProtocolSink *iface, ULONG ulStatusCode, LPCWSTR szStatusText)
Definition: bindprot.c:1272

Definition at line 1388 of file bindprot.c.

Referenced by create_binding_protocol().

◆ notif_wnd_class

ATOM notif_wnd_class
static

Definition at line 90 of file bindprot.c.

Referenced by get_notif_hwnd(), register_notif_wnd_class(), and unregister_notif_wnd_class().

◆ ServiceProviderVtbl

const IServiceProviderVtbl ServiceProviderVtbl
static
Initial value:
= {
}
static HRESULT WINAPI BPServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
Definition: bindprot.c:1403
static ULONG WINAPI BPServiceProvider_Release(IServiceProvider *iface)
Definition: bindprot.c:1416
static HRESULT WINAPI BPServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
Definition: bindprot.c:1422
static ULONG WINAPI BPServiceProvider_AddRef(IServiceProvider *iface)
Definition: bindprot.c:1410

Definition at line 1435 of file bindprot.c.

Referenced by create_binding_protocol().

◆ wszURLMonikerNotificationWindow

const WCHAR wszURLMonikerNotificationWindow[]
static
Initial value:
=
{'U','R','L',' ','M','o','n','i','k','e','r',' ',
'N','o','t','i','f','i','c','a','t','i','o','n',' ','W','i','n','d','o','w',0}

Definition at line 86 of file bindprot.c.

Referenced by get_notif_hwnd(), and register_notif_wnd_class().