annotate netinstall/nio-ie5.cc @ 510:5bdbc721d46a

[xemacs-hg @ 2001-05-06 08:33:35 by ben] implement printing the selection when it's selected. force redisplay when set-charset-ccl-program called. if bytecomp or byte-optimize need recompiling, then load the .el version of them first, recompile them, and reload the .elc versions to recompile everything else (so we won't be waiting until the cows come home).
author ben
date Sun, 06 May 2001 08:33:41 +0000
parents 20ae8821c23d
children ce0b3f2eff35
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
1 /*
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
2 * Copyright (c) 2000, Red Hat, Inc.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
3 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
4 * This program is free software; you can redistribute it and/or modify
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
7 * (at your option) any later version.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
8 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
9 * A copy of the GNU General Public License can be found at
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
10 * http://www.gnu.org/
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
11 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
12 * Written by DJ Delorie <dj@cygnus.com>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
13 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
14 */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
15
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
16 /* The purpose of this file is to manage internet downloads using the
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
17 Internet Explorer version 5 DLLs. To use this method, the user
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
18 must already have installed and configured IE5. This module is
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
19 called from netio.cc, which is called from geturl.cc */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
20
468
20ae8821c23d [xemacs-hg @ 2001-04-13 09:11:17 by michaels]
michaels
parents: 464
diff changeset
21 static char *cvsid = "\n%%% $Id: nio-ie5.cc,v 1.3 2001/04/13 09:11:35 michaels Exp $\n";
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
22
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
23 #include "win32.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
24
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
25 #include "resource.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
26 #include "state.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
27 #include "dialog.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
28 #include "msg.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
29 #include "netio.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
30 #include "nio-ie5.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
31
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
32 static HINTERNET internet = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
33
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
34 NetIO_IE5::NetIO_IE5 (char *_url)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
35 : NetIO (_url)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
36 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
37 int resend = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
38
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
39 if (internet == 0)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
40 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
41 HINSTANCE h = LoadLibrary ("wininet.dll");
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
42 if (!h)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
43 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
44 note (IDS_WININET);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
45 connection = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
46 return;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
47 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
48 InternetAttemptConnect (0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
49 internet = InternetOpen ("Cygwin Setup", INTERNET_OPEN_TYPE_PRECONFIG,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
50 NULL, NULL, 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
51 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
52
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
53 DWORD flags =
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
54 INTERNET_FLAG_DONT_CACHE |
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
55 INTERNET_FLAG_KEEP_CONNECTION |
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
56 INTERNET_FLAG_PRAGMA_NOCACHE |
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
57 INTERNET_FLAG_RELOAD |
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
58 INTERNET_FLAG_EXISTING_CONNECT |
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
59 INTERNET_FLAG_PASSIVE;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
60
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
61 connection = InternetOpenUrl (internet, url, NULL, 0, flags, 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
62
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
63 try_again:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
64
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
65 if (net_user && net_passwd)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
66 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
67 InternetSetOption (connection, INTERNET_OPTION_USERNAME,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
68 net_user, strlen (net_user));
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
69 InternetSetOption (connection, INTERNET_OPTION_PASSWORD,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
70 net_passwd, strlen (net_passwd));
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
71 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
72
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
73 if (net_proxy_user && net_proxy_passwd)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
74 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
75 InternetSetOption (connection, INTERNET_OPTION_PROXY_USERNAME,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
76 net_proxy_user, strlen (net_proxy_user));
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
77 InternetSetOption (connection, INTERNET_OPTION_PROXY_PASSWORD,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
78 net_proxy_passwd, strlen (net_proxy_passwd));
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
79 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
80
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
81 if (resend)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
82 if (!HttpSendRequest (connection, 0, 0, 0, 0))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
83 connection = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
84
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
85 if (!connection)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
86 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
87 if (GetLastError () == ERROR_INTERNET_EXTENDED_ERROR)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
88 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
89 char buf[2000];
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
90 DWORD e, l=sizeof (buf);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
91 InternetGetLastResponseInfo (&e, buf, &l);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
92 MessageBox (0, buf, "Internet Error", 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
93 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
94 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
95
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
96 DWORD type, type_s;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
97 type_s = sizeof (type);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
98 InternetQueryOption (connection, INTERNET_OPTION_HANDLE_TYPE,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
99 &type, &type_s);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
100
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
101 switch (type)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
102 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
103 case INTERNET_HANDLE_TYPE_HTTP_REQUEST:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
104 case INTERNET_HANDLE_TYPE_CONNECT_HTTP:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
105 type_s = sizeof (DWORD);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
106 if (HttpQueryInfo (connection,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
107 HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
108 &type, &type_s, NULL))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
109 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
110 if (type == 401) /* authorization required */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
111 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
112 flush_io();
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
113 get_auth ();
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
114 resend = 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
115 goto try_again;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
116 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
117 else if (type == 407) /* proxy authorization required */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
118 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
119 flush_io();
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
120 get_proxy_auth ();
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
121 resend = 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
122 goto try_again;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
123 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
124 else if (type >= 300)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
125 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
126 connection = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
127 return;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
128 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
129 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
130 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
131 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
132
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
133 void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
134 NetIO_IE5::flush_io ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
135 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
136 DWORD actual = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
137 char buf[1024];
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
138 do {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
139 InternetReadFile (connection, buf, 1024, &actual);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
140 } while (actual > 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
141 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
142
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
143 NetIO_IE5::~NetIO_IE5 ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
144 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
145 if (connection)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
146 InternetCloseHandle (connection);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
147 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
148
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
149 int
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
150 NetIO_IE5::ok ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
151 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
152 return (connection == NULL) ? 0 : 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
153 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
154
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
155 int
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
156 NetIO_IE5::read (char *buf, int nbytes)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
157 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
158 DWORD actual;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
159 if (InternetReadFile (connection, buf, nbytes, &actual))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
160 return actual;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
161 return -1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
162 }