ReactOS 0.4.17-dev-573-g8315b8c
urlmon_main.h
Go to the documentation of this file.
1/*
2 * Copyright 2002 Huw D M Davies for CodeWeavers
3 * Copyright 2009 Jacek Caban for CodeWeavers
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20#ifndef __WINE_URLMON_MAIN_H
21#define __WINE_URLMON_MAIN_H
22
23#include <stdarg.h>
24
25#define COBJMACROS
26
27#include "windef.h"
28#include "winbase.h"
29#include "winuser.h"
30#ifdef __REACTOS__
31#include <winnls.h>
32#endif
33#include "ole2.h"
34#include "urlmon.h"
35#include "wininet.h"
36
37#include "wine/list.h"
38
39extern HINSTANCE hProxyDll;
40extern HRESULT SecManagerImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
41extern HRESULT ZoneMgrImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
43extern HRESULT FileProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
44extern HRESULT HttpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
46extern HRESULT FtpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
47extern HRESULT GopherProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
48extern HRESULT MkProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
49extern HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
50extern HRESULT Uri_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
51
56
57extern GUID const CLSID_PSFactoryBuffer;
58extern GUID const CLSID_CUri;
59
60/**********************************************************************
61 * Dll lifetime tracking declaration for urlmon.dll
62 */
66
68
75WCHAR *get_useragent(void);
77void free_session(void);
78
80
83
87
88typedef HRESULT (*stop_cache_binding_proc_t)(void*,const WCHAR*,HRESULT,const WCHAR*);
90
92
93typedef struct {
95
98
100 BINDINFO bind_info;
101
106
111
113
115} Protocol;
116
123};
124
125/* Flags are needed for, among other things, return HRESULTs from the Read function
126 * to conform to native. For example, Read returns:
127 *
128 * 1. E_PENDING if called before the request has completed,
129 * (flags = 0)
130 * 2. S_FALSE after all data has been read and S_OK has been reported,
131 * (flags = FLAG_REQUEST_COMPLETE | FLAG_ALL_DATA_READ | FLAG_RESULT_REPORTED)
132 * 3. INET_E_DATA_NOT_AVAILABLE if InternetQueryDataAvailable fails. The first time
133 * this occurs, INET_E_DATA_NOT_AVAILABLE will also be reported to the sink,
134 * (flags = FLAG_REQUEST_COMPLETE)
135 * but upon subsequent calls to Read no reporting will take place, yet
136 * InternetQueryDataAvailable will still be called, and, on failure,
137 * INET_E_DATA_NOT_AVAILABLE will still be returned.
138 * (flags = FLAG_REQUEST_COMPLETE | FLAG_RESULT_REPORTED)
139 *
140 * FLAG_FIRST_DATA_REPORTED and FLAG_LAST_DATA_REPORTED are needed for proper
141 * ReportData reporting. For example, if OnResponse returns S_OK, Continue will
142 * report BSCF_FIRSTDATANOTIFICATION, and when all data has been read Read will
143 * report BSCF_INTERMEDIATEDATANOTIFICATION|BSCF_LASTDATANOTIFICATION. However,
144 * if OnResponse does not return S_OK, Continue will not report data, and Read
145 * will report BSCF_FIRSTDATANOTIFICATION|BSCF_LASTDATANOTIFICATION when all
146 * data has been read.
147 */
148#define FLAG_REQUEST_COMPLETE 0x0001
149#define FLAG_FIRST_CONTINUE_COMPLETE 0x0002
150#define FLAG_FIRST_DATA_REPORTED 0x0004
151#define FLAG_ALL_DATA_READ 0x0008
152#define FLAG_LAST_DATA_REPORTED 0x0010
153#define FLAG_RESULT_REPORTED 0x0020
154#define FLAG_ERROR 0x0040
155#define FLAG_SYNC_READ 0x0080
156
158HRESULT protocol_continue(Protocol*,PROTOCOLDATA*);
165
166void find_domain_name(const WCHAR*,DWORD,INT*);
167
169
170typedef struct {
176
178
181
186
187 struct {
189 IInternetProtocolSink IInternetProtocolSink_iface;
190 } default_protocol_handler;
193
195
199
203
207
209 task_header_t *task_queue_head, *task_queue_tail;
210
217
220
221typedef struct {
224
225 struct list entry;
226} tls_data_t;
227
229
231HWND get_notif_hwnd(void);
233
234const char *debugstr_bindstatus(ULONG);
235
236static inline WCHAR *strndupW(LPCWSTR str, int len)
237{
238 LPWSTR ret = NULL;
239
240 if(str) {
241 ret = malloc((len + 1) * sizeof(WCHAR));
242 if(ret) {
243 memcpy(ret, str, len*sizeof(WCHAR));
244 ret[len] = 0;
245 }
246 }
247
248 return ret;
249}
250
251static inline WCHAR *strdupAtoW(const char *str)
252{
253 LPWSTR ret = NULL;
254
255 if(str) {
257 ret = malloc(len * sizeof(WCHAR));
258 if(ret)
260 }
261
262 return ret;
263}
264
265#endif /* __WINE_URLMON_MAIN_H */
static DWORD const fdwReason
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
Definition: list.h:37
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
#define CP_ACP
Definition: compat.h:109
OLECHAR * BSTR
Definition: compat.h:2293
#define MultiByteToWideChar
Definition: compat.h:110
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLsizei len
Definition: glext.h:6722
REFIID LPVOID * ppv
Definition: atlbase.h:39
uint32_t entry
Definition: isohybrid.c:63
static IN DWORD IN LPVOID lpvReserved
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define protocol_start(p, u, e)
Definition: protocol.c:303
static int protocol_read
Definition: htmldoc.c:205
static BOOL bind_to_object
Definition: url.c:171
#define DWORD
Definition: nt_native.h:44
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
const WCHAR * str
IInternetProtocolEx IInternetProtocolEx_iface
Definition: urlmon_main.h:171
DWORD buf_size
Definition: urlmon_main.h:212
IInternetProtocol IInternetProtocol_iface
Definition: urlmon_main.h:188
IBindCallbackRedirect * redirect_callback
Definition: urlmon_main.h:185
IServiceProvider * service_provider
Definition: urlmon_main.h:184
BSTR display_uri
Definition: urlmon_main.h:215
DWORD apartment_thread
Definition: urlmon_main.h:204
ULONG progress_max
Definition: urlmon_main.h:202
IInternetProtocol * protocol_handler
Definition: urlmon_main.h:191
IInternetProtocolSink * protocol_sink_handler
Definition: urlmon_main.h:192
BOOL reported_result
Definition: urlmon_main.h:196
IUnknown * protocol_unk
Definition: urlmon_main.h:179
IInternetProtocolSink * protocol_sink
Definition: urlmon_main.h:183
ULONG progress
Definition: urlmon_main.h:201
IInternetProtocol * protocol
Definition: urlmon_main.h:180
IInternetBindInfo * bind_info
Definition: urlmon_main.h:182
IInternetBindInfo IInternetBindInfo_iface
Definition: urlmon_main.h:172
BOOL reported_mime
Definition: urlmon_main.h:197
DWORD continue_call
Definition: urlmon_main.h:206
IInternetPriority IInternetPriority_iface
Definition: urlmon_main.h:173
CRITICAL_SECTION section
Definition: urlmon_main.h:208
IInternetProtocolSink IInternetProtocolSink_iface
Definition: urlmon_main.h:175
IServiceProvider IServiceProvider_iface
Definition: urlmon_main.h:174
task_header_t * task_queue_head
Definition: urlmon_main.h:209
HRESULT(* start_downloading)(Protocol *)
Definition: urlmon_main.h:120
void(* on_error)(Protocol *, DWORD)
Definition: urlmon_main.h:122
void(* close_connection)(Protocol *)
Definition: urlmon_main.h:121
HRESULT(* end_request)(Protocol *)
Definition: urlmon_main.h:119
DWORD bindf
Definition: urlmon_main.h:99
DWORD flags
Definition: urlmon_main.h:104
HINTERNET request
Definition: urlmon_main.h:102
IStream * post_stream
Definition: urlmon_main.h:112
ULONG content_length
Definition: urlmon_main.h:108
HINTERNET connection
Definition: urlmon_main.h:103
const ProtocolVtbl * vtbl
Definition: urlmon_main.h:94
BINDINFO bind_info
Definition: urlmon_main.h:100
ULONG query_available
Definition: urlmon_main.h:110
ULONG available_bytes
Definition: urlmon_main.h:109
IInternetProtocol * protocol
Definition: urlmon_main.h:96
IInternetProtocolSink * protocol_sink
Definition: urlmon_main.h:97
LONG priority
Definition: urlmon_main.h:114
ULONG current_position
Definition: urlmon_main.h:107
HANDLE lock
Definition: urlmon_main.h:105
HWND notif_hwnd
Definition: urlmon_main.h:222
DWORD notif_hwnd_cnt
Definition: urlmon_main.h:223
const uint16_t * LPCWSTR
Definition: typedefs.h:57
uint16_t * LPWSTR
Definition: typedefs.h:56
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
HRESULT protocol_continue(Protocol *, PROTOCOLDATA *)
Definition: protocol.c:355
void set_binding_sink(BindProtocol *, IInternetProtocolSink *, IInternetBindInfo *)
Definition: bindprot.c:560
HRESULT MkProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
HRESULT StdURLMoniker_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
LONG URLMON_refCount
Definition: urlmon_main.c:40
static void URLMON_LockModule(void)
Definition: urlmon_main.h:64
HRESULT ZoneMgrImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: sec_mgr.c:1781
void unregister_notif_wnd_class(void)
Definition: bindprot.c:101
HRESULT FtpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
HRESULT FileProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: file.c:420
HRESULT download_to_cache(IUri *, stop_cache_binding_proc_t, void *, IBindStatusCallback *)
Definition: download.c:375
HRESULT bind_to_storage(IUri *, IBindCtx *, REFIID, void **)
Definition: binding.c:1611
tls_data_t * get_tls_data(void)
Definition: urlmon_main.c:60
void protocol_close_connection(Protocol *)
Definition: protocol.c:531
static void URLMON_UnlockModule(void)
Definition: urlmon_main.h:65
HRESULT protocol_lock_request(Protocol *)
Definition: protocol.c:498
HRESULT find_mime_from_ext(const WCHAR *, WCHAR **)
Definition: mimefilter.c:425
HRESULT register_namespace(IClassFactory *, REFIID, LPCWSTR, BOOL)
Definition: session.c:114
void find_domain_name(const WCHAR *, DWORD, INT *)
Definition: uri.c:477
HRESULT GopherProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: gopher.c:312
HRESULT(* stop_cache_binding_proc_t)(void *, const WCHAR *, HRESULT, const WCHAR *)
Definition: urlmon_main.h:88
HINTERNET get_internet_session(IInternetBindInfo *)
Definition: protocol.c:290
HRESULT protocol_abort(Protocol *, HRESULT)
Definition: protocol.c:518
HRESULT Uri_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: uri.c:5338
HRESULT protocol_syncbinding(Protocol *)
Definition: protocol.c:101
HRESULT create_default_callback(IBindStatusCallback **)
Definition: download.c:361
HINSTANCE hProxyDll
Definition: combase.c:40
HRESULT WINAPI URLMON_DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
WCHAR * get_useragent(void)
Definition: session.c:618
BOOL WINAPI URLMON_DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
GUID const CLSID_CUri
BOOL is_registered_protocol(LPCWSTR)
Definition: session.c:160
IBindStatusCallback * bsc_from_bctx(IBindCtx *)
Definition: bindctx.c:70
IInternetProtocolInfo * get_protocol_info(LPCWSTR)
Definition: session.c:173
HRESULT WINAPI URLMON_DllUnregisterServer(void)
IInternetProtocol * get_mime_filter(LPCWSTR)
Definition: session.c:242
HRESULT SecManagerImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: sec_mgr.c:1206
HWND get_notif_hwnd(void)
Definition: bindprot.c:107
HRESULT get_protocol_handler(IUri *, CLSID *, IClassFactory **)
Definition: session.c:212
static WCHAR * strdupAtoW(const char *str)
Definition: urlmon_main.h:251
HINSTANCE urlmon_instance
Definition: urlmon_main.c:41
void update_user_agent(WCHAR *)
Definition: protocol.c:307
static WCHAR * strndupW(LPCWSTR str, int len)
Definition: urlmon_main.h:236
HRESULT WINAPI URLMON_DllRegisterServer(void)
HRESULT create_binding_protocol(BindProtocol **)
Definition: bindprot.c:1453
HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: mimefilter.c:246
HRESULT HttpSProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
void free_session(void)
Definition: session.c:795
HRESULT protocol_unlock_request(Protocol *)
Definition: protocol.c:506
const char * debugstr_bindstatus(ULONG)
Definition: urlmon_main.c:173
void release_notif_hwnd(HWND)
Definition: bindprot.c:137
HRESULT wrap_callback(IBindStatusCallback *, IBindStatusCallback **)
Definition: bindctx.c:578
HRESULT HttpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
GUID const CLSID_PSFactoryBuffer
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
LPVOID HINTERNET
Definition: winhttp.h:37
unsigned char BYTE
Definition: xxhash.c:193