aboutsummaryrefslogtreecommitdiff
path: root/libjava/classpath/gnu/java/net
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2016-09-30 16:24:48 +0000
committerAndrew Haley <aph@gcc.gnu.org>2016-09-30 16:24:48 +0000
commit07b78716af6a9d7c9fd1e94d9baf94a52c873947 (patch)
tree3f22b3241c513ad168c8353805614ae1249410f4 /libjava/classpath/gnu/java/net
parenteae993948bae8b788c53772bcb9217c063716f93 (diff)
downloadgcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.zip
gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.gz
gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.bz2
Makefile.def: Remove libjava.
2016-09-30 Andrew Haley <aph@redhat.com> * Makefile.def: Remove libjava. * Makefile.tpl: Likewise. * Makefile.in: Regenerate. * configure.ac: Likewise. * configure: Likewise. * gcc/java: Remove. * libjava: Likewise. From-SVN: r240662
Diffstat (limited to 'libjava/classpath/gnu/java/net')
-rw-r--r--libjava/classpath/gnu/java/net/CRLFInputStream.java178
-rw-r--r--libjava/classpath/gnu/java/net/CRLFOutputStream.java182
-rw-r--r--libjava/classpath/gnu/java/net/DefaultContentHandlerFactory.java94
-rw-r--r--libjava/classpath/gnu/java/net/DefaultProxySelector.java80
-rw-r--r--libjava/classpath/gnu/java/net/EmptyX509TrustManager.java69
-rw-r--r--libjava/classpath/gnu/java/net/GetLocalHostAction.java64
-rw-r--r--libjava/classpath/gnu/java/net/HeaderFieldHelper.java136
-rw-r--r--libjava/classpath/gnu/java/net/IndexListParser.java183
-rw-r--r--libjava/classpath/gnu/java/net/LineInputStream.java223
-rw-r--r--libjava/classpath/gnu/java/net/PlainDatagramSocketImpl.java486
-rw-r--r--libjava/classpath/gnu/java/net/PlainSocketImpl.java678
-rw-r--r--libjava/classpath/gnu/java/net/URLParseError.java57
-rw-r--r--libjava/classpath/gnu/java/net/loader/FileResource.java82
-rw-r--r--libjava/classpath/gnu/java/net/loader/FileURLLoader.java145
-rw-r--r--libjava/classpath/gnu/java/net/loader/JarURLLoader.java215
-rw-r--r--libjava/classpath/gnu/java/net/loader/JarURLResource.java94
-rw-r--r--libjava/classpath/gnu/java/net/loader/RemoteResource.java78
-rw-r--r--libjava/classpath/gnu/java/net/loader/RemoteURLLoader.java101
-rw-r--r--libjava/classpath/gnu/java/net/loader/Resource.java110
-rw-r--r--libjava/classpath/gnu/java/net/loader/URLLoader.java148
-rw-r--r--libjava/classpath/gnu/java/net/loader/URLStreamHandlerCache.java85
-rw-r--r--libjava/classpath/gnu/java/net/local/LocalServerSocket.java171
-rw-r--r--libjava/classpath/gnu/java/net/local/LocalSocket.java312
-rw-r--r--libjava/classpath/gnu/java/net/local/LocalSocketAddress.java100
-rw-r--r--libjava/classpath/gnu/java/net/local/LocalSocketImpl.java334
-rw-r--r--libjava/classpath/gnu/java/net/package.html46
-rw-r--r--libjava/classpath/gnu/java/net/protocol/file/Connection.java376
-rw-r--r--libjava/classpath/gnu/java/net/protocol/file/Handler.java91
-rw-r--r--libjava/classpath/gnu/java/net/protocol/file/package.html46
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/ActiveModeDTP.java251
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/BlockInputStream.java149
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/BlockOutputStream.java110
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/CompressedInputStream.java214
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/CompressedOutputStream.java227
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/DTP.java91
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/DTPInputStream.java87
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/DTPOutputStream.java85
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java1352
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/FTPException.java75
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/FTPResponse.java111
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/FTPURLConnection.java375
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/Handler.java69
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/PassiveModeDTP.java200
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/StreamInputStream.java94
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/StreamOutputStream.java84
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/package.html60
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/Authenticator.java58
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java106
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/ChunkedInputStream.java223
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/Cookie.java161
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/CookieManager.java65
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/Credentials.java87
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/HTTPConnection.java897
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/HTTPDateFormat.java440
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java693
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/Handler.java72
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/Headers.java424
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/LimitedLengthInputStream.java216
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/Request.java857
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/RequestBodyWriter.java68
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/Response.java223
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/ResponseHeaderHandler.java56
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/SimpleCookieManager.java137
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/package.html76
-rw-r--r--libjava/classpath/gnu/java/net/protocol/https/Handler.java75
-rw-r--r--libjava/classpath/gnu/java/net/protocol/jar/Connection.java232
-rw-r--r--libjava/classpath/gnu/java/net/protocol/jar/Handler.java217
-rw-r--r--libjava/classpath/gnu/java/net/protocol/jar/package.html46
68 files changed, 0 insertions, 14027 deletions
diff --git a/libjava/classpath/gnu/java/net/CRLFInputStream.java b/libjava/classpath/gnu/java/net/CRLFInputStream.java
deleted file mode 100644
index 5e394ae..0000000
--- a/libjava/classpath/gnu/java/net/CRLFInputStream.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/* CRLFInputStream.java --
- Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * An input stream that filters out CR/LF pairs into LFs.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class CRLFInputStream
- extends InputStream
-{
- /**
- * The CR octet.
- */
- public static final int CR = 13;
-
- /**
- * The LF octet.
- */
- public static final int LF = 10;
-
- /**
- * The underlying input stream.
- */
- protected InputStream in;
-
- private boolean doReset;
-
- /**
- * Constructs a CR/LF input stream connected to the specified input
- * stream.
- */
- public CRLFInputStream(InputStream in)
- {
- this.in = in.markSupported() ? in : new BufferedInputStream(in);
- }
-
- /**
- * Reads the next byte of data from this input stream.
- * Returns -1 if the end of the stream has been reached.
- * @exception IOException if an I/O error occurs
- */
- public int read()
- throws IOException
- {
- int c = in.read();
- if (c == CR)
- {
- in.mark(1);
- int d = in.read();
- if (d == LF)
- {
- c = d;
- }
- else
- {
- in.reset();
- }
- }
- return c;
- }
-
- /**
- * Reads up to b.length bytes of data from this input stream into
- * an array of bytes.
- * Returns -1 if the end of the stream has been reached.
- * @exception IOException if an I/O error occurs
- */
- public int read(byte[] b)
- throws IOException
- {
- return read(b, 0, b.length);
- }
-
- /**
- * Reads up to len bytes of data from this input stream into an
- * array of bytes, starting at the specified offset.
- * Returns -1 if the end of the stream has been reached.
- * @exception IOException if an I/O error occurs
- */
- public int read(byte[] b, int off, int len)
- throws IOException
- {
- in.mark(len + 1);
- int l = in.read(b, off, len);
- if (l > 0)
- {
- int i = indexOfCRLF(b, off, l);
- if (doReset)
- {
- in.reset();
- if (i != -1)
- {
- l = in.read(b, off, (i + 1) - off); // read to CR
- in.read(); // skip LF
- b[i] = LF; // fix CR as LF
- }
- else
- {
- l = in.read(b, off, len); // CR(s) but no LF
- }
- }
- }
- return l;
- }
-
- private int indexOfCRLF(byte[] b, int off, int len)
- throws IOException
- {
- doReset = false;
- int end = off + len;
- int em1 = end - 1;
- for (int i = off; i < end; i++)
- {
- if (b[i] == CR)
- {
- int d;
- if (i == em1)
- {
- d = in.read();
- doReset = true;
- }
- else
- {
- d = b[i + 1];
- }
- if (d == LF)
- {
- doReset = true;
- return i;
- }
- }
- }
- return -1;
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/CRLFOutputStream.java b/libjava/classpath/gnu/java/net/CRLFOutputStream.java
deleted file mode 100644
index 0e94283..0000000
--- a/libjava/classpath/gnu/java/net/CRLFOutputStream.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/* CRLFOutputStream.java --
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-
-/**
- * An output stream that filters LFs into CR/LF pairs.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class CRLFOutputStream
- extends FilterOutputStream
-{
- static final String US_ASCII = "US-ASCII";
-
- /**
- * The CR octet.
- */
- public static final int CR = 13;
-
- /**
- * The LF octet.
- */
- public static final int LF = 10;
-
- /**
- * The CR/LF pair.
- */
- public static final byte[] CRLF = { CR, LF };
-
- /**
- * The last byte read.
- */
- protected int last;
-
- /**
- * Constructs a CR/LF output stream connected to the specified output stream.
- */
- public CRLFOutputStream(OutputStream out)
- {
- super(out);
- last = -1;
- }
-
- /**
- * Writes a character to the underlying stream.
- * @exception IOException if an I/O error occurred
- */
- public void write(int ch) throws IOException
- {
- if (ch == CR)
- {
- out.write(CRLF);
- }
- else if (ch == LF)
- {
- if (last != CR)
- {
- out.write(CRLF);
- }
- }
- else
- {
- out.write(ch);
- }
- last = ch;
- }
-
- /**
- * Writes a byte array to the underlying stream.
- * @exception IOException if an I/O error occurred
- */
- public void write(byte[] b)
- throws IOException
- {
- write(b, 0, b.length);
- }
-
- /**
- * Writes a portion of a byte array to the underlying stream.
- * @exception IOException if an I/O error occurred
- */
- public void write(byte[] b, int off, int len)
- throws IOException
- {
- int d = off;
- len += off;
- for (int i = off; i < len; i++)
- {
- switch (b[i])
- {
- case CR:
- out.write (b, d, i - d);
- out.write (CRLF, 0, 2);
- d = i + 1;
- break;
- case LF:
- if (last != CR)
- {
- out.write (b, d, i - d);
- out.write (CRLF, 0, 2);
- }
- d = i + 1;
- break;
- }
- last = b[i];
- }
- if (len - d > 0)
- {
- out.write (b, d, len - d);
- }
- }
-
- /**
- * Writes the specified ASCII string to the underlying stream.
- * @exception IOException if an I/O error occurred
- */
- public void write(String text)
- throws IOException
- {
- try
- {
- byte[] bytes = text.getBytes(US_ASCII);
- write(bytes, 0, bytes.length);
- }
- catch (UnsupportedEncodingException e)
- {
- throw new IOException("The US-ASCII encoding is not supported " +
- "on this system");
- }
- }
-
- /**
- * Writes a newline to the underlying stream.
- * @exception IOException if an I/O error occurred
- */
- public void writeln()
- throws IOException
- {
- out.write(CRLF, 0, 2);
- }
-}
diff --git a/libjava/classpath/gnu/java/net/DefaultContentHandlerFactory.java b/libjava/classpath/gnu/java/net/DefaultContentHandlerFactory.java
deleted file mode 100644
index 1d113b9..0000000
--- a/libjava/classpath/gnu/java/net/DefaultContentHandlerFactory.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/* DefaultContentHandlerFactory.java
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net;
-
-import java.io.IOException;
-import java.net.ContentHandler;
-import java.net.ContentHandlerFactory;
-import java.net.URLConnection;
-import java.util.Arrays;
-import java.util.HashSet;
-
-/** Content Handler for Image types, using the AWT Toolkit's image decoder. */
-class ImageHandler extends ContentHandler
-{
- static ImageHandler instance = new ImageHandler();
-
- public Object getContent(URLConnection urlc) throws IOException
- {
- // FIXME: implement using ImageIO
- // ClasspathToolkit tk = (ClasspathToolkit) Toolkit.getDefaultToolkit();
- // java.awt.image.ImageProducer ip = tk.createImageProducer(urlc.getURL());
- // return ip;
- return null;
- }
-}
-
-/**
- */
-public class DefaultContentHandlerFactory implements ContentHandlerFactory
-{
- /** For now, hard code the list of types that we assume should
- * be supported by the Toolkit. ClasspathToolkit should perhaps provide
- * an API to express what Image MIME types the Toolkit understands.
- */
- private static String[] known_image_types =
- {
- "image/bmp",
- "image/gif",
- "image/jpeg",
- "image/png",
- "image/tiff",
- "image/x-portable-anymap",
- "image/x-cmu-raster",
- "image/x-xbitmap",
- "image/x-xpixmap"
- };
-
- private static HashSet<String> imageTypes
- = new HashSet<String>(Arrays.asList(known_image_types));
-
- public ContentHandler createContentHandler(String mimeType)
- {
- if (imageTypes.contains(mimeType))
- return ImageHandler.instance;
- // Currently, only image types are handled.
- return null;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/DefaultProxySelector.java b/libjava/classpath/gnu/java/net/DefaultProxySelector.java
deleted file mode 100644
index f0215a0..0000000
--- a/libjava/classpath/gnu/java/net/DefaultProxySelector.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/* DefaultProxySelector.java --
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net;
-
-import java.io.IOException;
-import java.net.Proxy;
-import java.net.ProxySelector;
-import java.net.SocketAddress;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
-
-public final class DefaultProxySelector
- extends ProxySelector
-{
- private static final List<Proxy> proxies = new ArrayList<Proxy>();
-
- static
- {
- // The default proxy selector supports only direct connections.
- proxies.add(Proxy.NO_PROXY);
- }
-
- public DefaultProxySelector()
- {
- // Do nothing by default.
- }
-
- public void connectFailed(URI uri, SocketAddress sa, IOException ioe)
- {
- if (uri == null || sa == null || ioe == null)
- throw new IllegalArgumentException();
-
- // Do nothing by default.
- }
-
- public List<Proxy> select(URI uri)
- {
- if (uri == null)
- throw new IllegalArgumentException();
-
- return proxies;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/EmptyX509TrustManager.java b/libjava/classpath/gnu/java/net/EmptyX509TrustManager.java
deleted file mode 100644
index 466b49e..0000000
--- a/libjava/classpath/gnu/java/net/EmptyX509TrustManager.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* EmptyX509TrustManager.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net;
-
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.X509TrustManager;
-
-/**
- * Empty implementation of an X509 trust manager.
- * This implementation does not check any certificates in the chain.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class EmptyX509TrustManager
- implements X509TrustManager
-{
- public void checkClientTrusted(X509Certificate[] chain, String authType)
- throws CertificateException
- {
- }
-
- public void checkServerTrusted(X509Certificate[] chain, String authType)
- throws CertificateException
- {
- }
-
- public X509Certificate[] getAcceptedIssuers()
- {
- return new X509Certificate[0];
- }
-}
diff --git a/libjava/classpath/gnu/java/net/GetLocalHostAction.java b/libjava/classpath/gnu/java/net/GetLocalHostAction.java
deleted file mode 100644
index 1e18877..0000000
--- a/libjava/classpath/gnu/java/net/GetLocalHostAction.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/* GetLocalHostAction.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.security.PrivilegedAction;
-
-/**
- * Privileged action to retrieve the local host InetAddress.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class GetLocalHostAction
- implements PrivilegedAction<InetAddress>
-{
- public InetAddress run()
- {
- try
- {
- return InetAddress.getLocalHost();
- }
- catch (UnknownHostException e)
- {
- return null;
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/net/HeaderFieldHelper.java b/libjava/classpath/gnu/java/net/HeaderFieldHelper.java
deleted file mode 100644
index ca3b9d2..0000000
--- a/libjava/classpath/gnu/java/net/HeaderFieldHelper.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/* HeaderFieldHelper.java -- Helps manage headers fields
- Copyright (C) 1998, 2003 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Vector;
-
-/**
- * This class manages header field keys and values.
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- */
-public class HeaderFieldHelper
-{
- private Vector<String> headerFieldKeys;
- private Vector<String> headerFieldValues;
-
- public HeaderFieldHelper()
- {
- this (10);
- }
-
- public HeaderFieldHelper (int size)
- {
- headerFieldKeys = new Vector<String> (size);
- headerFieldValues = new Vector<String> (size);
- }
-
- public void addHeaderField (String key, String value)
- {
- headerFieldKeys.addElement (key);
- headerFieldValues.addElement (value);
- }
-
- public String getHeaderFieldKeyByIndex (int index)
- {
- String key = null;
-
- try
- {
- key = headerFieldKeys.elementAt (index);
- }
- catch (ArrayIndexOutOfBoundsException e)
- {
- }
-
- return key;
- }
-
- public String getHeaderFieldValueByIndex(int index)
- {
- String value = null;
-
- try
- {
- value = headerFieldValues.elementAt (index);
- }
- catch (ArrayIndexOutOfBoundsException e)
- {
- }
-
- return value;
- }
-
- public String getHeaderFieldValueByKey(String key)
- {
- String value = null;
-
- try
- {
- value = headerFieldValues.elementAt(headerFieldKeys.indexOf(key));
- }
- catch (ArrayIndexOutOfBoundsException e)
- {
- }
-
- return value;
- }
-
- public Map<String, String> getHeaderFields()
- {
- HashMap<String, String> headers = new HashMap<String, String>();
- int max = headerFieldKeys.size();
-
- for (int index = 0; index < max; index++)
- {
- headers.put(headerFieldKeys.elementAt(index),
- headerFieldValues.elementAt(index));
- }
-
- return headers;
- }
-
- public int getNumberOfEntries()
- {
- return headerFieldKeys.size();
- }
-
-} // class HeaderFieldHelper
diff --git a/libjava/classpath/gnu/java/net/IndexListParser.java b/libjava/classpath/gnu/java/net/IndexListParser.java
deleted file mode 100644
index bf274b1..0000000
--- a/libjava/classpath/gnu/java/net/IndexListParser.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/* IndexListParser.java --
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.Set;
-import java.util.jar.JarFile;
-
-/**
- * The INDEX.LIST file contains sections each separated by a blank line.
- * Each section defines the content of a jar, with a
- * header defining the jar file path name, followed by a list of paths.
- * The jar file paths are relative to the codebase of the root jar.
- *
- Specification
- index file : version-info blankline section*
- version-info : JarIndex-Version: version-number
- version-number : digit+{.digit+}*
- section : body blankline
- body : header name*
- header : char+.jar newline
- name : char+ newline
-
- * @author langel at redhat dot com
- */
-public class IndexListParser
-{
- public static final String JAR_INDEX_FILE = "META-INF/INDEX.LIST";
- public static final String JAR_INDEX_VERSION_KEY = "JarIndex-Version: ";
-
- double versionNumber;
- // Map each jar to the prefixes defined for the jar.
- // This is intentionally kept in insertion order.
- LinkedHashMap<URL, Set<String>> prefixes
- = new LinkedHashMap<URL, Set<String>>();
-
- /**
- * Parses the given jarfile's INDEX.LIST file if it exists.
- *
- * @param jarfile - the given jar file
- * @param baseJarURL - the codebase of the jar file
- * @param baseURL - the base url for the headers
- */
- public IndexListParser(JarFile jarfile, URL baseJarURL, URL baseURL)
- {
- try
- {
- // Parse INDEX.LIST if it exists
- if (jarfile.getEntry(JAR_INDEX_FILE) != null)
- {
- BufferedReader br = new BufferedReader(new InputStreamReader(new URL(baseJarURL,
- JAR_INDEX_FILE).openStream()));
-
- // Must start with version info
- String line = br.readLine();
- if (!line.startsWith(JAR_INDEX_VERSION_KEY))
- return;
- versionNumber = Double.parseDouble(line.substring(JAR_INDEX_VERSION_KEY.length()).trim());
-
- // Blank line must be next
- line = br.readLine();
- if (! "".equals(line))
- {
- clearAll();
- return;
- }
-
- // May contain sections.
- while ((line = br.readLine()) != null)
- {
- URL jarURL = new URL(baseURL, line);
- HashSet<String> values = new HashSet<String>();
-
- // Read the names in the section.
- while ((line = br.readLine()) != null)
- {
- // Stop at section boundary.
- if ("".equals(line))
- break;
- values.add(line.trim());
- }
- prefixes.put(jarURL, values);
- // Might have seen an early EOF.
- if (line == null)
- break;
- }
-
- br.close();
- }
- else
- {
- // INDEX.LIST does not exist
- clearAll();
- }
- }
- catch (Exception ex)
- {
- clearAll();
- }
- }
-
- /**
- * Clears all the variables. This is called when parsing fails.
- */
- void clearAll()
- {
- versionNumber = 0;
- prefixes = null;
- }
-
- /**
- * Gets the version info for the file.
- *
- * @return the version info.
- */
- public String getVersionInfo()
- {
- return JAR_INDEX_VERSION_KEY + getVersionNumber();
- }
-
- /**
- * Gets the version number of the file.
- *
- * @return the version number.
- */
- public double getVersionNumber()
- {
- return versionNumber;
- }
-
- /**
- * Gets the map of all the headers found in the file.
- * The keys in the map are URLs of jars. The values in the map
- * are Sets of package prefixes (and top-level file names), as
- * specifed in INDEX.LIST.
- *
- * @return an map of all the headers, or null if no INDEX.LIST was found
- */
- public LinkedHashMap<URL, Set<String>> getHeaders()
- {
- return prefixes;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/LineInputStream.java b/libjava/classpath/gnu/java/net/LineInputStream.java
deleted file mode 100644
index 8bd4b69..0000000
--- a/libjava/classpath/gnu/java/net/LineInputStream.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/* LineInputStream.java --
- Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * An input stream that can read lines of input.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class LineInputStream
- extends InputStream
-{
-
- /**
- * The underlying input stream.
- */
- protected InputStream in;
-
- /*
- * Line buffer.
- */
- private ByteArrayOutputStream buf;
-
- /*
- * Encoding to use when translating bytes to characters.
- */
- private String encoding;
-
- /*
- * End-of-stream flag.
- */
- private boolean eof;
-
- /**
- * Whether we can use block reads.
- */
- private final boolean blockReads;
-
- /**
- * Constructor using the US-ASCII character encoding.
- * @param in the underlying input stream
- */
- public LineInputStream(InputStream in)
- {
- this(in, "US-ASCII");
- }
-
- /**
- * Constructor.
- * @param in the underlying input stream
- * @param encoding the character encoding to use
- */
- public LineInputStream(InputStream in, String encoding)
- {
- this.in = in;
- buf = new ByteArrayOutputStream();
- this.encoding = encoding;
- eof = false;
- // If it is already buffered, additional buffering gains nothing.
- blockReads = !(in instanceof BufferedInputStream) && in.markSupported();
- }
-
- public int read()
- throws IOException
- {
- return in.read();
- }
-
- public int read(byte[] buf)
- throws IOException
- {
- return in.read(buf);
- }
-
- public int read(byte[] buf, int off, int len)
- throws IOException
- {
- return in.read(buf, off, len);
- }
-
- /**
- * Read a line of input.
- */
- public String readLine()
- throws IOException
- {
- if (eof)
- {
- return null;
- }
- do
- {
- if (blockReads)
- {
- // Use mark and reset to read chunks of bytes
- final int MAX_LENGTH = 1024;
- int len, pos;
-
- len = in.available();
- if (len == 0 || len > MAX_LENGTH)
- len = MAX_LENGTH;
- byte[] b = new byte[len];
- in.mark(len);
- // Read into buffer b
- len = in.read(b, 0, len);
- // Handle EOF
- if (len == -1)
- {
- eof = true;
- if (buf.size() == 0)
- {
- return null;
- }
- else
- {
- // We don't care about resetting buf
- return buf.toString(encoding);
- }
- }
- // Get index of LF in b
- pos = indexOf(b, len, (byte) 0x0a);
- if (pos != -1)
- {
- // Write pos bytes to buf
- buf.write(b, 0, pos);
- // Reset stream, and read pos + 1 bytes
- in.reset();
- pos += 1;
- while (pos > 0)
- {
- len = in.read(b, 0, pos);
- pos = (len == -1) ? -1 : pos - len;
- }
- // Return line
- String ret = buf.toString(encoding);
- buf.reset();
- return ret;
- }
- else
- {
- // Append everything to buf and fall through to re-read.
- buf.write(b, 0, len);
- }
- }
- else
- {
- // We must use character reads in order not to read too much
- // from the underlying stream.
- int c = in.read();
- switch (c)
- {
- case -1:
- eof = true;
- if (buf.size() == 0)
- {
- return null;
- }
- // Fall through and return contents of buffer.
- case 0x0a: // LF
- String ret = buf.toString(encoding);
- buf.reset();
- return ret;
- default:
- buf.write(c);
- }
- }
- }
- while (true);
- }
-
- private int indexOf(byte[] b, int len, byte c)
- {
- for (int pos = 0; pos < len; pos++)
- {
- if (b[pos] == c)
- {
- return pos;
- }
- }
- return -1;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/PlainDatagramSocketImpl.java b/libjava/classpath/gnu/java/net/PlainDatagramSocketImpl.java
deleted file mode 100644
index 639c9ff..0000000
--- a/libjava/classpath/gnu/java/net/PlainDatagramSocketImpl.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/* PlainDatagramSocketImpl.java -- Default DatagramSocket implementation
- Copyright (C) 1998, 1999, 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net;
-
-import gnu.java.nio.VMChannel;
-
-import java.io.IOException;
-import java.io.InterruptedIOException;
-import java.net.DatagramPacket;
-import java.net.DatagramSocketImpl;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.NetworkInterface;
-import java.net.SocketAddress;
-import java.net.SocketException;
-import java.net.SocketTimeoutException;
-import java.nio.ByteBuffer;
-
-/**
- * Written using on-line Java Platform 1.2 API Specification, as well
- * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
- * Status: Believed complete and correct.
- */
-
-/**
- * This is the default socket implementation for datagram sockets.
- * It makes native calls to C routines that implement BSD style
- * SOCK_DGRAM sockets in the AF_INET family.
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- * @author Warren Levy (warrenl@cygnus.com)
- */
-public final class PlainDatagramSocketImpl extends DatagramSocketImpl
-{
- private final VMChannel channel;
-
- /**
- * The platform-specific socket implementation.
- */
- private final VMPlainSocketImpl impl;
-
- /**
- * Lock object to serialize threads wanting to receive
- */
- private final Object RECEIVE_LOCK = new Object();
-
- /**
- * Lock object to serialize threads wanting to send
- */
- private final Object SEND_LOCK = new Object();
-
- /**
- * Default do nothing constructor
- */
- public PlainDatagramSocketImpl() throws IOException
- {
- channel = new VMChannel();
- impl = new VMPlainSocketImpl(channel);
- }
-
- /*protected void finalize() throws Throwable
- {
- synchronized (this)
- {
- if (channel.getState().isValid())
- close();
- }
- super.finalize();
- }*/
-
- /*public int getNativeFD()
- {
- return native_fd;
- }*/
-
- /**
- * Binds this socket to a particular port and interface
- *
- * @param port The port to bind to
- * @param addr The address to bind to
- *
- * @exception SocketException If an error occurs
- */
- protected synchronized void bind(int port, InetAddress addr)
- throws SocketException
- {
- try
- {
- impl.bind(new InetSocketAddress(addr, port));
- }
- catch (SocketException se)
- {
- throw se;
- }
- catch (IOException ioe)
- {
- SocketException se = new SocketException();
- se.initCause(ioe);
- throw se;
- }
- }
-
- /**
- * Creates a new datagram socket
- *
- * @exception SocketException If an error occurs
- */
- protected synchronized void create() throws SocketException
- {
- try
- {
- channel.initSocket(false);
- }
- catch (SocketException se)
- {
- throw se;
- }
- catch (IOException ioe)
- {
- SocketException se = new SocketException();
- se.initCause(ioe);
- throw se;
- }
- }
-
- /**
- * Connects to the remote address and port specified as arguments.
- *
- * @param addr The remote address to connect to
- * @param port The remote port to connect to
- *
- * @exception SocketException If an error occurs
- */
- protected void connect(InetAddress addr, int port) throws SocketException
- {
- channel.connect(new InetSocketAddress(addr, port), 0);
- }
-
- /**
- * Disconnects the socket.
- *
- * @since 1.4
- */
- protected void disconnect()
- {
- synchronized (this)
- {
- try
- {
- if (channel.getState().isValid())
- channel.disconnect();
- }
- catch (IOException ioe)
- {
- }
- }
- }
-
- /**
- * Sets the Time to Live value for the socket
- *
- * @param ttl The new TTL value
- *
- * @exception IOException If an error occurs
- */
- protected synchronized void setTimeToLive(int ttl) throws IOException
- {
- impl.setTimeToLive(ttl);
- }
-
- /**
- * Gets the Time to Live value for the socket
- *
- * @return The TTL value
- *
- * @exception IOException If an error occurs
- */
- protected synchronized int getTimeToLive() throws IOException
- {
- return impl.getTimeToLive();
- }
-
- protected int getLocalPort()
- {
- if (channel == null)
- return -1;
-
- try
- {
- InetSocketAddress local = channel.getLocalAddress();
- if (local == null)
- return -1;
- return local.getPort();
- }
- catch (IOException ioe)
- {
- return -1;
- }
- }
-
- /**
- * Sends a packet of data to a remote host
- *
- * @param packet The packet to send
- *
- * @exception IOException If an error occurs
- */
- protected void send(DatagramPacket packet) throws IOException
- {
- synchronized (SEND_LOCK)
- {
- ByteBuffer buf = ByteBuffer.wrap(packet.getData(),
- packet.getOffset(),
- packet.getLength());
- InetAddress remote = packet.getAddress();
- int port = packet.getPort();
- if (remote == null)
- throw new NullPointerException();
- if (port <= 0)
- throw new SocketException("invalid port " + port);
- while (true)
- {
- try
- {
- channel.send(buf, new InetSocketAddress(remote, port));
- break;
- }
- catch (InterruptedIOException ioe)
- {
- // Ignore; interrupted system call.
- }
- }
- }
- }
-
- /**
- * Receives a UDP packet from the network
- *
- * @param packet The packet to fill in with the data received
- *
- * @exception IOException IOException If an error occurs
- */
- protected void receive(DatagramPacket packet)
- throws IOException
- {
- synchronized(RECEIVE_LOCK)
- {
- ByteBuffer buf = ByteBuffer.wrap(packet.getData(),
- packet.getOffset(),
- packet.getLength());
- SocketAddress addr = null;
- while (true)
- {
- try
- {
- addr = channel.receive(buf);
- break;
- }
- catch (SocketTimeoutException ste)
- {
- throw ste;
- }
- catch (InterruptedIOException iioe)
- {
- // Ignore. Loop.
- }
- }
- if (addr != null)
- packet.setSocketAddress(addr);
- packet.setLength(buf.position() - packet.getOffset());
- }
- }
-
-
- /**
- * Sets the value of an option on the socket
- *
- * @param optionId The identifier of the option to set
- * @param value The value of the option to set
- *
- * @exception SocketException If an error occurs
- */
- public synchronized void setOption(int optionId, Object value)
- throws SocketException
- {
- switch (optionId)
- {
- case IP_MULTICAST_IF:
- case IP_MULTICAST_IF2:
- impl.setMulticastInterface(optionId, (InetAddress) value);
- break;
-
- case IP_MULTICAST_LOOP:
- case SO_BROADCAST:
- case SO_KEEPALIVE:
- case SO_OOBINLINE:
- case TCP_NODELAY:
- case IP_TOS:
- case SO_LINGER:
- case SO_RCVBUF:
- case SO_SNDBUF:
- case SO_TIMEOUT:
- case SO_REUSEADDR:
- impl.setOption(optionId, value);
- return;
-
- default:
- throw new SocketException("cannot set option " + optionId);
- }
- }
-
- /**
- * Retrieves the value of an option on the socket
- *
- * @param optionId The identifier of the option to retrieve
- *
- * @return The value of the option
- *
- * @exception SocketException If an error occurs
- */
- public synchronized Object getOption(int optionId)
- throws SocketException
- {
- if (optionId == SO_BINDADDR)
- {
- try
- {
- InetSocketAddress local = channel.getLocalAddress();
- if (local == null)
- return null;
- return local.getAddress();
- }
- catch (SocketException se)
- {
- throw se;
- }
- catch (IOException ioe)
- {
- SocketException se = new SocketException();
- se.initCause(ioe);
- throw se;
- }
- }
- if (optionId == IP_MULTICAST_IF || optionId == IP_MULTICAST_IF2)
- return impl.getMulticastInterface(optionId);
-
- return impl.getOption(optionId);
- }
-
- /**
- * Closes the socket
- */
- protected synchronized void close()
- {
- try
- {
- if (channel.getState().isValid())
- channel.close();
- }
- catch (IOException ioe)
- {
- }
- }
-
- /**
- * Gets the Time to Live value for the socket
- *
- * @return The TTL value
- *
- * @exception IOException If an error occurs
- *
- * @deprecated 1.2
- */
- protected synchronized byte getTTL() throws IOException
- {
- return (byte) getTimeToLive();
- }
-
- /**
- * Sets the Time to Live value for the socket
- *
- * @param ttl The new TTL value
- *
- * @exception IOException If an error occurs
- *
- * @deprecated 1.2
- */
- protected synchronized void setTTL(byte ttl) throws IOException
- {
- setTimeToLive(((int) ttl) & 0xFF);
- }
-
- /**
- * Joins a multicast group
- *
- * @param addr The group to join
- *
- * @exception IOException If an error occurs
- */
- protected synchronized void join(InetAddress addr) throws IOException
- {
- impl.join(addr);
- }
-
- /**
- * Leaves a multicast group
- *
- * @param addr The group to leave
- *
- * @exception IOException If an error occurs
- */
- protected synchronized void leave(InetAddress addr) throws IOException
- {
- impl.leave(addr);
- }
-
- /**
- * What does this method really do?
- */
- protected synchronized int peek(InetAddress addr) throws IOException
- {
- throw new IOException("Not Implemented Yet");
- }
-
- public int peekData(DatagramPacket packet)
- {
- throw new InternalError
- ("PlainDatagramSocketImpl::peekData is not implemented");
- }
-
- public void joinGroup(SocketAddress address, NetworkInterface netIf)
- throws IOException
- {
- if (address == null)
- throw new NullPointerException();
- if (!(address instanceof InetSocketAddress))
- throw new SocketException("unknown address type");
- impl.joinGroup((InetSocketAddress) address, netIf);
- }
-
- public void leaveGroup(SocketAddress address, NetworkInterface netIf)
- throws IOException
- {
- if (address == null)
- throw new NullPointerException();
- if (!(address instanceof InetSocketAddress))
- throw new SocketException("unknown address type");
- impl.leaveGroup((InetSocketAddress) address, netIf);
- }
-}
diff --git a/libjava/classpath/gnu/java/net/PlainSocketImpl.java b/libjava/classpath/gnu/java/net/PlainSocketImpl.java
deleted file mode 100644
index 72db531..0000000
--- a/libjava/classpath/gnu/java/net/PlainSocketImpl.java
+++ /dev/null
@@ -1,678 +0,0 @@
-/* PlainSocketImpl.java -- Default socket implementation
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net;
-
-import gnu.java.nio.SocketChannelImpl;
-import gnu.java.nio.VMChannel;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.InterruptedIOException;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.net.SocketException;
-import java.net.SocketImpl;
-import java.net.SocketTimeoutException;
-import java.nio.ByteBuffer;
-
-/**
- * Written using on-line Java Platform 1.2 API Specification, as well
- * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
- * Status: Believed complete and correct.
- */
-
-/**
- * Unless the application installs its own SocketImplFactory, this is the
- * default socket implemetation that will be used. It simply uses a
- * combination of Java and native routines to implement standard BSD
- * style sockets of family AF_INET and types SOCK_STREAM and SOCK_DGRAM
- *
- * @author Per Bothner (bothner@cygnus.com)
- * @author Nic Ferrier (nferrier@tapsellferrier.co.uk)
- * @author Aaron M. Renn (arenn@urbanophile.com)
- */
-public class PlainSocketImpl extends SocketImpl
-{
-
- /**
- * The underlying plain socket VM implementation.
- */
- protected VMPlainSocketImpl impl;
-
- /**
- * A cached copy of the in stream for reading from the socket.
- */
- private InputStream in;
-
- /**
- * A cached copy of the out stream for writing to the socket.
- */
- private OutputStream out;
-
- /**
- * Indicates whether a channel initiated whatever operation
- * is being invoked on this socket.
- */
- private boolean inChannelOperation;
-
- /**
- * The socket channel we use for IO operation. Package-private for
- * use by inner classes.
- */
- SocketChannelImpl channel;
-
- /**
- * Indicates whether we should ignore whether any associated
- * channel is set to non-blocking mode. Certain operations
- * throw an <code>IllegalBlockingModeException</code> if the
- * associated channel is in non-blocking mode, <i>except</i>
- * if the operation is invoked by the channel itself.
- */
- public final boolean isInChannelOperation()
- {
- return inChannelOperation;
- }
-
- /**
- * Sets our indicator of whether an I/O operation is being
- * initiated by a channel.
- */
- public final void setInChannelOperation(boolean b)
- {
- inChannelOperation = b;
- }
-
- /**
- * Default do nothing constructor.
- */
- public PlainSocketImpl()
- {
- this.impl = new VMPlainSocketImpl();
- }
-
- /**
- * Sets the specified option on a socket to the passed in object. For
- * options that take an integer argument, the passed in object is an
- * Integer. The option_id parameter is one of the defined constants in
- * this interface.
- *
- * @param optionId The identifier of the option
- * @param value The value to set the option to
- *
- * @throws SocketException if an error occurs
- */
- public void setOption(int optionId, Object value) throws SocketException
- {
- switch (optionId)
- {
- case SO_LINGER:
- case IP_MULTICAST_LOOP:
- case SO_BROADCAST:
- case SO_KEEPALIVE:
- case SO_OOBINLINE:
- case TCP_NODELAY:
- case IP_TOS:
- case SO_RCVBUF:
- case SO_SNDBUF:
- case SO_TIMEOUT:
- case SO_REUSEADDR:
- impl.setOption(optionId, value);
- return;
- default:
- throw new SocketException("Unrecognized TCP option: " + optionId);
- }
- }
-
- /**
- * Returns the current setting of the specified option. The Object returned
- * will be an Integer for options that have integer values. The option_id
- * is one of the defined constants in this interface.
- *
- * @param optionId the option identifier
- *
- * @return the current value of the option
- *
- * @throws SocketException if an error occurs
- */
- public Object getOption(int optionId) throws SocketException
- {
- if (optionId == SO_BINDADDR)
- {
- try
- {
- return channel.getVMChannel().getLocalAddress().getAddress();
- }
- catch (IOException ioe)
- {
- SocketException se = new SocketException();
- se.initCause(ioe);
- throw se;
- }
- }
-
- // This filters options which are invalid for TCP.
- switch (optionId)
- {
- case SO_LINGER:
- case IP_MULTICAST_LOOP:
- case SO_BROADCAST:
- case SO_KEEPALIVE:
- case SO_OOBINLINE:
- case TCP_NODELAY:
- case IP_TOS:
- case SO_RCVBUF:
- case SO_SNDBUF:
- case SO_TIMEOUT:
- case SO_REUSEADDR:
- return impl.getOption(optionId);
- default:
- throw new SocketException("Unrecognized TCP option: " + optionId);
- }
-
- }
-
- public void shutdownInput() throws IOException
- {
- impl.shutdownInput();
- }
-
- public void shutdownOutput() throws IOException
- {
- impl.shutdownOutput();
- }
-
- /**
- * Creates a new socket that is not bound to any local address/port and
- * is not connected to any remote address/port. The stream parameter will be
- * ignored since PlainSocketImpl always is a stream socket. Datagram sockets
- * are handled by PlainDatagramSocketImpl.
- *
- * @param stream <code>true</code> for stream sockets, <code>false</code> for
- * datagram sockets
- */
- protected synchronized void create(boolean stream) throws IOException
- {
- channel = new SocketChannelImpl(false);
- VMChannel vmchannel = channel.getVMChannel();
- vmchannel.initSocket(stream);
- channel.configureBlocking(true);
- impl.getState().setChannelFD(vmchannel.getState());
- }
-
- /**
- * Connects to the remote hostname and port specified as arguments.
- *
- * @param hostname the remote hostname to connect to
- * @param port the remote port to connect to
- *
- * @throws IOException If an error occurs
- */
- protected synchronized void connect(String hostname, int port)
- throws IOException
- {
- connect(InetAddress.getByName(hostname), port);
- }
-
- /**
- * Connects to the remote address and port specified as arguments.
- *
- * @param addr the remote address to connect to
- * @param port the remote port to connect to
- *
- * @throws IOException If an error occurs
- */
- protected void connect(InetAddress addr, int port) throws IOException
- {
- connect(new InetSocketAddress(addr, port), 0);
- }
-
- /**
- * Connects to the remote socket address with a specified timeout.
- *
- * @param address the remote address to connect to
- * @param timeout the timeout to use for this connect, 0 means infinite.
- *
- * @throws IOException If an error occurs
- */
- protected synchronized void connect(SocketAddress address, int timeout)
- throws IOException
- {
- if (channel == null)
- create(true);
- boolean connected = channel.connect(address, timeout);
- if (!connected)
- throw new SocketTimeoutException("connect timed out");
-
- // Using the given SocketAddress is important to preserve
- // hostnames given by the caller.
- InetSocketAddress addr = (InetSocketAddress) address;
- this.address = addr.getAddress();
- this.port = addr.getPort();
- }
-
- /**
- * Binds to the specified port on the specified addr. Note that this addr
- * must represent a local IP address. **** How bind to INADDR_ANY? ****
- *
- * @param addr the address to bind to
- * @param port the port number to bind to
- *
- * @throws IOException if an error occurs
- */
- protected synchronized void bind(InetAddress addr, int port)
- throws IOException
- {
- if (channel == null)
- create(true);
- impl.bind(new InetSocketAddress(addr, port));
- localport = channel.getVMChannel().getLocalAddress().getPort();
- }
-
- /**
- * Starts listening for connections on a socket. The queuelen parameter
- * is how many pending connections will queue up waiting to be serviced
- * before being accept'ed. If the queue of pending requests exceeds this
- * number, additional connections will be refused.
- *
- * @param queuelen The length of the pending connection queue
- *
- * @throws IOException If an error occurs
- */
- protected synchronized void listen(int queuelen)
- throws IOException
- {
- impl.listen(queuelen);
- }
-
- /**
- * Accepts a new connection on this socket and returns in in the
- * passed in SocketImpl.
- *
- * @param impl The SocketImpl object to accept this connection.
- */
- protected synchronized void accept(SocketImpl impl)
- throws IOException
- {
- if (channel == null)
- create(true);
- if (!(impl instanceof PlainSocketImpl))
- throw new IOException("incompatible SocketImpl: "
- + impl.getClass().getName());
- PlainSocketImpl that = (PlainSocketImpl) impl;
- VMChannel c = channel.getVMChannel().accept();
- that.impl.getState().setChannelFD(c.getState());
- that.channel = new SocketChannelImpl(c);
- that.setOption(SO_REUSEADDR, Boolean.TRUE);
- // Reset the inherited timeout.
- that.setOption(SO_TIMEOUT, Integer.valueOf(0));
-
- }
-
- /**
- * Returns the number of bytes that the caller can read from this socket
- * without blocking.
- *
- * @return the number of readable bytes before blocking
- *
- * @throws IOException if an error occurs
- */
- protected int available() throws IOException
- {
- if (channel == null)
- throw new SocketException("not connected");
- return channel.getVMChannel().available();
- }
-
- /**
- * Closes the socket. This will cause any InputStream or OutputStream
- * objects for this Socket to be closed as well.
- *
- * <p>
- * Note that if the SO_LINGER option is set on this socket, then the
- * operation could block.
- * </p>
- *
- * @throws IOException if an error occurs
- */
- protected void close() throws IOException
- {
- if (impl.getState().isValid())
- impl.close();
-
- address = null;
- port = -1;
- }
-
- public void sendUrgentData(int data) throws IOException
- {
- impl.sendUrgentData(data);
- }
-
- /**
- * Returns an InputStream object for reading from this socket. This will
- * be an instance of SocketInputStream.
- *
- * @return An input stream attached to the socket.
- *
- * @exception IOException If an error occurs
- */
- protected synchronized InputStream getInputStream() throws IOException
- {
- if (in == null)
- in = new SocketInputStream();
-
- return in;
- }
-
- /**
- * Returns an OutputStream object for writing to this socket. This will
- * be an instance of SocketOutputStream.
- *
- * @return An output stream attached to the socket.
- *
- * @exception IOException If an error occurs
- */
- protected synchronized OutputStream getOutputStream() throws IOException
- {
- if (out == null)
- out = new SocketOutputStream();
-
- return out;
- }
-
- public VMChannel getVMChannel()
- {
- if (channel == null)
- return null;
- return channel.getVMChannel();
- }
-
- /* (non-Javadoc)
- * @see java.net.SocketImpl#getInetAddress()
- */
- protected InetAddress getInetAddress()
- {
- if (channel == null)
- return null;
-
- try
- {
- InetSocketAddress remote = channel.getVMChannel().getPeerAddress();
- if (remote == null)
- return null;
- // To mimic behavior of the RI the InetAddress instance which was
- // used to establish the connection is returned instead of one that
- // was created by the native layer (this preserves exact hostnames).
- if (address != null)
- return address;
-
- return remote.getAddress();
- }
- catch (IOException ioe)
- {
- return null;
- }
- }
-
- /* (non-Javadoc)
- * @see java.net.SocketImpl#getLocalPort()
- */
- protected int getLocalPort()
- {
- if (channel == null)
- return -1;
- try
- {
- InetSocketAddress local = channel.getVMChannel().getLocalAddress();
- if (local == null)
- return -1;
- return local.getPort();
- }
- catch (IOException ioe)
- {
- return -1;
- }
- }
-
- public InetSocketAddress getLocalAddress()
- {
- if (channel == null)
- return null;
- try
- {
- return channel.getVMChannel().getLocalAddress();
- }
- catch (IOException ioe)
- {
- return null;
- }
- }
-
- /* (non-Javadoc)
- * @see java.net.SocketImpl#getPort()
- */
- protected int getPort()
- {
- if (channel == null)
- return -1;
-
- try
- {
- InetSocketAddress remote = channel.getVMChannel().getPeerAddress();
- if (remote == null)
- return -1;
- return remote.getPort();
- }
- catch (IOException ioe)
- {
- return -1;
- }
- }
-
- /**
- * This class contains an implementation of <code>InputStream</code> for
- * sockets. It in an internal only class used by <code>PlainSocketImpl</code>.
- *
- * @author Nic Ferrier <nferrier@tapsellferrier.co.uk>
- */
- final class SocketInputStream
- extends InputStream
- {
- /**
- * Returns the number of bytes available to be read before blocking
- */
- public int available() throws IOException
- {
- return PlainSocketImpl.this.available();
- }
-
- /**
- * This method not only closes the stream, it closes the underlying socket
- * (and thus any connection) and invalidates any other Input/Output streams
- * for the underlying impl object
- */
- public void close() throws IOException
- {
- PlainSocketImpl.this.close();
- }
-
- /**
- * Reads the next byte of data and returns it as an int.
- *
- * @return The byte read (as an int) or -1 if end of stream);
- *
- * @exception IOException If an error occurs.
- */
- public int read() throws IOException
- {
- if (channel == null)
- throw new SocketException("not connected");
- while (true)
- {
- try
- {
- return channel.getVMChannel().read();
- }
- catch (SocketTimeoutException ste)
- {
- throw ste;
- }
- catch (InterruptedIOException iioe)
- {
- // Ignore; NIO may throw this; net io shouldn't
- }
- }
- }
-
- /**
- * Reads up to len bytes of data into the caller supplied buffer starting
- * at offset bytes from the start of the buffer
- *
- * @param buf The buffer
- * @param offset Offset into the buffer to start reading from
- * @param len The number of bytes to read
- *
- * @return The number of bytes actually read or -1 if end of stream
- *
- * @exception IOException If an error occurs.
- */
- public int read (byte[] buf, int offset, int len) throws IOException
- {
- if (channel == null)
- throw new SocketException("not connected");
- ByteBuffer b = ByteBuffer.wrap(buf, offset, len);
- while (true)
- {
- try
- {
- return channel.read(b);
- }
- catch (SocketTimeoutException ste)
- {
- throw ste;
- }
- catch (InterruptedIOException iioe)
- {
- // Ignored; NIO may throw this; net IO not.
- }
- }
- }
- }
-
- /**
- * This class is used internally by <code>PlainSocketImpl</code> to be the
- * <code>OutputStream</code> subclass returned by its
- * <code>getOutputStream method</code>. It expects only to be used in that
- * context.
- *
- * @author Nic Ferrier <nferrier@tapsellferrier.co.uk>
- */
- final class SocketOutputStream
- extends OutputStream
- {
- /**
- * This method closes the stream and the underlying socket connection. This
- * action also effectively closes any other InputStream or OutputStream
- * object associated with the connection.
- *
- * @exception IOException If an error occurs
- */
- public void close() throws IOException
- {
- PlainSocketImpl.this.close();
- }
-
- /**
- * Writes a byte (passed in as an int) to the given output stream
- *
- * @param b The byte to write
- *
- * @exception IOException If an error occurs
- */
- public void write(int b) throws IOException
- {
- if (channel == null)
- throw new SocketException("not connected");
- while (true)
- {
- try
- {
- channel.getVMChannel().write(b);
- return;
- }
- catch (InterruptedIOException iioe)
- {
- // Ignored.
- }
- }
- }
-
- /**
- * Writes len number of bytes from the array buf to the stream starting
- * at offset bytes into the buffer.
- *
- * @param buf The buffer
- * @param offset Offset into the buffer to start writing from
- * @param len The number of bytes to write
- *
- * @exception IOException If an error occurs.
- */
- public void write (byte[] buf, int offset, int len) throws IOException
- {
- if (channel == null)
- throw new SocketException("not connected");
- ByteBuffer b = ByteBuffer.wrap(buf, offset, len);
- while (b.hasRemaining())
- {
- try
- {
- if (channel.write(b) == -1)
- throw new IOException("channel has been closed");
- }
- catch (InterruptedIOException iioe)
- {
- // Ignored.
- }
- }
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/net/URLParseError.java b/libjava/classpath/gnu/java/net/URLParseError.java
deleted file mode 100644
index 9090748..0000000
--- a/libjava/classpath/gnu/java/net/URLParseError.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* URLParseError.java -- Helps bypassing the exception limitation for
- URLStreamHandler.parseURL().
- Copyright (C) 2003 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.java.net;
-
-/**
- * This class helps the people writing protocols to report URL parse
- * errors in parseUrl as this method cannot report other exceptions
- * than Errors.
- *
- * The main drawback is that it uses the Error mechanism which should not
- * be used for that type of error reporting.
- *
- * @author Guilhem Lavaux (guilhem@kaffe.org)
- */
-public class URLParseError extends Error
-{
- public URLParseError(String msg)
- {
- super(msg);
- }
-}
diff --git a/libjava/classpath/gnu/java/net/loader/FileResource.java b/libjava/classpath/gnu/java/net/loader/FileResource.java
deleted file mode 100644
index 4715840..0000000
--- a/libjava/classpath/gnu/java/net/loader/FileResource.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/* FileResource.java -- a Resource for file URLs
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.loader;
-
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-public final class FileResource extends Resource
-{
- final File file;
-
- public FileResource(FileURLLoader loader, File file)
- {
- super(loader);
- this.file = file;
- }
-
- public InputStream getInputStream() throws IOException
- {
- return new FileInputStream(file);
- }
-
- public int getLength()
- {
- return (int) file.length();
- }
-
- public URL getURL()
- {
- try
- {
- return file.toURL();
- }
- catch (MalformedURLException e)
- {
- InternalError ie = new InternalError();
- ie.initCause(e);
- throw ie;
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/net/loader/FileURLLoader.java b/libjava/classpath/gnu/java/net/loader/FileURLLoader.java
deleted file mode 100644
index 58b6dcf..0000000
--- a/libjava/classpath/gnu/java/net/loader/FileURLLoader.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/* FileURLLoader.java -- a URLLoader for file URLs
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.loader;
-
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.net.URLStreamHandlerFactory;
-import java.util.StringTokenizer;
-
-/**
- * A <code>FileURLLoader</code> is a type of <code>URLLoader</code>
- * only loading from file url.
- */
-public final class FileURLLoader extends URLLoader
-{
- File dir; //the file for this file url
-
- public FileURLLoader(URLClassLoader classloader,
- URLStreamHandlerCache cache,
- URLStreamHandlerFactory factory,
- URL url, URL absoluteUrl)
- {
- super(classloader, cache, factory, url, absoluteUrl);
- dir = new File(absoluteUrl.getFile());
- }
-
- /** get resource with the name "name" in the file url */
- public Resource getResource(String name)
- {
- try
- {
- // Make sure that all components in name are valid by walking through
- // them
- File file = walkPathComponents(name);
-
- if (file == null)
- return null;
-
- return new FileResource(this, file);
- }
- catch (IOException e)
- {
- // Fall through...
- }
- return null;
- }
-
- /**
- * Walk all path tokens and check them for validity. At no moment, we are
- * allowed to reach a directory located "above" the root directory, stored
- * in "dir" property. We are also not allowed to enter a non existing
- * directory or a non directory component (plain file, symbolic link, ...).
- * An empty or null path is valid. Pathnames components are separated by
- * <code>File.separatorChar</code>
- *
- * @param resourceFileName the name to be checked for validity.
- * @return the canonical file pointed by the resourceFileName or null if the
- * walking failed
- * @throws IOException in case of issue when creating the canonical
- * resulting file
- * @see File#separatorChar
- */
- private File walkPathComponents(String resourceFileName) throws IOException
- {
- StringTokenizer stringTokenizer = new StringTokenizer(resourceFileName, File.separator);
- File currentFile = dir;
- int tokenCount = stringTokenizer.countTokens();
-
- for (int i = 0; i < tokenCount - 1; i++)
- {
- String currentToken = stringTokenizer.nextToken();
-
- // If we are at the root directory and trying to go up, the walking is
- // finished with an error
- if ("..".equals(currentToken) && currentFile.equals(dir))
- return null;
-
- currentFile = new File(currentFile, currentToken);
-
- // If the current file doesn't exist or is not a directory, the walking is
- // finished with an error
- if (! (currentFile.exists() && currentFile.isDirectory()))
- return null;
-
- }
-
- // Treat the last token differently, if it exists, because it does not need
- // to be a directory
- if (tokenCount > 0)
- {
- String currentToken = stringTokenizer.nextToken();
-
- if ("..".equals(currentToken) && currentFile.equals(dir))
- return null;
-
- currentFile = new File(currentFile, currentToken);
-
- // If the current file doesn't exist, the walking is
- // finished with an error
- if (! currentFile.exists())
- return null;
- }
-
- return currentFile.getCanonicalFile();
- }
-}
diff --git a/libjava/classpath/gnu/java/net/loader/JarURLLoader.java b/libjava/classpath/gnu/java/net/loader/JarURLLoader.java
deleted file mode 100644
index 6f06ad3..0000000
--- a/libjava/classpath/gnu/java/net/loader/JarURLLoader.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package gnu.java.net.loader;
-
-import gnu.java.net.IndexListParser;
-
-import java.io.IOException;
-import java.net.JarURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.net.URLStreamHandlerFactory;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.jar.Attributes;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
-
-/**
- * A <code>JarURLLoader</code> is a type of <code>URLLoader</code>
- * only loading from jar url.
- */
-public final class JarURLLoader extends URLLoader
-{
- // True if we've initialized -- i.e., tried open the jar file.
- boolean initialized;
- // The jar file for this url.
- JarFile jarfile;
- // Base jar: url for all resources loaded from jar.
- final URL baseJarURL;
- // The "Class-Path" attribute of this Jar's manifest.
- ArrayList<URLLoader> classPath;
- // If not null, a mapping from INDEX.LIST for this jar only.
- // This is a set of all prefixes and top-level files that
- // ought to be available in this jar.
- Set indexSet;
-
- // This constructor is used internally. It purposely does not open
- // the jar file -- it defers this until later. This allows us to
- // implement INDEX.LIST lazy-loading semantics.
- private JarURLLoader(URLClassLoader classloader, URLStreamHandlerCache cache,
- URLStreamHandlerFactory factory,
- URL baseURL, URL absoluteUrl,
- Set indexSet)
- {
- super(classloader, cache, factory, baseURL, absoluteUrl);
-
- URL newBaseURL = null;
- try
- {
- // Cache url prefix for all resources in this jar url.
- String base = baseURL.toExternalForm() + "!/";
- newBaseURL = new URL("jar", "", -1, base, cache.get(factory, "jar"));
- }
- catch (MalformedURLException ignore)
- {
- // Ignore.
- }
- this.baseJarURL = newBaseURL;
- this.classPath = null;
- this.indexSet = indexSet;
- }
-
- // This constructor is used by URLClassLoader. It will immediately
- // try to read the jar file, in case we've found an index or a class-path
- // setting. FIXME: it would be nice to defer this as well, but URLClassLoader
- // makes this hard.
- public JarURLLoader(URLClassLoader classloader, URLStreamHandlerCache cache,
- URLStreamHandlerFactory factory,
- URL baseURL, URL absoluteUrl)
- {
- this(classloader, cache, factory, baseURL, absoluteUrl, null);
- initialize();
- }
-
- private void initialize()
- {
- JarFile jarfile = null;
- try
- {
- jarfile =
- ((JarURLConnection) baseJarURL.openConnection()).getJarFile();
-
- Manifest manifest;
- Attributes attributes;
- String classPathString;
-
- IndexListParser parser = new IndexListParser(jarfile, baseJarURL,
- baseURL);
- LinkedHashMap<URL, Set<String>> indexMap = parser.getHeaders();
- if (indexMap != null)
- {
- // Note that the index also computes
- // the resulting Class-Path -- there are jars out there
- // where the index lists some required jars which do
- // not appear in the Class-Path attribute in the manifest.
- this.classPath = new ArrayList<URLLoader>();
- Iterator<Map.Entry<URL, Set<String>>> it = indexMap.entrySet().iterator();
- while (it.hasNext())
- {
- Map.Entry<URL, Set<String>> entry = it.next();
- URL subURL = entry.getKey();
- Set<String> prefixes = entry.getValue();
- if (subURL.equals(baseURL))
- this.indexSet = prefixes;
- else
- {
- JarURLLoader subLoader = new JarURLLoader(classloader,
- cache,
- factory, subURL,
- subURL,
- prefixes);
- // Note that we don't care if the sub-loader itself has an
- // index or a class-path -- only the top-level jar
- // file gets this treatment; its index should cover
- // everything.
- this.classPath.add(subLoader);
- }
- }
- }
- else if ((manifest = jarfile.getManifest()) != null
- && (attributes = manifest.getMainAttributes()) != null
- && ((classPathString
- = attributes.getValue(Attributes.Name.CLASS_PATH))
- != null))
- {
- this.classPath = new ArrayList<URLLoader>();
- StringTokenizer st = new StringTokenizer(classPathString, " ");
- while (st.hasMoreElements ())
- {
- String e = st.nextToken ();
- try
- {
- URL subURL = new URL(baseURL, e);
- // We've seen at least one jar file whose Class-Path
- // attribute includes the original jar. If we process
- // that normally we end up with infinite recursion.
- if (subURL.equals(baseURL))
- continue;
- JarURLLoader subLoader = new JarURLLoader(classloader,
- cache, factory,
- subURL, subURL);
- this.classPath.add(subLoader);
- ArrayList<URLLoader> extra = subLoader.getClassPath();
- if (extra != null)
- this.classPath.addAll(extra);
- }
- catch (java.net.MalformedURLException xx)
- {
- // Give up
- }
- }
- }
- }
- catch (IOException ioe)
- {
- /* ignored */
- }
-
- this.jarfile = jarfile;
- this.initialized = true;
- }
-
- /** get resource with the name "name" in the jar url */
- public Resource getResource(String name)
- {
- if (name.startsWith("/"))
- name = name.substring(1);
- if (indexSet != null)
- {
- // Trust the index.
- String basename = name;
- int offset = basename.lastIndexOf('/');
- if (offset != -1)
- basename = basename.substring(0, offset);
- if (! indexSet.contains(basename))
- return null;
- // FIXME: if the index claim to hold the resource, and jar file
- // doesn't have it, we're supposed to throw an exception. However,
- // in our model this is tricky to implement, as another URLLoader from
- // the same top-level jar may have an overlapping index entry.
- }
-
- if (! initialized)
- initialize();
- if (jarfile == null)
- return null;
-
- JarEntry je = jarfile.getJarEntry(name);
- if (je != null)
- return new JarURLResource(this, name, je);
- else
- return null;
- }
-
- public Manifest getManifest()
- {
- try
- {
- return (jarfile == null) ? null : jarfile.getManifest();
- }
- catch (IOException ioe)
- {
- return null;
- }
- }
-
- public ArrayList<URLLoader> getClassPath()
- {
- return classPath;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/loader/JarURLResource.java b/libjava/classpath/gnu/java/net/loader/JarURLResource.java
deleted file mode 100644
index 1dec92f..0000000
--- a/libjava/classpath/gnu/java/net/loader/JarURLResource.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/* JarURLResource.java -- a Resource for jar URLs
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.loader;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.security.cert.Certificate;
-import java.util.jar.JarEntry;
-
-public final class JarURLResource extends Resource
-{
- private final JarEntry entry;
- private final String name;
-
- public JarURLResource(JarURLLoader loader, String name, JarEntry entry)
- {
- super(loader);
- this.entry = entry;
- this.name = name;
- }
-
- public InputStream getInputStream() throws IOException
- {
- return ((JarURLLoader) loader).jarfile.getInputStream(entry);
- }
-
- public int getLength()
- {
- return (int) entry.getSize();
- }
-
- public Certificate[] getCertificates()
- {
- // We have to get the entry from the jar file again, because the
- // certificates will not be available until the entire entry has
- // been read.
- return ((JarEntry) ((JarURLLoader) loader).jarfile.getEntry(name))
- .getCertificates();
- }
-
- public URL getURL()
- {
- try
- {
- return new URL(((JarURLLoader) loader).baseJarURL, name,
- loader.cache.get(loader.factory, "jar"));
- }
- catch (MalformedURLException e)
- {
- InternalError ie = new InternalError();
- ie.initCause(e);
- throw ie;
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/net/loader/RemoteResource.java b/libjava/classpath/gnu/java/net/loader/RemoteResource.java
deleted file mode 100644
index dc33b66..0000000
--- a/libjava/classpath/gnu/java/net/loader/RemoteResource.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Resource.java -- a Resource for "remote" URLs
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.loader;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * A resource from some remote location.
- */
-public final class RemoteResource extends Resource
-{
- private final URL url;
- private final InputStream stream;
- final int length;
-
- public RemoteResource(RemoteURLLoader loader, String name, URL url,
- InputStream stream, int length)
- {
- super(loader);
- this.url = url;
- this.stream = stream;
- this.length = length;
- }
-
- public InputStream getInputStream() throws IOException
- {
- return stream;
- }
-
- public int getLength()
- {
- return length;
- }
-
- public URL getURL()
- {
- return url;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/loader/RemoteURLLoader.java b/libjava/classpath/gnu/java/net/loader/RemoteURLLoader.java
deleted file mode 100644
index 81ef34f..0000000
--- a/libjava/classpath/gnu/java/net/loader/RemoteURLLoader.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/* RemoteURLLoader.java -- a URLLoader for "remote" objects
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.loader;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.net.URLConnection;
-import java.net.URLStreamHandlerFactory;
-
-/**
- * Loader for remote directories.
- */
-public final class RemoteURLLoader extends URLLoader
-{
- private final String protocol;
-
- public RemoteURLLoader(URLClassLoader classloader,
- URLStreamHandlerCache cache,
- URLStreamHandlerFactory factory,
- URL url)
- {
- super(classloader, cache, factory, url);
- protocol = url.getProtocol();
- }
-
- /**
- * Get a remote resource.
- * Returns null if no such resource exists.
- */
- public Resource getResource(String name)
- {
- try
- {
- URL url = new URL(baseURL, name, cache.get(factory, protocol));
- URLConnection connection = url.openConnection();
-
- // Open the connection and check the stream
- // just to be sure it exists.
- int length = connection.getContentLength();
- InputStream stream = connection.getInputStream();
-
- // We can do some extra checking if it is a http request
- if (connection instanceof HttpURLConnection)
- {
- int response =
- ((HttpURLConnection) connection).getResponseCode();
- if (response / 100 != 2)
- return null;
- }
-
- if (stream != null)
- return new RemoteResource(this, name, url, stream, length);
- else
- return null;
- }
- catch (IOException ioe)
- {
- return null;
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/net/loader/Resource.java b/libjava/classpath/gnu/java/net/loader/Resource.java
deleted file mode 100644
index 53720b0..0000000
--- a/libjava/classpath/gnu/java/net/loader/Resource.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Resource.java -- a resource for URLLoader
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.loader;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.security.CodeSource;
-import java.security.cert.Certificate;
-
-/**
- * A <code>Resource</code> represents a resource in some
- * <code>URLLoader</code>. It also contains all information (e.g.,
- * <code>URL</code>, <code>CodeSource</code>, <code>Manifest</code> and
- * <code>InputStream</code>) that is necessary for loading resources
- * and creating classes from a <code>URL</code>.
- */
-public abstract class Resource
-{
- final URLLoader loader;
-
- public Resource(URLLoader loader)
- {
- this.loader = loader;
- }
-
- /**
- * Returns the non-null <code>CodeSource</code> associated with
- * this resource.
- */
- public CodeSource getCodeSource()
- {
- Certificate[] certs = getCertificates();
- if (certs == null)
- return loader.noCertCodeSource;
- else
- return new CodeSource(loader.baseURL, certs);
- }
-
- /**
- * Returns <code>Certificates</code> associated with this
- * resource, or null when there are none.
- */
- public Certificate[] getCertificates()
- {
- return null;
- }
-
- /**
- * Return the URLLoader for this resource.
- */
- public final URLLoader getLoader()
- {
- return loader;
- }
-
- /**
- * Return a <code>URL</code> that can be used to access this resource.
- */
- public abstract URL getURL();
-
- /**
- * Returns the size of this <code>Resource</code> in bytes or
- * <code>-1</code> when unknown.
- */
- public abstract int getLength();
-
- /**
- * Returns the non-null <code>InputStream</code> through which
- * this resource can be loaded.
- */
- public abstract InputStream getInputStream() throws IOException;
-}
diff --git a/libjava/classpath/gnu/java/net/loader/URLLoader.java b/libjava/classpath/gnu/java/net/loader/URLLoader.java
deleted file mode 100644
index 337564f..0000000
--- a/libjava/classpath/gnu/java/net/loader/URLLoader.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/* URLLoader.java -- base helper class for URLClassLoader
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.loader;
-
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.net.URLStreamHandlerFactory;
-import java.security.CodeSource;
-import java.security.cert.Certificate;
-import java.util.ArrayList;
-import java.util.jar.Manifest;
-
-/**
- * A <code>URLLoader</code> contains all logic to load resources from a
- * given base <code>URL</code>.
- */
-public abstract class URLLoader
-{
- /**
- * Our classloader to get info from if needed.
- */
- final URLClassLoader classloader;
-
- /**
- * The base URL from which all resources are loaded.
- */
- final URL baseURL;
-
- /**
- * The stream handler factory.
- */
- final URLStreamHandlerFactory factory;
-
- /**
- * The source for stream handlers.
- */
- final URLStreamHandlerCache cache;
-
- /**
- * A <code>CodeSource</code> without any associated certificates.
- * It is common for classes to not have certificates associated
- * with them. If they come from the same <code>URLLoader</code>
- * then it is safe to share the associated <code>CodeSource</code>
- * between them since <code>CodeSource</code> is immutable.
- */
- final CodeSource noCertCodeSource;
-
- public URLLoader(URLClassLoader classloader, URLStreamHandlerCache cache,
- URLStreamHandlerFactory factory,
- URL baseURL)
- {
- this(classloader, cache, factory, baseURL, baseURL);
- }
-
- public URLLoader(URLClassLoader classloader, URLStreamHandlerCache cache,
- URLStreamHandlerFactory factory,
- URL baseURL, URL overrideURL)
- {
- this.classloader = classloader;
- this.baseURL = baseURL;
- this.factory = factory;
- this.cache = cache;
- this.noCertCodeSource = new CodeSource(overrideURL, (Certificate[]) null);
- }
-
- /**
- * Return the base URL of this loader.
- */
- public final URL getBaseURL()
- {
- return baseURL;
- }
-
- /**
- * Returns a <code>Class</code> loaded by this
- * <code>URLLoader</code>, or <code>null</code> when this loader
- * either can't load the class or doesn't know how to load classes
- * at all. Most subclasses do not need to override this; it is only
- * useful in situations where the subclass has a more direct way of
- * making <code>Class</code> objects.
- */
- public Class getClass(String className)
- {
- return null;
- }
-
- /**
- * Returns a <code>Resource</code> loaded by this
- * <code>URLLoader</code>, or <code>null</code> when no
- * <code>Resource</code> with the given name exists.
- */
- public abstract Resource getResource(String s);
-
- /**
- * Returns the <code>Manifest</code> associated with the
- * <code>Resource</code>s loaded by this <code>URLLoader</code> or
- * <code>null</code> there is no such <code>Manifest</code>.
- */
- public Manifest getManifest()
- {
- return null;
- }
-
- /**
- * Return a list of new URLLoader objects representing any
- * class path entries added by this container.
- */
- public ArrayList<URLLoader> getClassPath()
- {
- return null;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/loader/URLStreamHandlerCache.java b/libjava/classpath/gnu/java/net/loader/URLStreamHandlerCache.java
deleted file mode 100644
index b7b8bf1..0000000
--- a/libjava/classpath/gnu/java/net/loader/URLStreamHandlerCache.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/* URLStreamHandlerCache.java -- a cache for URLStreamHandlers
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.loader;
-
-import java.net.URLStreamHandler;
-import java.net.URLStreamHandlerFactory;
-import java.util.HashMap;
-
-/**
- */
-public class URLStreamHandlerCache
-{
- /**
- * A cache to store mappings between handler factory and its
- * private protocol handler cache (also a HashMap), so we can avoid
- * creating handlers each time the same protocol comes.
- */
- private HashMap<URLStreamHandlerFactory, HashMap<String, URLStreamHandler>> factoryCache
- = new HashMap<URLStreamHandlerFactory, HashMap<String, URLStreamHandler>>(5);
-
- public URLStreamHandlerCache()
- {
- }
-
- public synchronized void add(URLStreamHandlerFactory factory)
- {
- // Since we only support three protocols so far, 5 is enough
- // for cache initial size.
- if (factory != null && factoryCache.get(factory) == null)
- factoryCache.put(factory, new HashMap<String, URLStreamHandler>(5));
- }
-
- public synchronized URLStreamHandler get(URLStreamHandlerFactory factory,
- String protocol)
- {
- if (factory == null)
- return null;
- // Check if there're handler for the same protocol in cache.
- HashMap<String, URLStreamHandler> cache = factoryCache.get(factory);
- URLStreamHandler handler = cache.get(protocol);
- if (handler == null)
- {
- // Add it to cache.
- handler = factory.createURLStreamHandler(protocol);
- cache.put(protocol, handler);
- }
- return handler;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/local/LocalServerSocket.java b/libjava/classpath/gnu/java/net/local/LocalServerSocket.java
deleted file mode 100644
index 9d8a6cc..0000000
--- a/libjava/classpath/gnu/java/net/local/LocalServerSocket.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/* LocalServerSocket.java -- a unix domain server socket.
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is a part of GNU Classpath.
-
-GNU Classpath 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.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
-USA
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.local;
-
-import java.io.IOException;
-
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.SocketAddress;
-
-public final class LocalServerSocket extends ServerSocket
-{
-
- // Fields.
- // -------------------------------------------------------------------------
-
- private LocalSocketImpl myImpl;
- private boolean closed;
-
- // Constructors.
- // -------------------------------------------------------------------------
-
- public LocalServerSocket () throws IOException
- {
- myImpl = new LocalSocketImpl ();
- }
-
- public LocalServerSocket (SocketAddress bindPoint) throws IOException
- {
- this ();
- bind (bindPoint);
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public void bind (SocketAddress bindPoint) throws IOException
- {
- bind (bindPoint, 0);
- }
-
- public void bind (SocketAddress bindPoint, int backlog) throws IOException
- {
- myImpl.doCreate ();
- myImpl.bind (bindPoint);
- myImpl.listen (backlog);
- }
-
- public InetAddress getInetAddress ()
- {
- return null;
- }
-
- public int getLocalPort ()
- {
- return -1;
- }
-
- public SocketAddress getLocalSocketAddress ()
- {
- return myImpl.getLocalAddress ();
- }
-
- public Socket accept () throws IOException
- {
- LocalSocket s = new LocalSocket (true);
- myImpl.accept (s.getLocalImpl());
- s.localConnected = true;
- return s;
- }
-
- public void close () throws IOException
- {
- myImpl.close ();
- myImpl.unlink ();
- closed = true;
- }
-
- public boolean isBound ()
- {
- return myImpl.getLocalAddress () != null;
- }
-
- public boolean isClosed ()
- {
- return closed;
- }
-
- public void setSoTimeout (int timeout)
- {
- throw new UnsupportedOperationException ("local sockets do not support timeouts");
- }
-
- public int getSoTimeout ()
- {
- throw new UnsupportedOperationException ("local sockets do not support timeouts");
- }
-
- public void setReuseAddress (boolean b)
- {
- throw new UnsupportedOperationException ("local sockets do not support reuse address");
- }
-
- public boolean getReuseAddress ()
- {
- throw new UnsupportedOperationException ("local sockets do not support reuse address");
- }
-
- public String toString ()
- {
- return LocalServerSocket.class.getName() + " [ address="
- + myImpl.getLocalAddress() + " ]";
- }
-
- public void setReceiveBufferSize (int size)
- {
- throw new UnsupportedOperationException ("local sockets do not support buffer size");
- }
-
- public int getReceiveBufferSize ()
- {
- throw new UnsupportedOperationException ("local sockets do not support buffer size");
- }
-
- public void setSendBufferSize (int size)
- {
- throw new UnsupportedOperationException ("local sockets do not support buffer size");
- }
-
- public int getSendBufferSize ()
- {
- throw new UnsupportedOperationException ("local sockets do not support buffer size");
- }
-}
diff --git a/libjava/classpath/gnu/java/net/local/LocalSocket.java b/libjava/classpath/gnu/java/net/local/LocalSocket.java
deleted file mode 100644
index 92acc65..0000000
--- a/libjava/classpath/gnu/java/net/local/LocalSocket.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/* LocalSocket.java -- a unix domain client socket.
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is a part of GNU Classpath.
-
-GNU Classpath 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.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
-USA
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.local;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import java.net.InetAddress;
-import java.net.Socket;
-import java.net.SocketAddress;
-import java.net.SocketException;
-
-import java.nio.channels.IllegalBlockingModeException;
-import java.nio.channels.SocketChannel;
-
-/**
- * A local, or unix-domain socket. Unix domain sockets are connected on the
- * local filesystem itself, rather than a remote address.
- */
-public final class LocalSocket extends Socket
-{
-
- // Fields.
- // -------------------------------------------------------------------------
-
- private final LocalSocketImpl localimpl;
- boolean localClosed;
- boolean localConnected;
-
- // Constructors.
- // -------------------------------------------------------------------------
-
- public LocalSocket () throws SocketException
- {
- super ();
- localimpl = new LocalSocketImpl ();
- }
-
- public LocalSocket (LocalSocketAddress addr) throws SocketException
- {
- this ();
- try
- {
- connect (addr);
- }
- catch (IOException ioe)
- {
- SocketException se = new SocketException ();
- se.initCause (ioe);
- throw se;
- }
- }
-
- LocalSocket (boolean nocreate) throws IOException
- {
- super ();
- localimpl = new LocalSocketImpl (nocreate);
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public void bind (SocketAddress bindpoint) throws IOException
- {
- throw new SocketException ("binding local client sockets is nonsensical");
- }
-
- public void connect (SocketAddress endpoint, int timeout) throws IOException
- {
- if (isClosed ())
- {
- throw new SocketException ("socket is closed");
- }
- if (! (endpoint instanceof LocalSocketAddress))
- {
- throw new IllegalArgumentException ("socket address is not a local address");
- }
- if (getChannel() != null && !getChannel().isBlocking())
- {
- throw new IllegalBlockingModeException ();
- }
-
- try
- {
- localimpl.doCreate ();
- localimpl.localConnect ((LocalSocketAddress) endpoint);
- }
- catch (IOException ioe)
- {
- close ();
- throw ioe;
- }
- localConnected = true;
- }
-
- public InetAddress getInetAddress ()
- {
- return null;
- }
-
- public InetAddress getLocalAddress ()
- {
- return null;
- }
-
- public int getPort ()
- {
- return -1;
- }
-
- public int getLocalPort ()
- {
- return -1;
- }
-
- public SocketChannel getChannel ()
- {
- return null;
- }
-
- public SocketAddress getLocalSocketAddress ()
- {
- return localimpl.getLocalAddress ();
- }
-
- public SocketAddress getRemoteSocketAddress ()
- {
- return localimpl.getRemoteAddress ();
- }
-
- public InputStream getInputStream () throws IOException
- {
- return localimpl.getInputStream ();
- }
-
- public OutputStream getOutputStream () throws IOException
- {
- return localimpl.getOutputStream ();
- }
-
- public void sendUrgentData (int b) throws IOException
- {
- localimpl.sendUrgentData (b);
- }
-
- public synchronized void close () throws IOException
- {
- localimpl.close ();
- localClosed = true;
- }
-
- public void shutdownInput () throws IOException
- {
- localimpl.shutdownInput ();
- }
-
- public void shutdownOutput () throws IOException
- {
- localimpl.shutdownOutput ();
- }
-
- public boolean isClosed ()
- {
- return localClosed;
- }
-
- public boolean isBound ()
- {
- return false;
- }
-
- public boolean isConnected ()
- {
- return localConnected;
- }
-
- // Unsupported methods.
- // -------------------------------------------------------------------------
-
- public void setTcpNoDelay (boolean b) throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public boolean getTcpNoDelay() throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public void setSoLinger (boolean b, int i) throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public int getSoLinger () throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public void setOOBInline (boolean b) throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public boolean getOOBInline () throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public void setSoTimeout (int i) throws SocketException
- {
- // Ignore.
- }
-
- public int getSoTimeout () throws SocketException
- {
- // We don't support timeout, so we return 0.
- return 0;
- }
-
- public void setSendBufferSize (int i) throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public int getSendBufferSize() throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public void setReceiveBufferSize (int i) throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public int getReceiveBufferSize () throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public void setKeepAlive (boolean b) throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public boolean getKeepAlive () throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public void setTrafficClass (int i) throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public int getTrafficClass () throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public void setReuseAddress (boolean b) throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- public boolean getReuseAddress () throws SocketException
- {
- throw new SocketException ("local sockets do not support this option");
- }
-
- LocalSocketImpl getLocalImpl ()
- {
- return localimpl;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/local/LocalSocketAddress.java b/libjava/classpath/gnu/java/net/local/LocalSocketAddress.java
deleted file mode 100644
index ac5c53d..0000000
--- a/libjava/classpath/gnu/java/net/local/LocalSocketAddress.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/* LocalSocketAddress.java -- unix-domain socket address.
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is a part of GNU Classpath.
-
-GNU Classpath 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.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
-USA
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.local;
-
-import java.net.SocketAddress;
-
-public final class LocalSocketAddress extends SocketAddress
-{
-
- // Fields.
- // -------------------------------------------------------------------------
-
- private final String path;
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- /**
- * Creates a new unix domain socket address.
- *
- * @param path The path to the socket.
- * @throws NullPointerException If <i>path</i> is <tt>null</tt>.
- */
- public LocalSocketAddress (String path)
- {
- if (path == null)
- {
- throw new NullPointerException ();
- }
- this.path = path;
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- /**
- * Returns the path of the socket.
- *
- * @return The path.
- */
- public String getPath ()
- {
- return path;
- }
-
- public boolean equals (Object o)
- {
- if (!(o instanceof LocalSocketAddress))
- {
- return false;
- }
- return getPath ().equals (((LocalSocketAddress) o).getPath ());
- }
-
- public int hashCode ()
- {
- return path.hashCode();
- }
-
- public String toString ()
- {
- return super.toString() + " [ " + path + " ]";
- }
-}
diff --git a/libjava/classpath/gnu/java/net/local/LocalSocketImpl.java b/libjava/classpath/gnu/java/net/local/LocalSocketImpl.java
deleted file mode 100644
index f49b799..0000000
--- a/libjava/classpath/gnu/java/net/local/LocalSocketImpl.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/* LocalSocketImpl.java -- a unix domain client socket implementation.
- Copyright (C) 2006 Free Software Foundation, Inc.
-
-This file is a part of GNU Classpath.
-
-GNU Classpath 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.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
-USA
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.local;
-
-import gnu.classpath.Configuration;
-
-import java.io.FileDescriptor;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import java.net.InetAddress;
-import java.net.SocketAddress;
-import java.net.SocketException;
-import java.net.SocketImpl;
-
-final class LocalSocketImpl extends SocketImpl
-{
-
- // Fields.
- // -------------------------------------------------------------------------
-
- private boolean created;
- private InputStream in;
- private OutputStream out;
- // Package private to avoid synthetic accessor method.
- int socket_fd;
- private LocalSocketAddress local;
- private LocalSocketAddress remote;
-
- static
- {
- try
- {
- if (Configuration.INIT_LOAD_LIBRARY)
- {
- System.loadLibrary ("javanet");
- }
- }
- catch (Exception x)
- {
- x.printStackTrace ();
- }
- }
-
- // Constructor.
- // -------------------------------------------------------------------------
-
- LocalSocketImpl ()
- {
- this (false);
- }
-
- LocalSocketImpl (boolean nocreate)
- {
- created = nocreate;
- socket_fd = -1;
- fd = new FileDescriptor ();
- }
-
- // Instance methods.
- // -------------------------------------------------------------------------
-
- public void setOption (int opt, Object value) throws SocketException
- {
- throw new SocketException ("local sockets do not support options");
- }
-
- public Object getOption (int opt) throws SocketException
- {
- throw new SocketException ("local sockets do not support options");
- }
-
- protected native void create (boolean stream) throws IOException;
- protected native void listen (int timeout) throws IOException;
- protected native void accept (LocalSocketImpl socket) throws IOException;
- protected native int available (int fd) throws IOException;
- protected native void close () throws IOException;
- protected native void sendUrgentData (int data) throws IOException;
- protected native void shutdownInput () throws IOException;
- protected native void shutdownOutput () throws IOException;
-
- native void unlink () throws IOException;
- native void localBind (LocalSocketAddress addr) throws IOException;
- native void localConnect (LocalSocketAddress addr) throws IOException;
- native int read (int fd, byte[] buf, int off, int len) throws IOException;
- native void write (int fd, byte[] buf, int off, int len) throws IOException;
-
- protected int available()
- throws IOException
- {
- return available(socket_fd);
- }
-
- void doCreate () throws IOException
- {
- if (!created)
- {
- create (true);
- }
- }
-
- LocalSocketAddress getLocalAddress ()
- {
- return local;
- }
-
- LocalSocketAddress getRemoteAddress ()
- {
- return remote;
- }
-
- protected InputStream getInputStream()
- {
- if (in == null)
- {
- in = new LocalInputStream (this);
- }
-
- return in;
- }
-
- protected OutputStream getOutputStream()
- {
- if (out == null)
- {
- out = new LocalOutputStream (this);
- }
-
- return out;
- }
-
- protected void accept (SocketImpl impl) throws IOException
- {
- if (! (impl instanceof LocalSocketImpl))
- {
- throw new IllegalArgumentException ("not a local socket");
- }
- accept ((LocalSocketImpl) impl);
- }
-
- protected void connect (String host, int port) throws IOException
- {
- throw new SocketException ("this is a local socket");
- }
-
- protected void connect (InetAddress addr, int port) throws IOException
- {
- throw new SocketException ("this is a local socket");
- }
-
- protected void connect(SocketAddress addr, int timeout) throws IOException
- {
- if (! (addr instanceof LocalSocketAddress))
- {
- throw new SocketException ("address is not local");
- }
- localConnect ((LocalSocketAddress) addr);
- }
-
- protected void bind (InetAddress addr, int port) throws IOException
- {
- throw new SocketException ("this is a local socket");
- }
-
- protected void bind (SocketAddress addr) throws IOException
- {
- if (! (addr instanceof LocalSocketAddress))
- {
- throw new SocketException ("address is not local");
- }
- localBind ((LocalSocketAddress) addr);
- }
-
- // Inner classes.
- // -------------------------------------------------------------------------
-
- class LocalInputStream extends InputStream
- {
-
- // Field.
- // -----------------------------------------------------------------------
-
- private final LocalSocketImpl impl;
-
- // Constructor.
- // -----------------------------------------------------------------------
-
- LocalInputStream (LocalSocketImpl impl)
- {
- this.impl = impl;
- }
-
- // Instance methods.
- // -----------------------------------------------------------------------
-
- public int available () throws IOException
- {
- return impl.available();
- }
-
- public boolean markSupported ()
- {
- return false;
- }
-
- public void mark (int readLimit)
- {
- }
-
- public void reset () throws IOException
- {
- throw new IOException ("mark/reset not supported");
- }
-
- public void close () throws IOException
- {
- impl.close();
- }
-
- public int read () throws IOException
- {
- byte[] buf = new byte[1];
- int ret = read (buf);
- if (ret != -1)
- {
- return buf[0] & 0xFF;
- }
- else
- {
- return -1;
- }
- }
-
- public int read (byte[] buf) throws IOException
- {
- return read (buf, 0, buf.length);
- }
-
- public int read (byte[] buf, int off, int len) throws IOException
- {
- int ret = impl.read (socket_fd, buf, off, len);
-
- if (ret == 0)
- {
- return -1;
- }
-
- return ret;
- }
- }
-
- class LocalOutputStream extends OutputStream
- {
-
- // Field.
- // -----------------------------------------------------------------------
-
- private final LocalSocketImpl impl;
-
- // Constructor.
- // -----------------------------------------------------------------------
-
- LocalOutputStream (LocalSocketImpl impl)
- {
- this.impl = impl;
- }
-
- // Instance methods.
- // -----------------------------------------------------------------------
-
- public void close () throws IOException
- {
- impl.close ();
- }
-
- public void flush () throws IOException
- {
- }
-
- public void write (int b) throws IOException
- {
- byte[] buf = new byte [1];
- buf[0] = (byte) b;
- write (buf);
- }
-
- public void write (byte[] buf) throws IOException
- {
- write (buf, 0, buf.length);
- }
-
- public void write (byte[] buf, int off, int len) throws IOException
- {
- impl.write (socket_fd, buf, off, len);
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/net/package.html b/libjava/classpath/gnu/java/net/package.html
deleted file mode 100644
index 5641fbd..0000000
--- a/libjava/classpath/gnu/java/net/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.net package.
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.net</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>
diff --git a/libjava/classpath/gnu/java/net/protocol/file/Connection.java b/libjava/classpath/gnu/java/net/protocol/file/Connection.java
deleted file mode 100644
index 80155af..0000000
--- a/libjava/classpath/gnu/java/net/protocol/file/Connection.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/* FileURLConnection.java -- URLConnection class for "file" protocol
- Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.java.net.protocol.file;
-
-import gnu.classpath.SystemProperties;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FilePermission;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.net.ProtocolException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.security.Permission;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.net.MalformedURLException;
-
-/**
- * This subclass of java.net.URLConnection models a URLConnection via
- * the "file" protocol.
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- * @author Nic Ferrier (nferrier@tapsellferrier.co.uk)
- * @author Warren Levy (warrenl@cygnus.com)
- */
-public class Connection extends URLConnection
-{
- /**
- * Default permission for a file
- */
- private static final String DEFAULT_PERMISSION = "read";
-
- private static class StaticData
- {
- /**
- * HTTP-style DateFormat, used to format the last-modified header.
- */
- static SimpleDateFormat dateFormat
- = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss 'GMT'",
- new Locale ("En", "Us", "Unix"));
-
- static String lineSeparator =
- SystemProperties.getProperty("line.separator");
- }
-
-
- /**
- * This is a File object for this connection
- */
- private File file;
-
- /**
- * If a directory, contains a list of files in the directory.
- */
- private byte[] directoryListing;
-
- /**
- * InputStream if we are reading from the file
- */
- private InputStream inputStream;
-
- /**
- * OutputStream if we are writing to the file
- */
- private OutputStream outputStream;
-
- /**
- * FilePermission to read the file
- */
- private FilePermission permission;
-
- /**
- * Calls superclass constructor to initialize.
- */
- public Connection(URL url)
- {
- super (url);
-
- permission = new FilePermission(getURL().getFile(), DEFAULT_PERMISSION);
- }
-
- /**
- * Unquote "%" + hex quotes characters
- *
- * @param str The string to unquote or null.
- *
- * @return The unquoted string or null if str was null.
- *
- * @exception MalformedURLException If the given string contains invalid
- * escape sequences.
- *
- */
- public static String unquote(String str) throws MalformedURLException
- {
- if (str == null)
- return null;
-
- final int MAX_BYTES_PER_UTF_8_CHAR = 3;
- byte[] buf = new byte[str.length()*MAX_BYTES_PER_UTF_8_CHAR];
- int pos = 0;
- for (int i = 0; i < str.length(); i++)
- {
- char c = str.charAt(i);
- if (c == '%')
- {
- if (i + 2 >= str.length())
- throw new MalformedURLException(str + " : Invalid quoted character");
- int hi = Character.digit(str.charAt(++i), 16);
- int lo = Character.digit(str.charAt(++i), 16);
- if (lo < 0 || hi < 0)
- throw new MalformedURLException(str + " : Invalid quoted character");
- buf[pos++] = (byte) (hi * 16 + lo);
- }
- else if (c > 127) {
- try {
- byte [] c_as_bytes = Character.toString(c).getBytes("utf-8");
- final int c_length = c_as_bytes.length;
- System.arraycopy(c_as_bytes, 0, buf, pos, c_length);
- pos += c_length;
- }
- catch (java.io.UnsupportedEncodingException x2) {
- throw (Error) new InternalError().initCause(x2);
- }
- }
- else
- buf[pos++] = (byte) c;
- }
- try
- {
- return new String(buf, 0, pos, "utf-8");
- }
- catch (java.io.UnsupportedEncodingException x2)
- {
- throw (Error) new InternalError().initCause(x2);
- }
- }
-
- /**
- * "Connects" to the file by opening it.
- */
- public void connect() throws IOException
- {
- // Call is ignored if already connected.
- if (connected)
- return;
-
- // If not connected, then file needs to be openned.
- file = new File (unquote(getURL().getFile()));
-
- if (! file.isDirectory())
- {
- if (doInput)
- inputStream = new BufferedInputStream(new FileInputStream(file));
-
- if (doOutput)
- outputStream = new BufferedOutputStream(new FileOutputStream(file));
- }
- else
- {
- if (doInput)
- {
- inputStream = new ByteArrayInputStream(getDirectoryListing());
- }
-
- if (doOutput)
- throw new ProtocolException
- ("file: protocol does not support output on directories");
- }
-
- connected = true;
- }
-
- /**
- * Populates the <code>directoryListing</code> field with a byte array
- * containing a representation of the directory listing.
- */
- byte[] getDirectoryListing()
- throws IOException
- {
- if (directoryListing == null)
- {
- ByteArrayOutputStream sink = new ByteArrayOutputStream();
- // NB uses default character encoding for this system
- Writer writer = new OutputStreamWriter(sink);
-
- String[] files = file.list();
-
- for (int i = 0; i < files.length; i++)
- {
- writer.write(files[i]);
- writer.write(StaticData.lineSeparator);
- }
-
- directoryListing = sink.toByteArray();
- }
- return directoryListing;
- }
-
- /**
- * Opens the file for reading and returns a stream for it.
- *
- * @return An InputStream for this connection.
- *
- * @exception IOException If an error occurs
- */
- public InputStream getInputStream()
- throws IOException
- {
- if (!doInput)
- throw new ProtocolException("Can't open InputStream if doInput is false");
-
- if (!connected)
- connect();
-
- return inputStream;
- }
-
- /**
- * Opens the file for writing and returns a stream for it.
- *
- * @return An OutputStream for this connection.
- *
- * @exception IOException If an error occurs.
- */
- public OutputStream getOutputStream()
- throws IOException
- {
- if (!doOutput)
- throw new
- ProtocolException("Can't open OutputStream if doOutput is false");
-
- if (!connected)
- connect();
-
- return outputStream;
- }
-
- /**
- * Get the last modified time of the resource.
- *
- * @return the time since epoch that the resource was modified.
- */
- public long getLastModified()
- {
- try
- {
- if (!connected)
- connect();
-
- return file.lastModified();
- }
- catch (IOException e)
- {
- return -1;
- }
- }
-
- /**
- * Get an http-style header field. Just handle a few common ones.
- */
- public String getHeaderField(String field)
- {
- try
- {
- if (!connected)
- connect();
-
- if (field.equals("content-type"))
- return guessContentTypeFromName(file.getName());
- else if (field.equals("content-length"))
- {
- if (file.isDirectory())
- {
- return Integer.toString(getContentLength());
- }
- return Long.toString(file.length());
- }
- else if (field.equals("last-modified"))
- {
- synchronized (StaticData.dateFormat)
- {
- return StaticData.dateFormat.format(
- new Date(file.lastModified()));
- }
- }
- }
- catch (IOException e)
- {
- // Fall through.
- }
- return null;
- }
-
- /**
- * Get the length of content.
- *
- * @return the length of the content.
- */
- public int getContentLength()
- {
- try
- {
- if (!connected)
- connect();
-
- if (file.isDirectory())
- {
- return getDirectoryListing().length;
- }
- return (int) file.length();
- }
- catch (IOException e)
- {
- return -1;
- }
- }
-
- /**
- * This method returns a <code>Permission</code> object representing the
- * permissions required to access this URL. This method returns a
- * <code>java.io.FilePermission</code> for the file's path with a read
- * permission.
- *
- * @return A Permission object
- */
- public Permission getPermission() throws IOException
- {
- return permission;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/file/Handler.java b/libjava/classpath/gnu/java/net/protocol/file/Handler.java
deleted file mode 100644
index 58ebe4c..0000000
--- a/libjava/classpath/gnu/java/net/protocol/file/Handler.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Handler.java -- "file" protocol handler for java.net
- Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.java.net.protocol.file;
-
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-
-/**
- * This is the protocol handler for the "file" protocol.
- * It implements the abstract openConnection() method from
- * URLStreamHandler by returning a new FileURLConnection object (from
- * this package). All other methods are inherited
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- * @author Warren Levy (warrenl@cygnus.com)
- */
-public class Handler extends URLStreamHandler
-{
- /**
- * A do nothing constructor
- */
- public Handler()
- {
- }
-
- /**
- * This method returs a new FileURLConnection for the specified URL
- *
- * @param url The URL to return a connection for
- *
- * @return The URLConnection
- *
- * @exception IOException If an error occurs
- */
- protected URLConnection openConnection(URL url) throws IOException
- {
- // If a hostname is set, then we need to switch protocols to ftp
- // in order to transfer this from the remote host.
- String host = url.getHost();
- if ((host != null) && (! host.equals("")))
- {
- // Reset the protocol (and implicitly the handler) for this URL.
- // Then have the URL attempt the connection again, as it will
- // get the changed handler the next time around.
- // If the ftp protocol handler is not installed, an
- // exception will be thrown from the new openConnection() call.
- setURL (url, "ftp", url.getHost(), url.getPort(), url.getFile(),
- url.getRef());
- return url.openConnection();
- }
-
- return new Connection(url);
- }
-} // class Handler
diff --git a/libjava/classpath/gnu/java/net/protocol/file/package.html b/libjava/classpath/gnu/java/net/protocol/file/package.html
deleted file mode 100644
index cbce741..0000000
--- a/libjava/classpath/gnu/java/net/protocol/file/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.net.protocol.file package.
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.net.protocol.file</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/ActiveModeDTP.java b/libjava/classpath/gnu/java/net/protocol/ftp/ActiveModeDTP.java
deleted file mode 100644
index 1ed31b8..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/ActiveModeDTP.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/* ActiveModeDTP.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-/**
- * An active mode FTP data transfer process.
- * This starts a server on the specified port listening for a data
- * connection. It converts the socket input into a file stream for reading.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-final class ActiveModeDTP
- implements DTP, Runnable
-{
-
- ServerSocket server;
- Socket socket;
- DTPInputStream in;
- DTPOutputStream out;
- boolean completed;
- boolean inProgress;
- int transferMode;
- IOException exception;
- Thread acceptThread;
- int connectionTimeout;
-
- ActiveModeDTP(InetAddress localhost, int port,
- int connectionTimeout, int timeout)
- throws IOException
- {
- completed = false;
- inProgress = false;
- server = new ServerSocket(port, 1, localhost);
- if (timeout > 0)
- {
- server.setSoTimeout(timeout);
- }
- if (connectionTimeout <= 0)
- {
- connectionTimeout = 20000;
- }
- this.connectionTimeout = connectionTimeout;
- acceptThread = new Thread(this, "ActiveModeDTP");
- acceptThread.setDaemon(true);
- acceptThread.start();
- }
-
- /**
- * Start listening.
- */
- public void run()
- {
- try
- {
- socket = server.accept();
- //System.err.println("Accepted connection from "+socket.getInetAddress()+":"+socket.getPort());
- }
- catch (IOException e)
- {
- exception = e;
- }
- }
-
- /**
- * Waits until a client has connected.
- */
- public void waitFor()
- throws IOException
- {
- try
- {
- acceptThread.join(connectionTimeout);
- }
- catch (InterruptedException e)
- {
- }
- if (exception != null)
- {
- throw exception;
- }
- if (socket == null)
- {
- server.close();
- throw new IOException("client did not connect before timeout");
- }
- acceptThread = null;
- }
-
- /**
- * Returns an input stream from which a remote file can be read.
- */
- public InputStream getInputStream()
- throws IOException
- {
- if (inProgress)
- {
- throw new IOException("Transfer in progress");
- }
- if (acceptThread != null)
- {
- waitFor();
- }
- switch (transferMode)
- {
- case FTPConnection.MODE_STREAM:
- in = new StreamInputStream(this, socket.getInputStream());
- break;
- case FTPConnection.MODE_BLOCK:
- in = new BlockInputStream(this, socket.getInputStream());
- break;
- case FTPConnection.MODE_COMPRESSED:
- in = new CompressedInputStream(this, socket.getInputStream());
- break;
- default:
- throw new IllegalStateException("invalid transfer mode");
- }
- in.setTransferComplete(false);
- return in;
- }
-
- /**
- * Returns an output stream to which a local file can be written for
- * upload.
- */
- public OutputStream getOutputStream() throws IOException
- {
- if (inProgress)
- {
- throw new IOException("Transfer in progress");
- }
- if (acceptThread != null)
- {
- waitFor();
- }
- switch (transferMode)
- {
- case FTPConnection.MODE_STREAM:
- out = new StreamOutputStream(this, socket.getOutputStream());
- break;
- case FTPConnection.MODE_BLOCK:
- out = new BlockOutputStream(this, socket.getOutputStream());
- break;
- case FTPConnection.MODE_COMPRESSED:
- out = new CompressedOutputStream(this, socket.getOutputStream());
- break;
- default:
- throw new IllegalStateException("invalid transfer mode");
- }
- out.setTransferComplete(false);
- return out;
- }
-
- public void setTransferMode(int mode)
- {
- transferMode = mode;
- }
-
- public void complete()
- {
- completed = true;
- if (!inProgress)
- {
- transferComplete();
- }
- }
-
- public boolean abort()
- {
- completed = true;
- transferComplete();
- return inProgress;
- }
-
- public void transferComplete()
- {
- if (socket == null)
- {
- return;
- }
- if (in != null)
- {
- in.setTransferComplete(true);
- }
- if (out != null)
- {
- out.setTransferComplete(true);
- }
- completed = completed || (transferMode == FTPConnection.MODE_STREAM);
- if (completed && socket != null)
- {
- try
- {
- socket.close();
- }
- catch (IOException e)
- {
- }
- try
- {
- server.close();
- }
- catch (IOException e)
- {
- }
- }
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/BlockInputStream.java b/libjava/classpath/gnu/java/net/protocol/ftp/BlockInputStream.java
deleted file mode 100644
index 09915e7..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/BlockInputStream.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/* BlockInputStream.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A DTP input stream that implements the FTP block transfer mode.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-class BlockInputStream
- extends DTPInputStream
-{
-
- static final int EOF = 64;
-
- int descriptor;
- int max = -1;
- int count = -1;
-
- BlockInputStream(DTP dtp, InputStream in)
- {
- super(dtp, in);
- }
-
- public int read()
- throws IOException
- {
- if (transferComplete)
- {
- return -1;
- }
- if (count == -1)
- {
- readHeader();
- }
- if (max < 1)
- {
- close();
- return -1;
- }
- int c = in.read();
- if (c == -1)
- {
- dtp.transferComplete();
- }
- count++;
- if (count >= max)
- {
- count = -1;
- if (descriptor == EOF)
- {
- close();
- }
- }
- return c;
- }
-
- public int read(byte[] buf)
- throws IOException
- {
- return read(buf, 0, buf.length);
- }
-
- public int read(byte[] buf, int off, int len)
- throws IOException
- {
- if (transferComplete)
- {
- return -1;
- }
- if (count == -1)
- {
- readHeader();
- }
- if (max < 1)
- {
- close();
- return -1;
- }
- int l = in.read(buf, off, len);
- if (l == -1)
- {
- dtp.transferComplete();
- }
- count += l;
- if (count >= max)
- {
- count = -1;
- if (descriptor == EOF)
- {
- close();
- }
- }
- return l;
- }
-
- /**
- * Reads the block header.
- */
- void readHeader()
- throws IOException
- {
- descriptor = in.read();
- int max_hi = in.read();
- int max_lo = in.read();
- max = (max_hi << 8) | max_lo;
- count = 0;
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/BlockOutputStream.java b/libjava/classpath/gnu/java/net/protocol/ftp/BlockOutputStream.java
deleted file mode 100644
index d181f9d..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/BlockOutputStream.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/* BlockOutputStream.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * A DTP output stream that implements the FTP block transfer mode.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-class BlockOutputStream
- extends DTPOutputStream
-{
-
- static final byte RECORD = -128; // 0x80
- static final byte EOF = 64; // 0x40
-
- BlockOutputStream(DTP dtp, OutputStream out)
- {
- super(dtp, out);
- }
-
- public void write(int c)
- throws IOException
- {
- if (transferComplete)
- {
- return;
- }
- byte[] buf = new byte[]
- {
- RECORD, /* record descriptor */
- 0x00, 0x01, /* one byte */
- (byte) c /* the byte */
- };
- out.write(buf, 0, 4);
- }
-
- public void write(byte[] b)
- throws IOException
- {
- write(b, 0, b.length);
- }
-
- public void write(byte[] b, int off, int len)
- throws IOException
- {
- if (transferComplete)
- {
- return;
- }
- byte[] buf = new byte[len + 3];
- buf[0] = RECORD; /* record descriptor */
- buf[1] = (byte) ((len & 0x00ff) >> 8); /* high byte of bytecount */
- buf[2] = (byte) (len & 0xff00); /* low byte of bytecount */
- System.arraycopy(b, off, buf, 3, len);
- out.write(buf, 0, len);
- }
-
- public void close()
- throws IOException
- {
- byte[] buf = new byte[]
- {
- EOF, /* eof descriptor */
- 0x00, 0x00 /* no bytes */
- };
- out.write(buf, 0, 3);
- super.close();
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/CompressedInputStream.java b/libjava/classpath/gnu/java/net/protocol/ftp/CompressedInputStream.java
deleted file mode 100644
index 638d780..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/CompressedInputStream.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/* CompressedInputStream.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.ProtocolException;
-
-/**
- * A DTP input stream that implements the FTP compressed transfer mode.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-class CompressedInputStream
- extends DTPInputStream
-{
-
- static final int EOF = 64;
-
- static final int RAW = 0x00;
- static final int COMPRESSED = 0x80;
- static final int FILLER = 0xc0;
-
- int descriptor;
- int max = -1;
- int count = -1;
-
- int state = RAW; // RAW | STATE | FILLER
- int rep; // the compressed byte
- int n = 0; // the number of compressed or raw bytes
-
- CompressedInputStream(DTP dtp, InputStream in)
- {
- super(dtp, in);
- }
-
- public int read()
- throws IOException
- {
- if (transferComplete)
- {
- return -1;
- }
- if (count == -1)
- {
- readHeader();
- }
- if (max < 1)
- {
- close();
- return -1;
- }
- if (n > 0 && (state == COMPRESSED || state == FILLER))
- {
- n--;
- return rep;
- }
- int c = in.read();
- if (c == -1)
- {
- close();
- }
- count++;
- if (count >= max)
- {
- count = -1;
- if (descriptor == EOF)
- {
- close();
- }
- }
- if (c == -1)
- {
- return c;
- }
- while (n == 0) // read code header
- {
- state = (c & 0xc0);
- n = (c & 0x3f);
- c = in.read();
- if (c == -1)
- {
- return -1;
- }
- }
- switch (state)
- {
- case RAW:
- break;
- case COMPRESSED:
- case FILLER:
- rep = c;
- break;
- default:
- throw new ProtocolException("Illegal state: " + state);
- }
- n--;
- return c;
- }
-
- public int read(byte[] buf)
- throws IOException
- {
- return read(buf, 0, buf.length);
- }
-
- public int read(byte[] buf, int off, int len)
- throws IOException
- {
- if (transferComplete)
- {
- return -1;
- }
- if (count == -1)
- {
- readHeader();
- }
- if (max < 1)
- {
- close();
- return -1;
- }
- // TODO improve performance
- for (int i = off; i < len; i++)
- {
- int c = read();
- if (c == -1)
- {
- close();
- return i;
- }
- buf[i] = (byte) c;
- }
- return len;
- /*
- int l = in.read (buf, off, len);
- if (l==-1)
- {
- close ();
- }
- count += l;
- if (count>=max)
- {
- count = -1;
- if (descriptor==EOF)
- {
- close ();
- }
- }
- return l;
- */
- }
-
- /**
- * Reads the block header.
- */
- void readHeader()
- throws IOException
- {
- descriptor = in.read();
- int max_hi = in.read();
- int max_lo = in.read();
- max = (max_hi << 8) | max_lo;
- count = 0;
- }
-
- /**
- * Reads the code header.
- */
- void readCodeHeader()
- throws IOException
- {
- int code = in.read();
- state = (code & 0xc0);
- n = (code & 0x3f);
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/CompressedOutputStream.java b/libjava/classpath/gnu/java/net/protocol/ftp/CompressedOutputStream.java
deleted file mode 100644
index ec3aef9..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/CompressedOutputStream.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/* CompressedOutputStream.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * A DTP output stream that implements the FTP compressed transfer mode.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-class CompressedOutputStream
- extends DTPOutputStream
-{
-
- static final byte RECORD = -128; // 0x80
- static final byte EOF = 64; // 0x40
-
- CompressedOutputStream(DTP dtp, OutputStream out)
- {
- super(dtp, out);
- }
-
- /**
- * Just one byte cannot be compressed.
- * It takes 5 bytes to transmit - hardly very compressed!
- */
- public void write(int c)
- throws IOException
- {
- if (transferComplete)
- {
- return;
- }
- byte[] buf = new byte[]
- {
- RECORD, /* record descriptor */
- 0x00, 0x01, /* one byte */
- 0x01, /* one uncompressed byte */
- (byte) c /* the byte */
- };
- out.write(buf, 0, 5);
- }
-
- public void write(byte[] b)
- throws IOException
- {
- write(b, 0, b.length);
- }
-
- /**
- * The larger len is, the better.
- */
- public void write(byte[] b, int off, int len)
- throws IOException
- {
- if (transferComplete)
- {
- return;
- }
- byte[] buf = compress(b, off, len);
- len = buf.length;
- buf[0] = RECORD; /* record descriptor */
- buf[1] = (byte) ((len & 0x00ff) >> 8); /* high byte of bytecount */
- buf[2] = (byte) (len & 0xff00); /* low byte of bytecount */
- out.write(buf, 0, len);
- }
-
- /**
- * Returns the compressed form of the given byte array.
- * The first 3 bytes are left free for header information.
- */
- byte[] compress(byte[] b, int off, int len)
- {
- byte[] buf = new byte[len];
- byte last = 0;
- int pos = 0, raw_count = 0, rep_count = 1;
- for (int i = off; i < len; i++)
- {
- byte c = b[i];
- if (i > off && c == last) // compress
- {
- if (raw_count > 0) // flush raw bytes to buf
- {
- // need to add raw_count+1 bytes
- if (pos + (raw_count + 1) > buf.length)
- {
- buf = realloc(buf, len);
- }
- pos = flush_raw(buf, pos, b, (i - raw_count) - 1,
- raw_count);
- raw_count = 0;
- }
- rep_count++; // keep looking for same byte
- }
- else
- {
- if (rep_count > 1) // flush compressed bytes to buf
- {
- // need to add 2 bytes
- if (pos + 2 > buf.length)
- {
- buf = realloc(buf, len);
- }
- pos = flush_compressed(buf, pos, rep_count, last);
- rep_count = 1;
- }
- raw_count++; // keep looking for raw bytes
- }
- if (rep_count == 127) // flush compressed bytes
- {
- // need to add 2 bytes
- if (pos + 2 > buf.length)
- {
- buf = realloc(buf, len);
- }
- pos = flush_compressed(buf, pos, rep_count, last);
- rep_count = 1;
- }
- if (raw_count == 127) // flush raw bytes
- {
- // need to add raw_count+1 bytes
- if (pos + (raw_count + 1) > buf.length)
- {
- buf = realloc(buf, len);
- }
- pos = flush_raw(buf, pos, b, (i - raw_count), raw_count);
- raw_count = 0;
- }
- last = c;
- }
- if (rep_count > 1) // flush compressed bytes
- {
- // need to add 2 bytes
- if (pos + 2 > buf.length)
- {
- buf = realloc(buf, len);
- }
- pos = flush_compressed(buf, pos, rep_count, last);
- rep_count = 1;
- }
- if (raw_count > 0) // flush raw bytes
- {
- // need to add raw_count+1 bytes
- if (pos + (raw_count + 1) > buf.length)
- {
- buf = realloc(buf, len);
- }
- pos = flush_raw(buf, pos, b, (len - raw_count), raw_count);
- raw_count = 0;
- }
- byte[] ret = new byte[pos + 3];
- System.arraycopy(buf, 0, ret, 3, pos);
- return ret;
- }
-
- int flush_compressed(byte[] buf, int pos, int count, byte c)
- {
- buf[pos++] = (byte) (0x80 | count);
- buf[pos++] = c;
- return pos;
- }
-
- int flush_raw(byte[] buf, int pos, byte[] src, int off, int len)
- {
- buf[pos++] = (byte) len;
- System.arraycopy(src, off, buf, pos, len);
- return pos + len;
- }
-
- byte[] realloc(byte[] buf, int len)
- {
- byte[] ret = new byte[buf.length + len];
- System.arraycopy(buf, 0, ret, 0, buf.length);
- return ret;
- }
-
- public void close()
- throws IOException
- {
- byte[] buf = new byte[]
- {
- EOF, /* eof descriptor */
- 0x00, 0x00 /* no bytes */
- };
- out.write(buf, 0, 3);
- out.close();
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/DTP.java b/libjava/classpath/gnu/java/net/protocol/ftp/DTP.java
deleted file mode 100644
index 9ba4b7c..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/DTP.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/* DTP.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * An FTP data transfer process.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-interface DTP
-{
-
- /**
- * Returns an input stream from which a remote file can be read.
- */
- InputStream getInputStream()
- throws IOException;
-
- /**
- * Returns an output stream to which a local file can be written for
- * upload.
- */
- OutputStream getOutputStream()
- throws IOException;
-
- /**
- * Sets the transfer mode to be used with this DTP.
- */
- void setTransferMode(int mode);
-
- /**
- * Marks this DTP completed.
- * When the current transfer has finished, any resources will be released.
- */
- void complete();
-
- /**
- * Aborts any current transfer and releases all resources held by this
- * DTP.
- * @return true if a transfer was interrupted, false otherwise
- */
- boolean abort();
-
- /**
- * Used to notify the DTP that its current transfer is complete.
- * This occurs either when end-of-stream is reached or a 226 response is
- * received.
- */
- void transferComplete();
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/DTPInputStream.java b/libjava/classpath/gnu/java/net/protocol/ftp/DTPInputStream.java
deleted file mode 100644
index 7280b01..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/DTPInputStream.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/* DTPInputStream.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * An input stream that notifies a DTP on completion.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-abstract class DTPInputStream
- extends FilterInputStream
-{
-
- DTP dtp;
- boolean transferComplete;
-
- /**
- * Constructor.
- * @param dtp the controlling data transfer process
- * @param in the underlying socket stream
- */
- DTPInputStream (DTP dtp, InputStream in)
- {
- super(in);
- this.dtp = dtp;
- transferComplete = false;
- }
-
- /**
- * Marks this input stream complete.
- * This is called by the DTP.
- */
- void setTransferComplete(boolean flag)
- {
- transferComplete = flag;
- }
-
- /**
- * Notifies the controlling DTP that this stream has completed transfer.
- */
- public void close()
- throws IOException
- {
- dtp.transferComplete();
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/DTPOutputStream.java b/libjava/classpath/gnu/java/net/protocol/ftp/DTPOutputStream.java
deleted file mode 100644
index 105c6f0..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/DTPOutputStream.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/* DTPOutputStream.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * An output stream that notifies a DTP on end of stream.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-abstract class DTPOutputStream extends FilterOutputStream
-{
-
- DTP dtp;
- boolean transferComplete;
-
- /**
- * Constructor.
- * @param dtp the controlling data transfer process
- * @param out the socket output stream
- */
- DTPOutputStream (DTP dtp, OutputStream out)
- {
- super (out);
- this.dtp = dtp;
- transferComplete = false;
- }
-
- /**
- * Tells this stream whether transfer has completed or not.
- * @param flag true if the process has completed, false otherwise
- */
- void setTransferComplete (boolean flag)
- {
- transferComplete = flag;
- }
-
- /**
- * Notifies the controlling DTP that this stream has been terminated.
- */
- public void close () throws IOException
- {
- dtp.transferComplete ();
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java b/libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java
deleted file mode 100644
index 4e253fc..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java
+++ /dev/null
@@ -1,1352 +0,0 @@
-/* FTPConnection.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.net.CRLFInputStream;
-import gnu.java.net.CRLFOutputStream;
-import gnu.java.net.EmptyX509TrustManager;
-import gnu.java.net.LineInputStream;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.BindException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.ProtocolException;
-import java.net.Socket;
-import java.net.UnknownHostException;
-import java.security.GeneralSecurityException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocket;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManager;
-
-/**
- * An FTP client connection, or PI.
- * This implements RFC 959, with the following exceptions:
- * <ul>
- * <li>STAT, HELP, SITE, SMNT, and ACCT commands are not supported.</li>
- * <li>the TYPE command does not allow alternatives to the default bytesize
- * (Non-print), and local bytesize is not supported.</li>
- * </ul>
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class FTPConnection
-{
-
- /**
- * The default FTP transmission control port.
- */
- public static final int FTP_PORT = 21;
-
- /**
- * The FTP data port.
- */
- public static final int FTP_DATA_PORT = 20;
-
- // -- FTP vocabulary --
- protected static final String USER = "USER";
- protected static final String PASS = "PASS";
- protected static final String ACCT = "ACCT";
- protected static final String CWD = "CWD";
- protected static final String CDUP = "CDUP";
- protected static final String SMNT = "SMNT";
- protected static final String REIN = "REIN";
- protected static final String QUIT = "QUIT";
-
- protected static final String PORT = "PORT";
- protected static final String PASV = "PASV";
- protected static final String TYPE = "TYPE";
- protected static final String STRU = "STRU";
- protected static final String MODE = "MODE";
-
- protected static final String RETR = "RETR";
- protected static final String STOR = "STOR";
- protected static final String STOU = "STOU";
- protected static final String APPE = "APPE";
- protected static final String ALLO = "ALLO";
- protected static final String REST = "REST";
- protected static final String RNFR = "RNFR";
- protected static final String RNTO = "RNTO";
- protected static final String ABOR = "ABOR";
- protected static final String DELE = "DELE";
- protected static final String RMD = "RMD";
- protected static final String MKD = "MKD";
- protected static final String PWD = "PWD";
- protected static final String LIST = "LIST";
- protected static final String NLST = "NLST";
- protected static final String SITE = "SITE";
- protected static final String SYST = "SYST";
- protected static final String STAT = "STAT";
- protected static final String HELP = "HELP";
- protected static final String NOOP = "NOOP";
-
- protected static final String AUTH = "AUTH";
- protected static final String PBSZ = "PBSZ";
- protected static final String PROT = "PROT";
- protected static final String CCC = "CCC";
- protected static final String TLS = "TLS";
-
- public static final int TYPE_ASCII = 1;
- public static final int TYPE_EBCDIC = 2;
- public static final int TYPE_BINARY = 3;
-
- public static final int STRUCTURE_FILE = 1;
- public static final int STRUCTURE_RECORD = 2;
- public static final int STRUCTURE_PAGE = 3;
-
- public static final int MODE_STREAM = 1;
- public static final int MODE_BLOCK = 2;
- public static final int MODE_COMPRESSED = 3;
-
- // -- Telnet constants --
- private static final String US_ASCII = "US-ASCII";
-
- /**
- * The socket used to communicate with the server.
- */
- protected Socket socket;
-
- /**
- * The socket input stream.
- */
- protected LineInputStream in;
-
- /**
- * The socket output stream.
- */
- protected CRLFOutputStream out;
-
- /**
- * The timeout when attempting to connect a socket.
- */
- protected int connectionTimeout;
-
- /**
- * The read timeout on sockets.
- */
- protected int timeout;
-
- /**
- * If true, print debugging information.
- */
- protected boolean debug;
-
- /**
- * The current data transfer process in use by this connection.
- */
- protected DTP dtp;
-
- /**
- * The current representation type.
- */
- protected int representationType = TYPE_ASCII;
-
- /**
- * The current file structure type.
- */
- protected int fileStructure = STRUCTURE_FILE;
-
- /**
- * The current transfer mode.
- */
- protected int transferMode = MODE_STREAM;
-
- /**
- * If true, use passive mode.
- */
- protected boolean passive = false;
-
- /**
- * Creates a new connection to the server using the default port.
- * @param hostname the hostname of the server to connect to
- */
- public FTPConnection(String hostname)
- throws UnknownHostException, IOException
- {
- this(hostname, -1, 0, 0, false);
- }
-
- /**
- * Creates a new connection to the server.
- * @param hostname the hostname of the server to connect to
- * @param port the port to connect to(if &lt;=0, use default port)
- */
- public FTPConnection(String hostname, int port)
- throws UnknownHostException, IOException
- {
- this(hostname, port, 0, 0, false);
- }
-
- /**
- * Creates a new connection to the server.
- * @param hostname the hostname of the server to connect to
- * @param port the port to connect to(if &lt;=0, use default port)
- * @param connectionTimeout the connection timeout, in milliseconds
- * @param timeout the I/O timeout, in milliseconds
- * @param debug print debugging information
- */
- public FTPConnection(String hostname, int port,
- int connectionTimeout, int timeout, boolean debug)
- throws UnknownHostException, IOException
- {
- this.connectionTimeout = connectionTimeout;
- this.timeout = timeout;
- this.debug = debug;
- if (port <= 0)
- {
- port = FTP_PORT;
- }
-
- // Set up socket
- socket = new Socket();
- InetSocketAddress address = new InetSocketAddress(hostname, port);
- if (connectionTimeout > 0)
- {
- socket.connect(address, connectionTimeout);
- }
- else
- {
- socket.connect(address);
- }
- if (timeout > 0)
- {
- socket.setSoTimeout(timeout);
- }
-
- InputStream in = socket.getInputStream();
- in = new BufferedInputStream(in);
- in = new CRLFInputStream(in);
- this.in = new LineInputStream(in);
- OutputStream out = socket.getOutputStream();
- out = new BufferedOutputStream(out);
- this.out = new CRLFOutputStream(out);
-
- // Read greeting
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 220: // hello
- break;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Authenticate using the specified username and password.
- * If the username suffices for the server, the password will not be used
- * and may be null.
- * @param username the username
- * @param password the optional password
- * @return true on success, false otherwise
- */
- public boolean authenticate(String username, String password)
- throws IOException
- {
- String cmd = USER + ' ' + username;
- send(cmd);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 230: // User logged in
- return true;
- case 331: // User name okay, need password
- break;
- case 332: // Need account for login
- case 530: // No such user
- return false;
- default:
- throw new FTPException(response);
- }
- cmd = PASS + ' ' + password;
- send(cmd);
- response = getResponse();
- switch (response.getCode())
- {
- case 230: // User logged in
- case 202: // Superfluous
- return true;
- case 332: // Need account for login
- case 530: // Bad password
- return false;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Negotiates TLS over the current connection.
- * See IETF draft-murray-auth-ftp-ssl-15.txt for details.
- * @param confidential whether to provide confidentiality for the
- * connection
- */
- public boolean starttls(boolean confidential)
- throws IOException
- {
- return starttls(confidential, new EmptyX509TrustManager());
- }
-
- /**
- * Negotiates TLS over the current connection.
- * See IETF draft-murray-auth-ftp-ssl-15.txt for details.
- * @param confidential whether to provide confidentiality for the
- * connection
- * @param tm the trust manager used to validate the server certificate.
- */
- public boolean starttls(boolean confidential, TrustManager tm)
- throws IOException
- {
- try
- {
- // Use SSLSocketFactory to negotiate a TLS session and wrap the
- // current socket.
- SSLContext context = SSLContext.getInstance("TLS");
- // We don't require strong validation of the server certificate
- TrustManager[] trust = new TrustManager[] { tm };
- context.init(null, trust, null);
- SSLSocketFactory factory = context.getSocketFactory();
-
- send(AUTH + ' ' + TLS);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 500:
- case 502:
- case 504:
- case 534:
- case 431:
- return false;
- case 234:
- break;
- default:
- throw new FTPException(response);
- }
-
- String hostname = socket.getInetAddress().getHostName();
- int port = socket.getPort();
- SSLSocket ss =
- (SSLSocket) factory.createSocket(socket, hostname, port, true);
- String[] protocols = { "TLSv1", "SSLv3" };
- ss.setEnabledProtocols(protocols);
- ss.setUseClientMode(true);
- ss.startHandshake();
-
- // PBSZ:PROT sequence
- send(PBSZ + ' ' + Integer.MAX_VALUE);
- response = getResponse();
- switch (response.getCode())
- {
- case 501: // syntax error
- case 503: // not authenticated
- return false;
- case 200:
- break;
- default:
- throw new FTPException(response);
- }
- send(PROT + ' ' +(confidential ? 'P' : 'C'));
- response = getResponse();
- switch (response.getCode())
- {
- case 503: // not authenticated
- case 504: // invalid level
- case 536: // level not supported
- return false;
- case 200:
- break;
- default:
- throw new FTPException(response);
- }
-
- if (confidential)
- {
- // Set up streams
- InputStream in = ss.getInputStream();
- in = new BufferedInputStream(in);
- in = new CRLFInputStream(in);
- this.in = new LineInputStream(in);
- OutputStream out = ss.getOutputStream();
- out = new BufferedOutputStream(out);
- this.out = new CRLFOutputStream(out);
- }
- return true;
- }
- catch (GeneralSecurityException e)
- {
- return false;
- }
- }
-
- /**
- * Changes directory to the specified path.
- * @param path an absolute or relative pathname
- * @return true on success, false if the specified path does not exist
- */
- public boolean changeWorkingDirectory(String path)
- throws IOException
- {
- // Do nothing if the path is empty.
- if (path.length() == 0)
- return true;
- String cmd = CWD + ' ' + path;
- send(cmd);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 250:
- return true;
- case 550:
- return false;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Changes directory to the parent of the current working directory.
- * @return true on success, false otherwise
- */
- public boolean changeToParentDirectory()
- throws IOException
- {
- send(CDUP);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 250:
- return true;
- case 550:
- return false;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Terminates an authenticated login.
- * If file transfer is in progress, it remains active for result response
- * only.
- */
- public void reinitialize()
- throws IOException
- {
- send(REIN);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 220:
- if (dtp != null)
- {
- dtp.complete();
- dtp = null;
- }
- break;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Terminates the control connection.
- * The file transfer connection remains open for result response only.
- * This connection is invalid and no further commands may be issued.
- */
- public void logout()
- throws IOException
- {
- send(QUIT);
- try
- {
- getResponse(); // not required
- }
- catch (IOException e)
- {
- }
- if (dtp != null)
- {
- dtp.complete();
- dtp = null;
- }
- try
- {
- socket.close();
- }
- catch (IOException e)
- {
- }
- }
-
- /**
- * Initialise the data transfer process.
- */
- protected void initialiseDTP()
- throws IOException
- {
- if (dtp != null)
- {
- dtp.complete();
- dtp = null;
- }
-
- InetAddress localhost = socket.getLocalAddress();
- if (passive)
- {
- send(PASV);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 227:
- String message = response.getMessage();
- try
- {
- int start = message.indexOf(',');
- char c = message.charAt(start - 1);
- while (c >= 0x30 && c <= 0x39)
- {
- c = message.charAt((--start) - 1);
- }
- int mid1 = start;
- for (int i = 0; i < 4; i++)
- {
- mid1 = message.indexOf(',', mid1 + 1);
- }
- int mid2 = message.indexOf(',', mid1 + 1);
- if (mid1 == -1 || mid2 < mid1)
- {
- throw new ProtocolException("Malformed 227: " +
- message);
- }
- int end = mid2;
- c = message.charAt(end + 1);
- while (c >= 0x30 && c <= 0x39)
- {
- c = message.charAt((++end) + 1);
- }
-
- String address =
- message.substring(start, mid1).replace(',', '.');
- int port_hi =
- Integer.parseInt(message.substring(mid1 + 1, mid2));
- int port_lo =
- Integer.parseInt(message.substring(mid2 + 1, end + 1));
- int port = (port_hi << 8) | port_lo;
-
- /*System.out.println("Entering passive mode: " + address +
- ":" + port);*/
- dtp = new PassiveModeDTP(address, port, localhost,
- connectionTimeout, timeout);
- break;
- }
- catch (ArrayIndexOutOfBoundsException e)
- {
- throw new ProtocolException(e.getMessage() + ": " +
- message);
- }
- catch (NumberFormatException e)
- {
- throw new ProtocolException(e.getMessage() + ": " +
- message);
- }
- default:
- throw new FTPException(response);
- }
- }
- else
- {
- // Get the local port
- int port = socket.getLocalPort() + 1;
- int tries = 0;
- // Bind the active mode DTP
- while (dtp == null)
- {
- try
- {
- dtp = new ActiveModeDTP(localhost, port,
- connectionTimeout, timeout);
- /*System.out.println("Listening on: " + port);*/
- }
- catch (BindException e)
- {
- port++;
- tries++;
- if (tries > 9)
- {
- throw e;
- }
- }
- }
-
- // Send PORT command
- CPStringBuilder buf = new CPStringBuilder(PORT);
- buf.append(' ');
- // Construct the address/port string form
- byte[] address = localhost.getAddress();
- for (int i = 0; i < address.length; i++)
- {
- int a =(int) address[i];
- if (a < 0)
- {
- a += 0x100;
- }
- buf.append(a);
- buf.append(',');
- }
- int port_hi =(port & 0xff00) >> 8;
- int port_lo =(port & 0x00ff);
- buf.append(port_hi);
- buf.append(',');
- buf.append(port_lo);
- send(buf.toString());
- // Get response
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 200: // OK
- break;
- default:
- dtp.abort();
- dtp = null;
- throw new FTPException(response);
- }
- }
- dtp.setTransferMode(transferMode);
- }
-
- /**
- * Set passive mode.
- * @param flag true if we should use passive mode, false otherwise
- */
- public void setPassive(boolean flag)
- throws IOException
- {
- if (passive != flag)
- {
- passive = flag;
- initialiseDTP();
- }
- }
-
- /**
- * Returns the current representation type of the transfer data.
- * @return TYPE_ASCII, TYPE_EBCDIC, or TYPE_BINARY
- */
- public int getRepresentationType()
- {
- return representationType;
- }
-
- /**
- * Sets the desired representation type of the transfer data.
- * @param type TYPE_ASCII, TYPE_EBCDIC, or TYPE_BINARY
- */
- public void setRepresentationType(int type)
- throws IOException
- {
- CPStringBuilder buf = new CPStringBuilder(TYPE);
- buf.append(' ');
- switch (type)
- {
- case TYPE_ASCII:
- buf.append('A');
- break;
- case TYPE_EBCDIC:
- buf.append('E');
- break;
- case TYPE_BINARY:
- buf.append('I');
- break;
- default:
- throw new IllegalArgumentException(Integer.toString(type));
- }
- //buf.append(' ');
- //buf.append('N');
- send(buf.toString());
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 200:
- representationType = type;
- break;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Returns the current file structure type.
- * @return STRUCTURE_FILE, STRUCTURE_RECORD, or STRUCTURE_PAGE
- */
- public int getFileStructure()
- {
- return fileStructure;
- }
-
- /**
- * Sets the desired file structure type.
- * @param structure STRUCTURE_FILE, STRUCTURE_RECORD, or STRUCTURE_PAGE
- */
- public void setFileStructure(int structure)
- throws IOException
- {
- CPStringBuilder buf = new CPStringBuilder(STRU);
- buf.append(' ');
- switch (structure)
- {
- case STRUCTURE_FILE:
- buf.append('F');
- break;
- case STRUCTURE_RECORD:
- buf.append('R');
- break;
- case STRUCTURE_PAGE:
- buf.append('P');
- break;
- default:
- throw new IllegalArgumentException(Integer.toString(structure));
- }
- send(buf.toString());
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 200:
- fileStructure = structure;
- break;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Returns the current transfer mode.
- * @return MODE_STREAM, MODE_BLOCK, or MODE_COMPRESSED
- */
- public int getTransferMode()
- {
- return transferMode;
- }
-
- /**
- * Sets the desired transfer mode.
- * @param mode MODE_STREAM, MODE_BLOCK, or MODE_COMPRESSED
- */
- public void setTransferMode(int mode)
- throws IOException
- {
- CPStringBuilder buf = new CPStringBuilder(MODE);
- buf.append(' ');
- switch (mode)
- {
- case MODE_STREAM:
- buf.append('S');
- break;
- case MODE_BLOCK:
- buf.append('B');
- break;
- case MODE_COMPRESSED:
- buf.append('C');
- break;
- default:
- throw new IllegalArgumentException(Integer.toString(mode));
- }
- send(buf.toString());
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 200:
- transferMode = mode;
- if (dtp != null)
- {
- dtp.setTransferMode(mode);
- }
- break;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Retrieves the specified file.
- * @param filename the filename of the file to retrieve
- * @return an InputStream containing the file content
- */
- public InputStream retrieve(String filename)
- throws IOException
- {
- if (dtp == null || transferMode == MODE_STREAM)
- {
- initialiseDTP();
- }
- /*
- int size = -1;
- String cmd = SIZE + ' ' + filename;
- send(cmd);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 213:
- size = Integer.parseInt(response.getMessage());
- break;
- case 550: // File not found
- default:
- throw new FTPException(response);
- }
- */
- String cmd = RETR + ' ' + filename;
- send(cmd);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 125: // Data connection already open; transfer starting
- case 150: // File status okay; about to open data connection
- return dtp.getInputStream();
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Returns a stream for uploading a file.
- * If a file with the same filename already exists on the server, it will
- * be overwritten.
- * @param filename the name of the file to save the content as
- * @return an OutputStream to write the file data to
- */
- public OutputStream store(String filename)
- throws IOException
- {
- if (dtp == null || transferMode == MODE_STREAM)
- {
- initialiseDTP();
- }
- String cmd = STOR + ' ' + filename;
- send(cmd);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 125: // Data connection already open; transfer starting
- case 150: // File status okay; about to open data connection
- return dtp.getOutputStream();
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Returns a stream for uploading a file.
- * If a file with the same filename already exists on the server, the
- * content specified will be appended to the existing file.
- * @param filename the name of the file to save the content as
- * @return an OutputStream to write the file data to
- */
- public OutputStream append(String filename)
- throws IOException
- {
- if (dtp == null || transferMode == MODE_STREAM)
- {
- initialiseDTP();
- }
- String cmd = APPE + ' ' + filename;
- send(cmd);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 125: // Data connection already open; transfer starting
- case 150: // File status okay; about to open data connection
- return dtp.getOutputStream();
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * This command may be required by some servers to reserve sufficient
- * storage to accommodate the new file to be transferred.
- * It should be immediately followed by a <code>store</code> or
- * <code>append</code>.
- * @param size the number of bytes of storage to allocate
- */
- public void allocate(long size)
- throws IOException
- {
- String cmd = ALLO + ' ' + size;
- send(cmd);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 200: // OK
- case 202: // Superfluous
- break;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Renames a file.
- * @param oldName the current name of the file
- * @param newName the new name
- * @return true if successful, false otherwise
- */
- public boolean rename(String oldName, String newName)
- throws IOException
- {
- String cmd = RNFR + ' ' + oldName;
- send(cmd);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 450: // File unavailable
- case 550: // File not found
- return false;
- case 350: // Pending
- break;
- default:
- throw new FTPException(response);
- }
- cmd = RNTO + ' ' + newName;
- send(cmd);
- response = getResponse();
- switch (response.getCode())
- {
- case 250: // OK
- return true;
- case 450:
- case 550:
- return false;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Aborts the transfer in progress.
- * @return true if a transfer was in progress, false otherwise
- */
- public boolean abort()
- throws IOException
- {
- send(ABOR);
- FTPResponse response = getResponse();
- // Abort client DTP
- if (dtp != null)
- {
- dtp.abort();
- }
- switch (response.getCode())
- {
- case 226: // successful abort
- return false;
- case 426: // interrupted
- response = getResponse();
- if (response.getCode() == 226)
- {
- return true;
- }
- // Otherwise fall through to throw exception
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Causes the file specified to be deleted at the server site.
- * @param filename the file to delete
- */
- public boolean delete(String filename)
- throws IOException
- {
- String cmd = DELE + ' ' + filename;
- send(cmd);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 250: // OK
- return true;
- case 450: // File unavailable
- case 550: // File not found
- return false;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Causes the directory specified to be deleted.
- * This may be an absolute or relative pathname.
- * @param pathname the directory to delete
- */
- public boolean removeDirectory(String pathname)
- throws IOException
- {
- String cmd = RMD + ' ' + pathname;
- send(cmd);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 250: // OK
- return true;
- case 550: // File not found
- return false;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Causes the directory specified to be created at the server site.
- * This may be an absolute or relative pathname.
- * @param pathname the directory to create
- */
- public boolean makeDirectory(String pathname)
- throws IOException
- {
- String cmd = MKD + ' ' + pathname;
- send(cmd);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 257: // Directory created
- return true;
- case 550: // File not found
- return false;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Returns the current working directory.
- */
- public String getWorkingDirectory()
- throws IOException
- {
- send(PWD);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 257:
- String message = response.getMessage();
- if (message.charAt(0) == '"')
- {
- int end = message.indexOf('"', 1);
- if (end == -1)
- {
- throw new ProtocolException(message);
- }
- return message.substring(1, end);
- }
- else
- {
- int end = message.indexOf(' ');
- if (end == -1)
- {
- return message;
- }
- else
- {
- return message.substring(0, end);
- }
- }
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Returns a listing of information about the specified pathname.
- * If the pathname specifies a directory or other group of files, the
- * server should transfer a list of files in the specified directory.
- * If the pathname specifies a file then the server should send current
- * information on the file. A null argument implies the user's
- * current working or default directory.
- * @param pathname the context pathname, or null
- */
- public InputStream list(String pathname)
- throws IOException
- {
- if (dtp == null || transferMode == MODE_STREAM)
- {
- initialiseDTP();
- }
- if (pathname == null)
- {
- send(LIST);
- }
- else
- {
- String cmd = LIST + ' ' + pathname;
- send(cmd);
- }
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 125: // Data connection already open; transfer starting
- case 150: // File status okay; about to open data connection
- return dtp.getInputStream();
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Returns a directory listing. The pathname should specify a
- * directory or other system-specific file group descriptor; a null
- * argument implies the user's current working or default directory.
- * @param pathname the directory pathname, or null
- * @return a list of filenames(strings)
- */
- public List<String> nameList(String pathname)
- throws IOException
- {
- if (dtp == null || transferMode == MODE_STREAM)
- {
- initialiseDTP();
- }
- if (pathname == null)
- {
- send(NLST);
- }
- else
- {
- String cmd = NLST + ' ' + pathname;
- send(cmd);
- }
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 125: // Data connection already open; transfer starting
- case 150: // File status okay; about to open data connection
- InputStream in = dtp.getInputStream();
- in = new BufferedInputStream(in);
- in = new CRLFInputStream(in); // TODO ensure that TYPE is correct
- LineInputStream li = new LineInputStream(in);
- ArrayList<String> ret = new ArrayList<String>();
- for (String line = li.readLine();
- line != null;
- line = li.readLine())
- {
- ret.add(line);
- }
- li.close();
- return ret;
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Returns the type of operating system at the server.
- */
- public String system()
- throws IOException
- {
- send(SYST);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 215:
- String message = response.getMessage();
- int end = message.indexOf(' ');
- if (end == -1)
- {
- return message;
- }
- else
- {
- return message.substring(0, end);
- }
- default:
- throw new FTPException(response);
- }
- }
-
- /**
- * Does nothing.
- * This method can be used to ensure that the connection does not time
- * out.
- */
- public void noop()
- throws IOException
- {
- send(NOOP);
- FTPResponse response = getResponse();
- switch (response.getCode())
- {
- case 200:
- break;
- default:
- throw new FTPException(response);
- }
- }
-
- // -- I/O --
-
- /**
- * Sends the specified command line to the server.
- * The CRLF sequence is automatically appended.
- * @param cmd the command line to send
- */
- protected void send(String cmd)
- throws IOException
- {
- byte[] data = cmd.getBytes(US_ASCII);
- out.write(data);
- out.writeln();
- out.flush();
- }
-
- /**
- * Reads the next response from the server.
- * If the server sends the "transfer complete" code, this is handled here,
- * and the next response is passed to the caller.
- */
- protected FTPResponse getResponse()
- throws IOException
- {
- FTPResponse response = readResponse();
- if (response.getCode() == 226)
- {
- if (dtp != null)
- {
- dtp.transferComplete();
- }
- response = readResponse();
- }
- return response;
- }
-
- /**
- * Reads and parses the next response from the server.
- */
- protected FTPResponse readResponse()
- throws IOException
- {
- String line = in.readLine();
- if (line == null)
- {
- throw new ProtocolException( "EOF");
- }
- if (line.length() < 4)
- {
- throw new ProtocolException(line);
- }
- int code = parseCode(line);
- if (code == -1)
- {
- throw new ProtocolException(line);
- }
- char c = line.charAt(3);
- if (c == ' ')
- {
- return new FTPResponse(code, line.substring(4));
- }
- else if (c == '-')
- {
- CPStringBuilder buf = new CPStringBuilder(line.substring(4));
- buf.append('\n');
- while(true)
- {
- line = in.readLine();
- if (line == null)
- {
- throw new ProtocolException("EOF");
- }
- if (line.length() >= 4 &&
- line.charAt(3) == ' ' &&
- parseCode(line) == code)
- {
- return new FTPResponse(code, line.substring(4),
- buf.toString());
- }
- else
- {
- buf.append(line);
- buf.append('\n');
- }
- }
- }
- else
- {
- throw new ProtocolException(line);
- }
- }
-
- /*
- * Parses the 3-digit numeric code at the beginning of the given line.
- * Returns -1 on failure.
- */
- static final int parseCode(String line)
- {
- char[] c = { line.charAt(0), line.charAt(1), line.charAt(2) };
- int ret = 0;
- for (int i = 0; i < 3; i++)
- {
- int digit =((int) c[i]) - 0x30;
- if (digit < 0 || digit > 9)
- {
- return -1;
- }
- // Computing integer powers is way too expensive in Java!
- switch (i)
- {
- case 0:
- ret +=(100 * digit);
- break;
- case 1:
- ret +=(10 * digit);
- break;
- case 2:
- ret += digit;
- break;
- }
- }
- return ret;
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/FTPException.java b/libjava/classpath/gnu/java/net/protocol/ftp/FTPException.java
deleted file mode 100644
index 1a7fcb8..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/FTPException.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/* FTPException.java --
- Copyright (C) 2003. 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.IOException;
-
-/**
- * An FTP control exception.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class FTPException
- extends IOException
-{
-
- /**
- * The response that provoked this exception.
- */
- protected final FTPResponse response;
-
- /**
- * Constructs a new FTP exception.
- * @param response the response that provoked this exception
- */
- public FTPException(FTPResponse response)
- {
- super(response.getMessage());
- this.response = response;
- }
-
- /**
- * Returns the response that provoked this exception.
- */
- public FTPResponse getResponse()
- {
- return response;
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/FTPResponse.java b/libjava/classpath/gnu/java/net/protocol/ftp/FTPResponse.java
deleted file mode 100644
index 2620f0d..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/FTPResponse.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/* FTPResponse.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-/**
- * An FTP control response.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public final class FTPResponse
-{
-
- /**
- * The 3-digit status code.
- */
- protected final int code;
-
- /**
- * The human-readable message.
- */
- protected final String message;
-
- /**
- * Multiline data, if present.
- */
- protected final String data;
-
- /**
- * Constructs a new FTP response.
- * @param code the status code
- * @param message the message
- */
- public FTPResponse(int code, String message)
- {
- this(code, message, null);
- }
-
- /**
- * Constructs a new multiline FTP response.
- * @param code the status code
- * @param message the message
- * @param data multiline data
- */
- public FTPResponse(int code, String message, String data)
- {
- this.code = code;
- this.message = message;
- this.data = data;
- }
-
- /**
- * Returns the 3-digit status code.
- */
- public int getCode()
- {
- return code;
- }
-
- /**
- * Returns the human-readable message.
- */
- public String getMessage()
- {
- return message;
- }
-
- /**
- * Returns the multiline data, or null if there was no such data.
- */
- public String getData()
- {
- return data;
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/FTPURLConnection.java b/libjava/classpath/gnu/java/net/protocol/ftp/FTPURLConnection.java
deleted file mode 100644
index 8cc1faf..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/FTPURLConnection.java
+++ /dev/null
@@ -1,375 +0,0 @@
-/* FTPURLConnection.java --
- Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import gnu.classpath.SystemProperties;
-import gnu.java.net.GetLocalHostAction;
-
-import java.io.FilterInputStream;
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.URL;
-import java.net.URLConnection;
-import java.security.AccessController;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * An FTP URL connection.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class FTPURLConnection
- extends URLConnection
-{
-
- /**
- * The connection managing the protocol exchange.
- */
- protected FTPConnection connection;
-
- protected boolean passive;
- protected int representationType;
- protected int fileStructure;
- protected int transferMode;
-
- /**
- * Constructs an FTP connection to the specified URL.
- * @param url the URL
- */
- public FTPURLConnection(URL url)
- {
- super(url);
- passive = true;
- representationType = FTPConnection.TYPE_BINARY;
- fileStructure = -1;
- transferMode = -1;
- }
-
- /**
- * Establishes the connection.
- */
- public void connect()
- throws IOException
- {
- if (connected)
- {
- return;
- }
- String host = url.getHost();
- int port = url.getPort();
- String username = url.getUserInfo();
- String password = null;
- if (username != null)
- {
- int ci = username.indexOf(':');
- if (ci != -1)
- {
- password = username.substring(ci + 1);
- username = username.substring(0, ci);
- }
- }
- else
- {
- username = "anonymous";
- GetLocalHostAction a = new GetLocalHostAction();
- InetAddress localhost = AccessController.doPrivileged(a);
- password = SystemProperties.getProperty("user.name") + "@" +
- ((localhost == null) ? "localhost" : localhost.getHostName());
- }
- connection = new FTPConnection(host, port);
- if (!connection.authenticate(username, password))
- {
- throw new SecurityException("Authentication failed");
- }
- connection.setPassive(passive);
- if (representationType != -1)
- {
- connection.setRepresentationType(representationType);
- }
- if (fileStructure != -1)
- {
- connection.setFileStructure(fileStructure);
- }
- if (transferMode != -1)
- {
- connection.setTransferMode(transferMode);
- }
- }
-
- /**
- * This connection supports doInput.
- */
- public void setDoInput(boolean doinput)
- {
- doInput = doinput;
- }
-
- /**
- * This connection supports doOutput.
- */
- public void setDoOutput(boolean dooutput)
- {
- doOutput = dooutput;
- }
-
- /**
- * Returns an input stream that reads from this open connection.
- */
- public InputStream getInputStream()
- throws IOException
- {
- if (!connected)
- {
- connect();
- }
- String path = url.getPath();
- if (connection.changeWorkingDirectory(path))
- {
- return this.new ClosingInputStream(connection.list(null));
- }
- else
- {
- return this.new ClosingInputStream(connection.retrieve(path));
- }
- }
-
- /**
- * Returns an output stream that writes to this connection.
- */
- public OutputStream getOutputStream()
- throws IOException
- {
- if (!connected)
- {
- connect();
- }
- String path = url.getPath();
- return this.new ClosingOutputStream(connection.store(path));
- }
-
- public String getRequestProperty(String key)
- {
- if ("passive".equals(key))
- {
- return Boolean.toString(passive);
- }
- else if ("representationType".equals(key))
- {
- switch (representationType)
- {
- case FTPConnection.TYPE_ASCII:
- return "ASCII";
- case FTPConnection.TYPE_EBCDIC:
- return "EBCDIC";
- case FTPConnection.TYPE_BINARY:
- return "BINARY";
- }
- }
- else if ("fileStructure".equals(key))
- {
- switch (fileStructure)
- {
- case FTPConnection.STRUCTURE_FILE:
- return "FILE";
- case FTPConnection.STRUCTURE_RECORD:
- return "RECORD";
- case FTPConnection.STRUCTURE_PAGE:
- return "PAGE";
- }
- }
- else if ("transferMode".equals(key))
- {
- switch (transferMode)
- {
- case FTPConnection.MODE_STREAM:
- return "STREAM";
- case FTPConnection.MODE_BLOCK:
- return "BLOCK";
- case FTPConnection.MODE_COMPRESSED:
- return "COMPRESSED";
- }
- }
- return null;
- }
-
- public Map<String, List<String>> getRequestProperties()
- {
- Map<String, List<String>> map = new HashMap<String, List<String>>();
- addRequestPropertyValue(map, "passive");
- addRequestPropertyValue(map, "representationType");
- addRequestPropertyValue(map, "fileStructure");
- addRequestPropertyValue(map, "transferMode");
- return map;
- }
-
- private void addRequestPropertyValue(Map<String, List<String>> map,
- String key)
- {
- String value = getRequestProperty(key);
- ArrayList<String> l = new ArrayList<String>();
- l.add(value);
- map.put(key, l);
- }
-
- public void setRequestProperty(String key, String value)
- {
- if (connected)
- {
- throw new IllegalStateException();
- }
- if ("passive".equals(key))
- {
- passive = Boolean.valueOf(value).booleanValue();
- }
- else if ("representationType".equals(key))
- {
- if ("A".equalsIgnoreCase(value) ||
- "ASCII".equalsIgnoreCase(value))
- {
- representationType = FTPConnection.TYPE_ASCII;
- }
- else if ("E".equalsIgnoreCase(value) ||
- "EBCDIC".equalsIgnoreCase(value))
- {
- representationType = FTPConnection.TYPE_EBCDIC;
- }
- else if ("I".equalsIgnoreCase(value) ||
- "BINARY".equalsIgnoreCase(value))
- {
- representationType = FTPConnection.TYPE_BINARY;
- }
- else
- {
- throw new IllegalArgumentException(value);
- }
- }
- else if ("fileStructure".equals(key))
- {
- if ("F".equalsIgnoreCase(value) ||
- "FILE".equalsIgnoreCase(value))
- {
- fileStructure = FTPConnection.STRUCTURE_FILE;
- }
- else if ("R".equalsIgnoreCase(value) ||
- "RECORD".equalsIgnoreCase(value))
- {
- fileStructure = FTPConnection.STRUCTURE_RECORD;
- }
- else if ("P".equalsIgnoreCase(value) ||
- "PAGE".equalsIgnoreCase(value))
- {
- fileStructure = FTPConnection.STRUCTURE_PAGE;
- }
- else
- {
- throw new IllegalArgumentException(value);
- }
- }
- else if ("transferMode".equals(key))
- {
- if ("S".equalsIgnoreCase(value) ||
- "STREAM".equalsIgnoreCase(value))
- {
- transferMode = FTPConnection.MODE_STREAM;
- }
- else if ("B".equalsIgnoreCase(value) ||
- "BLOCK".equalsIgnoreCase(value))
- {
- transferMode = FTPConnection.MODE_BLOCK;
- }
- else if ("C".equalsIgnoreCase(value) ||
- "COMPRESSED".equalsIgnoreCase(value))
- {
- transferMode = FTPConnection.MODE_COMPRESSED;
- }
- else
- {
- throw new IllegalArgumentException(value);
- }
- }
- }
-
- public void addRequestProperty(String key, String value)
- {
- setRequestProperty(key, value);
- }
-
- class ClosingInputStream
- extends FilterInputStream
- {
-
- ClosingInputStream(InputStream in)
- {
- super(in);
- }
-
- public void close()
- throws IOException
- {
- super.close();
- connection.logout();
- }
-
- }
-
- class ClosingOutputStream
- extends FilterOutputStream
- {
-
- ClosingOutputStream(OutputStream out)
- {
- super(out);
- }
-
- public void close()
- throws IOException
- {
- super.close();
- connection.logout();
- }
-
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/Handler.java b/libjava/classpath/gnu/java/net/protocol/ftp/Handler.java
deleted file mode 100644
index 7638b66..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/Handler.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Handler.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-
-/**
- * An FTP URL stream handler.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class Handler
- extends URLStreamHandler
-{
-
- protected int getDefaultPort()
- {
- return FTPConnection.FTP_PORT;
- }
-
- /**
- * Returns an FTPURLConnection for the given URL.
- */
- public URLConnection openConnection(URL url)
- throws IOException
- {
- return new FTPURLConnection(url);
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/PassiveModeDTP.java b/libjava/classpath/gnu/java/net/protocol/ftp/PassiveModeDTP.java
deleted file mode 100644
index a74346c..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/PassiveModeDTP.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/* PassiveModeDTP.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-
-/**
- * A passive mode FTP data transfer process.
- * This connects to the host specified and proxies the resulting socket's
- * input and output streams.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-final class PassiveModeDTP
- implements DTP
-{
-
- final String address;
- final int port;
- Socket socket;
- DTPInputStream in;
- DTPOutputStream out;
- boolean completed;
- boolean inProgress;
- int transferMode;
-
- PassiveModeDTP(String address, int port, InetAddress localhost,
- int connectionTimeout, int timeout)
- throws IOException
- {
- this.address = address;
- this.port = port;
- completed = false;
- inProgress = false;
- socket = new Socket();
- InetSocketAddress remote = new InetSocketAddress(address, port);
- InetSocketAddress local = new InetSocketAddress(localhost, port + 1);
- socket.bind(local);
- if (connectionTimeout > 0)
- {
- socket.connect(remote, connectionTimeout);
- }
- else
- {
- socket.connect(remote);
- }
- if (timeout > 0)
- {
- socket.setSoTimeout(timeout);
- }
- }
-
- /**
- * Returns an input stream from which a remote file can be read.
- */
- public InputStream getInputStream()
- throws IOException
- {
- if (inProgress)
- {
- throw new IOException("Transfer in progress");
- }
- switch (transferMode)
- {
- case FTPConnection.MODE_STREAM:
- in = new StreamInputStream(this, socket.getInputStream());
- break;
- case FTPConnection.MODE_BLOCK:
- in = new BlockInputStream(this, socket.getInputStream());
- break;
- case FTPConnection.MODE_COMPRESSED:
- in = new CompressedInputStream(this, socket.getInputStream());
- break;
- default:
- throw new IllegalStateException("Invalid transfer mode");
- }
- in.setTransferComplete(false);
- return in;
- }
-
- /**
- * Returns an output stream to which a local file can be written for
- * upload.
- */
- public OutputStream getOutputStream()
- throws IOException
- {
- if (inProgress)
- {
- throw new IOException("Transfer in progress");
- }
- switch (transferMode)
- {
- case FTPConnection.MODE_STREAM:
- out = new StreamOutputStream(this, socket.getOutputStream());
- break;
- case FTPConnection.MODE_BLOCK:
- out = new BlockOutputStream(this, socket.getOutputStream());
- break;
- case FTPConnection.MODE_COMPRESSED:
- out = new CompressedOutputStream(this, socket.getOutputStream());
- break;
- default:
- throw new IllegalStateException("Invalid transfer mode");
- }
- out.setTransferComplete(false);
- return out;
- }
-
- public void setTransferMode(int mode)
- {
- transferMode = mode;
- }
-
- public void complete()
- {
- completed = true;
- if (!inProgress)
- {
- transferComplete();
- }
- }
-
- public boolean abort()
- {
- completed = true;
- transferComplete();
- return inProgress;
- }
-
- /*
- * Called by DTPInputStream or DTPOutputStream when end of
- * stream is reached.
- */
- public void transferComplete()
- {
- if (in != null)
- {
- in.setTransferComplete(true);
- }
- if (out != null)
- {
- out.setTransferComplete(true);
- }
- inProgress = false;
- completed = completed ||(transferMode == FTPConnection.MODE_STREAM);
- if (completed && socket != null)
- {
- try
- {
- socket.close();
- }
- catch (IOException e)
- {
- }
- }
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/StreamInputStream.java b/libjava/classpath/gnu/java/net/protocol/ftp/StreamInputStream.java
deleted file mode 100644
index beee14b..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/StreamInputStream.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/* StreamInputStream.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A DTP input stream that implements the FTP stream data transfer mode.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-class StreamInputStream
- extends DTPInputStream
-{
-
- StreamInputStream(DTP dtp, InputStream in)
- {
- super(dtp, in);
- }
-
- public int read()
- throws IOException
- {
- if (transferComplete)
- {
- return -1;
- }
- int c = in.read();
- if (c == -1)
- {
- close();
- }
- return c;
- }
-
- public int read(byte[] buf)
- throws IOException
- {
- return read(buf, 0, buf.length);
- }
-
- public int read(byte[] buf, int off, int len)
- throws IOException
- {
- if (transferComplete)
- {
- return -1;
- }
- int l = in.read(buf, off, len);
- if (l == -1)
- {
- close();
- }
- return l;
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/StreamOutputStream.java b/libjava/classpath/gnu/java/net/protocol/ftp/StreamOutputStream.java
deleted file mode 100644
index 2df1a87..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/StreamOutputStream.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/* StreamOutputStream.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.ftp;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * A DTP output stream that implements the FTP stream transfer mode.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-class StreamOutputStream
- extends DTPOutputStream
-{
-
- StreamOutputStream(DTP dtp, OutputStream out)
- {
- super(dtp, out);
- }
-
- public void write(int c)
- throws IOException
- {
- if (transferComplete)
- {
- return;
- }
- out.write(c);
- }
-
- public void write(byte[] b)
- throws IOException
- {
- write(b, 0, b.length);
- }
-
- public void write(byte[] b, int off, int len)
- throws IOException
- {
- if (transferComplete)
- {
- return;
- }
- out.write(b, off, len);
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/package.html b/libjava/classpath/gnu/java/net/protocol/ftp/package.html
deleted file mode 100644
index fa3e34d..0000000
--- a/libjava/classpath/gnu/java/net/protocol/ftp/package.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.net.protocol.ftp package.
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.net.protocol.ftp</title></head>
-
-<body>
-
-<p>
-This package contains an FTP client. It can handle both active and passive
-mode connections and the various transfer modes and representation types.
-</p>
-
-<p>
-Interaction with the server is via a simple stream interface. Only one
-concurrent stream (input or output) is supported.
-</p>
-
-<p>
-The control connection to the server can be protected using TLS
-(the starttls method).
-</p>
-
-</body>
-</html>
diff --git a/libjava/classpath/gnu/java/net/protocol/http/Authenticator.java b/libjava/classpath/gnu/java/net/protocol/http/Authenticator.java
deleted file mode 100644
index b4ee41e..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/Authenticator.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Authenticator.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-/**
- * Callback interface for managing authentication.
- * @see Request#setAuthenticator
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public interface Authenticator
-{
-
- /**
- * Returns the credentials to supply for the given realm.
- * @param realm the authentication realm
- * @param attempt zero on first authentication attempt, increments on each
- * unsuccessful attempt
- */
- Credentials getCredentials(String realm, int attempt);
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java b/libjava/classpath/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java
deleted file mode 100644
index 22a33cc..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/ByteArrayRequestBodyWriter.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/* ByteArrayRequestBodyWriter.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-/**
- * A simple request body writer using a byte array.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class ByteArrayRequestBodyWriter
- implements RequestBodyWriter
-{
-
- /**
- * The content.
- */
- protected byte[] content;
-
- /**
- * The position within the content at which the next read will occur.
- */
- protected int pos;
-
- /**
- * Constructs a new byte array request body writer with the specified
- * content.
- * @param content the content buffer
- */
- public ByteArrayRequestBodyWriter(byte[] content)
- {
- this.content = content;
- pos = 0;
- }
-
- /**
- * Returns the total number of bytes that will be written in a single pass
- * by this writer.
- */
- public int getContentLength()
- {
- return content.length;
- }
-
- /**
- * Initialises the writer.
- * This will be called before each pass.
- */
- public void reset()
- {
- pos = 0;
- }
-
- /**
- * Writes body content to the supplied buffer.
- * @param buffer the content buffer
- * @return the number of bytes written
- */
- public int write(byte[] buffer)
- {
- int len = content.length - pos;
- len = (buffer.length < len) ? buffer.length : len;
- if (len > -1)
- {
- System.arraycopy(content, pos, buffer, 0, len);
- pos += len;
- }
- return len;
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/ChunkedInputStream.java b/libjava/classpath/gnu/java/net/protocol/http/ChunkedInputStream.java
deleted file mode 100644
index 33df0df..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/ChunkedInputStream.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/* ChunkedInputStream.java --
- Copyright (C) 2004, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-import gnu.java.lang.CPStringBuilder;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.ProtocolException;
-
-
-//
-// Note that we rely on the implemtation of skip() in the super class
-// (InputStream) calling our read methods to account for chunk headers
-// while skipping.
-//
-
-
-/**
- * Input stream wrapper for the "chunked" transfer-coding.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class ChunkedInputStream
- extends InputStream
-{
- Headers headers;
-
- /** The underlying stream. */
- private InputStream in;
-
- /** Size of the chunk we're reading. */
- int size;
- /** Number of bytes we've read in this chunk. */
- int count;
- /**
- * True when we should read meta-information, false when we should
- * read data.
- */
- boolean meta;
- /** True when we've hit EOF. */
- boolean eof;
-
- /**
- * Constructor.
- * @param in the response socket input stream
- * @param headers the headers to receive additional header lines
- */
- public ChunkedInputStream(InputStream in, Headers headers)
- {
- this.in = in;
- this.headers = headers;
- size = -1;
- count = 0;
- meta = true;
- }
-
- public int read()
- throws IOException
- {
- byte[] buf = new byte[1];
- int len = read(buf, 0, 1);
- if (len == -1)
- {
- return -1;
- }
- return 0xff & buf[0];
- }
-
- public synchronized int read(byte[] buffer, int offset, int length)
- throws IOException
- {
- if (eof)
- {
- return -1;
- }
- if (meta)
- {
- // Read chunk header
- int c, last = 0;
- boolean seenSemi = false;
- CPStringBuilder buf = new CPStringBuilder();
- do
- {
- c = in.read();
- if (c == 0x3b) // ;
- {
- seenSemi = true;
- }
- else if (c == 0x0a && last == 0x0d) // CRLF
- {
- try
- {
- size = Integer.parseInt(buf.toString(), 16);
- }
- catch (NumberFormatException nfe)
- {
- IOException ioe = new IOException("Bad chunk header");
- ioe.initCause(nfe);
- // Unrecoverable. Don't try to read more.
- in.close();
- throw ioe;
- }
- break;
- }
- else if (!seenSemi && c >= 0x30)
- {
- buf.append ((char) c);
- }
- last = c;
- }
- while(c != -1);
- count = 0;
- meta = false;
- }
- if (size == 0)
- {
- // Read trailer
- headers.parse(in);
- eof = true;
- return -1;
- }
- else
- {
- int canRead = Math.min(size - count, length);
- int len = in.read(buffer, offset, canRead);
- if (len == -1)
- {
- // This is an error condition but it isn't clear what we
- // should do with it.
- eof = true;
- return -1;
- }
- count += len;
- if (count == size)
- {
- // Read CRLF
- int c1 = in.read();
- int c2 = in.read();
- if (c1 == -1 || c2 == -1)
- {
- // EOF before CRLF: bad, but ignore
- eof = true;
- return -1;
- }
- if (c1 != 0x0d || c2 != 0x0a)
- {
- throw new ProtocolException("expecting CRLF: " + c1 + "," + c2);
- }
- meta = true;
- }
- return len;
- }
- }
-
- /**
- * This method returns the number of bytes that can be read from
- * this stream before a read might block. Even if the underlying
- * InputStream has data available past the end of the current chunk,
- * we have no way of knowing how large the next chunk header will
- * be. So we cannot report available data past the current chunk.
- *
- * @return The number of bytes that can be read before a read might
- * block
- *
- * @exception IOException If an error occurs
- */
- public int available() throws IOException
- {
- if (meta)
- return 0;
-
- return Math.min(in.available(), size - count);
- }
-
- /**
- * This method closes the ChunkedInputStream by closing the underlying
- * InputStream.
- *
- * @exception IOException If an error occurs
- */
- public void close() throws IOException
- {
- in.close();
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/Cookie.java b/libjava/classpath/gnu/java/net/protocol/http/Cookie.java
deleted file mode 100644
index 122a23f..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/Cookie.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Cookie.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-import gnu.java.lang.CPStringBuilder;
-
-import java.util.Date;
-
-/**
- * An HTTP cookie, as specified in RFC 2109.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class Cookie
-{
-
- /**
- * The name of the cookie.
- */
- protected final String name;
-
- /**
- * The value of the cookie.
- */
- protected final String value;
-
- /**
- * Optional documentation of the intended use of the cookie.
- */
- protected final String comment;
-
- /**
- * The domain for which the cookie is valid.
- */
- protected final String domain;
-
- /**
- * Optional subset of URL paths within the domain for which the cookie is
- * valid.
- */
- protected final String path;
-
- /**
- * Indicates that the user-agent should only use secure means to transmit
- * this cookie to the server.
- */
- protected final boolean secure;
-
- /**
- * The date at which this cookie expires.
- */
- protected final Date expires;
-
- public Cookie(String name, String value, String comment, String domain,
- String path, boolean secure, Date expires)
- {
- this.name = name;
- this.value = value;
- this.comment = comment;
- this.domain = domain;
- this.path = path;
- this.secure = secure;
- this.expires = expires;
- }
-
- public String getName()
- {
- return name;
- }
-
- public String getValue()
- {
- return value;
- }
-
- public String getComment()
- {
- return comment;
- }
-
- public String getDomain()
- {
- return domain;
- }
-
- public String getPath()
- {
- return path;
- }
-
- public boolean isSecure()
- {
- return secure;
- }
-
- public Date getExpiryDate()
- {
- return expires;
- }
-
- public String toString()
- {
- return toString(true, true);
- }
-
- public String toString(boolean showPath, boolean showDomain)
- {
- CPStringBuilder buf = new CPStringBuilder();
- buf.append(name);
- buf.append('=');
- buf.append(value);
- if (showPath)
- {
- buf.append("; $Path=");
- buf.append(path);
- }
- if (showDomain)
- {
- buf.append("; $Domain=");
- buf.append(domain);
- }
- return buf.toString();
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/CookieManager.java b/libjava/classpath/gnu/java/net/protocol/http/CookieManager.java
deleted file mode 100644
index da36866..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/CookieManager.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/* CookieManager.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-/**
- * Cookie manager interface.
- * If an application wants to handle cookies, they should implement this
- * interface and register the instance with each HTTPConnection they use.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public interface CookieManager
-{
-
- /**
- * Stores a cookie in the cookie manager.
- * @param cookie the cookie to store
- */
- void setCookie(Cookie cookie);
-
- /**
- * Retrieves the cookies matching the specified criteria.
- * @param host the host name
- * @param secure whether the connection is secure
- * @param path the path to access
- */
- Cookie[] getCookies(String host, boolean secure, String path);
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/Credentials.java b/libjava/classpath/gnu/java/net/protocol/http/Credentials.java
deleted file mode 100644
index f95b4b5..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/Credentials.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Credentials.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-/**
- * Represents a username/password combination that can be used to
- * authenticate to an HTTP server.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class Credentials
-{
-
- /**
- * The username.
- */
- private String username;
-
- /**
- * The password.
- */
- private String password;
-
- /**
- * Constructor.
- * @param username the username
- * @param password the password
- */
- public Credentials(String username, String password)
- {
- this.username = username;
- this.password = password;
- }
-
- /**
- * Returns the username.
- */
- public String getUsername()
- {
- return username;
- }
-
- /**
- * Returns the password.
- */
- public String getPassword()
- {
- return password;
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/HTTPConnection.java b/libjava/classpath/gnu/java/net/protocol/http/HTTPConnection.java
deleted file mode 100644
index b96bf4c..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/HTTPConnection.java
+++ /dev/null
@@ -1,897 +0,0 @@
-/* HTTPConnection.java --
- Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-import gnu.classpath.SystemProperties;
-
-import gnu.java.lang.CPStringBuilder;
-import gnu.java.net.EmptyX509TrustManager;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.SocketException;
-import java.security.GeneralSecurityException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-
-import javax.net.ssl.HandshakeCompletedListener;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocket;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManager;
-
-/**
- * A connection to an HTTP server.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class HTTPConnection
-{
-
- /**
- * The default HTTP port.
- */
- public static final int HTTP_PORT = 80;
-
- /**
- * The default HTTPS port.
- */
- public static final int HTTPS_PORT = 443;
-
- private static final String userAgent = SystemProperties.getProperty("http.agent");
-
- /**
- * The host name of the server to connect to.
- */
- protected final String hostname;
-
- /**
- * The port to connect to.
- */
- protected final int port;
-
- /**
- * Whether the connection should use transport level security (HTTPS).
- */
- protected final boolean secure;
-
- /**
- * The connection timeout for connecting the underlying socket.
- */
- protected final int connectionTimeout;
-
- /**
- * The read timeout for reads on the underlying socket.
- */
- protected final int timeout;
-
- /**
- * The host name of the proxy to connect to.
- */
- protected String proxyHostname;
-
- /**
- * The port on the proxy to connect to.
- */
- protected int proxyPort;
-
- /**
- * The major version of HTTP supported by this client.
- */
- protected int majorVersion;
-
- /**
- * The minor version of HTTP supported by this client.
- */
- protected int minorVersion;
-
- private final List<HandshakeCompletedListener> handshakeCompletedListeners;
-
- /**
- * The socket this connection communicates on.
- */
- protected Socket socket;
-
- /**
- * The SSL socket factory to use.
- */
- private SSLSocketFactory sslSocketFactory;
-
- /**
- * The socket input stream.
- */
- protected InputStream in;
-
- /**
- * The socket output stream.
- */
- protected OutputStream out;
-
- /**
- * Nonce values seen by this connection.
- */
- private Map<String, Integer> nonceCounts;
-
- /**
- * The cookie manager for this connection.
- */
- protected CookieManager cookieManager;
-
-
- /**
- * The pool that this connection is a member of (if any).
- */
- private Pool pool;
-
- /**
- * Creates a new HTTP connection.
- * @param hostname the name of the host to connect to
- */
- public HTTPConnection(String hostname)
- {
- this(hostname, HTTP_PORT, false, 0, 0);
- }
-
- /**
- * Creates a new HTTP or HTTPS connection.
- * @param hostname the name of the host to connect to
- * @param secure whether to use a secure connection
- */
- public HTTPConnection(String hostname, boolean secure)
- {
- this(hostname, secure ? HTTPS_PORT : HTTP_PORT, secure, 0, 0);
- }
-
- /**
- * Creates a new HTTP or HTTPS connection on the specified port.
- * @param hostname the name of the host to connect to
- * @param secure whether to use a secure connection
- * @param connectionTimeout the connection timeout
- * @param timeout the socket read timeout
- */
- public HTTPConnection(String hostname, boolean secure,
- int connectionTimeout, int timeout)
- {
- this(hostname, secure ? HTTPS_PORT : HTTP_PORT, secure,
- connectionTimeout, timeout);
- }
-
- /**
- * Creates a new HTTP connection on the specified port.
- * @param hostname the name of the host to connect to
- * @param port the port on the host to connect to
- */
- public HTTPConnection(String hostname, int port)
- {
- this(hostname, port, false, 0, 0);
- }
-
- /**
- * Creates a new HTTP or HTTPS connection on the specified port.
- * @param hostname the name of the host to connect to
- * @param port the port on the host to connect to
- * @param secure whether to use a secure connection
- */
- public HTTPConnection(String hostname, int port, boolean secure)
- {
- this(hostname, port, secure, 0, 0);
- }
-
- /**
- * Creates a new HTTP or HTTPS connection on the specified port.
- * @param hostname the name of the host to connect to
- * @param port the port on the host to connect to
- * @param secure whether to use a secure connection
- * @param connectionTimeout the connection timeout
- * @param timeout the socket read timeout
- *
- * @throws IllegalArgumentException if either connectionTimeout or
- * timeout less than zero.
- */
- public HTTPConnection(String hostname, int port, boolean secure,
- int connectionTimeout, int timeout)
- {
- if (connectionTimeout < 0 || timeout < 0)
- throw new IllegalArgumentException();
-
- this.hostname = hostname;
- this.port = port;
- this.secure = secure;
- this.connectionTimeout = connectionTimeout;
- this.timeout = timeout;
- majorVersion = minorVersion = 1;
- handshakeCompletedListeners
- = new ArrayList<HandshakeCompletedListener>(2);
- }
-
- /**
- * Returns the name of the host to connect to.
- */
- public String getHostName()
- {
- return hostname;
- }
-
- /**
- * Returns the port on the host to connect to.
- */
- public int getPort()
- {
- return port;
- }
-
- /**
- * Indicates whether to use a secure connection or not.
- */
- public boolean isSecure()
- {
- return secure;
- }
-
- /**
- * Returns the HTTP version string supported by this connection.
- * @see #majorVersion
- * @see #minorVersion
- */
- public String getVersion()
- {
- return "HTTP/" + majorVersion + '.' + minorVersion;
- }
-
- /**
- * Sets the HTTP version supported by this connection.
- * @param majorVersion the major version
- * @param minorVersion the minor version
- */
- public void setVersion(int majorVersion, int minorVersion)
- {
- if (majorVersion != 1)
- {
- throw new IllegalArgumentException("major version not supported: " +
- majorVersion);
- }
- if (minorVersion < 0 || minorVersion > 1)
- {
- throw new IllegalArgumentException("minor version not supported: " +
- minorVersion);
- }
- this.majorVersion = majorVersion;
- this.minorVersion = minorVersion;
- }
-
- /**
- * Directs this connection to use the specified proxy.
- * @param hostname the proxy host name
- * @param port the port on the proxy to connect to
- */
- public void setProxy(String hostname, int port)
- {
- proxyHostname = hostname;
- proxyPort = port;
- }
-
- /**
- * Indicates whether this connection is using an HTTP proxy.
- */
- public boolean isUsingProxy()
- {
- return (proxyHostname != null && proxyPort > 0);
- }
-
- /**
- * Sets the cookie manager to use for this connection.
- * @param cookieManager the cookie manager
- */
- public void setCookieManager(CookieManager cookieManager)
- {
- this.cookieManager = cookieManager;
- }
-
- /**
- * Returns the cookie manager in use for this connection.
- */
- public CookieManager getCookieManager()
- {
- return cookieManager;
- }
-
- /**
- * Manages a pool of HTTPConections. The pool will have a maximum
- * size determined by the value of the maxConn parameter passed to
- * the {@link #get} method. This value inevitably comes from the
- * http.maxConnections system property. If the
- * classpath.net.http.keepAliveTTL system property is set, that will
- * be the maximum time (in seconds) that an idle connection will be
- * maintained.
- */
- static class Pool
- {
- /**
- * Singleton instance of the pool.
- */
- static Pool instance = new Pool();
-
- /**
- * The pool
- */
- final LinkedList<HTTPConnection> connectionPool
- = new LinkedList<HTTPConnection>();
-
- /**
- * Maximum size of the pool.
- */
- int maxConnections;
-
- /**
- * If greater than zero, the maximum time a connection will remain
- * int the pool.
- */
- int connectionTTL;
-
- /**
- * A thread that removes connections older than connectionTTL.
- */
- class Reaper
- implements Runnable
- {
- public void run()
- {
- synchronized (Pool.this)
- {
- try
- {
- do
- {
- while (connectionPool.size() > 0)
- {
- long currentTime = System.currentTimeMillis();
-
- HTTPConnection c =
- (HTTPConnection)connectionPool.getFirst();
-
- long waitTime = c.timeLastUsed
- + connectionTTL - currentTime;
-
- if (waitTime <= 0)
- removeOldest();
- else
- try
- {
- Pool.this.wait(waitTime);
- }
- catch (InterruptedException _)
- {
- // Ignore the interrupt.
- }
- }
- // After the pool is empty, wait TTL to see if it
- // is used again. This is because in the
- // situation where a single thread is making HTTP
- // requests to the same server it can remove the
- // connection from the pool before the Reaper has
- // a chance to start. This would cause the Reaper
- // to exit if it were not for this extra delay.
- // The result would be starting a Reaper thread
- // for each HTTP request. With the delay we get
- // at most one Reaper created each TTL.
- try
- {
- Pool.this.wait(connectionTTL);
- }
- catch (InterruptedException _)
- {
- // Ignore the interrupt.
- }
- }
- while (connectionPool.size() > 0);
- }
- finally
- {
- reaper = null;
- }
- }
- }
- }
-
- Reaper reaper;
-
- /**
- * Private constructor to ensure singleton.
- */
- private Pool()
- {
- }
-
- /**
- * Tests for a matching connection.
- *
- * @param c connection to match.
- * @param h the host name.
- * @param p the port.
- * @param sec true if using https.
- *
- * @return true if c matches h, p, and sec.
- */
- private static boolean matches(HTTPConnection c,
- String h, int p, boolean sec)
- {
- return h.equals(c.hostname) && (p == c.port) && (sec == c.secure);
- }
-
- /**
- * Get a pooled HTTPConnection. If there is an existing idle
- * connection to the requested server it is returned. Otherwise a
- * new connection is created.
- *
- * @param host the name of the host to connect to
- * @param port the port on the host to connect to
- * @param secure whether to use a secure connection
- *
- * @return the HTTPConnection.
- */
- synchronized HTTPConnection get(String host,
- int port,
- boolean secure,
- int connectionTimeout, int timeout)
- {
- String ttl =
- SystemProperties.getProperty("classpath.net.http.keepAliveTTL");
- connectionTTL = 10000;
- if (ttl != null && ttl.length() > 0)
- try
- {
- int v = 1000 * Integer.parseInt(ttl);
- if (v >= 0)
- connectionTTL = v;
- }
- catch (NumberFormatException _)
- {
- // Ignore.
- }
-
- String mc = SystemProperties.getProperty("http.maxConnections");
- maxConnections = 5;
- if (mc != null && mc.length() > 0)
- try
- {
- int v = Integer.parseInt(mc);
- if (v > 0)
- maxConnections = v;
- }
- catch (NumberFormatException _)
- {
- // Ignore.
- }
-
- HTTPConnection c = null;
-
- ListIterator it = connectionPool.listIterator(0);
- while (it.hasNext())
- {
- HTTPConnection cc = (HTTPConnection)it.next();
- if (matches(cc, host, port, secure))
- {
- c = cc;
- it.remove();
- // Update the timeout.
- if (c.socket != null)
- try
- {
- c.socket.setSoTimeout(timeout);
- }
- catch (SocketException _)
- {
- // Ignore.
- }
- break;
- }
- }
- if (c == null)
- {
- c = new HTTPConnection(host, port, secure,
- connectionTimeout, timeout);
- c.setPool(this);
- }
- return c;
- }
-
- /**
- * Put an idle HTTPConnection back into the pool. If this causes
- * the pool to be come too large, the oldest connection is removed
- * and closed.
- *
- */
- synchronized void put(HTTPConnection c)
- {
- c.timeLastUsed = System.currentTimeMillis();
- connectionPool.addLast(c);
-
- // maxConnections must always be >= 1
- while (connectionPool.size() >= maxConnections)
- removeOldest();
-
- if (connectionTTL > 0 && null == reaper) {
- // If there is a connectionTTL, then the reaper has removed
- // any stale connections, so we don't have to check for stale
- // now. We do have to start a reaper though, as there is not
- // one running now.
- reaper = new Reaper();
- Thread t = new Thread(reaper, "HTTPConnection.Reaper");
- t.setDaemon(true);
- t.start();
- }
- }
-
- /**
- * Remove the oldest connection from the pool and close it.
- */
- void removeOldest()
- {
- HTTPConnection cx = (HTTPConnection)connectionPool.removeFirst();
- try
- {
- cx.closeConnection();
- }
- catch (IOException ioe)
- {
- // Ignore it. We are just cleaning up.
- }
- }
- }
-
- /**
- * The number of times this HTTPConnection has be used via keep-alive.
- */
- int useCount;
-
- /**
- * If this HTTPConnection is in the pool, the time it was put there.
- */
- long timeLastUsed;
-
- /**
- * Set the connection pool that this HTTPConnection is a member of.
- * If left unset or set to null, it will not be a member of any pool
- * and will not be a candidate for reuse.
- *
- * @param p the pool.
- */
- void setPool(Pool p)
- {
- pool = p;
- }
-
- /**
- * Signal that this HTTPConnection is no longer needed and can be
- * returned to the connection pool.
- *
- */
- void release()
- {
- if (pool != null)
- {
- useCount++;
- pool.put(this);
-
- }
- else
- {
- // If there is no pool, just close.
- try
- {
- closeConnection();
- }
- catch (IOException ioe)
- {
- // Ignore it. We are just cleaning up.
- }
- }
- }
-
- /**
- * Creates a new request using this connection.
- * @param method the HTTP method to invoke
- * @param path the URI-escaped RFC2396 <code>abs_path</code> with
- * optional query part
- */
- public Request newRequest(String method, String path)
- {
- if (method == null || method.length() == 0)
- {
- throw new IllegalArgumentException("method must have non-zero length");
- }
- if (path == null || path.length() == 0)
- {
- path = "/";
- }
- Request ret = new Request(this, method, path);
- if ((secure && port != HTTPS_PORT) ||
- (!secure && port != HTTP_PORT))
- {
- ret.setHeader("Host", hostname + ":" + port);
- }
- else
- {
- ret.setHeader("Host", hostname);
- }
- ret.setHeader("User-Agent", userAgent);
- ret.setHeader("Connection", "keep-alive");
- ret.setHeader("Accept-Encoding",
- "chunked;q=1.0, gzip;q=0.9, deflate;q=0.8, " +
- "identity;q=0.6, *;q=0");
- if (cookieManager != null)
- {
- Cookie[] cookies = cookieManager.getCookies(hostname, secure, path);
- if (cookies != null && cookies.length > 0)
- {
- CPStringBuilder buf = new CPStringBuilder();
- buf.append("$Version=1");
- for (int i = 0; i < cookies.length; i++)
- {
- buf.append(',');
- buf.append(' ');
- buf.append(cookies[i].toString());
- }
- ret.setHeader("Cookie", buf.toString());
- }
- }
- return ret;
- }
-
- /**
- * Closes this connection.
- */
- public void close()
- throws IOException
- {
- closeConnection();
- }
-
- /**
- * Retrieves the socket associated with this connection.
- * This creates the socket if necessary.
- */
- protected synchronized Socket getSocket()
- throws IOException
- {
- if (socket == null)
- {
- String connectHostname = hostname;
- int connectPort = port;
- if (isUsingProxy())
- {
- connectHostname = proxyHostname;
- connectPort = proxyPort;
- }
- socket = new Socket();
- InetSocketAddress address =
- new InetSocketAddress(connectHostname, connectPort);
- if (connectionTimeout > 0)
- {
- socket.connect(address, connectionTimeout);
- }
- else
- {
- socket.connect(address);
- }
- if (timeout > 0)
- {
- socket.setSoTimeout(timeout);
- }
- if (secure)
- {
- try
- {
- SSLSocketFactory factory = getSSLSocketFactory();
- SSLSocket ss =
- (SSLSocket) factory.createSocket(socket, connectHostname,
- connectPort, true);
- String[] protocols = { "TLSv1", "SSLv3" };
- ss.setEnabledProtocols(protocols);
- ss.setUseClientMode(true);
- synchronized (handshakeCompletedListeners)
- {
- if (!handshakeCompletedListeners.isEmpty())
- {
- for (Iterator i =
- handshakeCompletedListeners.iterator();
- i.hasNext(); )
- {
- HandshakeCompletedListener l =
- (HandshakeCompletedListener) i.next();
- ss.addHandshakeCompletedListener(l);
- }
- }
- }
- ss.startHandshake();
- socket = ss;
- }
- catch (GeneralSecurityException e)
- {
- throw new IOException(e.getMessage());
- }
- }
- in = socket.getInputStream();
- in = new BufferedInputStream(in);
- out = socket.getOutputStream();
- out = new BufferedOutputStream(out);
- }
- return socket;
- }
-
- SSLSocketFactory getSSLSocketFactory()
- throws GeneralSecurityException
- {
- if (sslSocketFactory == null)
- {
- TrustManager tm = new EmptyX509TrustManager();
- SSLContext context = SSLContext.getInstance("SSL");
- TrustManager[] trust = new TrustManager[] { tm };
- context.init(null, trust, null);
- sslSocketFactory = context.getSocketFactory();
- }
- return sslSocketFactory;
- }
-
- void setSSLSocketFactory(SSLSocketFactory factory)
- {
- sslSocketFactory = factory;
- }
-
- protected synchronized InputStream getInputStream()
- throws IOException
- {
- if (socket == null)
- {
- getSocket();
- }
- return in;
- }
-
- protected synchronized OutputStream getOutputStream()
- throws IOException
- {
- if (socket == null)
- {
- getSocket();
- }
- return out;
- }
-
- /**
- * Closes the underlying socket, if any.
- */
- protected synchronized void closeConnection()
- throws IOException
- {
- if (socket != null)
- {
- try
- {
- socket.close();
- }
- finally
- {
- socket = null;
- }
- }
- }
-
- /**
- * Returns a URI representing the connection.
- * This does not include any request path component.
- */
- protected String getURI()
- {
- CPStringBuilder buf = new CPStringBuilder();
- buf.append(secure ? "https://" : "http://");
- buf.append(hostname);
- if (secure)
- {
- if (port != HTTPConnection.HTTPS_PORT)
- {
- buf.append(':');
- buf.append(port);
- }
- }
- else
- {
- if (port != HTTPConnection.HTTP_PORT)
- {
- buf.append(':');
- buf.append(port);
- }
- }
- return buf.toString();
- }
-
- /**
- * Get the number of times the specified nonce has been seen by this
- * connection.
- */
- int getNonceCount(String nonce)
- {
- if (nonceCounts == null)
- {
- return 0;
- }
- return nonceCounts.get(nonce).intValue();
- }
-
- /**
- * Increment the number of times the specified nonce has been seen.
- */
- void incrementNonce(String nonce)
- {
- int current = getNonceCount(nonce);
- if (nonceCounts == null)
- {
- nonceCounts = new HashMap<String, Integer>();
- }
- nonceCounts.put(nonce, new Integer(current + 1));
- }
-
- // -- Events --
-
- void addHandshakeCompletedListener(HandshakeCompletedListener l)
- {
- synchronized (handshakeCompletedListeners)
- {
- handshakeCompletedListeners.add(l);
- }
- }
- void removeHandshakeCompletedListener(HandshakeCompletedListener l)
- {
- synchronized (handshakeCompletedListeners)
- {
- handshakeCompletedListeners.remove(l);
- }
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/HTTPDateFormat.java b/libjava/classpath/gnu/java/net/protocol/http/HTTPDateFormat.java
deleted file mode 100644
index 743f8e8e..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/HTTPDateFormat.java
+++ /dev/null
@@ -1,440 +0,0 @@
-/* HTTPDateFormat.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-import java.text.DateFormat;
-import java.text.DecimalFormat;
-import java.text.FieldPosition;
-import java.text.NumberFormat;
-import java.text.ParsePosition;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
-
-/**
- * HTTP date formatter and parser.
- * Formats dates according to RFC 822 (updated by RFC 1123).
- * Parses dates according to the above, <i>or</i> RFC 1036, <i>or</i> the
- * ANSI C <code>asctime()</code> format.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class HTTPDateFormat
- extends DateFormat
-{
-
- static final String[] DAYS_OF_WEEK = {
- null, "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
- };
-
- static final String[] MONTHS = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
- };
-
- public HTTPDateFormat()
- {
- calendar = new GregorianCalendar(TimeZone.getTimeZone ("GMT"));
- numberFormat = new DecimalFormat();
- }
-
- /**
- * Appends the textual value for the specified field to the given string
- * buffer. This method should be avoided, use <code>format(Date)</code>
- * instead.
- * @param date the Date object
- * @param buf the buffer to append to
- * @param field the current field position
- * @return the modified buffer
- */
- public StringBuffer format(Date date, StringBuffer buf,
- FieldPosition field)
- {
- calendar.clear();
- calendar.setTime(date);
- buf.setLength(0);
-
- // Day of week
- buf.append(DAYS_OF_WEEK[calendar.get(Calendar.DAY_OF_WEEK)]);
- buf.append(',');
- buf.append(' ');
-
- // Day of month
- int day = calendar.get(Calendar.DAY_OF_MONTH);
- buf.append(Character.forDigit(day / 10, 10));
- buf.append(Character.forDigit(day % 10, 10));
- buf.append(' ');
-
- // Month
- buf.append(MONTHS[calendar.get(Calendar.MONTH)]);
- buf.append(' ');
-
- // Year
- int year = calendar.get(Calendar.YEAR);
- if (year < 1000)
- {
- buf.append('0');
- if (year < 100)
- {
- buf.append('0');
- if (year < 10)
- {
- buf.append('0');
- }
- }
- }
- buf.append(Integer.toString(year));
- buf.append(' ');
-
- // Hour
- int hour = calendar.get(Calendar.HOUR_OF_DAY);
- buf.append(Character.forDigit(hour / 10, 10));
- buf.append(Character.forDigit(hour % 10, 10));
- buf.append(':');
-
- // Minute
- int minute = calendar.get(Calendar.MINUTE);
- buf.append(Character.forDigit(minute / 10, 10));
- buf.append(Character.forDigit(minute % 10, 10));
- buf.append(':');
-
- // Second
- int second = calendar.get(Calendar.SECOND);
- buf.append(Character.forDigit(second / 10, 10));
- buf.append(Character.forDigit(second % 10, 10));
- buf.append(' ');
-
- // Timezone
- // Get time offset in minutes
- int zoneOffset =(calendar.get(Calendar.ZONE_OFFSET) +
- calendar.get(Calendar.DST_OFFSET)) / 60000;
-
- // Apply + or - appropriately
- if (zoneOffset < 0)
- {
- zoneOffset = -zoneOffset;
- buf.append('-');
- }
- else
- {
- buf.append('+');
- }
-
- // Set the 2 2-char fields as specified above
- int tzhours = zoneOffset / 60;
- buf.append(Character.forDigit(tzhours / 10, 10));
- buf.append(Character.forDigit(tzhours % 10, 10));
- int tzminutes = zoneOffset % 60;
- buf.append(Character.forDigit(tzminutes / 10, 10));
- buf.append(Character.forDigit(tzminutes % 10, 10));
-
- field.setBeginIndex(0);
- field.setEndIndex(buf.length());
- return buf;
- }
-
- /**
- * Parses the given date in the current TimeZone.
- * @param text the formatted date to be parsed
- * @param pos the current parse position
- */
- public Date parse(String text, ParsePosition pos)
- {
- int date, month, year, hour, minute, second;
- String monthText;
- int start = 0, end = -1;
- int len = text.length();
- calendar.clear();
- pos.setIndex(start);
- try
- {
- // Advance to date
- if (Character.isLetter(text.charAt(start)))
- {
- start = skipNonWhitespace(text, start);
- }
- // Determine mode
- switch(start)
- {
- case 3:
- // asctime
- start = skipWhitespace(text, start);
- pos.setIndex(start);
- end = skipNonWhitespace(text, start + 1);
- monthText = text.substring(start, end);
- month = -1;
- for (int i = 0; i < 12; i++)
- {
- if (MONTHS[i].equals(monthText))
- {
- month = i;
- break;
- }
- }
- if (month == -1)
- {
- pos.setErrorIndex(end);
- return null;
- }
- // Advance to date
- start = skipWhitespace(text, end + 1);
- pos.setIndex(start);
- end = skipNonWhitespace(text, start + 1);
- date = Integer.parseInt(text.substring(start, end));
- // Advance to hour
- start = skipWhitespace(text, end + 1);
- pos.setIndex(start);
- end = skipTo(text, start + 1, ':');
- hour = Integer.parseInt(text.substring(start, end));
- // Advance to minute
- start = end + 1;
- pos.setIndex(start);
- end = skipTo(text, start + 1, ':');
- minute = Integer.parseInt(text.substring(start, end));
- // Advance to second
- start = end + 1;
- pos.setIndex(start);
- end = skipNonWhitespace(text, start + 1);
- second = Integer.parseInt(text.substring(start, end));
- // Advance to year
- start = skipWhitespace(text, end + 1);
- pos.setIndex(start);
- end = skipNonWhitespace(text, start + 1);
- year = Integer.parseInt(text.substring(start, end));
- break;
- case 0:
- case 4:
- // rfc822
- start = skipWhitespace(text, start);
- pos.setIndex(start);
- end = skipNonWhitespace(text, start + 1);
- date = Integer.parseInt(text.substring(start, end));
- // Advance to month
- start = skipWhitespace(text, end + 1);
- pos.setIndex(start);
- end = skipNonWhitespace(text, start + 1);
- monthText = text.substring(start, end);
- month = -1;
- for (int i = 0; i < 12; i++)
- {
- if (MONTHS[i].equals(monthText))
- {
- month = i;
- break;
- }
- }
- if (month == -1)
- {
- pos.setErrorIndex(end);
- return null;
- }
- // Advance to year
- start = skipWhitespace(text, end + 1);
- pos.setIndex(start);
- end = skipNonWhitespace(text, start + 1);
- year = Integer.parseInt(text.substring(start, end));
- // Advance to hour
- start = skipWhitespace(text, end + 1);
- pos.setIndex(start);
- end = skipTo(text, start + 1, ':');
- hour = Integer.parseInt(text.substring(start, end));
- // Advance to minute
- start = end + 1;
- pos.setIndex(start);
- end = skipTo(text, start + 1, ':');
- minute = Integer.parseInt(text.substring(start, end));
- // Advance to second
- start = end + 1;
- pos.setIndex(start);
- end = start + 1;
- while (end < len && !Character.isWhitespace(text.charAt(end)))
- {
- end++;
- }
- second = Integer.parseInt(text.substring(start, end));
- break;
- default:
- // rfc850(obsolete)
- start = skipWhitespace(text, start);
- pos.setIndex(start);
- end = skipTo(text, start + 1, '-');
- date = Integer.parseInt(text.substring(start, end));
- // Advance to month
- start = end + 1;
- pos.setIndex(start);
- end = skipTo(text, start + 1, '-');
- monthText = text.substring(start, end);
- month = -1;
- for (int i = 0; i < 12; i++)
- {
- if (MONTHS[i].equals(monthText))
- {
- month = i;
- break;
- }
- }
- if (month == -1)
- {
- pos.setErrorIndex(end);
- return null;
- }
- // Advance to year
- start = end + 1;
- pos.setIndex(start);
- end = skipNonWhitespace(text, start + 1);
- year = 1900 + Integer.parseInt(text.substring(start, end));
- // Advance to hour
- start = skipWhitespace(text, end + 1);
- pos.setIndex(start);
- end = skipTo(text, start + 1, ':');
- hour = Integer.parseInt(text.substring(start, end));
- // Advance to minute
- start = end + 1;
- pos.setIndex(start);
- end = skipTo(text, start + 1, ':');
- minute = Integer.parseInt(text.substring(start, end));
- // Advance to second
- start = end + 1;
- pos.setIndex(start);
- end = start + 1;
- while (end < len && !Character.isWhitespace(text.charAt(end)))
- {
- end++;
- }
- second = Integer.parseInt(text.substring(start, end));
- }
-
- calendar.set(Calendar.YEAR, year);
- calendar.set(Calendar.MONTH, month);
- calendar.set(Calendar.DAY_OF_MONTH, date);
- calendar.set(Calendar.HOUR, hour);
- calendar.set(Calendar.MINUTE, minute);
- calendar.set(Calendar.SECOND, second);
-
- if (end != len)
- {
- // Timezone
- start = skipWhitespace(text, end + 1);
- end = start + 1;
- while (end < len && !Character.isWhitespace(text.charAt(end)))
- {
- end++;
- }
- char pm = text.charAt(start);
- if (Character.isLetter(pm))
- {
- TimeZone tz =
- TimeZone.getTimeZone(text.substring(start, end));
- calendar.set(Calendar.ZONE_OFFSET, tz.getRawOffset());
- }
- else
- {
- int zoneOffset = 0;
- zoneOffset += 600 * Character.digit(text.charAt(++start), 10);
- zoneOffset += 60 * Character.digit(text.charAt(++start), 10);
- zoneOffset += 10 * Character.digit(text.charAt(++start), 10);
- zoneOffset += Character.digit(text.charAt(++start), 10);
- zoneOffset *= 60000; // minutes -> ms
- if ('-' == pm)
- {
- zoneOffset = -zoneOffset;
- }
- calendar.set(Calendar.ZONE_OFFSET, zoneOffset);
- }
- }
- pos.setIndex(end);
-
- return calendar.getTime();
- }
- catch (NumberFormatException e)
- {
- pos.setErrorIndex(Math.max(start, end));
- }
- catch (StringIndexOutOfBoundsException e)
- {
- pos.setErrorIndex(Math.max(start, end));
- }
- return null;
- }
-
- private int skipWhitespace(String text, int pos)
- {
- while(Character.isWhitespace(text.charAt(pos)))
- {
- pos++;
- }
- return pos;
- }
-
- private int skipNonWhitespace(String text, int pos)
- {
- while(!Character.isWhitespace(text.charAt(pos)))
- {
- pos++;
- }
- return pos;
- }
-
- private int skipTo(String text, int pos, char c)
- {
- while(text.charAt(pos) != c)
- {
- pos++;
- }
- return pos;
- }
-
- /**
- * Don't allow setting the calendar.
- */
- public void setCalendar(Calendar newCalendar)
- {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Don't allow setting the NumberFormat.
- */
- public void setNumberFormat(NumberFormat newNumberFormat)
- {
- throw new UnsupportedOperationException();
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java b/libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java
deleted file mode 100644
index 9ba5c47..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java
+++ /dev/null
@@ -1,693 +0,0 @@
-/* HTTPURLConnection.java --
- Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-import gnu.classpath.SystemProperties;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.ProtocolException;
-import java.net.URL;
-import java.security.cert.Certificate;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import javax.net.ssl.HandshakeCompletedEvent;
-import javax.net.ssl.HandshakeCompletedListener;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLPeerUnverifiedException;
-import javax.net.ssl.SSLSocketFactory;
-
-/**
- * A URLConnection that uses the HTTPConnection class.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class HTTPURLConnection
- extends HttpsURLConnection
- implements HandshakeCompletedListener
-{
- /*
- * The underlying connection.
- */
- private HTTPConnection connection;
-
- // These are package private for use in anonymous inner classes.
- String proxyHostname;
- int proxyPort = -1;
- String agent;
- boolean keepAlive;
-
- private Request request;
- private Headers requestHeaders;
- private ByteArrayOutputStream requestSink;
- private boolean requestMethodSetExplicitly;
-
- private Response response;
- private InputStream responseSink;
- private InputStream errorSink;
-
- private HandshakeCompletedEvent handshakeEvent;
-
- /**
- * Constructor.
- * @param url the URL
- */
- public HTTPURLConnection(URL url)
- throws IOException
- {
- super(url);
- requestHeaders = new Headers();
- String proxy = SystemProperties.getProperty("http.proxyHost");
- if (proxy != null && proxy.length() > 0)
- {
- String port = SystemProperties.getProperty("http.proxyPort");
- if (port != null && port.length() > 0)
- {
- try
- {
- proxyPort = Integer.parseInt(port);
- proxyHostname = proxy;
- }
- catch (NumberFormatException _)
- {
- // Ignore.
- }
- }
- }
- agent = SystemProperties.getProperty("http.agent");
- String ka = SystemProperties.getProperty("http.keepAlive");
- keepAlive = !(ka != null && "false".equals(ka));
- }
-
- public void connect()
- throws IOException
- {
- if (connected)
- {
- return;
- }
- String protocol = url.getProtocol();
- boolean secure = "https".equals(protocol);
- String host = url.getHost();
- int port = url.getPort();
- if (port < 0)
- {
- port = secure ? HTTPConnection.HTTPS_PORT :
- HTTPConnection.HTTP_PORT;
- }
- String file = url.getFile();
- String username = url.getUserInfo();
- String password = null;
- if (username != null)
- {
- int ci = username.indexOf(':');
- if (ci != -1)
- {
- password = username.substring(ci + 1);
- username = username.substring(0, ci);
- }
- }
- final Credentials creds = (username == null) ? null :
- new Credentials (username, password);
-
- if ("POST".equals(method))
- {
- String contentType = requestHeaders.getValue("Content-Type");
- if (null == contentType)
- requestHeaders.addValue("Content-Type",
- "application/x-www-form-urlencoded");
- }
-
- boolean retry;
- do
- {
- retry = false;
- if (connection == null)
- {
- connection = getConnection(host, port, secure);
- if (secure)
- {
- SSLSocketFactory factory = getSSLSocketFactory();
- // FIXME: use the verifier
- // HostnameVerifier verifier = getHostnameVerifier();
- if (factory != null)
- {
- connection.setSSLSocketFactory(factory);
- }
- connection.addHandshakeCompletedListener(this);
- // TODO verifier
- }
- }
- if (proxyHostname != null)
- {
- if (proxyPort < 0)
- {
- proxyPort = secure ? HTTPConnection.HTTPS_PORT :
- HTTPConnection.HTTP_PORT;
- }
- connection.setProxy(proxyHostname, proxyPort);
- }
- try
- {
- request = connection.newRequest(method, file);
- if (!keepAlive)
- {
- request.setHeader("Connection", "close");
- }
- if (agent != null)
- {
- request.setHeader("User-Agent", agent);
- }
- request.getHeaders().putAll(requestHeaders);
- if (requestSink != null)
- {
- byte[] content = requestSink.toByteArray();
- RequestBodyWriter writer = new ByteArrayRequestBodyWriter(content);
- request.setRequestBodyWriter(writer);
- }
- if (creds != null)
- {
- request.setAuthenticator(new Authenticator() {
- public Credentials getCredentials(String realm, int attempts)
- {
- return (attempts < 2) ? creds : null;
- }
- });
- }
- response = request.dispatch();
- }
- catch (IOException ioe)
- {
- if (connection.useCount > 0)
- {
- // Connection re-use failed: Try a new connection.
- try
- {
- connection.close();
- }
- catch (IOException _)
- {
- // Ignore.
- }
- connection = null;
- retry = true;
- continue;
- }
- else
- {
- // First time the connection was used: Hard failure.
- throw ioe;
- }
- }
-
- if (response.isRedirect() && getInstanceFollowRedirects())
- {
- // Read the response body, if there is one. If the
- // redirect points us back at the same server, we will use
- // the cached connection, so we must make sure there is no
- // pending data in it.
- InputStream body = response.getBody();
- if (body != null)
- {
- byte[] ignore = new byte[1024];
- while (true)
- {
- int n = body.read(ignore, 0, ignore.length);
- if (n == -1)
- break;
- }
- }
-
- // Follow redirect
- String location = response.getHeader("Location");
- if (location != null)
- {
- String connectionUri = connection.getURI();
- int start = connectionUri.length();
- if (location.startsWith(connectionUri) &&
- location.charAt(start) == '/')
- {
- file = location.substring(start);
- retry = true;
- }
- else if (location.startsWith("http:"))
- {
- connection.close();
- connection = null;
- secure = false;
- start = 7;
- int end = location.indexOf('/', start);
- if (end == -1)
- end = location.length();
- host = location.substring(start, end);
- int ci = host.lastIndexOf(':');
- if (ci != -1)
- {
- port = Integer.parseInt(host.substring (ci + 1));
- host = host.substring(0, ci);
- }
- else
- {
- port = HTTPConnection.HTTP_PORT;
- }
- file = location.substring(end);
- retry = true;
- }
- else if (location.startsWith("https:"))
- {
- connection.close();
- connection = null;
- secure = true;
- start = 8;
- int end = location.indexOf('/', start);
- if (end == -1)
- end = location.length();
- host = location.substring(start, end);
- int ci = host.lastIndexOf(':');
- if (ci != -1)
- {
- port = Integer.parseInt(host.substring (ci + 1));
- host = host.substring(0, ci);
- }
- else
- {
- port = HTTPConnection.HTTPS_PORT;
- }
- file = location.substring(end);
- retry = true;
- }
- else if (location.length() > 0)
- {
- // Malformed absolute URI, treat as file part of URI
- if (location.charAt(0) == '/')
- {
- // Absolute path
- file = location;
- }
- else
- {
- // Relative path
- int lsi = file.lastIndexOf('/');
- file = (lsi == -1) ? "/" : file.substring(0, lsi + 1);
- file += location;
- }
- retry = true;
- }
- }
- }
- else
- {
- responseSink = response.getBody();
-
- if (response.isError())
- errorSink = responseSink;
- }
- }
- while (retry);
- connected = true;
- }
-
- /**
- * Returns a connection, from the pool if necessary.
- */
- HTTPConnection getConnection(String host, int port, boolean secure)
- throws IOException
- {
- HTTPConnection connection;
- if (keepAlive)
- {
- connection = HTTPConnection.Pool.instance.get(host, port, secure,
- getConnectTimeout(),
- getReadTimeout());
- }
- else
- {
- connection = new HTTPConnection(host, port, secure,
- getConnectTimeout(), getReadTimeout());
- }
- return connection;
- }
-
- public void disconnect()
- {
- if (connection != null)
- {
- try
- {
- connection.close();
- }
- catch (IOException e)
- {
- }
- }
- }
-
- public boolean usingProxy()
- {
- return (proxyHostname != null);
- }
-
- /**
- * Overrides the corresponding method in HttpURLConnection to permit
- * arbitrary methods, as long as they're valid ASCII alphabetic
- * characters. This is to permit WebDAV and other HTTP extensions to
- * function.
- * @param method the method
- */
- public void setRequestMethod(String method)
- throws ProtocolException
- {
- if (connected)
- {
- throw new ProtocolException("Already connected");
- }
- // Validate
- method = method.toUpperCase();
- int len = method.length();
- if (len == 0)
- {
- throw new ProtocolException("Empty method name");
- }
- for (int i = 0; i < len; i++)
- {
- char c = method.charAt(i);
- if (c < 0x41 || c > 0x5a)
- {
- throw new ProtocolException("Illegal character '" + c +
- "' at index " + i);
- }
- }
- // OK
- this.method = method;
- requestMethodSetExplicitly = true;
- }
-
- public String getRequestProperty(String key)
- {
- return requestHeaders.getValue(key);
- }
-
- public Map<String, List<String>> getRequestProperties()
- {
- if (connected)
- throw new IllegalStateException("Already connected");
-
- Map<String, List<String>> m = requestHeaders.getAsMap();
- return Collections.unmodifiableMap(m);
- }
-
- public void setRequestProperty(String key, String value)
- {
- super.setRequestProperty(key, value);
-
- requestHeaders.put(key, value);
- }
-
- public void addRequestProperty(String key, String value)
- {
- super.addRequestProperty(key, value);
- requestHeaders.addValue(key, value);
- }
-
- public OutputStream getOutputStream()
- throws IOException
- {
- if (connected)
- {
- throw new ProtocolException("Already connected");
- }
- if (!doOutput)
- {
- throw new ProtocolException("doOutput is false");
- }
- else if (!requestMethodSetExplicitly)
- {
- /*
- * Silently change the method to POST if no method was set
- * explicitly. This is due to broken applications depending on this
- * behaviour (Apache XMLRPC for one).
- */
- method = "POST";
- }
- if (requestSink == null)
- {
- requestSink = new ByteArrayOutputStream();
- }
- return requestSink;
- }
-
- // -- Response --
-
- public InputStream getInputStream()
- throws IOException
- {
- if (!connected)
- {
- connect();
- }
- if (!doInput)
- {
- throw new ProtocolException("doInput is false");
- }
-
- if (response.isError())
- {
- int code = response.getCode();
- if (code == 404 || code == 410)
- throw new FileNotFoundException(url.toString());
-
- throw new IOException("Server returned HTTP response code " + code
- + " for URL " + url.toString());
- }
-
- return responseSink;
- }
-
- public InputStream getErrorStream()
- {
- return errorSink;
- }
-
- public Map<String,List<String>> getHeaderFields()
- {
- if (!connected)
- {
- try
- {
- connect();
- }
- catch (IOException e)
- {
- return null;
- }
- }
- Map<String,List<String>> m = response.getHeaders().getAsMap();
- m.put(null, Collections.singletonList(getStatusLine(response)));
- return Collections.unmodifiableMap(m);
- }
-
- String getStatusLine(Response response)
- {
- return "HTTP/" + response.getMajorVersion() +
- "." + response.getMinorVersion() +
- " " + response.getCode() +
- " " + response.getMessage();
- }
-
- public String getHeaderField(int index)
- {
- if (!connected)
- {
- try
- {
- connect();
- }
- catch (IOException e)
- {
- return null;
- }
- }
- if (index == 0)
- {
- return getStatusLine(response);
- }
- return response.getHeaders().getHeaderValue(index - 1);
- }
-
- public String getHeaderFieldKey(int index)
- {
- if (!connected)
- {
- try
- {
- connect();
- }
- catch (IOException e)
- {
- return null;
- }
- }
- // index of zero is the status line.
- return response.getHeaders().getHeaderName(index - 1);
- }
-
- public String getHeaderField(String name)
- {
- if (!connected)
- {
- try
- {
- connect();
- }
- catch (IOException e)
- {
- return null;
- }
- }
- return response.getHeader(name);
- }
-
- public long getHeaderFieldDate(String name, long def)
- {
- if (!connected)
- {
- try
- {
- connect();
- }
- catch (IOException e)
- {
- return def;
- }
- }
- Date date = response.getDateHeader(name);
- return (date == null) ? def : date.getTime();
- }
-
- public String getContentType()
- {
- return getHeaderField("Content-Type");
- }
-
- public int getResponseCode()
- throws IOException
- {
- if (!connected)
- {
- connect();
- }
- return response.getCode();
- }
-
- public String getResponseMessage()
- throws IOException
- {
- if (!connected)
- {
- connect();
- }
- return response.getMessage();
- }
-
- // -- HTTPS specific --
-
- public String getCipherSuite()
- {
- if (!connected)
- {
- throw new IllegalStateException("not connected");
- }
- return handshakeEvent.getCipherSuite();
- }
-
- public Certificate[] getLocalCertificates()
- {
- if (!connected)
- {
- throw new IllegalStateException("not connected");
- }
- return handshakeEvent.getLocalCertificates();
- }
-
- public Certificate[] getServerCertificates()
- throws SSLPeerUnverifiedException
- {
- if (!connected)
- {
- throw new IllegalStateException("not connected");
- }
- return handshakeEvent.getPeerCertificates();
- }
-
- // HandshakeCompletedListener
-
- public void handshakeCompleted(HandshakeCompletedEvent event)
- {
- handshakeEvent = event;
- }
-
- /**
- * Set the read timeout, in milliseconds, or zero if the timeout
- * is to be considered infinite.
- *
- * Overloaded.
- *
- */
- public void setReadTimeout(int timeout)
- throws IllegalArgumentException
- {
- super.setReadTimeout(timeout);
- if (connection == null)
- return;
- try
- {
- connection.getSocket().setSoTimeout(timeout);
- }
- catch (IOException se)
- {
- // Ignore socket exceptions.
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/Handler.java b/libjava/classpath/gnu/java/net/protocol/http/Handler.java
deleted file mode 100644
index 3081032..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/Handler.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Handler.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-
-/**
- * An HTTP URL stream handler.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class Handler
- extends URLStreamHandler
-{
-
- /**
- * Returns the default HTTP port (80).
- */
- protected int getDefaultPort()
- {
- return HTTPConnection.HTTP_PORT;
- }
-
- /**
- * Returns an HTTPURLConnection for the given URL.
- */
- public URLConnection openConnection(URL url)
- throws IOException
- {
- return new HTTPURLConnection(url);
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/Headers.java b/libjava/classpath/gnu/java/net/protocol/http/Headers.java
deleted file mode 100644
index faf5eb1..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/Headers.java
+++ /dev/null
@@ -1,424 +0,0 @@
-/* Headers.java --
- Copyright (C) 2004, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.net.LineInputStream;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.Iterable;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A collection of HTTP header names and associated values. The
- * values are {@link ArrayList ArrayLists} of Strings. Retrieval of
- * values is case insensitive. An iteration over the collection
- * returns the header names in the order they were received.
- *
- * @author Chris Burdess (dog@gnu.org)
- * @author David Daney (ddaney@avtrex.com)
- */
-class Headers implements Iterable<Headers.HeaderElement>
-{
- /**
- * A list of HeaderElements
- */
- private final ArrayList<HeaderElement> headers
- = new ArrayList<HeaderElement>();
-
- /**
- * The HTTP dateformat used to parse date header fields.
- */
- private static final DateFormat dateFormat = new HTTPDateFormat();
-
- /**
- * Class for a Header element consisting of
- * a name and value String.
- */
- static class HeaderElement
- {
- String name;
- String value;
-
- HeaderElement(String name, String value)
- {
- this.name = name;
- this.value = value;
- }
- }
-
- /**
- * Default constructor.
- */
- public Headers()
- {
- // nothing to do
- }
-
- /**
- * Return an Iterator over this collection of headers.
- * Iterator.getNext() returns objects of type {@link HeaderElement}.
- *
- * @return the Iterator.
- */
- public Iterator<HeaderElement> iterator()
- {
- return headers.iterator();
- }
-
- /**
- * Returns the value of the specified header as a string. If
- * multiple values are present, the last one is returned.
- *
- * @param header the header name (case insensitive search)
- * @return The header value or <code>null</code> if not found.
- */
- public String getValue(String header)
- {
- for (int i = headers.size() - 1; i >= 0; i--)
- {
- HeaderElement e = headers.get(i);
- if (e.name.equalsIgnoreCase(header))
- {
- return e.value;
- }
- }
- return null;
- }
-
- /**
- * Returns the value of the specified header as an integer. If
- * multiple values are present, the last one is returned.
- *
- * @param header the header name (case insensitive search)
- * @return The header value or <code>-1</code> if not present or
- * not an integer value.
- */
- public int getIntValue(String header)
- {
- String val = getValue(header);
- if (val == null)
- {
- return -1;
- }
- try
- {
- return Integer.parseInt(val);
- }
- catch (NumberFormatException e)
- {
- // fall through
- }
- return -1;
- }
-
- /**
- * Returns the value of the specified header as a long. If
- * multiple values are present, the last one is returned.
- *
- * @param header the header name (case insensitive search)
- * @return The header value or <code>-1</code> if not present or
- * not a long value.
- */
- public long getLongValue(String header)
- {
- String val = getValue(header);
- if (val == null)
- {
- return -1;
- }
- try
- {
- return Long.parseLong(val);
- }
- catch (NumberFormatException e)
- {
- // fall through
- }
- return -1;
- }
-
- /**
- * Returns the value of the specified header as a date. If
- * multiple values are present, the last one is returned.
- *
- * @param header the header name (case insensitive search)
- * @return The header value or <code>null</code> if not present or
- * not a date value.
- */
- public Date getDateValue(String header)
- {
- String val = getValue(header);
- if (val == null)
- {
- return null;
- }
- try
- {
- return dateFormat.parse(val);
- }
- catch (ParseException e)
- {
- return null;
- }
- }
-
- /**
- * Add a header to this set of headers. If there is an existing
- * header with the same name it's value is replaced with the new value.
- * If multiple headers of the same name exist only the last one's value
- * is replaced.
- *
- * @param name the header name
- * @param value the header value
- *
- * @see #addValue(String, String)
- */
- public void put(String name, String value)
- {
- for (int i = headers.size() - 1; i >= 0; i--)
- {
- HeaderElement e = headers.get(i);
- if (e.name.equalsIgnoreCase(name))
- {
- e.value = value;
- return;
- }
- }
-
- // nothing was replaced so add it as new HeaderElement
- addValue(name, value);
- }
-
- /**
- * Add all headers from a set of headers to this set. Any existing header
- * with the same (case insensitive) name as one of the new headers will
- * be overridden.
- *
- * @param o the headers to be added
- */
- public void putAll(Headers o)
- {
- for (Iterator<HeaderElement> it = o.iterator(); it.hasNext(); )
- {
- HeaderElement e = it.next();
- remove(e.name);
- addValue(e.name, e.value);
- }
- }
-
- /**
- * Remove a header from this set of headers. If there is more than
- * one instance of a header of the given name, they are all removed.
- *
- * @param name the header name
- */
- public void remove(String name)
- {
- for (Iterator<HeaderElement> it = headers.iterator(); it.hasNext(); )
- {
- HeaderElement e = it.next();
- if (e.name.equalsIgnoreCase(name))
- it.remove();
- }
- }
-
- /**
- * Parse the specified InputStream, adding headers to this collection.
- *
- * @param in the InputStream.
- * @throws IOException if I/O error occured.
- */
- public void parse(InputStream in)
- throws IOException
- {
- LineInputStream lin = (in instanceof LineInputStream) ?
- (LineInputStream) in : new LineInputStream(in);
-
- String name = null;
- CPStringBuilder value = new CPStringBuilder();
- while (true)
- {
- String line = lin.readLine();
- if (line == null)
- {
- if (name != null)
- {
- addValue(name, value.toString());
- }
- break;
- }
- int len = line.length();
- if (len < 2)
- {
- if (name != null)
- {
- addValue(name, value.toString());
- }
- break;
- }
- char c1 = line.charAt(0);
- if (c1 == ' ' || c1 == '\t')
- {
- // Continuation
- int last = len - 1;
- if (line.charAt(last) != '\r')
- ++last;
- value.append(line.substring(0, last));
- }
- else
- {
- if (name != null)
- {
- addValue(name, value.toString());
- }
-
- int di = line.indexOf(':');
- name = line.substring(0, di);
- value.setLength(0);
- do
- {
- di++;
- }
- while (di < len && line.charAt(di) == ' ');
- int last = len - 1;
- if (line.charAt(last) != '\r')
- ++last;
- value.append(line.substring(di, last));
- }
- }
- }
-
-
- /**
- * Add a header to this set of headers. If there is an existing
- * header with the same name, it is not effected.
- *
- * @param name the header name
- * @param value the header value
- *
- * @see #put(String, String)
- */
- public void addValue(String name, String value)
- {
- headers.add(headers.size(), new HeaderElement(name, value));
- }
-
- /**
- * Get a new Map containing all the headers. The keys of the Map
- * are Strings (the header names). The headers will be included
- * case-sensitive in the map so that querying must be done with the
- * correct case of the needed header name. The values of the Map are
- * unmodifiable Lists containing Strings (the header values).
- *
- * <p>
- * The returned map is modifiable. Changing it will not effect this
- * collection of Headers in any way.</p>
- *
- * @return a Map containing all the headers.
- */
- public Map<String,List<String>> getAsMap()
- {
- LinkedHashMap<String,List<String>> m = new LinkedHashMap<String,List<String>>();
- for (Iterator<HeaderElement> it = headers.iterator(); it.hasNext(); )
- {
- HeaderElement e = it.next();
- ArrayList<String> l = (ArrayList<String>)m.get(e.name);
- if (l == null)
- {
- l = new ArrayList<String>(1);
- l.add(e.value);
- m.put(e.name, l);
- }
- else
- l.add(0, e.value);
- }
- for (Iterator<Map.Entry<String,List<String>>> it = m.entrySet().iterator(); it.hasNext(); )
- {
- Map.Entry<String,List<String>> me = it.next();
- List<String> l = me.getValue();
- me.setValue(Collections.unmodifiableList(l));
- }
- return m;
- }
-
- /**
- * Get the name of the Nth header.
- *
- * @param i the header index.
- *
- * @return The header name, or <code>null</code> if index outside of range.
- *
- * @see #getHeaderValue(int)
- */
- public String getHeaderName(int i)
- {
- if (i >= headers.size() || i < 0)
- return null;
-
- return headers.get(i).name;
- }
-
- /**
- * Get the value of the Nth header.
- *
- * @param i the header index.
- *
- * @return the header value, or <code>null</code> if index outside of range.
- *
- * @see #getHeaderName(int)
- */
- public String getHeaderValue(int i)
- {
- if (i >= headers.size() || i < 0)
- return null;
-
- return headers.get(i).value;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/LimitedLengthInputStream.java b/libjava/classpath/gnu/java/net/protocol/http/LimitedLengthInputStream.java
deleted file mode 100644
index 568f830..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/LimitedLengthInputStream.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/* LimitedLengthInputStream.java --
- Copyright (C) 2005, 2008 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * InputStream that limits the total number of bytes that can be read
- * from an underlying stream. In addition to limiting the number of
- * bytes read, close() is not propagated to the underlying stream.
- *
- * @author David Daney (ddaney@avtrex.com)
- */
-class LimitedLengthInputStream
- extends InputStream
-{
- private long remainingLen;
- private boolean restrictLen;
- private HTTPConnection connection;
- private boolean eof;
- private InputStream in;
- private boolean doClose;
-
- private void handleClose()
- throws IOException
- {
- eof = true;
-
- if (doClose)
- in.close();
- else
- connection.release();
-
- in = null;
- connection = null;
- }
-
- /**
- * Constructor.
- *
- * @param in the underlying stream
- *
- * @param maxLen the maximum number of bytes to read
- *
- * @param restrictLen if true the number of bytes that can be read
- * from this stream will be limited to maxLen, otherwise the number
- * of bytes is not restricted.
- *
- * @param con the HTTPConnection associated with this stream
- *
- * @param doClose if true con will be closed when finished reading,
- * else it will be placed back in the connection pool.
- *
- */
- LimitedLengthInputStream(InputStream in,
- long maxLen,
- boolean restrictLen,
- HTTPConnection con,
- boolean doClose)
- throws IOException
- {
- this.in = in;
- this.remainingLen = maxLen;
- this.restrictLen = restrictLen;
- this.connection = con;
- this.doClose = doClose;
-
- if (restrictLen)
- {
- if (maxLen < 0)
- throw new IllegalArgumentException();
- else if (maxLen == 0)
- handleClose(); // Nothing to do, release the connection.
- }
- }
-
- public synchronized int read()
- throws IOException
- {
- if (eof)
- return -1; // EOF
-
- int r;
-
- if (restrictLen)
- {
- r = in.read();
- if (-1 != r)
- remainingLen--;
-
- if (0 == remainingLen)
- handleClose();
- }
- else
- {
- r = in.read();
- if (r == -1)
- handleClose();
- }
-
- return r;
- }
-
- public int read(byte[] buffer)
- throws IOException
- {
- return read(buffer, 0, buffer.length);
- }
-
- public synchronized int read(byte[] buffer, int offset, int length)
- throws IOException
- {
- if (eof)
- return -1; // EOF
-
- if (restrictLen && length > remainingLen)
- length = (int) remainingLen;
-
- int r = in.read(buffer, offset, length);
-
- if (-1 == r)
- handleClose();
-
- if (restrictLen && r > 0)
- {
- remainingLen -= r;
- if (0 == remainingLen)
- handleClose();
- }
- return r;
- }
-
- public synchronized long skip(long n)
- throws IOException
- {
-
- if (eof)
- return 0;
-
- if (restrictLen && n > remainingLen)
- n = remainingLen;
-
- long r = in.skip(n);
-
- if (restrictLen)
- {
- remainingLen -= r;
- if (0 == remainingLen)
- handleClose();
- }
- return r;
- }
-
- public synchronized int available()
- throws IOException
- {
- if (eof)
- return 0;
-
- int a = in.available();
- if (restrictLen && a > remainingLen)
- a = (int)remainingLen;
- return a;
- }
-
- public synchronized void close()
- throws IOException
- {
- if (eof)
- return;
-
- // If we get to here, the stream was not fully read. Just throw
- // it away.
-
- doClose = true;
-
- handleClose();
- }
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/Request.java b/libjava/classpath/gnu/java/net/protocol/http/Request.java
deleted file mode 100644
index 534213e..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/Request.java
+++ /dev/null
@@ -1,857 +0,0 @@
-/* Request.java --
- Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-import gnu.java.lang.CPStringBuilder;
-import gnu.java.net.LineInputStream;
-import gnu.java.util.Base64;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.ProtocolException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.InflaterInputStream;
-
-/**
- * A single HTTP request.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class Request
-{
-
- /**
- * The connection context in which this request is invoked.
- */
- protected final HTTPConnection connection;
-
- /**
- * The HTTP method to invoke.
- */
- protected final String method;
-
- /**
- * The path identifying the resource.
- * This string must conform to the abs_path definition given in RFC2396,
- * with an optional "?query" part, and must be URI-escaped by the caller.
- */
- protected final String path;
-
- /**
- * The headers in this request.
- */
- protected final Headers requestHeaders;
-
- /**
- * The request body provider.
- */
- protected RequestBodyWriter requestBodyWriter;
-
- /**
- * Map of response header handlers.
- */
- protected Map<String, ResponseHeaderHandler> responseHeaderHandlers;
-
- /**
- * The authenticator.
- */
- protected Authenticator authenticator;
-
- /**
- * Whether this request has been dispatched yet.
- */
- private boolean dispatched;
-
- /**
- * Constructor for a new request.
- * @param connection the connection context
- * @param method the HTTP method
- * @param path the resource path including query part
- */
- protected Request(HTTPConnection connection, String method,
- String path)
- {
- this.connection = connection;
- this.method = method;
- this.path = path;
- requestHeaders = new Headers();
- responseHeaderHandlers = new HashMap<String, ResponseHeaderHandler>();
- }
-
- /**
- * Returns the connection associated with this request.
- * @see #connection
- */
- public HTTPConnection getConnection()
- {
- return connection;
- }
-
- /**
- * Returns the HTTP method to invoke.
- * @see #method
- */
- public String getMethod()
- {
- return method;
- }
-
- /**
- * Returns the resource path.
- * @see #path
- */
- public String getPath()
- {
- return path;
- }
-
- /**
- * Returns the full request-URI represented by this request, as specified
- * by HTTP/1.1.
- */
- public String getRequestURI()
- {
- return connection.getURI() + path;
- }
-
- /**
- * Returns the headers in this request.
- */
- public Headers getHeaders()
- {
- return requestHeaders;
- }
-
- /**
- * Returns the value of the specified header in this request.
- * @param name the header name
- */
- public String getHeader(String name)
- {
- return requestHeaders.getValue(name);
- }
-
- /**
- * Returns the value of the specified header in this request as an integer.
- * @param name the header name
- */
- public int getIntHeader(String name)
- {
- return requestHeaders.getIntValue(name);
- }
-
- /**
- * Returns the value of the specified header in this request as a date.
- * @param name the header name
- */
- public Date getDateHeader(String name)
- {
- return requestHeaders.getDateValue(name);
- }
-
- /**
- * Sets the specified header in this request.
- * @param name the header name
- * @param value the header value
- */
- public void setHeader(String name, String value)
- {
- requestHeaders.put(name, value);
- }
-
- /**
- * Convenience method to set the entire request body.
- * @param requestBody the request body content
- */
- public void setRequestBody(byte[] requestBody)
- {
- setRequestBodyWriter(new ByteArrayRequestBodyWriter(requestBody));
- }
-
- /**
- * Sets the request body provider.
- * @param requestBodyWriter the handler used to obtain the request body
- */
- public void setRequestBodyWriter(RequestBodyWriter requestBodyWriter)
- {
- this.requestBodyWriter = requestBodyWriter;
- }
-
- /**
- * Sets a callback handler to be invoked for the specified header name.
- * @param name the header name
- * @param handler the handler to receive the value for the header
- */
- public void setResponseHeaderHandler(String name,
- ResponseHeaderHandler handler)
- {
- responseHeaderHandlers.put(name, handler);
- }
-
- /**
- * Sets an authenticator that can be used to handle authentication
- * automatically.
- * @param authenticator the authenticator
- */
- public void setAuthenticator(Authenticator authenticator)
- {
- this.authenticator = authenticator;
- }
-
- /**
- * Dispatches this request.
- * A request can only be dispatched once; calling this method a second
- * time results in a protocol exception.
- * @exception IOException if an I/O error occurred
- * @return an HTTP response object representing the result of the operation
- */
- public Response dispatch()
- throws IOException
- {
- if (dispatched)
- {
- throw new ProtocolException("request already dispatched");
- }
- final String CRLF = "\r\n";
- final String HEADER_SEP = ": ";
- final String US_ASCII = "US-ASCII";
- final String version = connection.getVersion();
- Response response;
- int contentLength = -1;
- boolean retry = false;
- int attempts = 0;
- boolean expectingContinue = false;
- if (requestBodyWriter != null)
- {
- contentLength = requestBodyWriter.getContentLength();
- String expect = getHeader("Expect");
- if (expect != null && expect.equals("100-continue"))
- {
- expectingContinue = true;
- }
- else
- {
- setHeader("Content-Length", Integer.toString(contentLength));
- }
- }
-
- try
- {
- // Loop while authentication fails or continue
- do
- {
- retry = false;
-
- // Get socket output and input streams
- OutputStream out = connection.getOutputStream();
-
- // Request line
- String requestUri = path;
- if (connection.isUsingProxy() &&
- !"*".equals(requestUri) &&
- !"CONNECT".equals(method))
- {
- requestUri = getRequestURI();
- }
- String line = method + ' ' + requestUri + ' ' + version + CRLF;
- out.write(line.getBytes(US_ASCII));
- // Request headers
- for (Headers.HeaderElement elt : requestHeaders)
- {
- line = elt.name + HEADER_SEP + elt.value + CRLF;
- out.write(line.getBytes(US_ASCII));
- }
- out.write(CRLF.getBytes(US_ASCII));
- // Request body
- if (requestBodyWriter != null && !expectingContinue)
- {
- byte[] buffer = new byte[4096];
- int len;
- int count = 0;
-
- requestBodyWriter.reset();
- do
- {
- len = requestBodyWriter.write(buffer);
- if (len > 0)
- {
- out.write(buffer, 0, len);
- }
- count += len;
- }
- while (len > -1 && count < contentLength);
- }
- out.flush();
- // Get response
- while(true)
- {
- response = readResponse(connection.getInputStream());
- int sc = response.getCode();
- if (sc == 401 && authenticator != null)
- {
- if (authenticate(response, attempts++))
- {
- retry = true;
- }
- }
- else if (sc == 100)
- {
- if (expectingContinue)
- {
- requestHeaders.remove("Expect");
- setHeader("Content-Length",
- Integer.toString(contentLength));
- expectingContinue = false;
- retry = true;
- }
- else
- {
- // A conforming server can send an unsoliceted
- // Continue response but *should* not (RFC 2616
- // sec 8.2.3). Ignore the bogus Continue
- // response and get the real response that
- // should follow
- continue;
- }
- }
- break;
- }
- }
- while (retry);
- }
- catch (IOException e)
- {
- connection.close();
- throw e;
- }
- return response;
- }
-
- Response readResponse(InputStream in)
- throws IOException
- {
- String line;
- int len;
-
- // Read response status line
- LineInputStream lis = new LineInputStream(in);
-
- line = lis.readLine();
- if (line == null)
- {
- throw new ProtocolException("Peer closed connection");
- }
- if (!line.startsWith("HTTP/"))
- {
- throw new ProtocolException(line);
- }
- len = line.length();
- int start = 5, end = 6;
- while (line.charAt(end) != '.')
- {
- end++;
- }
- int majorVersion = Integer.parseInt(line.substring(start, end));
- start = end + 1;
- end = start + 1;
- while (line.charAt(end) != ' ')
- {
- end++;
- }
- int minorVersion = Integer.parseInt(line.substring(start, end));
- start = end + 1;
- end = start + 3;
- int code = Integer.parseInt(line.substring(start, end));
- String message = line.substring(end + 1, len - 1);
- // Read response headers
- Headers responseHeaders = new Headers();
- responseHeaders.parse(lis);
- notifyHeaderHandlers(responseHeaders);
- InputStream body = null;
-
- switch (code)
- {
- case 100:
- break;
- case 204:
- case 205:
- case 304:
- body = createResponseBodyStream(responseHeaders, majorVersion,
- minorVersion, in, false);
- break;
- default:
- body = createResponseBodyStream(responseHeaders, majorVersion,
- minorVersion, in, true);
- }
-
- // Construct response
- Response ret = new Response(majorVersion, minorVersion, code,
- message, responseHeaders, body);
- return ret;
- }
-
- void notifyHeaderHandlers(Headers headers)
- {
- for (Headers.HeaderElement entry : headers)
- {
- // Handle Set-Cookie
- if ("Set-Cookie".equalsIgnoreCase(entry.name))
- handleSetCookie(entry.value);
-
- ResponseHeaderHandler handler =
- (ResponseHeaderHandler) responseHeaderHandlers.get(entry.name);
- if (handler != null)
- handler.setValue(entry.value);
- }
- }
-
- private InputStream createResponseBodyStream(Headers responseHeaders,
- int majorVersion,
- int minorVersion,
- InputStream in,
- boolean mayHaveBody)
- throws IOException
- {
- long contentLength = -1;
-
- // Persistent connections are the default in HTTP/1.1
- boolean doClose = "close".equalsIgnoreCase(getHeader("Connection")) ||
- "close".equalsIgnoreCase(responseHeaders.getValue("Connection")) ||
- (connection.majorVersion == 1 && connection.minorVersion == 0) ||
- (majorVersion == 1 && minorVersion == 0);
-
- String transferCoding = responseHeaders.getValue("Transfer-Encoding");
- if ("HEAD".equals(method) || !mayHaveBody)
- {
- // Special case no body.
- in = new LimitedLengthInputStream(in, 0, true, connection, doClose);
- }
- else if ("chunked".equalsIgnoreCase(transferCoding))
- {
- in = new LimitedLengthInputStream(in, -1, false, connection, doClose);
-
- in = new ChunkedInputStream(in, responseHeaders);
- }
- else
- {
- contentLength = responseHeaders.getLongValue("Content-Length");
-
- if (contentLength < 0)
- doClose = true; // No Content-Length, must close.
-
- in = new LimitedLengthInputStream(in, contentLength,
- contentLength >= 0,
- connection, doClose);
- }
- String contentCoding = responseHeaders.getValue("Content-Encoding");
- if (contentCoding != null && !"identity".equals(contentCoding))
- {
- if ("gzip".equals(contentCoding))
- {
- in = new GZIPInputStream(in);
- }
- else if ("deflate".equals(contentCoding))
- {
- in = new InflaterInputStream(in);
- }
- else
- {
- throw new ProtocolException("Unsupported Content-Encoding: " +
- contentCoding);
- }
- // Remove the Content-Encoding header because the content is
- // no longer compressed.
- responseHeaders.remove("Content-Encoding");
- }
- return in;
- }
-
- boolean authenticate(Response response, int attempts)
- throws IOException
- {
- String challenge = response.getHeader("WWW-Authenticate");
- if (challenge == null)
- {
- challenge = response.getHeader("Proxy-Authenticate");
- }
- int si = challenge.indexOf(' ');
- String scheme = (si == -1) ? challenge : challenge.substring(0, si);
- if ("Basic".equalsIgnoreCase(scheme))
- {
- Properties params = parseAuthParams(challenge.substring(si + 1));
- String realm = params.getProperty("realm");
- Credentials creds = authenticator.getCredentials(realm, attempts);
- String userPass = creds.getUsername() + ':' + creds.getPassword();
- byte[] b_userPass = userPass.getBytes("US-ASCII");
- byte[] b_encoded = Base64.encode(b_userPass).getBytes("US-ASCII");
- String authorization =
- scheme + " " + new String(b_encoded, "US-ASCII");
- setHeader("Authorization", authorization);
- return true;
- }
- else if ("Digest".equalsIgnoreCase(scheme))
- {
- Properties params = parseAuthParams(challenge.substring(si + 1));
- String realm = params.getProperty("realm");
- String nonce = params.getProperty("nonce");
- String qop = params.getProperty("qop");
- String algorithm = params.getProperty("algorithm");
- String digestUri = getRequestURI();
- Credentials creds = authenticator.getCredentials(realm, attempts);
- String username = creds.getUsername();
- String password = creds.getPassword();
- connection.incrementNonce(nonce);
- try
- {
- MessageDigest md5 = MessageDigest.getInstance("MD5");
- final byte[] COLON = { 0x3a };
-
- // Calculate H(A1)
- md5.reset();
- md5.update(username.getBytes("US-ASCII"));
- md5.update(COLON);
- md5.update(realm.getBytes("US-ASCII"));
- md5.update(COLON);
- md5.update(password.getBytes("US-ASCII"));
- byte[] ha1 = md5.digest();
- if ("md5-sess".equals(algorithm))
- {
- byte[] cnonce = generateNonce();
- md5.reset();
- md5.update(ha1);
- md5.update(COLON);
- md5.update(nonce.getBytes("US-ASCII"));
- md5.update(COLON);
- md5.update(cnonce);
- ha1 = md5.digest();
- }
- String ha1Hex = toHexString(ha1);
-
- // Calculate H(A2)
- md5.reset();
- md5.update(method.getBytes("US-ASCII"));
- md5.update(COLON);
- md5.update(digestUri.getBytes("US-ASCII"));
- if ("auth-int".equals(qop))
- {
- byte[] hEntity = null; // TODO hash of entity body
- md5.update(COLON);
- md5.update(hEntity);
- }
- byte[] ha2 = md5.digest();
- String ha2Hex = toHexString(ha2);
-
- // Calculate response
- md5.reset();
- md5.update(ha1Hex.getBytes("US-ASCII"));
- md5.update(COLON);
- md5.update(nonce.getBytes("US-ASCII"));
- if ("auth".equals(qop) || "auth-int".equals(qop))
- {
- String nc = getNonceCount(nonce);
- byte[] cnonce = generateNonce();
- md5.update(COLON);
- md5.update(nc.getBytes("US-ASCII"));
- md5.update(COLON);
- md5.update(cnonce);
- md5.update(COLON);
- md5.update(qop.getBytes("US-ASCII"));
- }
- md5.update(COLON);
- md5.update(ha2Hex.getBytes("US-ASCII"));
- String digestResponse = toHexString(md5.digest());
-
- String authorization = scheme +
- " username=\"" + username + "\"" +
- " realm=\"" + realm + "\"" +
- " nonce=\"" + nonce + "\"" +
- " uri=\"" + digestUri + "\"" +
- " response=\"" + digestResponse + "\"";
- setHeader("Authorization", authorization);
- return true;
- }
- catch (NoSuchAlgorithmException e)
- {
- return false;
- }
- }
- // Scheme not recognised
- return false;
- }
-
- Properties parseAuthParams(String text)
- {
- int len = text.length();
- String key = null;
- CPStringBuilder buf = new CPStringBuilder();
- Properties ret = new Properties();
- boolean inQuote = false;
- for (int i = 0; i < len; i++)
- {
- char c = text.charAt(i);
- if (c == '"')
- {
- inQuote = !inQuote;
- }
- else if (c == '=' && key == null)
- {
- key = buf.toString().trim();
- buf.setLength(0);
- }
- else if (c == ' ' && !inQuote)
- {
- String value = unquote(buf.toString().trim());
- ret.put(key, value);
- key = null;
- buf.setLength(0);
- }
- else if (c != ',' || (i <(len - 1) && text.charAt(i + 1) != ' '))
- {
- buf.append(c);
- }
- }
- if (key != null)
- {
- String value = unquote(buf.toString().trim());
- ret.put(key, value);
- }
- return ret;
- }
-
- String unquote(String text)
- {
- int len = text.length();
- if (len > 0 && text.charAt(0) == '"' && text.charAt(len - 1) == '"')
- {
- return text.substring(1, len - 1);
- }
- return text;
- }
-
- /**
- * Returns the number of times the specified nonce value has been seen.
- * This always returns an 8-byte 0-padded hexadecimal string.
- */
- String getNonceCount(String nonce)
- {
- int nc = connection.getNonceCount(nonce);
- String hex = Integer.toHexString(nc);
- CPStringBuilder buf = new CPStringBuilder();
- for (int i = 8 - hex.length(); i > 0; i--)
- {
- buf.append('0');
- }
- buf.append(hex);
- return buf.toString();
- }
-
- /**
- * Client nonce value.
- */
- byte[] nonce;
-
- /**
- * Generates a new client nonce value.
- */
- byte[] generateNonce()
- throws IOException, NoSuchAlgorithmException
- {
- if (nonce == null)
- {
- long time = System.currentTimeMillis();
- MessageDigest md5 = MessageDigest.getInstance("MD5");
- md5.update(Long.toString(time).getBytes("US-ASCII"));
- nonce = md5.digest();
- }
- return nonce;
- }
-
- String toHexString(byte[] bytes)
- {
- char[] ret = new char[bytes.length * 2];
- for (int i = 0, j = 0; i < bytes.length; i++)
- {
- int c =(int) bytes[i];
- if (c < 0)
- {
- c += 0x100;
- }
- ret[j++] = Character.forDigit(c / 0x10, 0x10);
- ret[j++] = Character.forDigit(c % 0x10, 0x10);
- }
- return new String(ret);
- }
-
- /**
- * Parse the specified cookie list and notify the cookie manager.
- */
- void handleSetCookie(String text)
- {
- CookieManager cookieManager = connection.getCookieManager();
- if (cookieManager == null)
- {
- return;
- }
- String name = null;
- String value = null;
- String comment = null;
- String domain = connection.getHostName();
- String path = this.path;
- int lsi = path.lastIndexOf('/');
- if (lsi != -1)
- {
- path = path.substring(0, lsi);
- }
- boolean secure = false;
- Date expires = null;
-
- int len = text.length();
- String attr = null;
- CPStringBuilder buf = new CPStringBuilder();
- boolean inQuote = false;
- for (int i = 0; i <= len; i++)
- {
- char c =(i == len) ? '\u0000' : text.charAt(i);
- if (c == '"')
- {
- inQuote = !inQuote;
- }
- else if (!inQuote)
- {
- if (c == '=' && attr == null)
- {
- attr = buf.toString().trim();
- buf.setLength(0);
- }
- else if (c == ';' || i == len || c == ',')
- {
- String val = unquote(buf.toString().trim());
- if (name == null)
- {
- name = attr;
- value = val;
- }
- else if ("Comment".equalsIgnoreCase(attr))
- {
- comment = val;
- }
- else if ("Domain".equalsIgnoreCase(attr))
- {
- domain = val;
- }
- else if ("Path".equalsIgnoreCase(attr))
- {
- path = val;
- }
- else if ("Secure".equalsIgnoreCase(val))
- {
- secure = true;
- }
- else if ("Max-Age".equalsIgnoreCase(attr))
- {
- int delta = Integer.parseInt(val);
- Calendar cal = Calendar.getInstance();
- cal.setTimeInMillis(System.currentTimeMillis());
- cal.add(Calendar.SECOND, delta);
- expires = cal.getTime();
- }
- else if ("Expires".equalsIgnoreCase(attr))
- {
- DateFormat dateFormat = new HTTPDateFormat();
- try
- {
- expires = dateFormat.parse(val);
- }
- catch (ParseException e)
- {
- // if this isn't a valid date, it may be that
- // the value was returned unquoted; in that case, we
- // want to continue buffering the value
- buf.append(c);
- continue;
- }
- }
- attr = null;
- buf.setLength(0);
- // case EOL
- if (i == len || c == ',')
- {
- Cookie cookie = new Cookie(name, value, comment, domain,
- path, secure, expires);
- cookieManager.setCookie(cookie);
- }
- if (c == ',')
- {
- // Reset cookie fields
- name = null;
- value = null;
- comment = null;
- domain = connection.getHostName();
- path = this.path;
- if (lsi != -1)
- {
- path = path.substring(0, lsi);
- }
- secure = false;
- expires = null;
- }
- }
- else
- {
- buf.append(c);
- }
- }
- else
- {
- buf.append(c);
- }
- }
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/RequestBodyWriter.java b/libjava/classpath/gnu/java/net/protocol/http/RequestBodyWriter.java
deleted file mode 100644
index aa5b78a..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/RequestBodyWriter.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/* RequestBodyWriter.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-/**
- * Callback interface for writing request body content.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public interface RequestBodyWriter
-{
-
- /**
- * Returns the total number of bytes that will be written in a single pass
- * by this writer.
- */
- int getContentLength();
-
- /**
- * Initialises the writer.
- * This will be called before each pass.
- */
- void reset();
-
- /**
- * Writes body content to the supplied buffer.
- * @param buffer the content buffer
- * @return the number of bytes written
- */
- int write(byte[] buffer);
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/Response.java b/libjava/classpath/gnu/java/net/protocol/http/Response.java
deleted file mode 100644
index 084cf75..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/Response.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/* Response.java --
- Copyright (C) 2004, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-import java.io.InputStream;
-import java.util.Date;
-
-/**
- * An HTTP response.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class Response
-{
-
- /**
- * The HTTP major version of the server issuing the response.
- */
- protected final int majorVersion;
-
- /**
- * The HTTP minor version of the server issuing the response.
- */
- protected final int minorVersion;
-
- /**
- * The HTTP status code of the response.
- */
- protected final int code;
-
- /**
- * Human-readable text of the response.
- */
- protected final String message;
-
- /**
- * The response headers.
- */
- protected final Headers headers;
-
- /**
- * An InputStream that returns the body of the response.
- */
- protected final InputStream body;
-
- /**
- * Constructs a new response with the specified parameters.
- */
- protected Response(int majorVersion, int minorVersion, int code,
- String message, Headers headers, InputStream body)
- {
- this.majorVersion = majorVersion;
- this.minorVersion = minorVersion;
- this.code = code;
- this.message = message;
- this.headers = headers;
- this.body = body;
- }
-
- /**
- * Returns the HTTP major version of the server issuing the response.
- * @see #majorVersion
- */
- public int getMajorVersion()
- {
- return majorVersion;
- }
-
- /**
- * Returns the HTTP minor version of the server issuing the response.
- * @see #minorVersion
- */
- public int getMinorVersion()
- {
- return minorVersion;
- }
-
- /**
- * Returns the HTTP status code of the response.
- * @see #code
- */
- public int getCode()
- {
- return code;
- }
-
- /**
- * Returns the class of the response. This is the most significant
- * digit of the status code.
- * <dl>
- * <dt><code>1xx</code></dt> <dd>Informational response</dd>
- * <dt><code>2xx</code></dt> <dd>Success</dd>
- * <dt><code>3xx</code></dt> <dd>Redirection</dd>
- * <dt><code>4xx</code></dt> <dd>Client error</dd>
- * <dt><code>5xx</code></dt> <dd>Server error</dd>
- * </dl>
- */
- public int getCodeClass()
- {
- return code / 100;
- }
-
- /**
- * Returns the human-readable text of the response.
- * @see #message
- */
- public String getMessage()
- {
- return message;
- }
-
- /**
- * Returns the headers in the response.
- */
- public Headers getHeaders()
- {
- return headers;
- }
-
- /**
- * Returns the header value for the specified name.
- * @param name the header name
- */
- public String getHeader(String name)
- {
- return headers.getValue(name);
- }
-
- /**
- * Returns the header value for the specified name as an integer.
- * @param name the header name
- */
- public int getIntHeader(String name)
- {
- return headers.getIntValue(name);
- }
-
- /**
- * Returns the header value for the specified name as a long.
- * @param name the header name
- */
- public long getLongHeader(String name)
- {
- return headers.getLongValue(name);
- }
-
- /**
- * Returns the header value for the specified name as a date.
- * @param name the header name
- */
- public Date getDateHeader(String name)
- {
- return headers.getDateValue(name);
- }
-
- /**
- * Tests whether this response indicates a redirection.
- *
- * @return <code>true</code> if, <code>false</code> otherwise.
- */
- public boolean isRedirect()
- {
- return (code != 304 && getCodeClass() == 3);
- }
-
- /**
- * Tests whether this response indicates an error.
- * Errors are the response codes <code>4xx</code> - Client error and
- * <code>5xx</code> - Server error.
- *
- * @return <code>true</code> if, <code>false</code> otherwise.
- */
- public boolean isError()
- {
- return (getCodeClass() == 4 || getCodeClass() == 5);
- }
-
- /**
- * Returns an InputStream that returns the body of the response.
- *
- * @return the body of the response
- */
- public InputStream getBody()
- {
- return body;
- }
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/ResponseHeaderHandler.java b/libjava/classpath/gnu/java/net/protocol/http/ResponseHeaderHandler.java
deleted file mode 100644
index ca86344..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/ResponseHeaderHandler.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* ResponseHeaderHandler.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-/**
- * Callback interface for objects that wish to be notified of response
- * header values.
- * @see Request#setResponseHeaderHandler(String, ResponseHeaderHandler)
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public interface ResponseHeaderHandler
-{
-
- /**
- * Sets the value for the header associated with this handler.
- */
- void setValue(String value);
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/SimpleCookieManager.java b/libjava/classpath/gnu/java/net/protocol/http/SimpleCookieManager.java
deleted file mode 100644
index f082047..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/SimpleCookieManager.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/* CookieManager.java --
- Copyright (C) 2004, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.http;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * A simple non-persistent cookie manager. This class can be extended to
- * provide cookie persistence.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class SimpleCookieManager
- implements CookieManager
-{
-
- /**
- * The cookie cache.
- * This is a dictionary mapping domains to maps of cookies by name.
- */
- protected Map<String, Map<String, Cookie>> cookies;
-
- /**
- * Constructor.
- */
- public SimpleCookieManager()
- {
- cookies = new HashMap<String, Map<String, Cookie>>();
- }
-
- public void setCookie(Cookie cookie)
- {
- String domain = cookie.getDomain();
- Map<String, Cookie> map = cookies.get(domain);
- if (map == null)
- {
- map = new HashMap<String, Cookie>();
- cookies.put(domain, map);
- }
- String name = cookie.getName();
- map.put(name, cookie); // will replace a cookie of the same name
- }
-
- public Cookie[] getCookies(String host, boolean secure, String path)
- {
- ArrayList<Cookie> matches = new ArrayList<Cookie>();
- Date now = new Date();
- if (Character.isLetter(host.charAt(0)))
- {
- int di = host.indexOf('.');
- while (di != -1)
- {
- addCookies(matches, host, secure, path, now);
- host = host.substring(di);
- di = host.indexOf('.', 1);
- }
- }
- addCookies(matches, host, secure, path, now);
- Cookie[] ret = new Cookie[matches.size()];
- matches.toArray(ret);
- return ret;
- }
-
- private void addCookies(ArrayList<Cookie> matches, String domain,
- boolean secure, String path, Date now)
- {
- Map<String, Cookie> map = cookies.get(domain);
- if (map != null)
- {
- ArrayList<String> expired = new ArrayList<String>();
- for (Map.Entry<String, Cookie> entry : map.entrySet())
- {
- Cookie cookie = entry.getValue();
- Date expires = cookie.getExpiryDate();
- if (expires != null && expires.before(now))
- {
- expired.add(entry.getKey());
- continue;
- }
- if (secure && !cookie.isSecure())
- {
- continue;
- }
- if (path.startsWith(cookie.getPath()))
- {
- matches.add(cookie);
- }
- }
- // Good housekeeping
- for (Iterator<String> i = expired.iterator(); i.hasNext(); )
- {
- map.remove(i.next());
- }
- }
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/package.html b/libjava/classpath/gnu/java/net/protocol/http/package.html
deleted file mode 100644
index 8cf7c1e..0000000
--- a/libjava/classpath/gnu/java/net/protocol/http/package.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.net.protocol.http package.
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.net.protocol.http</title></head>
-
-<body>
-
-<p>
-This package contains an HTTP/1.1 client, as described in RFC 2616.
-It supports the following features:
-<ul>
-<li>Persistent connections</li>
-<li>Basic and Digest authentication (RFC 2617)</li>
-<li>HTTPS</li>
-<li>HTTP proxies</li>
-<li>HTTP/1.0 compatibility</li>
-<li>Support for WebDAV methods and other HTTP extensions</li>
-<li>Automatic decoding of the chunked transfer-coding</li>
-<li>Parsing of HTTP date headers</li>
-<li>Support for the 100-continue expectation</li>
-</ul>
-</p>
-
-<p>
-The API is similar to the <a href='http://www.webdav.org/neon/'>neon</a>
-WebDAV/HTTP library. A logical connection to the server is instantiated,
-and multiple requests can be issued for this connection. Each request
-has an atomic <code>dispatch</code> method which returns the response.
-All I/O, authentication, etc is handled by registering callback objects
-with the request prior to dispatch, which are notified during the dispatch
-procedure as necessary. Simple byte-array content callbacks are supplied
-which can manage any request/response content that fits in available memory.
-</p>
-
-<p>
-An URL stream handler is provided, supporting the full HttpURLConnection
-specification.
-</p>
-
-</body>
diff --git a/libjava/classpath/gnu/java/net/protocol/https/Handler.java b/libjava/classpath/gnu/java/net/protocol/https/Handler.java
deleted file mode 100644
index dbb6199..0000000
--- a/libjava/classpath/gnu/java/net/protocol/https/Handler.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Handler.java --
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.https;
-
-import gnu.java.net.protocol.http.HTTPConnection;
-import gnu.java.net.protocol.http.HTTPURLConnection;
-
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-
-/**
- * An HTTPS URL stream handler.
- *
- * @author Chris Burdess (dog@gnu.org)
- */
-public class Handler
- extends URLStreamHandler
-{
-
- /**
- * Returns the default HTTPS port (443).
- */
- protected int getDefaultPort()
- {
- return HTTPConnection.HTTPS_PORT;
- }
-
- /**
- * Returns an HTTPURLConnection for the given URL.
- */
- public URLConnection openConnection(URL url)
- throws IOException
- {
- return new HTTPURLConnection(url);
- }
-
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/jar/Connection.java b/libjava/classpath/gnu/java/net/protocol/jar/Connection.java
deleted file mode 100644
index 85d27bf..0000000
--- a/libjava/classpath/gnu/java/net/protocol/jar/Connection.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/* Connection - jar url connection for java.net
- Copyright (C) 1999, 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.jar;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.JarURLConnection;
-import java.net.MalformedURLException;
-import java.net.ProtocolException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Hashtable;
-import java.util.Locale;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.zip.ZipFile;
-
-/**
- * This subclass of java.net.JarURLConnection models a URLConnection via
- * the "jar" protocol.
- *
- * @author Kresten Krab Thorup (krab@gnu.org)
- */
-public final class Connection extends JarURLConnection
-{
- /**
- * HTTP-style DateFormat, used to format the last-modified header.
- * Lazy initialized since jar files are used during bootstrapping.
- */
- private static SimpleDateFormat dateFormat;
-
- private JarFile jar_file;
- private JarEntry jar_entry;
- private URL jar_url;
-
- public static class JarFileCache
- {
- private static Hashtable<URL, JarFile> cache
- = new Hashtable<URL, JarFile>();
- private static final int READBUFSIZE = 4*1024;
-
- public static synchronized JarFile get (URL url, boolean useCaches)
- throws IOException
- {
- JarFile jf;
- if (useCaches)
- {
- jf = cache.get (url);
- if (jf != null)
- return jf;
- }
-
- if ("file".equals (url.getProtocol()))
- {
- String fn = url.getFile();
- fn = gnu.java.net.protocol.file.Connection.unquote(fn);
- File f = new File (fn);
- jf = new JarFile (f, true, ZipFile.OPEN_READ);
- }
- else
- {
- URLConnection urlconn = url.openConnection();
- InputStream is = urlconn.getInputStream();
- byte[] buf = new byte [READBUFSIZE];
- File f = File.createTempFile ("cache", "jar");
- FileOutputStream fos = new FileOutputStream (f);
- int len = 0;
-
- while ((len = is.read (buf)) != -1)
- {
- fos.write (buf, 0, len);
- }
-
- fos.close();
- // Always verify the Manifest, open read only and delete when done.
- jf = new JarFile (f, true,
- ZipFile.OPEN_READ | ZipFile.OPEN_DELETE);
- }
-
- if (useCaches)
- cache.put (url, jf);
-
- return jf;
- }
- }
-
- protected Connection(URL url)
- throws MalformedURLException
- {
- super(url);
- }
-
- public synchronized void connect() throws IOException
- {
- // Call is ignored if already connected.
- if (connected)
- return;
-
- jar_url = getJarFileURL();
- jar_file = JarFileCache.get (jar_url, useCaches);
- String entry_name = getEntryName();
-
- if (entry_name != null
- && !entry_name.equals (""))
- {
- jar_entry = (JarEntry) jar_file.getEntry (entry_name);
-
- if(jar_entry == null)
- throw new FileNotFoundException("No entry for " + entry_name + " exists.");
- }
-
- connected = true;
- }
-
- public InputStream getInputStream() throws IOException
- {
- if (!connected)
- connect();
-
- if (! doInput)
- throw new ProtocolException("Can't open InputStream if doInput is false");
-
- return jar_file.getInputStream (jar_entry);
- }
-
- public synchronized JarFile getJarFile() throws IOException
- {
- if (!connected)
- connect();
-
- if (! doInput)
- throw new ProtocolException("Can't open JarFile if doInput is false");
-
- return jar_file;
- }
-
- public String getHeaderField(String field)
- {
- try
- {
- if (!connected)
- connect();
-
- if (field.equals("content-type"))
- return guessContentTypeFromName(getJarEntry().getName());
- else if (field.equals("content-length"))
- return Long.toString(getJarEntry().getSize());
- else if (field.equals("last-modified"))
- {
- // Both creating and manipulating dateFormat need synchronization.
- synchronized (Connection.class)
- {
- if (dateFormat == null)
- dateFormat = new SimpleDateFormat
- ("EEE, dd MMM yyyy hh:mm:ss 'GMT'",
- new Locale ("En", "Us", "Unix"));
-
- return dateFormat.format(new Date(getJarEntry().getTime()));
- }
- }
- }
- catch (IOException e)
- {
- // Fall through.
- }
- return null;
- }
-
- public int getContentLength()
- {
- if (!connected)
- return -1;
-
- return (int) jar_entry.getSize();
- }
-
- public long getLastModified()
- {
- if (!connected)
- return -1;
-
- try
- {
- return getJarEntry().getTime();
- }
- catch (IOException e)
- {
- return -1;
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/jar/Handler.java b/libjava/classpath/gnu/java/net/protocol/jar/Handler.java
deleted file mode 100644
index 7d6103e..0000000
--- a/libjava/classpath/gnu/java/net/protocol/jar/Handler.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/* gnu.java.net.protocol.jar.Handler - jar protocol handler for java.net
- Copyright (C) 1999, 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.net.protocol.jar;
-
-import gnu.java.lang.CPStringBuilder;
-
-import gnu.java.net.URLParseError;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.StringTokenizer;
-
-/**
- * @author Kresten Krab Thorup (krab@gnu.org)
- */
-public class Handler extends URLStreamHandler
-{
- /**
- * A do nothing constructor
- */
- public Handler()
- {
- }
-
- /**
- * This method returs a new JarURLConnection for the specified URL
- *
- * @param url The URL to return a connection for
- *
- * @return The URLConnection
- *
- * @exception IOException If an error occurs
- */
- protected URLConnection openConnection(URL url) throws IOException
- {
- return new Connection(url);
- }
-
- /**
- * This method overrides URLStreamHandler's for parsing url of protocol "jar"
- *
- * @param url The URL object in which to store the results
- * @param url_string The String-ized URL to parse
- * @param start The position in the string to start scanning from
- * @param end The position in the string to stop scanning
- */
- protected void parseURL (URL url, String url_string, int start, int end)
- {
- // This method does not throw an exception or return a value. Thus our
- // strategy when we encounter an error in parsing is to return without
- // doing anything.
- String file = url.getFile();
-
- if (!file.equals(""))
- { //has context url
- url_string = url_string.substring (start, end);
- if (url_string.startsWith("/"))
- { //url string is an absolute path
- int idx = file.lastIndexOf ("!/");
-
- if (idx < 0)
- throw new URLParseError("no !/ in spec");
-
- file = file.substring (0, idx + 1) + url_string;
- }
- else if (url_string.length() > 0)
- {
- int idx = file.lastIndexOf ("/");
- if (idx == -1) //context path is weird
- file = "/" + url_string;
- else if (idx == (file.length() - 1))
- //just concatenate two parts
- file = file + url_string;
- else
- // according to Java API Documentation, here is a little different
- // with URLStreamHandler.parseURL
- // but JDK seems doesn't handle it well
- file = file.substring(0, idx + 1) + url_string;
- }
-
- setURL (url, "jar", url.getHost(), url.getPort(), flat(file), null);
- return;
- }
-
- // Bunches of things should be true. Make sure.
- if (end < start)
- return;
- if (end - start < 2)
- return;
- if (start > url_string.length())
- return;
-
- // Skip remains of protocol
- url_string = url_string.substring (start, end);
-
- int jar_stop;
- if ((jar_stop = url_string.indexOf("!/")) < 0)
- throw new URLParseError("no !/ in spec");
-
- try
- {
- new URL(url_string.substring (0, jar_stop));
- }
- catch (MalformedURLException e)
- {
- throw new URLParseError("invalid inner URL: " + e.getMessage());
- }
-
- if (!url.getProtocol().equals ("jar") )
- throw new URLParseError("unexpected protocol " + url.getProtocol());
-
- setURL (url, "jar", url.getHost(), url.getPort(), url_string, null);
- }
-
- /**
- * Makes the given jar url string 'flat' by removing any . and .. from
- * jar file path because ZipFile entries can only handle flat paths.
- * Inside jar files '/' is always the path separator.
- */
- private static String flat(String url_string)
- {
- int jar_stop = url_string.indexOf("!/");
- String jar_path = url_string.substring(jar_stop + 1, url_string.length());
-
- if (jar_path.indexOf("/.") < 0)
- return url_string;
-
- ArrayList<String> tokens = new ArrayList<String>();
- StringTokenizer st = new StringTokenizer(jar_path, "/");
- while (st.hasMoreTokens())
- {
- String token = st.nextToken();
- if (token.equals("."))
- continue;
- else if (token.equals(".."))
- {
- if (! tokens.isEmpty())
- tokens.remove(tokens.size() - 1);
- }
- else
- tokens.add(token);
- }
-
- CPStringBuilder path = new CPStringBuilder(url_string.length());
- path.append(url_string.substring(0, jar_stop + 1));
-
- Iterator<String> it = tokens.iterator();
- while (it.hasNext())
- path.append('/').append(it.next());
-
- return path.toString();
- }
-
- /**
- * This method converts a Jar URL object into a String.
- *
- * @param url The URL object to convert
- */
- protected String toExternalForm (URL url)
- {
- String file = url.getFile();
- String ref = url.getRef();
-
- // return "jar:" + file;
- // Performance!!:
- // Do the concatenation manually to avoid resize StringBuffer's
- // internal buffer. The length of ref is not taken into consideration
- // as it's a rare path.
- CPStringBuilder sb = new CPStringBuilder (file.length() + 5);
- sb.append ("jar:");
- sb.append (file);
- if (ref != null)
- sb.append('#').append(ref);
- return sb.toString();
- }
-}
diff --git a/libjava/classpath/gnu/java/net/protocol/jar/package.html b/libjava/classpath/gnu/java/net/protocol/jar/package.html
deleted file mode 100644
index dcd263d..0000000
--- a/libjava/classpath/gnu/java/net/protocol/jar/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in gnu.java.net.protocol.jar package.
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. -->
-
-<html>
-<head><title>GNU Classpath - gnu.java.net.protocol.jar</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>