msvcrt: Implement _wfreopen_s.
[wine] / dlls / mshtml / binding.h
1 /*
2  * Copyright 2011 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 typedef struct nsWineURI nsWineURI;
20
21 /* Keep sync with request_method_strings in nsio.c */
22 typedef enum {
23     METHOD_GET,
24     METHOD_PUT,
25     METHOD_POST
26 } REQUEST_METHOD;
27
28 typedef struct {
29     nsIHttpChannel         nsIHttpChannel_iface;
30     nsIUploadChannel       nsIUploadChannel_iface;
31     nsIHttpChannelInternal nsIHttpChannelInternal_iface;
32
33     LONG ref;
34
35     nsWineURI *uri;
36     nsIInputStream *post_data_stream;
37     BOOL post_data_contains_headers;
38     nsILoadGroup *load_group;
39     nsIInterfaceRequestor *notif_callback;
40     nsISupports *owner;
41     nsLoadFlags load_flags;
42     nsIURI *original_uri;
43     nsIURI *referrer;
44     char *content_type;
45     char *charset;
46     PRUint32 response_status;
47     REQUEST_METHOD request_method;
48     struct list response_headers;
49     struct list request_headers;
50     UINT url_scheme;
51 } nsChannel;
52
53 typedef struct BSCallbackVtbl BSCallbackVtbl;
54
55 struct BSCallback {
56     IBindStatusCallback IBindStatusCallback_iface;
57     IServiceProvider    IServiceProvider_iface;
58     IHttpNegotiate2     IHttpNegotiate2_iface;
59     IInternetBindInfo   IInternetBindInfo_iface;
60
61     const BSCallbackVtbl          *vtbl;
62
63     LONG ref;
64
65     LPWSTR headers;
66     HGLOBAL post_data;
67     ULONG post_data_len;
68     ULONG readed;
69     DWORD bindf;
70     BOOL bindinfo_ready;
71
72     IMoniker *mon;
73     IBinding *binding;
74
75     HTMLDocumentNode *doc;
76
77     struct list entry;
78 };
79
80 typedef struct nsProtocolStream nsProtocolStream;
81
82 struct nsChannelBSC {
83     BSCallback bsc;
84
85     HTMLWindow *window;
86
87     nsChannel *nschannel;
88     nsIStreamListener *nslistener;
89     nsISupports *nscontext;
90     BOOL is_js;
91
92     nsProtocolStream *nsstream;
93 };
94
95 typedef struct {
96     struct list entry;
97     WCHAR *header;
98     WCHAR *data;
99 } http_header_t;
100
101 HRESULT set_http_header(struct list*,const WCHAR*,int,const WCHAR*,int) DECLSPEC_HIDDEN;
102 HRESULT create_redirect_nschannel(const WCHAR*,nsChannel*,nsChannel**) DECLSPEC_HIDDEN;
103
104 nsresult on_start_uri_open(NSContainer*,nsIURI*,PRBool*) DECLSPEC_HIDDEN;
105 HRESULT hlink_frame_navigate(HTMLDocument*,LPCWSTR,nsChannel*,DWORD,BOOL*) DECLSPEC_HIDDEN;
106 HRESULT create_doc_uri(HTMLWindow*,WCHAR*,nsWineURI**) DECLSPEC_HIDDEN;
107 HRESULT load_nsuri(HTMLWindow*,nsWineURI*,nsChannelBSC*,DWORD) DECLSPEC_HIDDEN;
108 HRESULT set_moniker(HTMLDocument*,IMoniker*,IBindCtx*,nsChannelBSC*,BOOL) DECLSPEC_HIDDEN;
109 void prepare_for_binding(HTMLDocument*,IMoniker*,BOOL) DECLSPEC_HIDDEN;
110
111 HRESULT create_channelbsc(IMoniker*,WCHAR*,BYTE*,DWORD,nsChannelBSC**) DECLSPEC_HIDDEN;
112 HRESULT channelbsc_load_stream(nsChannelBSC*,IStream*) DECLSPEC_HIDDEN;
113 void channelbsc_set_channel(nsChannelBSC*,nsChannel*,nsIStreamListener*,nsISupports*) DECLSPEC_HIDDEN;