Fixed definitions of TTTOOLINFOA/W_V1_SIZE and
[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 typedef struct WORKREQ
181 {
182     ASYNC_FUNC asyncall;
183     DWORD param1;
184 #define HFTPSESSION       param1
185
186     DWORD param2;
187 #define LPSZLOCALFILE     param2
188 #define LPSZREMOTEFILE    param2
189 #define LPSZFILENAME      param2
190 #define LPSZSRCFILE       param2
191 #define LPSZDIRECTORY     param2
192 #define LPSZSEARCHFILE    param2
193 #define LPSZHEADER        param2
194 #define LPSZVERB          param2
195
196     DWORD param3;
197 #define LPSZNEWREMOTEFILE param3
198 #define LPSZNEWFILE       param3
199 #define LPFINDFILEDATA    param3
200 #define LPDWDIRECTORY     param3
201 #define FDWACCESS         param3
202 #define LPSZDESTFILE      param3
203 #define DWHEADERLENGTH    param3
204 #define LPSZOBJECTNAME    param3
205
206     DWORD param4;
207 #define DWFLAGS           param4
208 #define LPOPTIONAL        param4
209
210     DWORD param5;
211 #define DWCONTEXT         param5
212 #define DWOPTIONALLENGTH  param5
213
214     DWORD param6;
215 #define FFAILIFEXISTS     param6
216 #define LPSZVERSION       param6
217
218     DWORD param7;
219 #define DWLOCALFLAGSATTRIBUTE param7
220 #define LPSZREFERRER          param7
221
222     DWORD param8;
223 #define LPSZACCEPTTYPES       param8
224
225     struct WORKREQ *next;
226     struct WORKREQ *prev;
227
228 } WORKREQUEST, *LPWORKREQUEST;
229
230
231 time_t ConvertTimeString(LPCSTR asctime);
232
233 HINTERNET FTP_Connect(HINTERNET hInterent, LPCSTR lpszServerName,
234         INTERNET_PORT nServerPort, LPCSTR lpszUserName,
235         LPCSTR lpszPassword, DWORD dwFlags, DWORD dwContext);
236
237 HINTERNET HTTP_Connect(HINTERNET hInterent, LPCSTR lpszServerName,
238         INTERNET_PORT nServerPort, LPCSTR lpszUserName,
239         LPCSTR lpszPassword, DWORD dwFlags, DWORD dwContext);
240
241 BOOL GetAddress(LPCSTR lpszServerName, INTERNET_PORT nServerPort,
242         struct hostent **phe, struct sockaddr_in *psa);
243
244 void INTERNET_SetLastError(DWORD dwError);
245 DWORD INTERNET_GetLastError();
246 BOOL INTERNET_AsyncCall(LPWORKREQUEST lpWorkRequest);
247 LPSTR INTERNET_GetResponseBuffer();
248 LPSTR INTERNET_GetNextLine(INT nSocket, LPSTR lpszBuffer, LPDWORD dwBuffer);
249
250 BOOL FTP_CloseSessionHandle(LPWININETFTPSESSIONA lpwfs);
251 BOOL FTP_CloseFindNextHandle(LPWININETFINDNEXTA lpwfn);
252 BOOL FTP_CloseFileTransferHandle(LPWININETFILE lpwfn);
253 BOOLAPI FTP_FtpPutFileA(HINTERNET hConnect, LPCSTR lpszLocalFile,
254     LPCSTR lpszNewRemoteFile, DWORD dwFlags, DWORD dwContext);
255 BOOLAPI FTP_FtpSetCurrentDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory);
256 BOOLAPI FTP_FtpCreateDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory);
257 INTERNETAPI HINTERNET WINAPI FTP_FtpFindFirstFileA(HINTERNET hConnect,
258     LPCSTR lpszSearchFile, LPWIN32_FIND_DATAA lpFindFileData, DWORD dwFlags, DWORD dwContext);
259 BOOLAPI FTP_FtpGetCurrentDirectoryA(HINTERNET hFtpSession, LPSTR lpszCurrentDirectory,
260         LPDWORD lpdwCurrentDirectory);
261 BOOL FTP_ConvertFileProp(LPFILEPROPERTIESA lpafp, LPWIN32_FIND_DATAA lpFindFileData);
262 BOOL FTP_FtpRenameFileA(HINTERNET hFtpSession, LPCSTR lpszSrc, LPCSTR lpszDest);
263 BOOL FTP_FtpRemoveDirectoryA(HINTERNET hFtpSession, LPCSTR lpszDirectory);
264 BOOL FTP_FtpDeleteFileA(HINTERNET hFtpSession, LPCSTR lpszFileName);
265 HINTERNET FTP_FtpOpenFileA(HINTERNET hFtpSession, LPCSTR lpszFileName,
266         DWORD fdwAccess, DWORD dwFlags, DWORD dwContext);
267 BOOLAPI FTP_FtpGetFileA(HINTERNET hInternet, LPCSTR lpszRemoteFile, LPCSTR lpszNewFile,
268         BOOL fFailIfExists, DWORD dwLocalFlagsAttribute, DWORD dwInternetFlags,
269         DWORD dwContext);
270
271 BOOLAPI HTTP_HttpSendRequestA(HINTERNET hHttpRequest, LPCSTR lpszHeaders,
272         DWORD dwHeaderLength, LPVOID lpOptional ,DWORD dwOptionalLength);
273 INTERNETAPI HINTERNET WINAPI HTTP_HttpOpenRequestA(HINTERNET hHttpSession,
274         LPCSTR lpszVerb, LPCSTR lpszObjectName, LPCSTR lpszVersion,
275         LPCSTR lpszReferrer , LPCSTR *lpszAcceptTypes,
276         DWORD dwFlags, DWORD dwContext);
277 void HTTP_CloseHTTPSessionHandle(LPWININETHTTPSESSIONA lpwhs);
278 void HTTP_CloseHTTPRequestHandle(LPWININETHTTPREQA lpwhr);
279
280 VOID SendAsyncCallback(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
281                              DWORD dwContext, DWORD dwInternetStatus, LPVOID
282                              lpvStatusInfo , DWORD dwStatusInfoLength);
283
284 VOID SendAsyncCallbackInt(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
285                              DWORD dwContext, DWORD dwInternetStatus, LPVOID
286                              lpvStatusInfo , DWORD dwStatusInfoLength);
287
288 BOOL HTTP_InsertProxyAuthorization( LPWININETHTTPREQA lpwhr,
289                        LPCSTR username, LPCSTR password );
290
291 BOOL NETCON_connected(WININET_NETCONNECTION *connection);
292 void NETCON_init(WININET_NETCONNECTION *connnection, BOOL useSSL);
293 BOOL NETCON_create(WININET_NETCONNECTION *connection, int domain,
294               int type, int protocol);
295 BOOL NETCON_close(WININET_NETCONNECTION *connection);
296 BOOL NETCON_connect(WININET_NETCONNECTION *connection, const struct sockaddr *serv_addr,
297                     socklen_t addrlen);
298 BOOL NETCON_send(WININET_NETCONNECTION *connection, const void *msg, size_t len, int flags,
299                 int *sent /* out */);
300 BOOL NETCON_recv(WININET_NETCONNECTION *connection, void *buf, size_t len, int flags,
301                 int *recvd /* out */);
302 BOOL NETCON_getNextLine(WININET_NETCONNECTION *connection, LPSTR lpszBuffer, LPDWORD dwBuffer);
303
304 #define MAX_REPLY_LEN           0x5B4
305
306
307 #endif /* _WINE_INTERNET_H_ */