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