]> cygwin.com Git - cygwin-apps/setup.git/blame - nio-ie5.cc
* Makefile.in (setup_version.c): Add back magic which allows detection of
[cygwin-apps/setup.git] / nio-ie5.cc
CommitLineData
23c9e63c
DD
1/*
2 * Copyright (c) 2000, Red Hat, Inc.
3 *
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.
8 *
9 * A copy of the GNU General Public License can be found at
10 * http://www.gnu.org/
11 *
12 * Written by DJ Delorie <dj@cygnus.com>
13 *
14 */
15
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 */
20
b24c88b3
RC
21#if 0
22static const char *cvsid =
23 "\n%%% $Id$\n";
24#endif
8507f105 25
23c9e63c
DD
26#include "win32.h"
27
28#include "resource.h"
29#include "state.h"
30#include "dialog.h"
31#include "msg.h"
32#include "netio.h"
33#include "nio-ie5.h"
34
35static HINTERNET internet = 0;
36
341988b9 37NetIO_IE5::NetIO_IE5 (char const *_url):
b24c88b3 38NetIO (_url)
23c9e63c 39{
348860fa
DD
40 int resend = 0;
41
23c9e63c 42 if (internet == 0)
4a83b7b0
DD
43 {
44 HINSTANCE h = LoadLibrary ("wininet.dll");
45 if (!h)
46 {
ab57ceaa 47 note (NULL, IDS_WININET);
4a83b7b0
DD
48 connection = 0;
49 return;
50 }
51 InternetAttemptConnect (0);
52 internet = InternetOpen ("Cygwin Setup", INTERNET_OPEN_TYPE_PRECONFIG,
53 NULL, NULL, 0);
54 }
23c9e63c
DD
55
56 DWORD flags =
57 INTERNET_FLAG_DONT_CACHE |
58 INTERNET_FLAG_KEEP_CONNECTION |
59 INTERNET_FLAG_PRAGMA_NOCACHE |
60 INTERNET_FLAG_RELOAD |
b24c88b3 61 INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_PASSIVE;
23c9e63c 62
348860fa
DD
63 connection = InternetOpenUrl (internet, url, NULL, 0, flags, 0);
64
b24c88b3 65try_again:
4e8ff53f
DD
66
67 if (net_user && net_passwd)
68 {
348860fa 69 InternetSetOption (connection, INTERNET_OPTION_USERNAME,
4e8ff53f 70 net_user, strlen (net_user));
348860fa 71 InternetSetOption (connection, INTERNET_OPTION_PASSWORD,
4e8ff53f
DD
72 net_passwd, strlen (net_passwd));
73 }
74
23c9e63c
DD
75 if (net_proxy_user && net_proxy_passwd)
76 {
348860fa 77 InternetSetOption (connection, INTERNET_OPTION_PROXY_USERNAME,
23c9e63c 78 net_proxy_user, strlen (net_proxy_user));
348860fa 79 InternetSetOption (connection, INTERNET_OPTION_PROXY_PASSWORD,
23c9e63c
DD
80 net_proxy_passwd, strlen (net_proxy_passwd));
81 }
82
348860fa
DD
83 if (resend)
84 if (!HttpSendRequest (connection, 0, 0, 0, 0))
85 connection = 0;
23c9e63c
DD
86
87 if (!connection)
88 {
89 if (GetLastError () == ERROR_INTERNET_EXTENDED_ERROR)
90 {
91 char buf[2000];
b24c88b3 92 DWORD e, l = sizeof (buf);
23c9e63c
DD
93 InternetGetLastResponseInfo (&e, buf, &l);
94 MessageBox (0, buf, "Internet Error", 0);
95 }
23c9e63c 96 }
4e8ff53f
DD
97
98 DWORD type, type_s;
99 type_s = sizeof (type);
100 InternetQueryOption (connection, INTERNET_OPTION_HANDLE_TYPE,
101 &type, &type_s);
102
103 switch (type)
104 {
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))
111 {
b24c88b3 112 if (type == 401) /* authorization required */
4e8ff53f 113 {
b24c88b3 114 flush_io ();
ab57ceaa 115 get_auth (NULL);
348860fa 116 resend = 1;
4e8ff53f
DD
117 goto try_again;
118 }
b24c88b3 119 else if (type == 407) /* proxy authorization required */
4e8ff53f 120 {
b24c88b3 121 flush_io ();
ab57ceaa 122 get_proxy_auth (NULL);
348860fa 123 resend = 1;
4e8ff53f
DD
124 goto try_again;
125 }
126 else if (type >= 300)
127 {
128 connection = 0;
129 return;
130 }
131 }
132 }
23c9e63c
DD
133}
134
348860fa
DD
135void
136NetIO_IE5::flush_io ()
137{
138 DWORD actual = 0;
139 char buf[1024];
b24c88b3
RC
140 do
141 {
142 InternetReadFile (connection, buf, 1024, &actual);
143 }
144 while (actual > 0);
348860fa
DD
145}
146
23c9e63c
DD
147NetIO_IE5::~NetIO_IE5 ()
148{
149 if (connection)
150 InternetCloseHandle (connection);
151}
152
153int
154NetIO_IE5::ok ()
155{
156 return (connection == NULL) ? 0 : 1;
157}
158
159int
160NetIO_IE5::read (char *buf, int nbytes)
161{
162 DWORD actual;
163 if (InternetReadFile (connection, buf, nbytes, &actual))
164 return actual;
165 return -1;
166}
This page took 0.048753 seconds and 5 git commands to generate.