comparison netinstall/netio.cc @ 448:3078fd1074e8 r21-2-39

Import from CVS: tag r21-2-39
author cvs
date Mon, 13 Aug 2007 11:38:25 +0200
parents
children
comparison
equal deleted inserted replaced
447:4fc5f13f3bd3 448:3078fd1074e8
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 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 "win32.h"
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24
25 #include "resource.h"
26 #include "state.h"
27 #include "msg.h"
28 #include "netio.h"
29 #include "nio-file.h"
30 #include "nio-ie5.h"
31 #include "nio-http.h"
32 #include "nio-ftp.h"
33 #include "dialog.h"
34 #include "log.h"
35
36 #include "port.h"
37
38 NetIO::NetIO (char *Purl)
39 {
40 set_url (Purl);
41 }
42
43 NetIO::~NetIO ()
44 {
45 if (url)
46 free (url);
47 if (proto)
48 free (proto);
49 if (host)
50 free (host);
51 if (path)
52 free (path);
53 }
54
55 void
56 NetIO::set_url (char *Purl)
57 {
58 char *bp, *ep, c;
59
60 file_size = 0;
61 url = _strdup (Purl);
62 proto = 0;
63 host = 0;
64 port = 0;
65 path = 0;
66
67 bp = url;
68 ep = strstr (bp, "://");
69 if (!ep)
70 {
71 path = url;
72 return;
73 }
74
75 *ep = 0;
76 proto = _strdup (bp);
77 *ep = ':';
78 bp = ep+3;
79
80 ep = bp + strcspn (bp, ":/");
81 c = *ep;
82 *ep = 0;
83 host = _strdup (bp);
84 *ep = c;
85
86 if (*ep == ':')
87 {
88 port = atoi (ep+1);
89 ep = strchr (ep, '/');
90 }
91
92 if (*ep)
93 path = _strdup (ep);
94 }
95
96 int
97 NetIO::ok ()
98 {
99 return 0;
100 }
101
102 int
103 NetIO::read (char *buf, int nbytes)
104 {
105 return 0;
106 }
107
108 NetIO *
109 NetIO::open (char *url)
110 {
111 NetIO *rv = 0;
112 enum {http, ftp, file} proto;
113 if (strncmp (url, "http://", 7) == 0)
114 proto = http;
115 else if (strncmp (url, "ftp://", 6) == 0)
116 proto = ftp;
117 else
118 proto = file;
119
120 if (proto == file)
121 rv = new NetIO_File (url);
122 else if (net_method == IDC_NET_IE5)
123 rv = new NetIO_IE5 (url);
124 else if (net_method == IDC_NET_PROXY)
125 rv = new NetIO_HTTP (url);
126 else if (net_method == IDC_NET_DIRECT)
127 {
128 switch (proto)
129 {
130 case http:
131 rv = new NetIO_HTTP (url);
132 break;
133 case ftp:
134 rv = new NetIO_FTP (url);
135 break;
136 }
137 }
138
139 if (!rv->ok ())
140 {
141 delete rv;
142 return 0;
143 }
144
145 return rv;
146 }
147
148
149 static char **user, **passwd;
150 static int loading = 0;
151
152 static void
153 check_if_enable_ok (HWND h)
154 {
155 int e = 0;
156 if (*user && *passwd)
157 e = 1;
158 EnableWindow (GetDlgItem (h, IDOK), e);
159 }
160
161 static void
162 load_dialog (HWND h)
163 {
164 loading = 1;
165 eset (h, IDC_NET_USER, *user);
166 eset (h, IDC_NET_PASSWD, *passwd);
167 check_if_enable_ok (h);
168 loading = 0;
169 }
170
171 static void
172 save_dialog (HWND h)
173 {
174 *user = eget (h, IDC_NET_USER, *user);
175 *passwd = eget (h, IDC_NET_PASSWD, *passwd);
176 }
177
178 static BOOL
179 auth_cmd (HWND h, int id, HWND hwndctl, UINT code)
180 {
181 switch (id)
182 {
183
184 case IDC_NET_USER:
185 case IDC_NET_PASSWD:
186 if (code == EN_CHANGE && !loading)
187 {
188 save_dialog (h);
189 check_if_enable_ok (h);
190 }
191 break;
192
193 case IDOK:
194 save_dialog (h);
195 EndDialog (h, 0);
196 break;
197
198 case IDCANCEL:
199 EndDialog (h, 1);
200 exit_setup (1);
201 break;
202 }
203 return FALSE;
204 }
205
206 static BOOL CALLBACK
207 auth_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
208 {
209 switch (message)
210 {
211 case WM_INITDIALOG:
212 load_dialog (h);
213 return FALSE;
214 case WM_COMMAND:
215 return HANDLE_WM_COMMAND (h, wParam, lParam, auth_cmd);
216 }
217 return FALSE;
218 }
219
220 static int
221 auth_common (HINSTANCE h, int id)
222 {
223 return DialogBox (h, MAKEINTRESOURCE (id), 0, auth_proc);
224 }
225
226 int
227 NetIO::get_auth ()
228 {
229 user = &net_user;
230 passwd = &net_passwd;
231 return auth_common (hinstance, IDD_NET_AUTH);
232 }
233
234 int
235 NetIO::get_proxy_auth ()
236 {
237 user = &net_proxy_user;
238 passwd = &net_proxy_passwd;
239 return auth_common (hinstance, IDD_PROXY_AUTH);
240 }