This is the mail archive of the cygwin-apps mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH setup 5/5] Remove NetIO_HTTP


---
 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 <dj@cygnus.com>
- *
- */
-
-/* This file is responsible for implementing all direct HTTP protocol
-   channels.  It is intentionally simplistic. */
-
-#include "win32.h"
-#include <winsock2.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#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 <dj@cygnus.com>
- *
- */
-
-#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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]