Mercurial > hg > xemacs-beta
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 } |