- fix multiple consecutive downloads (by flushing when needed the
[wine/multimedia.git] / dlls / wininet / internet.h
blobe6cc1b76107e33c599e9977a144d52c48f9e12bd
1 /*
2 * Wininet
4 * Copyright 1999 Corel Corporation
6 * Ulrich Czekalla
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.
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.
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
23 #ifndef _WINE_INTERNET_H_
24 #define _WINE_INTERNET_H_
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 # include <openssl/ssl.h>
36 #endif
38 /* used for netconnection.c stuff */
39 typedef struct
41 BOOL useSSL;
42 int socketFD;
43 #ifdef HAVE_OPENSSL_SSL_H
44 SSL *ssl_s;
45 int ssl_sock;
46 #endif
47 } WININET_NETCONNECTION;
49 typedef enum
51 WH_HINIT = INTERNET_HANDLE_TYPE_INTERNET,
52 WH_HFTPSESSION = INTERNET_HANDLE_TYPE_CONNECT_FTP,
53 WH_HGOPHERSESSION = INTERNET_HANDLE_TYPE_CONNECT_GOPHER,
54 WH_HHTTPSESSION = INTERNET_HANDLE_TYPE_CONNECT_HTTP,
55 WH_HFILE = INTERNET_HANDLE_TYPE_FTP_FILE,
56 WH_HFINDNEXT = INTERNET_HANDLE_TYPE_FTP_FIND,
57 WH_HHTTPREQ = INTERNET_HANDLE_TYPE_HTTP_REQUEST,
58 } WH_TYPE;
60 typedef struct _WININETHANDLEHEADER
62 WH_TYPE htype;
63 DWORD dwFlags;
64 DWORD dwContext;
65 DWORD dwError;
66 struct _WININETHANDLEHEADER *lpwhparent;
67 } WININETHANDLEHEADER, *LPWININETHANDLEHEADER;
70 typedef struct
72 WININETHANDLEHEADER hdr;
73 LPSTR lpszAgent;
74 LPSTR lpszProxy;
75 LPSTR lpszProxyBypass;
76 DWORD dwAccessType;
77 INTERNET_STATUS_CALLBACK lpfnStatusCB;
78 } WININETAPPINFOA, *LPWININETAPPINFOA;
81 typedef struct
83 WININETHANDLEHEADER hdr;
84 LPSTR lpszServerName;
85 LPSTR lpszUserName;
86 INTERNET_PORT nServerPort;
87 struct sockaddr_in socketAddress;
88 struct hostent *phostent;
89 } WININETHTTPSESSIONA, *LPWININETHTTPSESSIONA;
91 #define HDR_ISREQUEST 0x0001
92 #define HDR_COMMADELIMITED 0x0002
93 #define HDR_SEMIDELIMITED 0x0004
95 typedef struct
97 LPSTR lpszField;
98 LPSTR lpszValue;
99 WORD wFlags;
100 WORD wCount;
101 } HTTPHEADERA, *LPHTTPHEADERA;
104 typedef struct
106 WININETHANDLEHEADER hdr;
107 LPSTR lpszPath;
108 LPSTR lpszVerb;
109 LPSTR lpszHostName;
110 WININET_NETCONNECTION netConnection;
111 HTTPHEADERA StdHeaders[HTTP_QUERY_MAX+1];
112 HTTPHEADERA *pCustHeaders;
113 INT nCustHeaders;
114 } WININETHTTPREQA, *LPWININETHTTPREQA;
117 typedef struct
119 WININETHANDLEHEADER hdr;
120 BOOL session_deleted;
121 int nDataSocket;
122 } WININETFILE, *LPWININETFILE;
125 typedef struct
127 WININETHANDLEHEADER hdr;
128 int sndSocket;
129 int lstnSocket;
130 int pasvSocket; /* data socket connected by us in case of passive FTP */
131 LPWININETFILE download_in_progress;
132 struct sockaddr_in socketAddress;
133 struct sockaddr_in lstnSocketAddress;
134 struct hostent *phostent;
135 LPSTR lpszPassword;
136 LPSTR lpszUserName;
137 } WININETFTPSESSIONA, *LPWININETFTPSESSIONA;
140 typedef struct
142 BOOL bIsDirectory;
143 LPSTR lpszName;
144 DWORD nSize;
145 struct tm tmLastModified;
146 unsigned short permissions;
147 } FILEPROPERTIESA, *LPFILEPROPERTIESA;
150 typedef struct
152 WININETHANDLEHEADER hdr;
153 int index;
154 DWORD size;
155 LPFILEPROPERTIESA lpafp;
156 } WININETFINDNEXTA, *LPWININETFINDNEXTA;
158 typedef enum
160 FTPPUTFILEA,
161 FTPSETCURRENTDIRECTORYA,
162 FTPCREATEDIRECTORYA,
163 FTPFINDFIRSTFILEA,
164 FTPGETCURRENTDIRECTORYA,
165 FTPOPENFILEA,
166 FTPGETFILEA,
167 FTPDELETEFILEA,
168 FTPREMOVEDIRECTORYA,
169 FTPRENAMEFILEA,
170 INTERNETFINDNEXTA,
171 HTTPSENDREQUESTA,
172 HTTPOPENREQUESTA,
173 SENDCALLBACK,
174 } ASYNC_FUNC;
176 typedef struct WORKREQ
178 ASYNC_FUNC asyncall;
179 DWORD param1;
180 #define HFTPSESSION param1
182 DWORD param2;
183 #define LPSZLOCALFILE param2
184 #define LPSZREMOTEFILE param2
185 #define LPSZFILENAME param2
186 #define LPSZSRCFILE param2
187 #define LPSZDIRECTORY param2
188 #define LPSZSEARCHFILE param2
189 #define LPSZHEADER param2
190 #define LPSZVERB param2
192 DWORD param3;
193 #define LPSZNEWREMOTEFILE param3
194 #define LPSZNEWFILE param3
195 #define LPFINDFILEDATA param3
196 #define LPDWDIRECTORY param3
197 #define FDWACCESS param3
198 #define LPSZDESTFILE param3
199 #define DWHEADERLENGTH param3
200 #define LPSZOBJECTNAME param3
202 DWORD param4;
203 #define DWFLAGS param4
204 #define LPOPTIONAL param4
206 DWORD param5;
207 #define DWCONTEXT param5
208 #define DWOPTIONALLENGTH param5
210 DWORD param6;
211 #define FFAILIFEXISTS param6
212 #define LPSZVERSION param6
214 DWORD param7;
215 #define DWLOCALFLAGSATTRIBUTE param7
216 #define LPSZREFERRER param7
218 DWORD param8;
219 #define LPSZACCEPTTYPES param8
221 struct WORKREQ *next;
222 struct WORKREQ *prev;
224 } WORKREQUEST, *LPWORKREQUEST;
227 time_t ConvertTimeString(LPCSTR asctime);
229 HINTERNET FTP_Connect(HINTERNET hInterent, LPCSTR lpszServerName,
230 INTERNET_PORT nServerPort, LPCSTR lpszUserName,
231 LPCSTR lpszPassword, DWORD dwFlags, DWORD dwContext);
233 HINTERNET HTTP_Connect(HINTERNET hInterent, LPCSTR lpszServerName,
234 INTERNET_PORT nServerPort, LPCSTR lpszUserName,
235 LPCSTR lpszPassword, DWORD dwFlags, DWORD dwContext);
237 BOOL GetAddress(LPCSTR lpszServerName, INTERNET_PORT nServerPort,
238 struct hostent **phe, struct sockaddr_in *psa);
240 void INTERNET_SetLastError(DWORD dwError);
241 DWORD INTERNET_GetLastError();
242 BOOL INTERNET_AsyncCall(LPWORKREQUEST lpWorkRequest);
243 LPSTR INTERNET_GetResponseBuffer();
244 LPSTR INTERNET_GetNextLine(INT nSocket, LPSTR lpszBuffer, LPDWORD dwBuffer);
246 BOOL FTP_CloseSessionHandle(LPWININETFTPSESSIONA lpwfs);
247 BOOL FTP_CloseFindNextHandle(LPWININETFINDNEXTA lpwfn);
248 BOOL FTP_CloseFileTransferHandle(LPWININETFILE lpwfn);
249 BOOLAPI FTP_FtpPutFileA(HINTERNET hConnect, LPCSTR lpszLocalFile,
250 LPCSTR lpszNewRemoteFile, DWORD dwFlags, DWORD dwContext);
251 BOOLAPI FTP_FtpSetCurrentDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory);
252 BOOLAPI FTP_FtpCreateDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory);
253 INTERNETAPI HINTERNET WINAPI FTP_FtpFindFirstFileA(HINTERNET hConnect,
254 LPCSTR lpszSearchFile, LPWIN32_FIND_DATAA lpFindFileData, DWORD dwFlags, DWORD dwContext);
255 BOOLAPI FTP_FtpGetCurrentDirectoryA(HINTERNET hFtpSession, LPSTR lpszCurrentDirectory,
256 LPDWORD lpdwCurrentDirectory);
257 BOOL FTP_ConvertFileProp(LPFILEPROPERTIESA lpafp, LPWIN32_FIND_DATAA lpFindFileData);
258 BOOL FTP_FtpRenameFileA(HINTERNET hFtpSession, LPCSTR lpszSrc, LPCSTR lpszDest);
259 BOOL FTP_FtpRemoveDirectoryA(HINTERNET hFtpSession, LPCSTR lpszDirectory);
260 BOOL FTP_FtpDeleteFileA(HINTERNET hFtpSession, LPCSTR lpszFileName);
261 HINTERNET FTP_FtpOpenFileA(HINTERNET hFtpSession, LPCSTR lpszFileName,
262 DWORD fdwAccess, DWORD dwFlags, DWORD dwContext);
263 BOOLAPI FTP_FtpGetFileA(HINTERNET hInternet, LPCSTR lpszRemoteFile, LPCSTR lpszNewFile,
264 BOOL fFailIfExists, DWORD dwLocalFlagsAttribute, DWORD dwInternetFlags,
265 DWORD dwContext);
267 BOOLAPI HTTP_HttpSendRequestA(HINTERNET hHttpRequest, LPCSTR lpszHeaders,
268 DWORD dwHeaderLength, LPVOID lpOptional ,DWORD dwOptionalLength);
269 INTERNETAPI HINTERNET WINAPI HTTP_HttpOpenRequestA(HINTERNET hHttpSession,
270 LPCSTR lpszVerb, LPCSTR lpszObjectName, LPCSTR lpszVersion,
271 LPCSTR lpszReferrer , LPCSTR *lpszAcceptTypes,
272 DWORD dwFlags, DWORD dwContext);
273 void HTTP_CloseHTTPSessionHandle(LPWININETHTTPSESSIONA lpwhs);
274 void HTTP_CloseHTTPRequestHandle(LPWININETHTTPREQA lpwhr);
276 VOID SendAsyncCallback(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
277 DWORD dwContext, DWORD dwInternetStatus, LPVOID
278 lpvStatusInfo , DWORD dwStatusInfoLength);
280 VOID SendAsyncCallbackInt(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
281 DWORD dwContext, DWORD dwInternetStatus, LPVOID
282 lpvStatusInfo , DWORD dwStatusInfoLength);
285 BOOL NETCON_connected(WININET_NETCONNECTION *connection);
286 void NETCON_init(WININET_NETCONNECTION *connnection, BOOL useSSL);
287 BOOL NETCON_create(WININET_NETCONNECTION *connection, int domain,
288 int type, int protocol);
289 BOOL NETCON_close(WININET_NETCONNECTION *connection);
290 BOOL NETCON_connect(WININET_NETCONNECTION *connection, const struct sockaddr *serv_addr,
291 socklen_t addrlen);
292 BOOL NETCON_send(WININET_NETCONNECTION *connection, const void *msg, size_t len, int flags,
293 int *sent /* out */);
294 BOOL NETCON_recv(WININET_NETCONNECTION *connection, void *buf, size_t len, int flags,
295 int *recvd /* out */);
296 BOOL NETCON_getNextLine(WININET_NETCONNECTION *connection, LPSTR lpszBuffer, LPDWORD dwBuffer);
298 #define MAX_REPLY_LEN 0x5B4
301 #endif /* _WINE_INTERNET_H_ */