Culling to different viewports failed as clearing the whole viewport
[wine] / dlls / wininet / internet.h
1 /*
2  * Wininet
3  *
4  * Copyright 1999 Corel Corporation
5  *
6  * Ulrich Czekalla
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22
23 #ifndef _WINE_INTERNET_H_
24 #define _WINE_INTERNET_H_
25
26 #include <time.h>
27 #ifdef HAVE_NETDB_H
28 # include <netdb.h>
29 #endif
30 #ifdef HAVE_NETINET_IN_H
31 # include <sys/types.h>
32 # include <netinet/in.h>
33 #endif
34 #ifdef HAVE_OPENSSL_SSL_H
35 #define DSA __ssl_DSA  /* avoid conflict with commctrl.h */
36 # include <openssl/ssl.h>
37 #undef DSA
38 #endif
39 #ifdef HAVE_SYS_SOCKET_H
40 # include <sys/socket.h>
41 #endif
42
43 /* used for netconnection.c stuff */
44 typedef struct
45 {
46     BOOL useSSL;
47     int socketFD;
48 #ifdef HAVE_OPENSSL_SSL_H
49     SSL *ssl_s;
50     int ssl_sock;
51 #endif
52 } WININET_NETCONNECTION;
53
54 typedef enum
55 {
56     WH_HINIT = INTERNET_HANDLE_TYPE_INTERNET,
57     WH_HFTPSESSION = INTERNET_HANDLE_TYPE_CONNECT_FTP,
58     WH_HGOPHERSESSION = INTERNET_HANDLE_TYPE_CONNECT_GOPHER,
59     WH_HHTTPSESSION = INTERNET_HANDLE_TYPE_CONNECT_HTTP,
60     WH_HFILE = INTERNET_HANDLE_TYPE_FTP_FILE,
61     WH_HFINDNEXT = INTERNET_HANDLE_TYPE_FTP_FIND,
62     WH_HHTTPREQ = INTERNET_HANDLE_TYPE_HTTP_REQUEST,
63 } WH_TYPE;
64
65 typedef struct _WININETHANDLEHEADER
66 {
67     WH_TYPE htype;
68     DWORD  dwFlags;
69     DWORD  dwContext;
70     DWORD  dwError;
71     struct _WININETHANDLEHEADER *lpwhparent;
72 } WININETHANDLEHEADER, *LPWININETHANDLEHEADER;
73
74
75 typedef struct
76 {
77     WININETHANDLEHEADER hdr;
78     LPSTR  lpszAgent;
79     LPSTR  lpszProxy;
80     LPSTR  lpszProxyBypass;
81     LPSTR  lpszProxyUsername;
82     LPSTR  lpszProxyPassword;
83     DWORD   dwAccessType;
84     INTERNET_STATUS_CALLBACK lpfnStatusCB;
85 } WININETAPPINFOA, *LPWININETAPPINFOA;
86
87
88 typedef struct
89 {
90     WININETHANDLEHEADER hdr;
91     LPSTR  lpszServerName;
92     LPSTR  lpszUserName;
93     INTERNET_PORT nServerPort;
94     struct sockaddr_in socketAddress;
95     struct hostent *phostent;
96 } WININETHTTPSESSIONA, *LPWININETHTTPSESSIONA;
97
98 #define HDR_ISREQUEST           0x0001
99 #define HDR_COMMADELIMITED      0x0002
100 #define HDR_SEMIDELIMITED       0x0004
101
102 typedef struct
103 {
104     LPSTR lpszField;
105     LPSTR lpszValue;
106     WORD wFlags;
107     WORD wCount;
108 } HTTPHEADERA, *LPHTTPHEADERA;
109
110
111 typedef struct
112 {
113     WININETHANDLEHEADER hdr;
114     LPSTR lpszPath;
115     LPSTR lpszVerb;
116     LPSTR lpszHostName;
117     WININET_NETCONNECTION netConnection;
118     HTTPHEADERA StdHeaders[HTTP_QUERY_MAX+1];
119     HTTPHEADERA *pCustHeaders;
120     INT nCustHeaders;
121 } WININETHTTPREQA, *LPWININETHTTPREQA;
122
123
124 typedef struct
125 {
126     WININETHANDLEHEADER hdr;
127     BOOL session_deleted;
128     int nDataSocket;
129 } WININETFILE, *LPWININETFILE;
130
131
132 typedef struct
133 {
134     WININETHANDLEHEADER hdr;
135     int sndSocket;
136     int lstnSocket;
137     int pasvSocket; /* data socket connected by us in case of passive FTP */
138     LPWININETFILE download_in_progress;
139     struct sockaddr_in socketAddress;
140     struct sockaddr_in lstnSocketAddress;
141     struct hostent *phostent;
142     LPSTR  lpszPassword;
143     LPSTR  lpszUserName;
144 } WININETFTPSESSIONA, *LPWININETFTPSESSIONA;
145
146
147 typedef struct
148 {
149     BOOL bIsDirectory;
150     LPSTR lpszName;
151     DWORD nSize;
152     struct tm tmLastModified;
153     unsigned short permissions;
154 } FILEPROPERTIESA, *LPFILEPROPERTIESA;
155
156
157 typedef struct
158 {
159     WININETHANDLEHEADER hdr;
160     int index;
161     DWORD size;
162     LPFILEPROPERTIESA lpafp;
163 } WININETFINDNEXTA, *LPWININETFINDNEXTA;
164
165 typedef enum
166 {
167     FTPPUTFILEA,
168     FTPSETCURRENTDIRECTORYA,
169     FTPCREATEDIRECTORYA,
170     FTPFINDFIRSTFILEA,
171     FTPGETCURRENTDIRECTORYA,
172     FTPOPENFILEA,
173     FTPGETFILEA,
174     FTPDELETEFILEA,
175     FTPREMOVEDIRECTORYA,
176     FTPRENAMEFILEA,
177     INTERNETFINDNEXTA,
178     HTTPSENDREQUESTA,
179     HTTPOPENREQUESTA,
180     SENDCALLBACK,
181 } ASYNC_FUNC;
182
183 struct WORKREQ_FTPPUTFILEA
184 {
185     LPSTR lpszLocalFile;
186     LPSTR lpszNewRemoteFile;
187     DWORD  dwFlags;
188     DWORD  dwContext;
189 };
190
191 struct WORKREQ_FTPSETCURRENTDIRECTORYA
192 {
193     LPSTR lpszDirectory;
194 };
195
196 struct WORKREQ_FTPCREATEDIRECTORYA
197 {
198     LPSTR lpszDirectory;
199 };
200
201 struct WORKREQ_FTPFINDFIRSTFILEA
202 {
203     LPSTR lpszSearchFile;
204     LPWIN32_FIND_DATAA lpFindFileData;
205     DWORD  dwFlags;
206     DWORD  dwContext;
207 };
208
209 struct WORKREQ_FTPGETCURRENTDIRECTORYA
210 {
211     LPSTR lpszDirectory;
212     DWORD *lpdwDirectory;
213 };
214
215 struct WORKREQ_FTPOPENFILEA
216 {
217     LPSTR lpszFilename;
218     DWORD  dwAccess;
219     DWORD  dwFlags;
220     DWORD  dwContext;
221 };
222
223 struct WORKREQ_FTPGETFILEA
224 {
225     LPSTR lpszRemoteFile;
226     LPSTR lpszNewFile;
227     BOOL   fFailIfExists;
228     DWORD  dwLocalFlagsAttribute;
229     DWORD  dwFlags;
230     DWORD  dwContext;
231 };
232
233 struct WORKREQ_FTPDELETEFILEA
234 {
235     LPSTR lpszFilename;
236 };
237
238 struct WORKREQ_FTPREMOVEDIRECTORYA
239 {
240     LPSTR lpszDirectory;
241 };
242
243 struct WORKREQ_FTPRENAMEFILEA
244 {
245     LPSTR lpszSrcFile;
246     LPSTR lpszDestFile;
247 };
248
249 struct WORKREQ_INTERNETFINDNEXTA
250 {
251     LPWIN32_FIND_DATAA lpFindFileData;
252 };
253
254 struct WORKREQ_HTTPOPENREQUESTA
255 {
256     LPSTR lpszVerb;
257     LPSTR lpszObjectName;
258     LPSTR lpszVersion;
259     LPSTR lpszReferrer;
260     LPCSTR *lpszAcceptTypes;
261     DWORD  dwFlags;
262     DWORD  dwContext;
263 };
264
265 struct WORKREQ_HTTPSENDREQUESTA
266 {
267     LPSTR lpszHeader;
268     DWORD  dwHeaderLength;
269     LPVOID lpOptional;
270     DWORD  dwOptionalLength;
271 };
272
273 struct WORKREQ_SENDCALLBACK
274 {
275     HINTERNET hHttpSession;
276     DWORD     dwContext;
277     DWORD     dwInternetStatus;
278     LPVOID    lpvStatusInfo;
279     DWORD     dwStatusInfoLength;
280 };
281
282 typedef struct WORKREQ
283 {
284     ASYNC_FUNC asyncall;
285     HINTERNET handle;
286
287     union {
288         struct WORKREQ_FTPPUTFILEA              FtpPutFileA;
289         struct WORKREQ_FTPSETCURRENTDIRECTORYA  FtpSetCurrentDirectoryA;
290         struct WORKREQ_FTPCREATEDIRECTORYA      FtpCreateDirectoryA;
291         struct WORKREQ_FTPFINDFIRSTFILEA        FtpFindFirstFileA;
292         struct WORKREQ_FTPGETCURRENTDIRECTORYA  FtpGetCurrentDirectoryA;
293         struct WORKREQ_FTPOPENFILEA             FtpOpenFileA;
294         struct WORKREQ_FTPGETFILEA              FtpGetFileA;
295         struct WORKREQ_FTPDELETEFILEA           FtpDeleteFileA;
296         struct WORKREQ_FTPREMOVEDIRECTORYA      FtpRemoveDirectoryA;
297         struct WORKREQ_FTPRENAMEFILEA           FtpRenameFileA;
298         struct WORKREQ_INTERNETFINDNEXTA        InternetFindNextA;
299         struct WORKREQ_HTTPOPENREQUESTA         HttpOpenRequestA;
300         struct WORKREQ_HTTPSENDREQUESTA         HttpSendRequestA;
301         struct WORKREQ_SENDCALLBACK             SendCallback;
302     } u;
303
304     struct WORKREQ *next;
305     struct WORKREQ *prev;
306
307 } WORKREQUEST, *LPWORKREQUEST;
308
309
310 time_t ConvertTimeString(LPCSTR asctime);
311
312 HINTERNET FTP_Connect(HINTERNET hInterent, LPCSTR lpszServerName,
313         INTERNET_PORT nServerPort, LPCSTR lpszUserName,
314         LPCSTR lpszPassword, DWORD dwFlags, DWORD dwContext);
315
316 HINTERNET HTTP_Connect(HINTERNET hInterent, LPCSTR lpszServerName,
317         INTERNET_PORT nServerPort, LPCSTR lpszUserName,
318         LPCSTR lpszPassword, DWORD dwFlags, DWORD dwContext);
319
320 BOOL GetAddress(LPCSTR lpszServerName, INTERNET_PORT nServerPort,
321         struct hostent **phe, struct sockaddr_in *psa);
322
323 void INTERNET_SetLastError(DWORD dwError);
324 DWORD INTERNET_GetLastError();
325 BOOL INTERNET_AsyncCall(LPWORKREQUEST lpWorkRequest);
326 LPSTR INTERNET_GetResponseBuffer();
327 LPSTR INTERNET_GetNextLine(INT nSocket, LPSTR lpszBuffer, LPDWORD dwBuffer);
328
329 BOOL FTP_CloseSessionHandle(LPWININETFTPSESSIONA lpwfs);
330 BOOL FTP_CloseFindNextHandle(LPWININETFINDNEXTA lpwfn);
331 BOOL FTP_CloseFileTransferHandle(LPWININETFILE lpwfn);
332 BOOLAPI FTP_FtpPutFileA(HINTERNET hConnect, LPCSTR lpszLocalFile,
333     LPCSTR lpszNewRemoteFile, DWORD dwFlags, DWORD dwContext);
334 BOOLAPI FTP_FtpSetCurrentDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory);
335 BOOLAPI FTP_FtpCreateDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory);
336 INTERNETAPI HINTERNET WINAPI FTP_FtpFindFirstFileA(HINTERNET hConnect,
337     LPCSTR lpszSearchFile, LPWIN32_FIND_DATAA lpFindFileData, DWORD dwFlags, DWORD dwContext);
338 BOOLAPI FTP_FtpGetCurrentDirectoryA(HINTERNET hFtpSession, LPSTR lpszCurrentDirectory,
339         LPDWORD lpdwCurrentDirectory);
340 BOOL FTP_ConvertFileProp(LPFILEPROPERTIESA lpafp, LPWIN32_FIND_DATAA lpFindFileData);
341 BOOL FTP_FtpRenameFileA(HINTERNET hFtpSession, LPCSTR lpszSrc, LPCSTR lpszDest);
342 BOOL FTP_FtpRemoveDirectoryA(HINTERNET hFtpSession, LPCSTR lpszDirectory);
343 BOOL FTP_FtpDeleteFileA(HINTERNET hFtpSession, LPCSTR lpszFileName);
344 HINTERNET FTP_FtpOpenFileA(HINTERNET hFtpSession, LPCSTR lpszFileName,
345         DWORD fdwAccess, DWORD dwFlags, DWORD dwContext);
346 BOOLAPI FTP_FtpGetFileA(HINTERNET hInternet, LPCSTR lpszRemoteFile, LPCSTR lpszNewFile,
347         BOOL fFailIfExists, DWORD dwLocalFlagsAttribute, DWORD dwInternetFlags,
348         DWORD dwContext);
349
350 BOOLAPI HTTP_HttpSendRequestA(HINTERNET hHttpRequest, LPCSTR lpszHeaders,
351         DWORD dwHeaderLength, LPVOID lpOptional ,DWORD dwOptionalLength);
352 INTERNETAPI HINTERNET WINAPI HTTP_HttpOpenRequestA(HINTERNET hHttpSession,
353         LPCSTR lpszVerb, LPCSTR lpszObjectName, LPCSTR lpszVersion,
354         LPCSTR lpszReferrer , LPCSTR *lpszAcceptTypes,
355         DWORD dwFlags, DWORD dwContext);
356 void HTTP_CloseHTTPSessionHandle(LPWININETHTTPSESSIONA lpwhs);
357 void HTTP_CloseHTTPRequestHandle(LPWININETHTTPREQA lpwhr);
358
359 VOID SendAsyncCallback(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
360                              DWORD dwContext, DWORD dwInternetStatus, LPVOID
361                              lpvStatusInfo , DWORD dwStatusInfoLength);
362
363 VOID SendAsyncCallbackInt(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
364                              DWORD dwContext, DWORD dwInternetStatus, LPVOID
365                              lpvStatusInfo , DWORD dwStatusInfoLength);
366
367 BOOL HTTP_InsertProxyAuthorization( LPWININETHTTPREQA lpwhr,
368                        LPCSTR username, LPCSTR password );
369
370 BOOL NETCON_connected(WININET_NETCONNECTION *connection);
371 void NETCON_init(WININET_NETCONNECTION *connnection, BOOL useSSL);
372 BOOL NETCON_create(WININET_NETCONNECTION *connection, int domain,
373               int type, int protocol);
374 BOOL NETCON_close(WININET_NETCONNECTION *connection);
375 BOOL NETCON_connect(WININET_NETCONNECTION *connection, const struct sockaddr *serv_addr,
376                     socklen_t addrlen);
377 BOOL NETCON_send(WININET_NETCONNECTION *connection, const void *msg, size_t len, int flags,
378                 int *sent /* out */);
379 BOOL NETCON_recv(WININET_NETCONNECTION *connection, void *buf, size_t len, int flags,
380                 int *recvd /* out */);
381 BOOL NETCON_getNextLine(WININET_NETCONNECTION *connection, LPSTR lpszBuffer, LPDWORD dwBuffer);
382
383 #define MAX_REPLY_LEN           0x5B4
384
385
386 #endif /* _WINE_INTERNET_H_ */