]> cygwin.com Git - cygwin-apps/setup.git/blame_incremental - netio.cc
Show overall progress for checking packages in package cache
[cygwin-apps/setup.git] / netio.cc
... / ...
CommitLineData
1/*
2 * Copyright (c) 2000, 2001, 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 coordinate the various access
17 methods known to setup. To add a new method, create a pair of
18 nio-*.[ch] files and add the logic to NetIO::open here */
19
20#include "netio.h"
21
22#include "LogFile.h"
23
24#include <stdio.h>
25#include <stdlib.h>
26#include <string.h>
27
28#include <shlwapi.h>
29
30#include "resource.h"
31#include "state.h"
32#include "msg.h"
33#include "nio-ie5.h"
34#include "dialog.h"
35
36int NetIO::net_method;
37char *NetIO::net_proxy_host;
38int NetIO::net_proxy_port;
39
40char *NetIO::net_user;
41char *NetIO::net_passwd;
42char *NetIO::net_proxy_user;
43char *NetIO::net_proxy_passwd;
44char *NetIO::net_ftp_user;
45char *NetIO::net_ftp_passwd;
46
47int
48NetIO::ok ()
49{
50 return 0;
51}
52
53int
54NetIO::read (char *buf, int nbytes)
55{
56 return 0;
57}
58
59NetIO *
60NetIO::open (char const *url, bool cachable)
61{
62 NetIO *rv = 0;
63 std::string file_url;
64
65 enum
66 { http, https, ftp, ftps, file }
67 proto;
68 if (strncmp (url, "http://", 7) == 0)
69 proto = http;
70 else if (strncmp (url, "https://", 8) == 0)
71 proto = https;
72 else if (strncmp (url, "ftp://", 6) == 0)
73 proto = ftp;
74 else if (strncmp (url, "ftps://", 7) == 0)
75 proto = ftps;
76 else if (strncmp (url, "file://", 7) == 0)
77 {
78 proto = file;
79
80 // WinInet expects a 'legacy' file:// URL
81 // (i.e. a windows path with "file://" prepended)
82 // https://blogs.msdn.microsoft.com/freeassociations/2005/05/19/the-bizarre-and-unhappy-story-of-file-urls/
83 char path[MAX_PATH];
84 DWORD len = MAX_PATH;
85 if (S_OK == PathCreateFromUrl(url, path, &len, 0))
86 {
87 file_url = std::string("file://") + path;
88 url = file_url.c_str();
89 }
90 }
91 else
92 // treat everything else as a windows path
93 {
94 proto = file;
95 file_url = std::string("file://") + url;
96 url = file_url.c_str();
97 }
98
99 rv = new NetIO_IE5 (url, proto == file ? false : cachable);
100
101 if (rv && !rv->ok ())
102 {
103 delete rv;
104 return 0;
105 }
106
107 return rv;
108}
109
110
111static char **user, **passwd;
112static int loading = 0;
113
114static void
115check_if_enable_ok (HWND h)
116{
117 int e = 0;
118 if (*user)
119 e = 1;
120 EnableWindow (GetDlgItem (h, IDOK), e);
121}
122
123static void
124load_dialog (HWND h)
125{
126 loading = 1;
127 eset (h, IDC_NET_USER, *user);
128 eset (h, IDC_NET_PASSWD, *passwd);
129 check_if_enable_ok (h);
130 loading = 0;
131}
132
133static void
134save_dialog (HWND h)
135{
136 *user = eget (h, IDC_NET_USER, *user);
137 *passwd = eget (h, IDC_NET_PASSWD, *passwd);
138 if (! *passwd) {
139 *passwd = new char[1];
140 (*passwd)[0] = '\0';
141 }
142}
143
144static BOOL
145auth_cmd (HWND h, int id, HWND hwndctl, UINT code)
146{
147 switch (id)
148 {
149
150 case IDC_NET_USER:
151 case IDC_NET_PASSWD:
152 if (code == EN_CHANGE && !loading)
153 {
154 save_dialog (h);
155 check_if_enable_ok (h);
156 }
157 break;
158
159 case IDOK:
160 save_dialog (h);
161 EndDialog (h, 0);
162 break;
163
164 case IDCANCEL:
165 EndDialog (h, 1);
166 Logger ().exit (1);
167 break;
168 }
169 return 0;
170}
171
172static INT_PTR CALLBACK
173auth_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
174{
175 switch (message)
176 {
177 case WM_INITDIALOG:
178 load_dialog (h);
179 return FALSE;
180 case WM_COMMAND:
181 auth_cmd (h, LOWORD(wParam), (HWND)lParam, HIWORD(wParam));
182 return 0;
183 }
184 return FALSE;
185}
186
187static int
188auth_common (HINSTANCE h, int id, HWND owner)
189{
190 return DialogBox (h, MAKEINTRESOURCE (id), owner, auth_proc);
191}
192
193int
194NetIO::get_auth (HWND owner)
195{
196 user = &net_user;
197 passwd = &net_passwd;
198 return auth_common (hinstance, IDD_NET_AUTH, owner);
199}
200
201int
202NetIO::get_proxy_auth (HWND owner)
203{
204 user = &net_proxy_user;
205 passwd = &net_proxy_passwd;
206 return auth_common (hinstance, IDD_PROXY_AUTH, owner);
207}
208
209int
210NetIO::get_ftp_auth (HWND owner)
211{
212 if (net_ftp_user)
213 {
214 delete[] net_ftp_user;
215 net_ftp_user = NULL;
216 }
217 if (net_ftp_passwd)
218 {
219 delete[] net_ftp_passwd;
220 net_ftp_passwd = NULL;
221 }
222 user = &net_ftp_user;
223 passwd = &net_ftp_passwd;
224 return auth_common (hinstance, IDD_FTP_AUTH, owner);
225}
226
227const char *
228NetIO::net_method_name ()
229{
230 switch (net_method)
231 {
232 case IDC_NET_PRECONFIG:
233 return "Preconfig";
234 case IDC_NET_DIRECT:
235 return "Direct";
236 case IDC_NET_PROXY:
237 return "Proxy";
238 default:
239 return "Unknown";
240 }
241}
This page took 0.020899 seconds and 5 git commands to generate.