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 */
21 static char *cvsid
= "\n%%% $Id$\n";
32 static HINTERNET internet
= 0;
34 NetIO_IE5::NetIO_IE5 (char *_url
)
41 HINSTANCE h
= LoadLibrary ("wininet.dll");
48 InternetAttemptConnect (0);
49 internet
= InternetOpen ("Cygwin Setup", INTERNET_OPEN_TYPE_PRECONFIG
,
54 INTERNET_FLAG_DONT_CACHE
|
55 INTERNET_FLAG_KEEP_CONNECTION
|
56 INTERNET_FLAG_PRAGMA_NOCACHE
|
57 INTERNET_FLAG_RELOAD
|
58 INTERNET_FLAG_EXISTING_CONNECT
|
59 INTERNET_FLAG_PASSIVE
;
61 connection
= InternetOpenUrl (internet
, url
, NULL
, 0, flags
, 0);
65 if (net_user
&& net_passwd
)
67 InternetSetOption (connection
, INTERNET_OPTION_USERNAME
,
68 net_user
, strlen (net_user
));
69 InternetSetOption (connection
, INTERNET_OPTION_PASSWORD
,
70 net_passwd
, strlen (net_passwd
));
73 if (net_proxy_user
&& net_proxy_passwd
)
75 InternetSetOption (connection
, INTERNET_OPTION_PROXY_USERNAME
,
76 net_proxy_user
, strlen (net_proxy_user
));
77 InternetSetOption (connection
, INTERNET_OPTION_PROXY_PASSWORD
,
78 net_proxy_passwd
, strlen (net_proxy_passwd
));
82 if (!HttpSendRequest (connection
, 0, 0, 0, 0))
87 if (GetLastError () == ERROR_INTERNET_EXTENDED_ERROR
)
90 DWORD e
, l
=sizeof (buf
);
91 InternetGetLastResponseInfo (&e
, buf
, &l
);
92 MessageBox (0, buf
, "Internet Error", 0);
97 type_s
= sizeof (type
);
98 InternetQueryOption (connection
, INTERNET_OPTION_HANDLE_TYPE
,
103 case INTERNET_HANDLE_TYPE_HTTP_REQUEST
:
104 case INTERNET_HANDLE_TYPE_CONNECT_HTTP
:
105 type_s
= sizeof (DWORD
);
106 if (HttpQueryInfo (connection
,
107 HTTP_QUERY_STATUS_CODE
| HTTP_QUERY_FLAG_NUMBER
,
108 &type
, &type_s
, NULL
))
110 if (type
== 401) /* authorization required */
117 else if (type
== 407) /* proxy authorization required */
124 else if (type
>= 300)
134 NetIO_IE5::flush_io ()
139 InternetReadFile (connection
, buf
, 1024, &actual
);
140 } while (actual
> 0);
143 NetIO_IE5::~NetIO_IE5 ()
146 InternetCloseHandle (connection
);
152 return (connection
== NULL
) ? 0 : 1;
156 NetIO_IE5::read (char *buf
, int nbytes
)
159 if (InternetReadFile (connection
, buf
, nbytes
, &actual
))