summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authormark <mark@138bc75d-0d04-0410-961f-82ee72b054a4>2001-10-02 20:59:31 +0000
committermark <mark@138bc75d-0d04-0410-961f-82ee72b054a4>2001-10-02 20:59:31 +0000
commitf91d1d48e1dbdee20f0b9ad4b14713e6a3a647e3 (patch)
tree3ef0582a181a049f71a29b6428f4483b678b7089 /libjava
parent3bd33b8a3d165f63491c54155c89425202fb8703 (diff)
downloadgcc-f91d1d48e1dbdee20f0b9ad4b14713e6a3a647e3.tar.gz
* Makefile.am: Add new classes
(core_java_source_files): CharSequence (ordinary_java_source_files): Authenticator, PasswordAuthentication * Makefile.in: regenerate * gcj/javaprims.h: ditto * java/lang/CharSequence: new class from Classpath * java/lang/String.java: implements CharSequence (subSequence (int,int)): new method * java/lang/SubString.java: implements CharSequence (subSequence (int,int)): new method remerge comments with Classpath * java/net/Authenticator.java: new class from Classpath * java/net/PasswordAuthentication.java: ditto git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45969 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog16
-rw-r--r--libjava/Makefile.am3
-rw-r--r--libjava/Makefile.in70
-rw-r--r--libjava/gcj/javaprims.h1
-rw-r--r--libjava/java/lang/CharSequence.java80
-rw-r--r--libjava/java/lang/String.java24
-rw-r--r--libjava/java/lang/StringBuffer.java65
-rw-r--r--libjava/java/net/Authenticator.java269
-rw-r--r--libjava/java/net/PasswordAuthentication.java104
9 files changed, 575 insertions, 57 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index e98a20874c9..8c1ce870761 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,19 @@
+2001-10-01 Mark Wielaard <mark@klomp.org>
+
+ * Makefile.am: Add new classes
+ (core_java_source_files): CharSequence
+ (ordinary_java_source_files): Authenticator, PasswordAuthentication
+ * Makefile.in: regenerate
+ * gcj/javaprims.h: ditto
+ * java/lang/CharSequence: new class from Classpath
+ * java/lang/String.java: implements CharSequence
+ (subSequence (int,int)): new method
+ * java/lang/SubString.java: implements CharSequence
+ (subSequence (int,int)): new method
+ remerge comments with Classpath
+ * java/net/Authenticator.java: new class from Classpath
+ * java/net/PasswordAuthentication.java: ditto
+
2001-10-01 Tom Tromey <tromey@redhat.com>
* gcj/javaprims.h: Rebuilt class list.
diff --git a/libjava/Makefile.am b/libjava/Makefile.am
index d99334be5e1..7eeb6d299f6 100644
--- a/libjava/Makefile.am
+++ b/libjava/Makefile.am
@@ -914,6 +914,7 @@ java/lang/ArrayStoreException.java \
java/lang/Boolean.java \
java/lang/Byte.java \
java/lang/Character.java \
+java/lang/CharSequence.java \
java/lang/ClassCastException.java \
java/lang/ClassCircularityError.java \
java/lang/ClassFormatError.java \
@@ -1179,6 +1180,7 @@ java/lang/reflect/Modifier.java \
java/lang/reflect/ReflectPermission.java \
java/math/BigDecimal.java \
java/math/BigInteger.java \
+java/net/Authenticator.java \
java/net/BindException.java \
java/net/ConnectException.java \
java/net/ContentHandler.java \
@@ -1194,6 +1196,7 @@ java/net/MalformedURLException.java \
java/net/MulticastSocket.java \
java/net/NetPermission.java \
java/net/NoRouteToHostException.java \
+java/net/PasswordAuthentication.java \
java/net/PlainDatagramSocketImpl.java \
java/net/PlainSocketImpl.java \
java/net/ProtocolException.java \
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index 53599026c50..1b8b9b32e46 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -123,38 +123,26 @@ libgcj_basedir = @libgcj_basedir@
mkinstalldirs = @mkinstalldirs@
AUTOMAKE_OPTIONS = foreign
-@TESTSUBDIR_TRUE@SUBDIRS = \
-@TESTSUBDIR_TRUE@$(DIRLTDL) testsuite gcj include
-@TESTSUBDIR_FALSE@SUBDIRS = \
-@TESTSUBDIR_FALSE@$(DIRLTDL) gcj include
-@USE_LIBDIR_TRUE@toolexeclibdir = \
-@USE_LIBDIR_TRUE@$(libdir)$(MULTISUBDIR)
-@USE_LIBDIR_FALSE@toolexeclibdir = \
-@USE_LIBDIR_FALSE@$(toolexecdir)/lib$(MULTISUBDIR)
-@USE_LIBDIR_FALSE@toolexecdir = \
-@USE_LIBDIR_FALSE@$(exec_prefix)/$(target_alias)
-@XLIB_AWT_TRUE@cond_x_ltlibrary = \
-@XLIB_AWT_TRUE@libgcjx.la
-@XLIB_AWT_FALSE@cond_x_ltlibrary = \
+@TESTSUBDIR_TRUE@SUBDIRS = @TESTSUBDIR_TRUE@$(DIRLTDL) testsuite gcj include
+@TESTSUBDIR_FALSE@SUBDIRS = @TESTSUBDIR_FALSE@$(DIRLTDL) gcj include
+@USE_LIBDIR_TRUE@toolexeclibdir = @USE_LIBDIR_TRUE@$(libdir)$(MULTISUBDIR)
+@USE_LIBDIR_FALSE@toolexeclibdir = @USE_LIBDIR_FALSE@$(toolexecdir)/lib$(MULTISUBDIR)
+@USE_LIBDIR_FALSE@toolexecdir = @USE_LIBDIR_FALSE@$(exec_prefix)/$(target_alias)
+@XLIB_AWT_TRUE@cond_x_ltlibrary = @XLIB_AWT_TRUE@libgcjx.la
+@XLIB_AWT_FALSE@cond_x_ltlibrary =
toolexeclib_LTLIBRARIES = libgcj.la $(cond_x_ltlibrary)
toolexeclib_DATA = libgcj.spec
data_DATA = libgcj.jar
-@NATIVE_TRUE@bin_PROGRAMS = \
-@NATIVE_TRUE@jv-convert gij rmic rmiregistry
+@NATIVE_TRUE@bin_PROGRAMS = @NATIVE_TRUE@jv-convert gij rmic rmiregistry
bin_SCRIPTS = addr2name.awk
-@CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = \
-@CANADIAN_TRUE@@NULL_TARGET_TRUE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar$(EXEEXT)
-@CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = \
-@CANADIAN_TRUE@@NULL_TARGET_FALSE@jar
-@CANADIAN_FALSE@ZIP = \
-@CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar$(EXEEXT)
-@CANADIAN_TRUE@GCJH = \
-@CANADIAN_TRUE@gcjh
-@CANADIAN_FALSE@GCJH = \
-@CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh$(EXEEXT)
+@CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = @CANADIAN_TRUE@@NULL_TARGET_TRUE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar$(EXEEXT)
+@CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = @CANADIAN_TRUE@@NULL_TARGET_FALSE@jar
+@CANADIAN_FALSE@ZIP = @CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar$(EXEEXT)
+@CANADIAN_TRUE@GCJH = @CANADIAN_TRUE@gcjh
+@CANADIAN_FALSE@GCJH = @CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh$(EXEEXT)
GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8
@@ -174,10 +162,8 @@ AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions \
@LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE \
-DPREFIX="\"$(prefix)\""
-@USING_GCC_TRUE@AM_CFLAGS = \
-@USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS)
-@USING_GCC_FALSE@AM_CFLAGS = \
-@USING_GCC_FALSE@@LIBGCJ_CFLAGS@
+@USING_GCC_TRUE@AM_CFLAGS = @USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS)
+@USING_GCC_FALSE@AM_CFLAGS = @USING_GCC_FALSE@@LIBGCJ_CFLAGS@
JCFLAGS = -g
JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS)
@@ -246,8 +232,7 @@ extra_headers = java/lang/Object.h java/lang/Class.h
NM = nm
-@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = \
-@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS
+@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS
CONVERT_DIR = gnu/gcj/convert
@@ -660,6 +645,7 @@ java/lang/ArrayStoreException.java \
java/lang/Boolean.java \
java/lang/Byte.java \
java/lang/Character.java \
+java/lang/CharSequence.java \
java/lang/ClassCastException.java \
java/lang/ClassCircularityError.java \
java/lang/ClassFormatError.java \
@@ -920,6 +906,7 @@ java/lang/reflect/Modifier.java \
java/lang/reflect/ReflectPermission.java \
java/math/BigDecimal.java \
java/math/BigInteger.java \
+java/net/Authenticator.java \
java/net/BindException.java \
java/net/ConnectException.java \
java/net/ContentHandler.java \
@@ -935,6 +922,7 @@ java/net/MalformedURLException.java \
java/net/MulticastSocket.java \
java/net/NetPermission.java \
java/net/NoRouteToHostException.java \
+java/net/PasswordAuthentication.java \
java/net/PlainDatagramSocketImpl.java \
java/net/PlainSocketImpl.java \
java/net/ProtocolException.java \
@@ -1785,8 +1773,9 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/lang/ArithmeticException.P \
.deps/java/lang/ArrayIndexOutOfBoundsException.P \
.deps/java/lang/ArrayStoreException.P .deps/java/lang/Boolean.P \
-.deps/java/lang/Byte.P .deps/java/lang/Character.P \
-.deps/java/lang/Class.P .deps/java/lang/ClassCastException.P \
+.deps/java/lang/Byte.P .deps/java/lang/CharSequence.P \
+.deps/java/lang/Character.P .deps/java/lang/Class.P \
+.deps/java/lang/ClassCastException.P \
.deps/java/lang/ClassCircularityError.P \
.deps/java/lang/ClassFormatError.P .deps/java/lang/ClassLoader.P \
.deps/java/lang/ClassNotFoundException.P \
@@ -1873,14 +1862,15 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/lang/w_log.P .deps/java/lang/w_pow.P \
.deps/java/lang/w_remainder.P .deps/java/lang/w_sqrt.P \
.deps/java/math/BigDecimal.P .deps/java/math/BigInteger.P \
-.deps/java/net/BindException.P .deps/java/net/ConnectException.P \
-.deps/java/net/ContentHandler.P .deps/java/net/ContentHandlerFactory.P \
-.deps/java/net/DatagramPacket.P .deps/java/net/DatagramSocket.P \
-.deps/java/net/DatagramSocketImpl.P .deps/java/net/FileNameMap.P \
-.deps/java/net/HttpURLConnection.P .deps/java/net/InetAddress.P \
-.deps/java/net/JarURLConnection.P \
+.deps/java/net/Authenticator.P .deps/java/net/BindException.P \
+.deps/java/net/ConnectException.P .deps/java/net/ContentHandler.P \
+.deps/java/net/ContentHandlerFactory.P .deps/java/net/DatagramPacket.P \
+.deps/java/net/DatagramSocket.P .deps/java/net/DatagramSocketImpl.P \
+.deps/java/net/FileNameMap.P .deps/java/net/HttpURLConnection.P \
+.deps/java/net/InetAddress.P .deps/java/net/JarURLConnection.P \
.deps/java/net/MalformedURLException.P .deps/java/net/MulticastSocket.P \
.deps/java/net/NetPermission.P .deps/java/net/NoRouteToHostException.P \
+.deps/java/net/PasswordAuthentication.P \
.deps/java/net/PlainDatagramSocketImpl.P \
.deps/java/net/PlainSocketImpl.P .deps/java/net/ProtocolException.P \
.deps/java/net/ServerSocket.P .deps/java/net/Socket.P \
@@ -2493,7 +2483,7 @@ distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
- cp -pr $$/$$file $(distdir)/$$file; \
+ cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
diff --git a/libjava/gcj/javaprims.h b/libjava/gcj/javaprims.h
index d32731558e0..aa7c51e8e02 100644
--- a/libjava/gcj/javaprims.h
+++ b/libjava/gcj/javaprims.h
@@ -134,6 +134,7 @@ extern "Java"
class Boolean;
class Byte;
class CPlusPlusDemangler;
+ class CharSequence;
class Character;
class Character$Subset;
class Character$UnicodeBlock;
diff --git a/libjava/java/lang/CharSequence.java b/libjava/java/lang/CharSequence.java
new file mode 100644
index 00000000000..8ba677e063a
--- /dev/null
+++ b/libjava/java/lang/CharSequence.java
@@ -0,0 +1,80 @@
+/* java.lang.CharSequence -- Anything that has an indexed sequence of chars
+ Copyright (C) 2001 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.lang;
+
+/**
+ * General functions on a sequence of chars. This interface is implemented
+ * by <code>String</code>, <code>StringBuffer</code> and
+ * <code>CharBuffer</code> to give a uniform way to get chars at a certain
+ * index, the number of characters in the sequence and a subrange of the
+ * chars. Indexes start at 0 and the last index is <code>length()-1</code>.
+ * <p>
+ * Even when classes implement this interface they are not always
+ * exchangeble because they might implement their compare, equals or hash
+ * function differently. This means that in general one should not use a
+ * <code>CharSequence</code> as keys in collections since two sequences
+ * with the same chars at the same indexes with the same length might not
+ * have the same hash code, be equal or be comparable since the are
+ * represented by different classes.
+ *
+ * @author Mark Wielaard (mark@klomp.org)
+ *
+ * @since 1.4
+ */
+
+public interface CharSequence {
+
+ /**
+ * Returns the character at the given index.
+ *
+ * @exception IndexOutOfBoundsException when <code>i &lt; 0</code> or
+ * <code>i &gt; length()-1</code>.
+ */
+ char charAt(int i);
+
+ /**
+ * Returns the length of the sequence.
+ */
+ int length();
+
+ /**
+ * Returns a new <code>CharSequence</char> of the indicated range.
+ *
+ * @exception IndexOutOfBoundsException when <code>begin &lt; 0</code>,
+ * <code>end &lt; 0</code>, <code>end &gt; length()</code> or
+ * <code>begin &gt; end</code>
+ */
+ CharSequence subSequence(int begin, int end);
+
+ /**
+ * Returns the complete <code>CharSequence</code> as a <code>String</code>.
+ * Classes that implement this interface should return a <code>String</code>
+ * which contains only the characters in the sequence in the correct order.
+ */
+ String toString();
+}
diff --git a/libjava/java/lang/String.java b/libjava/java/lang/String.java
index bed3171fb22..8dadfb59cc0 100644
--- a/libjava/java/lang/String.java
+++ b/libjava/java/lang/String.java
@@ -22,7 +22,7 @@ import java.util.Locale;
* Status: Complete to 1.3.
*/
-public final class String implements Serializable, Comparable
+public final class String implements Serializable, Comparable, CharSequence
{
private Object data;
private int boffset; // Note this is a byte offset - don't use in Java code!
@@ -297,6 +297,28 @@ public final class String implements Serializable, Comparable
}
}
+ /**
+ * Creates a substring of this String, starting at a specified index
+ * and ending at one character before a specified index.
+ * <p>
+ * To implement <code>CharSequence</code>.
+ * Calls <code>substring(beginIndex, endIndex)</code>.
+ *
+ * @param beginIndex index to start substring (base 0)
+ * @param endIndex index after the last character to be
+ * copied into the substring
+ *
+ * @return new String which is a substring of this String
+ *
+ * @exception StringIndexOutOfBoundsException
+ * if (beginIndex < 0 || endIndex > this.length() || beginIndex > endIndex)
+ */
+ public CharSequence subSequence(int beginIndex, int endIndex)
+ throws IndexOutOfBoundsException
+ {
+ return substring(beginIndex, endIndex);
+ }
+
public String substring (int beginIndex)
{
return substring (beginIndex, count);
diff --git a/libjava/java/lang/StringBuffer.java b/libjava/java/lang/StringBuffer.java
index 211574a5b7e..38978b1d9bd 100644
--- a/libjava/java/lang/StringBuffer.java
+++ b/libjava/java/lang/StringBuffer.java
@@ -1,21 +1,32 @@
-// StringBuffer.java - Growable strings.
-
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
-
- This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
+/* StringBuffer.java -- Growable strings
+ Copyright (C) 1998, 1999, 2000, 2001 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
package java.lang;
import java.io.Serializable;
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date October 23, 1998.
- */
-
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
* Updated using online JDK 1.2 docs.
* Believed complete and correct to JDK 1.2.
@@ -57,7 +68,7 @@ import java.io.Serializable;
* @author Tom Tromey
* @see java.lang.String
*/
-public final class StringBuffer implements Serializable
+public final class StringBuffer implements Serializable, CharSequence
{
/** Append the <code>String</code> value of the argument to this <code>StringBuffer</code>.
* Uses <code>String.valueOf()</code> to convert to
@@ -198,7 +209,7 @@ public final class StringBuffer implements Serializable
* @param index the index of the character to get, starting at 0.
* @return the character at the specified index.
* @exception IndexOutOfBoundsException if the desired character index
- * is not between 0 and length() - 1 (inclusive).
+ * is negative or greater then length() - 1.
*/
public synchronized char charAt (int index)
{
@@ -653,6 +664,28 @@ public final class StringBuffer implements Serializable
return new String (value, beginIndex, endIndex - beginIndex);
}
+ /**
+ * Creates a substring of this StringBuffer, starting at a specified index
+ * and ending at one character before a specified index.
+ * <p>
+ * To implement <code>CharSequence</code>.
+ * Calls <code>substring(beginIndex, endIndex)</code>.
+ *
+ * @param beginIndex index to start substring (base 0)
+ * @param endIndex index after the last character to be
+ * copied into the substring
+ *
+ * @return new String which is a substring of this StringBuffer
+ *
+ * @exception StringIndexOutOfBoundsException
+ * if (beginIndex < 0 || endIndex > this.length() || beginIndex > endIndex)
+ */
+ public CharSequence subSequence (int beginIndex, int endIndex)
+ {
+ return substring(beginIndex, endIndex);
+ }
+
+
/** Convert this <code>StringBuffer</code> to a <code>String</code>.
* @return the characters in this StringBuffer
*/
diff --git a/libjava/java/net/Authenticator.java b/libjava/java/net/Authenticator.java
new file mode 100644
index 00000000000..315bfb03981
--- /dev/null
+++ b/libjava/java/net/Authenticator.java
@@ -0,0 +1,269 @@
+/* Authenticator.java -- Abstract class for obtaining authentication info
+ Copyright (C) 1998,2000 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+package java.net;
+
+/**
+ * Sometimes a network operation (such as hitting a password protected
+ * web site) will require authentication information in the form of a
+ * username and password. This abstract class provides a model for
+ * obtaining that information.
+ * <p>
+ * To make use of this feature, a programmer must create a subclass of
+ * Authenticator that knows how to obtain the necessary info. An example
+ * would be a class that popped up a dialog box to prompt the user.
+ * After creating an instance of that subclass, the static setDefault
+ * method of this class is called to set up that instance as the object
+ * to use on subsequent calls to obtain authorization.
+ *
+ * @since 1.2
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ */
+public abstract class Authenticator
+{
+
+/*************************************************************************/
+
+/*
+ * Class Variables
+ */
+
+/**
+ * This is the default Authenticator object to use for password requests
+ */
+private static Authenticator default_authenticator;
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
+ */
+
+/**
+ * InternetAddress of the site requesting authentication
+ */
+private InetAddress addr;
+
+/**
+ * The port number of the site requesting authentication
+ */
+private int port;
+
+/**
+ * The protocol name of the site requesting authentication
+ */
+private String protocol;
+
+/**
+ * The prompt to display to the user when requesting authentication info
+ */
+private String prompt;
+
+/**
+ * The authentication scheme in use
+ */
+private String scheme;
+
+/*************************************************************************/
+
+/*
+ * Class Methods
+ */
+
+/**
+ * This method sets the default <code>Authenticator</code> object (an
+ * instance of a
+ * subclass of <code>Authenticator</code>) to use when prompting the user for
+ * information. Note that this method checks to see if the caller is
+ * allowed to set this value (the "setDefaultAuthenticator" permission)
+ * and throws a <code>SecurityException</code> if it is not.
+ *
+ * @param def_auth The new default <code>Authenticator</code> object to use
+ *
+ * @exception SecurityException If the caller does not have permission
+ * to perform this operation
+ */
+public static void
+setDefault(Authenticator def_auth)
+{
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null)
+ sm.checkPermission(new NetPermission("setDefaultAuthenticator"));
+
+ default_authenticator = def_auth;
+}
+
+/*************************************************************************/
+
+/**
+ * This method is called whenever a username and password for a given
+ * network operation is required. First, a security check is made to see
+ * if the caller has the "requestPasswordAuthentication"
+ * permission. If not, the method thows an exception. If there is no
+ * default <code>Authenticator</code> object, the method then returns
+ * <code>null</code>. Otherwise, the default authenticators's instance
+ * variables are initialized and it's <code>getPasswordAuthentication</code>
+ * method is called to get the actual authentication information to return.
+ *
+ * @param addr The address requesting authentication
+ * @param port The port requesting authentication
+ * @param protocol The protocol requesting authentication
+ * @param prompt The prompt to display to the user when requesting
+ authentication info
+ * @param scheme The authentication scheme in use
+ *
+ * @return A <code>PasswordAuthentication</code> object with the user's
+ * authentication info.
+ *
+ * @exception SecurityException If the caller does not have permission to
+ * perform this operation
+ */
+public static PasswordAuthentication
+requestPasswordAuthentication(InetAddress addr, int port, String protocol,
+ String prompt, String scheme)
+{
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null)
+ sm.checkPermission(new NetPermission("requestPasswordAuthentication"));
+
+ if (default_authenticator == null)
+ return(null);
+
+ default_authenticator.addr = addr;
+ default_authenticator.port = port;
+ default_authenticator.protocol = protocol;
+ default_authenticator.prompt = prompt;
+ default_authenticator.scheme = scheme;
+
+ return(default_authenticator.getPasswordAuthentication());
+}
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+ * Default, no-argument constructor for subclasses to call.
+ */
+public
+Authenticator()
+{
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+ * This method returns the address of the site that is requesting
+ * authentication.
+ *
+ * @return The requesting site
+ */
+protected final InetAddress
+getRequestingSite()
+{
+ return(addr);
+}
+
+/*************************************************************************/
+
+/**
+ * This method returns the port of the site that is requesting
+ * authentication.
+ *
+ * @return The requesting port
+ */
+protected final int
+getRequestingPort()
+{
+ return(port);
+}
+
+/*************************************************************************/
+
+/**
+ * This method returns the requesting protocol of the operation that is
+ * requesting authentication
+ *
+ * @return The requesting protocol
+ */
+protected final String
+getRequestingProtocol()
+{
+ return(protocol);
+}
+
+/*************************************************************************/
+
+/**
+ * Returns the prompt that should be used when requesting authentication
+ * information from the user
+ *
+ * @return The user prompt
+ */
+protected final String
+getRequestingPrompt()
+{
+ return(prompt);
+}
+
+/*************************************************************************/
+
+/**
+ * This method returns the authentication scheme in use
+ *
+ * @return The authentication scheme
+ */
+protected final String
+getRequestingScheme()
+{
+ return(scheme);
+}
+
+/*************************************************************************/
+
+/**
+ * This method is called whenever a request for authentication is made. It
+ * can call the other getXXX methods to determine the information relevant
+ * to this request. Subclasses should override this method, which returns
+ * <code>null</code> by default.
+ *
+ * @return The PasswordAuthentication information
+ */
+protected PasswordAuthentication
+getPasswordAuthentication()
+{
+ return(null);
+}
+
+} // class Authenticator
+
diff --git a/libjava/java/net/PasswordAuthentication.java b/libjava/java/net/PasswordAuthentication.java
new file mode 100644
index 00000000000..08ef6fad1ed
--- /dev/null
+++ b/libjava/java/net/PasswordAuthentication.java
@@ -0,0 +1,104 @@
+/* PasswordAuthentication.java -- Container class for username/password pairs
+ Copyright (C) 1998,2000 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+package java.net;
+
+/**
+ * This class serves a container for username/password pairs.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ */
+public final class PasswordAuthentication
+{
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
+ */
+
+/**
+ * The username
+ */
+private String username;
+
+/**
+ * The password
+ */
+private char[] password;
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+ * Creates a new PasswordAuthentication object from the specified username
+ * and password.
+ *
+ * @param username The username for this object
+ * @param password The password for this object
+ */
+public
+PasswordAuthentication(String username, char[] password)
+{
+ this.username = username;
+ this.password = password;
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+ * Returns the username associated with this object
+ *
+ * @return The username
+ */
+public String
+getUserName()
+{
+ return(username);
+}
+
+/*************************************************************************/
+
+/**
+ * Returns the password associated with this object
+ *
+ * @return The password
+ */
+public char[]
+getPassword()
+{
+ return(password);
+}
+
+} // class PasswordAuthentication
+