Makefile.am: Add new classes
authorMark Wielaard <mark@klomp.org>
Tue, 2 Oct 2001 20:59:31 +0000 (20:59 +0000)
committerMark Wielaard <mark@gcc.gnu.org>
Tue, 2 Oct 2001 20:59:31 +0000 (20:59 +0000)
* 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

From-SVN: r45969

libjava/ChangeLog
libjava/Makefile.am
libjava/Makefile.in
libjava/gcj/javaprims.h
libjava/java/lang/CharSequence.java [new file with mode: 0644]
libjava/java/lang/String.java
libjava/java/lang/StringBuffer.java
libjava/java/net/Authenticator.java [new file with mode: 0644]
libjava/java/net/PasswordAuthentication.java [new file with mode: 0644]

index e98a20874c94685475e2e054ac9a072b6052e875..8c1ce8707616fdcacf4cbaa2e5113e3ed9d473a9 100644 (file)
@@ -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.
index d99334be5e163e21bdcddbc5f1ed93ea7e172023..7eeb6d299f698528b518b87f5028814f43f335e3 100644 (file)
@@ -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        \
index 53599026c50f7f319931d3065b4ae573c0d7a8e3..1b8b9b32e466cd7b70e31bab6e9fe5439d39d05e 100644 (file)
@@ -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 \
index d32731558e0ffa760b04d652d4cd2dc25a57ac30..aa7c51e8e02497b4f6b223585b2f0caaf752a098 100644 (file)
@@ -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 (file)
index 0000000..8ba677e
--- /dev/null
@@ -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();
+}
index bed3171fb22d2e5017fcec2c77e50027d58744b1..8dadfb59cc0d04fd1b2c7d021851ab7f3a047255 100644 (file)
@@ -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);
index 211574a5b7eb25fadc7693fae950ffd9c631eb49..38978b1d9bd01ead009fbc43755994beca83996a 100644 (file)
@@ -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 (file)
index 0000000..315bfb0
--- /dev/null
@@ -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 (file)
index 0000000..08ef6fa
--- /dev/null
@@ -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
+