448
+ − 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 }