Implement support for proxies with usernames and passwords.
[wine/wine-kai.git] / dlls / wininet / internet.h
blob63396335eb0444911f714410acfaa08f72f5be79
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 LPSTR lpszProxyUsername;
77 LPSTR lpszProxyPassword;
78 DWORD dwAccessType;
79 INTERNET_STATUS_CALLBACK lpfnStatusCB;
80 } WININETAPPINFOA, *LPWININETAPPINFOA;
83 typedef struct
85 WININETHANDLEHEADER hdr;
86 LPSTR lpszServerName;
87 LPSTR lpszUserName;
88 INTERNET_PORT nServerPort;
89 struct sockaddr_in socketAddress;
90 struct hostent *phostent;
91 } WININETHTTPSESSIONA, *LPWININETHTTPSESSIONA;
93 #define HDR_ISREQUEST 0x0001
94 #define HDR_COMMADELIMITED 0x0002
95 #define HDR_SEMIDELIMITED 0x0004
97 typedef struct
99 LPSTR lpszField;
100 LPSTR lpszValue;
101 WORD wFlags;
102 WORD wCount;
103 } HTTPHEADERA, *LPHTTPHEADERA;
106 typedef struct
108 WININETHANDLEHEADER hdr;
109 LPSTR lpszPath;
110 LPSTR lpszVerb;
111 LPSTR lpszHostName;
112 WININET_NETCONNECTION netConnection;
113 HTTPHEADERA StdHeaders[HTTP_QUERY_MAX+1];
114 HTTPHEADERA *pCustHeaders;
115 INT nCustHeaders;
116 } WININETHTTPREQA, *LPWININETHTTPREQA;
119 typedef struct
121 WININETHANDLEHEADER hdr;
122 BOOL session_deleted;
123 int nDataSocket;
124 } WININETFILE, *LPWININETFILE;
127 typedef struct
129 WININETHANDLEHEADER hdr;
130 int sndSocket;
131 int lstnSocket;
132 int pasvSocket; /* data socket connected by us in case of passive FTP */
133 LPWININETFILE download_in_progress;
134 struct sockaddr_in socketAddress;
135 struct sockaddr_in lstnSocketAddress;
136 struct hostent *phostent;
137 LPSTR lpszPassword;
138 LPSTR lpszUserName;
139 } WININETFTPSESSIONA, *LPWININETFTPSESSIONA;
142 typedef struct
144 BOOL bIsDirectory;
145 LPSTR lpszName;
146 DWORD nSize;
147 struct tm tmLastModified;
148 unsigned short permissions;
149 } FILEPROPERTIESA, *LPFILEPROPERTIESA;
152 typedef struct
154 WININETHANDLEHEADER hdr;
155 int index;
156 DWORD size;
157 LPFILEPROPERTIESA lpafp;
158 } WININETFINDNEXTA, *LPWININETFINDNEXTA;
160 typedef enum
162 FTPPUTFILEA,
163 FTPSETCURRENTDIRECTORYA,
164 FTPCREATEDIRECTORYA,
165 FTPFINDFIRSTFILEA,
166 FTPGETCURRENTDIRECTORYA,
167 FTPOPENFILEA,
168 FTPGETFILEA,
169 FTPDELETEFILEA,
170 FTPREMOVEDIRECTORYA,
171 FTPRENAMEFILEA,
172 INTERNETFINDNEXTA,
173 HTTPSENDREQUESTA,
174 HTTPOPENREQUESTA,
175 SENDCALLBACK,
176 } ASYNC_FUNC;
178 typedef struct WORKREQ
180 ASYNC_FUNC asyncall;
181 DWORD param1;
182 #define HFTPSESSION param1
184 DWORD param2;
185 #define LPSZLOCALFILE param2
186 #define LPSZREMOTEFILE param2
187 #define LPSZFILENAME param2
188 #define LPSZSRCFILE param2
189 #define LPSZDIRECTORY param2
190 #define LPSZSEARCHFILE param2
191 #define LPSZHEADER param2
192 #define LPSZVERB param2
194 DWORD param3;
195 #define LPSZNEWREMOTEFILE param3
196 #define LPSZNEWFILE param3
197 #define LPFINDFILEDATA param3
198 #define LPDWDIRECTORY param3
199 #define FDWACCESS param3
200 #define LPSZDESTFILE param3
201 #define DWHEADERLENGTH param3
202 #define LPSZOBJECTNAME param3
204 DWORD param4;
205 #define DWFLAGS param4
206 #define LPOPTIONAL param4
208 DWORD param5;
209 #define DWCONTEXT param5
210 #define DWOPTIONALLENGTH param5
212 DWORD param6;
213 #define FFAILIFEXISTS param6
214 #define LPSZVERSION param6
216 DWORD param7;
217 #define DWLOCALFLAGSATTRIBUTE param7
218 #define LPSZREFERRER param7
220 DWORD param8;
221 #define LPSZACCEPTTYPES param8
223 struct WORKREQ *next;
224 struct WORKREQ *prev;
226 } WORKREQUEST, *LPWORKREQUEST;
229 time_t ConvertTimeString(LPCSTR asctime);
231 HINTERNET FTP_Connect(HINTERNET hInterent, LPCSTR lpszServerName,
232 INTERNET_PORT nServerPort, LPCSTR lpszUserName,
233 LPCSTR lpszPassword, DWORD dwFlags, DWORD dwContext);
235 HINTERNET HTTP_Connect(HINTERNET hInterent, LPCSTR lpszServerName,
236 INTERNET_PORT nServerPort, LPCSTR lpszUserName,
237 LPCSTR lpszPassword, DWORD dwFlags, DWORD dwContext);
239 BOOL GetAddress(LPCSTR lpszServerName, INTERNET_PORT nServerPort,
240 struct hostent **phe, struct sockaddr_in *psa);
242 void INTERNET_SetLastError(DWORD dwError);
243 DWORD INTERNET_GetLastError();
244 BOOL INTERNET_AsyncCall(LPWORKREQUEST lpWorkRequest);
245 LPSTR INTERNET_GetResponseBuffer();
246 LPSTR INTERNET_GetNextLine(INT nSocket, LPSTR lpszBuffer, LPDWORD dwBuffer);
248 BOOL FTP_CloseSessionHandle(LPWININETFTPSESSIONA lpwfs);
249 BOOL FTP_CloseFindNextHandle(LPWININETFINDNEXTA lpwfn);
250 BOOL FTP_CloseFileTransferHandle(LPWININETFILE lpwfn);
251 BOOLAPI FTP_FtpPutFileA(HINTERNET hConnect, LPCSTR lpszLocalFile,
252 LPCSTR lpszNewRemoteFile, DWORD dwFlags, DWORD dwContext);
253 BOOLAPI FTP_FtpSetCurrentDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory);
254 BOOLAPI FTP_FtpCreateDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory);
255 INTERNETAPI HINTERNET WINAPI FTP_FtpFindFirstFileA(HINTERNET hConnect,
256 LPCSTR lpszSearchFile, LPWIN32_FIND_DATAA lpFindFileData, DWORD dwFlags, DWORD dwContext);
257 BOOLAPI FTP_FtpGetCurrentDirectoryA(HINTERNET hFtpSession, LPSTR lpszCurrentDirectory,
258 LPDWORD lpdwCurrentDirectory);
259 BOOL FTP_ConvertFileProp(LPFILEPROPERTIESA lpafp, LPWIN32_FIND_DATAA lpFindFileData);
260 BOOL FTP_FtpRenameFileA(HINTERNET hFtpSession, LPCSTR lpszSrc, LPCSTR lpszDest);
261 BOOL FTP_FtpRemoveDirectoryA(HINTERNET hFtpSession, LPCSTR lpszDirectory);
262 BOOL FTP_FtpDeleteFileA(HINTERNET hFtpSession, LPCSTR lpszFileName);
263 HINTERNET FTP_FtpOpenFileA(HINTERNET hFtpSession, LPCSTR lpszFileName,
264 DWORD fdwAccess, DWORD dwFlags, DWORD dwContext);
265 BOOLAPI FTP_FtpGetFileA(HINTERNET hInternet, LPCSTR lpszRemoteFile, LPCSTR lpszNewFile,
266 BOOL fFailIfExists, DWORD dwLocalFlagsAttribute, DWORD dwInternetFlags,
267 DWORD dwContext);
269 BOOLAPI HTTP_HttpSendRequestA(HINTERNET hHttpRequest, LPCSTR lpszHeaders,
270 DWORD dwHeaderLength, LPVOID lpOptional ,DWORD dwOptionalLength);
271 INTERNETAPI HINTERNET WINAPI HTTP_HttpOpenRequestA(HINTERNET hHttpSession,
272 LPCSTR lpszVerb, LPCSTR lpszObjectName, LPCSTR lpszVersion,
273 LPCSTR lpszReferrer , LPCSTR *lpszAcceptTypes,
274 DWORD dwFlags, DWORD dwContext);
275 void HTTP_CloseHTTPSessionHandle(LPWININETHTTPSESSIONA lpwhs);
276 void HTTP_CloseHTTPRequestHandle(LPWININETHTTPREQA lpwhr);
278 VOID SendAsyncCallback(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
279 DWORD dwContext, DWORD dwInternetStatus, LPVOID
280 lpvStatusInfo , DWORD dwStatusInfoLength);
282 VOID SendAsyncCallbackInt(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
283 DWORD dwContext, DWORD dwInternetStatus, LPVOID
284 lpvStatusInfo , DWORD dwStatusInfoLength);
286 BOOL HTTP_InsertProxyAuthorization( LPWININETHTTPREQA lpwhr,
287 LPCSTR username, LPCSTR password );
289 BOOL NETCON_connected(WININET_NETCONNECTION *connection);
290 void NETCON_init(WININET_NETCONNECTION *connnection, BOOL useSSL);
291 BOOL NETCON_create(WININET_NETCONNECTION *connection, int domain,
292 int type, int protocol);
293 BOOL NETCON_close(WININET_NETCONNECTION *connection);
294 BOOL NETCON_connect(WININET_NETCONNECTION *connection, const struct sockaddr *serv_addr,
295 socklen_t addrlen);
296 BOOL NETCON_send(WININET_NETCONNECTION *connection, const void *msg, size_t len, int flags,
297 int *sent /* out */);
298 BOOL NETCON_recv(WININET_NETCONNECTION *connection, void *buf, size_t len, int flags,
299 int *recvd /* out */);
300 BOOL NETCON_getNextLine(WININET_NETCONNECTION *connection, LPSTR lpszBuffer, LPDWORD dwBuffer);
302 #define MAX_REPLY_LEN 0x5B4
305 #endif /* _WINE_INTERNET_H_ */