X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=netinstall%2Fnetio.cc;fp=netinstall%2Fnetio.cc;h=5d04d936d07c4ba8718c3abb39fef559ec96de36;hp=0000000000000000000000000000000000000000;hb=1ecbe603154527afa87c21523aedd8e3bda77c2f;hpb=131844b7560952b4f8e1cb8628d9115e0f2f29d2 diff --git a/netinstall/netio.cc b/netinstall/netio.cc new file mode 100644 index 0000000..5d04d93 --- /dev/null +++ b/netinstall/netio.cc @@ -0,0 +1,240 @@ +/* + * Copyright (c) 2000, Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * A copy of the GNU General Public License can be found at + * http://www.gnu.org/ + * + * Written by DJ Delorie + * + */ + +/* The purpose of this file is to coordinate the various access + methods known to setup. To add a new method, create a pair of + nio-*.[ch] files and add the logic to NetIO::open here */ + +#include "win32.h" +#include +#include +#include + +#include "resource.h" +#include "state.h" +#include "msg.h" +#include "netio.h" +#include "nio-file.h" +#include "nio-ie5.h" +#include "nio-http.h" +#include "nio-ftp.h" +#include "dialog.h" +#include "log.h" + +#include "port.h" + +NetIO::NetIO (char *Purl) +{ + set_url (Purl); +} + +NetIO::~NetIO () +{ + if (url) + free (url); + if (proto) + free (proto); + if (host) + free (host); + if (path) + free (path); +} + +void +NetIO::set_url (char *Purl) +{ + char *bp, *ep, c; + + file_size = 0; + url = _strdup (Purl); + proto = 0; + host = 0; + port = 0; + path = 0; + + bp = url; + ep = strstr (bp, "://"); + if (!ep) + { + path = url; + return; + } + + *ep = 0; + proto = _strdup (bp); + *ep = ':'; + bp = ep+3; + + ep = bp + strcspn (bp, ":/"); + c = *ep; + *ep = 0; + host = _strdup (bp); + *ep = c; + + if (*ep == ':') + { + port = atoi (ep+1); + ep = strchr (ep, '/'); + } + + if (*ep) + path = _strdup (ep); +} + +int +NetIO::ok () +{ + return 0; +} + +int +NetIO::read (char *buf, int nbytes) +{ + return 0; +} + +NetIO * +NetIO::open (char *url) +{ + NetIO *rv = 0; + enum {http, ftp, file} proto; + if (strncmp (url, "http://", 7) == 0) + proto = http; + else if (strncmp (url, "ftp://", 6) == 0) + proto = ftp; + else + proto = file; + + if (proto == file) + rv = new NetIO_File (url); + else if (net_method == IDC_NET_IE5) + rv = new NetIO_IE5 (url); + else if (net_method == IDC_NET_PROXY) + rv = new NetIO_HTTP (url); + else if (net_method == IDC_NET_DIRECT) + { + switch (proto) + { + case http: + rv = new NetIO_HTTP (url); + break; + case ftp: + rv = new NetIO_FTP (url); + break; + } + } + + if (!rv->ok ()) + { + delete rv; + return 0; + } + + return rv; +} + + +static char **user, **passwd; +static int loading = 0; + +static void +check_if_enable_ok (HWND h) +{ + int e = 0; + if (*user && *passwd) + e = 1; + EnableWindow (GetDlgItem (h, IDOK), e); +} + +static void +load_dialog (HWND h) +{ + loading = 1; + eset (h, IDC_NET_USER, *user); + eset (h, IDC_NET_PASSWD, *passwd); + check_if_enable_ok (h); + loading = 0; +} + +static void +save_dialog (HWND h) +{ + *user = eget (h, IDC_NET_USER, *user); + *passwd = eget (h, IDC_NET_PASSWD, *passwd); +} + +static BOOL +auth_cmd (HWND h, int id, HWND hwndctl, UINT code) +{ + switch (id) + { + + case IDC_NET_USER: + case IDC_NET_PASSWD: + if (code == EN_CHANGE && !loading) + { + save_dialog (h); + check_if_enable_ok (h); + } + break; + + case IDOK: + save_dialog (h); + EndDialog (h, 0); + break; + + case IDCANCEL: + EndDialog (h, 1); + exit_setup (1); + break; + } + return FALSE; +} + +static BOOL CALLBACK +auth_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + load_dialog (h); + return FALSE; + case WM_COMMAND: + return HANDLE_WM_COMMAND (h, wParam, lParam, auth_cmd); + } + return FALSE; +} + +static int +auth_common (HINSTANCE h, int id) +{ + return DialogBox (h, MAKEINTRESOURCE (id), 0, auth_proc); +} + +int +NetIO::get_auth () +{ + user = &net_user; + passwd = &net_passwd; + return auth_common (hinstance, IDD_NET_AUTH); +} + +int +NetIO::get_proxy_auth () +{ + user = &net_proxy_user; + passwd = &net_proxy_passwd; + return auth_common (hinstance, IDD_PROXY_AUTH); +}