From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 64921 invoked by alias); 26 Jan 2018 16:56:57 -0000 Mailing-List: contact cygwin-apps-help@cygwin.com; run by ezmlm Precedence: bulk Sender: cygwin-apps-owner@cygwin.com List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Mail-Followup-To: cygwin-apps@cygwin.com Received: (qmail 64830 invoked by uid 89); 26 Jan 2018 16:56:56 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.6 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,KAM_SHORT,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy= X-HELO: mx2.mail.elte.hu Received: from mx2.mail.elte.hu (HELO mx2.mail.elte.hu) (157.181.151.9) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 26 Jan 2018 16:56:53 +0000 Received: from mailbox1.caesar.elte.hu ([157.181.151.157]) by mx2.mail.elte.hu with esmtp (Exim) id 1ef7J2-00032Z-5Y from for ; Fri, 26 Jan 2018 17:56:51 +0100 Received: (Authenticated sender: szgyg) by mailbox1.caesar.elte.hu with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1ef7J2-0003HY-3G for cygwin-apps@cygwin.com; Fri, 26 Jan 2018 17:56:48 +0100 From: SZAVAI Gyula To: cygwin-apps@cygwin.com Subject: [PATCH setup 5/5] Remove NetIO_HTTP Date: Fri, 26 Jan 2018 16:56:00 -0000 Message-Id: <20180126165636.2944-6-szgyg@ludens.elte.hu> In-Reply-To: <20180126165636.2944-1-szgyg@ludens.elte.hu> References: <0dd4274b-fd3a-2857-bdb5-087243444407@dronecode.org.uk> <20180126165636.2944-1-szgyg@ludens.elte.hu> X-ELTE-SpamScore: -6.7 X-ELTE-SpamLevel: X-ELTE-SpamCheck: no X-ELTE-SpamVersion: ELTE 3.0 X-ELTE-SpamCheck-Details: score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,L_AUTH,RP_MATCHES_RCVD autolearn=ham autolearn_force=no SpamAssassin version=3.4.0 -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -5.0 L_AUTH Caesar auth -0.6 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -0.1 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-IsSubscribed: yes X-SW-Source: 2018-01/txt/msg00086.txt.bz2 --- Makefile.am | 2 - netio.cc | 10 +-- nio-http.cc | 208 ------------------------------------------------------------ nio-http.h | 39 ------------ nio-ie5.cc | 30 ++++----- nio-ie5.h | 2 +- 6 files changed, 16 insertions(+), 275 deletions(-) delete mode 100644 nio-http.cc delete mode 100644 nio-http.h diff --git a/Makefile.am b/Makefile.am index f8f5993..cd5648a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -192,8 +192,6 @@ inilint_SOURCES = \ netio.h \ nio-ie5.cc \ nio-ie5.h \ - nio-http.cc \ - nio-http.h \ package_db.cc \ package_db.h \ package_depends.h \ diff --git a/netio.cc b/netio.cc index d77108b..90fb3df 100644 --- a/netio.cc +++ b/netio.cc @@ -29,7 +29,6 @@ #include "state.h" #include "msg.h" #include "nio-ie5.h" -#include "nio-http.h" #include "dialog.h" int NetIO::net_method; @@ -144,14 +143,7 @@ NetIO::open (char const *url, bool cachable) url = url2.c_str(); } - if (proto == file) - rv = new NetIO_IE5 (url, true, false); - else if (net_method == IDC_NET_PRECONFIG) - rv = new NetIO_IE5 (url, false, cachable); - else if (net_method == IDC_NET_PROXY) - rv = new NetIO_HTTP (url); - else if (net_method == IDC_NET_DIRECT) - rv = new NetIO_IE5 (url, true, cachable); + rv = new NetIO_IE5 (url, proto == file ? false : cachable); if (rv && !rv->ok ()) { diff --git a/nio-http.cc b/nio-http.cc deleted file mode 100644 index 413ee7f..0000000 --- a/nio-http.cc +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (c) 2000, 2001, 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 - * - */ - -/* This file is responsible for implementing all direct HTTP protocol - channels. It is intentionally simplistic. */ - -#include "win32.h" -#include -#include -#include - -#include "resource.h" -#include "state.h" -#include "simpsock.h" -#include "msg.h" - -#include "netio.h" -#include "nio-http.h" - -#ifndef _strnicmp -#define _strnicmp strncasecmp -#endif - -static char six2pr[64] = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' -}; - -static char * -base64_encode (char *username, char *password) -{ - unsigned char *ep; - char *rp; - static char *rv = 0; - if (rv) - delete[] rv; - rv = new char[2 * (strlen (username) + strlen (password)) + 5]; - - char *up = new char[strlen (username) + strlen (password) + 6]; - strcpy (up, username); - strcat (up, ":"); - strcat (up, password); - ep = (unsigned char *) up + strlen (up); - *ep++ = 0; - *ep++ = 0; - *ep++ = 0; - - char block[4]; - - rp = rv; - - for (ep = (unsigned char *) up; *ep; ep += 3) - { - block[0] = six2pr[ep[0] >> 2]; - block[1] = six2pr[((ep[0] << 4) & 0x30) | ((ep[1] >> 4) & 0x0f)]; - block[2] = six2pr[((ep[1] << 2) & 0x3c) | ((ep[2] >> 6) & 0x03)]; - block[3] = six2pr[ep[2] & 0x3f]; - - if (ep[1] == 0) - block[2] = block[3] = '='; - if (ep[2] == 0) - block[3] = '='; - memcpy (rp, block, 4); - rp += 4; - } - *rp = 0; - - delete[] up; - - return rv; -} - -NetIO_HTTP::NetIO_HTTP (char const *Purl):NetIO (Purl) -{ - std::string url (Purl); -retry_get: - if (port == 0) - port = 80; - - if (net_method == IDC_NET_PROXY) - s = new SimpleSocket (net_proxy_host, net_proxy_port); - else - s = new SimpleSocket (host, port); - - if (!s->ok ()) - { - delete s; - s = NULL; - return; - } - - if (net_method == IDC_NET_PROXY) - s->printf ("GET %s HTTP/1.0\r\n", url.c_str ()); - else - s->printf ("GET %s HTTP/1.0\r\n", path); - - // Default HTTP port is 80. Host header can have no port if requested port - // is the same as the default. Some HTTP servers don't behave as expected - // when they receive a Host header with the unnecessary default port value. - if (port == 80) - s->printf ("Host: %s\r\n", host); - else - s->printf ("Host: %s:%d\r\n", host, port); - - if (net_user && net_passwd) - s->printf ("Authorization: Basic %s\r\n", - base64_encode (net_user, net_passwd)); - - if (net_proxy_user && net_proxy_passwd) - s->printf ("Proxy-Authorization: Basic %s\r\n", - base64_encode (net_proxy_user, net_proxy_passwd)); - - s->printf ("\r\n"); - - char * l = s->gets (); - int code; - if (!l) - return; - sscanf (l, "%*s %d", &code); - if (code >= 300 && code < 400) - { - while ((l = s->gets ()) != 0) - { - if (_strnicmp (l, "Location:", 9) == 0) - { - char * u = l + 9; - while (*u == ' ' || *u == '\t') - u++; - set_url (u); - delete s; - goto retry_get; - } - } - } - if (code == 401) /* authorization required */ - { - get_auth (NULL); - delete s; - goto retry_get; - } - if (code == 407) /* proxy authorization required */ - { - get_proxy_auth (NULL); - delete s; - goto retry_get; - } - if (code == 500 /* ftp authentication through proxy required */ - && net_method == IDC_NET_PROXY - && !url.compare (0, std::string::npos, "ftp://", 6)) - { - get_ftp_auth (NULL); - if (net_ftp_user && net_ftp_passwd) - { - delete s; - url = std::string("ftp://") + net_ftp_user + ":" - + net_ftp_passwd + "@" + url.substr (6); - goto retry_get; - } - } - if (code >= 300) - { - delete s; - s = NULL; - return; - } - - // Eat the header, picking out the Content-Length in the process - while (((l = s->gets ()) != NULL) && (*l != '\0')) - { - if (_strnicmp (l, "Content-Length:", 15) == 0) - sscanf (l, "%*s %d", &file_size); - } -} - -NetIO_HTTP::~NetIO_HTTP () -{ - if (s) - delete s; -} - -int -NetIO_HTTP::ok () -{ - if (s && s->ok ()) - return 1; - return 0; -} - -int -NetIO_HTTP::read (char *buf, int nbytes) -{ - return s->read (buf, nbytes); -} diff --git a/nio-http.h b/nio-http.h deleted file mode 100644 index d3d5102..0000000 --- a/nio-http.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2000, 2001, 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 - * - */ - -#ifndef SETUP_NIO_HTTP_H -#define SETUP_NIO_HTTP_H - -/* Direct HTTP (with or without proxy) */ - -class SimpleSocket; - -class NetIO_HTTP:public NetIO -{ - SimpleSocket *s; - -public: - NetIO_HTTP (char const *url); - virtual ~ NetIO_HTTP (); - - /* If !ok() that means the transfer isn't happening. */ - virtual int ok (); - - /* Read `nbytes' bytes from the file. Returns zero when the file - is complete. */ - virtual int read (char *buf, int nbytes); -}; - -#endif /* SETUP_NIO_HTTP_H */ diff --git a/nio-ie5.cc b/nio-ie5.cc index e1a8e5c..f9599e8 100644 --- a/nio-ie5.cc +++ b/nio-ie5.cc @@ -33,9 +33,6 @@ static StringOption UserAgent ("", '\0', "user-agent", "User agent string for HTTP requests"); -static HINTERNET internet_direct = 0; -static HINTERNET internet_preconfig = 0; - const std::string & determine_default_useragent(void) { @@ -122,20 +119,23 @@ DWORD Proxy::type (void) const } -NetIO_IE5::NetIO_IE5 (char const *_url, bool direct, bool cachable): +static HINTERNET internet = 0; +static Proxy last_proxy = Proxy(-1, "", -1); + +NetIO_IE5::NetIO_IE5 (char const *_url, bool cachable): NetIO (_url) { int resend = 0; - HINTERNET *internet; - if (direct) - internet = &internet_direct; - else - internet = &internet_preconfig; - - if (*internet == 0) + Proxy proxy = Proxy(net_method, net_proxy_host, net_proxy_port); + if (proxy != last_proxy) { - InternetAttemptConnect (0); + last_proxy = proxy; + + if (internet != 0) + InternetCloseHandle(internet); + else + InternetAttemptConnect (0); const char *lpszAgent = determine_default_useragent().c_str(); if (UserAgent.isPresent()) @@ -156,9 +156,7 @@ NetIO (_url) } } - *internet = InternetOpen (lpszAgent, - direct ? INTERNET_OPEN_TYPE_DIRECT : INTERNET_OPEN_TYPE_PRECONFIG, - NULL, NULL, 0); + internet = InternetOpen (lpszAgent, proxy.type(), proxy.string(), proxy.bypass(), 0); } DWORD flags = @@ -171,7 +169,7 @@ NetIO (_url) flags |= INTERNET_FLAG_RESYNCHRONIZE; } - connection = InternetOpenUrl (*internet, url, NULL, 0, flags, 0); + connection = InternetOpenUrl (internet, url, NULL, 0, flags, 0); try_again: diff --git a/nio-ie5.h b/nio-ie5.h index 9a66e2a..a1ee90d 100644 --- a/nio-ie5.h +++ b/nio-ie5.h @@ -22,7 +22,7 @@ class NetIO_IE5:public NetIO { HINTERNET connection; public: - NetIO_IE5 (char const *url, bool direct, bool cacheable); + NetIO_IE5 (char const *url, bool cacheable); ~NetIO_IE5 (); virtual int ok (); virtual int read (char *buf, int nbytes); -- 2.14.3