2 * Copyright (c) 2000, Red Hat, Inc.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * A copy of the GNU General Public License can be found at
12 * Written by DJ Delorie <dj@cygnus.com>
16 /* The purpose of this file is to manage internet downloads using the
17 Internet Explorer version 5 DLLs. To use this method, the user
18 must already have installed and configured IE5. This module is
19 called from netio.cc, which is called from geturl.cc */
22 static const char *cvsid
=
35 static HINTERNET internet
= 0;
37 NetIO_IE5::NetIO_IE5 (char const *_url
):
44 HINSTANCE h
= LoadLibrary ("wininet.dll");
47 note (NULL
, IDS_WININET
);
51 InternetAttemptConnect (0);
52 internet
= InternetOpen ("Cygwin Setup", INTERNET_OPEN_TYPE_PRECONFIG
,
57 INTERNET_FLAG_DONT_CACHE
|
58 INTERNET_FLAG_KEEP_CONNECTION
|
59 INTERNET_FLAG_PRAGMA_NOCACHE
|
60 INTERNET_FLAG_RELOAD
|
61 INTERNET_FLAG_EXISTING_CONNECT
| INTERNET_FLAG_PASSIVE
;
63 connection
= InternetOpenUrl (internet
, url
, NULL
, 0, flags
, 0);
67 if (net_user
&& net_passwd
)
69 InternetSetOption (connection
, INTERNET_OPTION_USERNAME
,
70 net_user
, strlen (net_user
));
71 InternetSetOption (connection
, INTERNET_OPTION_PASSWORD
,
72 net_passwd
, strlen (net_passwd
));
75 if (net_proxy_user
&& net_proxy_passwd
)
77 InternetSetOption (connection
, INTERNET_OPTION_PROXY_USERNAME
,
78 net_proxy_user
, strlen (net_proxy_user
));
79 InternetSetOption (connection
, INTERNET_OPTION_PROXY_PASSWORD
,
80 net_proxy_passwd
, strlen (net_proxy_passwd
));
84 if (!HttpSendRequest (connection
, 0, 0, 0, 0))
89 if (GetLastError () == ERROR_INTERNET_EXTENDED_ERROR
)
92 DWORD e
, l
= sizeof (buf
);
93 InternetGetLastResponseInfo (&e
, buf
, &l
);
94 MessageBox (0, buf
, "Internet Error", 0);
99 type_s
= sizeof (type
);
100 InternetQueryOption (connection
, INTERNET_OPTION_HANDLE_TYPE
,
105 case INTERNET_HANDLE_TYPE_HTTP_REQUEST
:
106 case INTERNET_HANDLE_TYPE_CONNECT_HTTP
:
107 type_s
= sizeof (DWORD
);
108 if (HttpQueryInfo (connection
,
109 HTTP_QUERY_STATUS_CODE
| HTTP_QUERY_FLAG_NUMBER
,
110 &type
, &type_s
, NULL
))
112 if (type
== 401) /* authorization required */
119 else if (type
== 407) /* proxy authorization required */
122 get_proxy_auth (NULL
);
126 else if (type
>= 300)
136 NetIO_IE5::flush_io ()
142 InternetReadFile (connection
, buf
, 1024, &actual
);
147 NetIO_IE5::~NetIO_IE5 ()
150 InternetCloseHandle (connection
);
156 return (connection
== NULL
) ? 0 : 1;
160 NetIO_IE5::read (char *buf
, int nbytes
)
163 if (InternetReadFile (connection
, buf
, nbytes
, &actual
))