--- a/jdk/src/share/bin/java.c Sat Jan 22 08:42:14 2011 -0500
+++ b/jdk/src/share/bin/java.c Sat Jan 22 08:43:25 2011 -0500
@@ -94,15 +94,15 @@
* Prototypes for functions internal to launcher.
*/
static void SetClassPath(const char *s);
-static void SetModulesBootClassPath(const char *s);
static void SelectVersion(int argc, char **argv, char **main_class);
-static jboolean ParseArguments(int *pargc, char ***pargv, char **pjarfile,
- char **pclassname, int *pret, const char *jvmpath);
+static jboolean ParseArguments(int *pargc, char ***pargv,
+ int *pmode, char **pwhat,
+ int *pret, const char *jrepath);
static jboolean InitializeJVM(JavaVM **pvm, JNIEnv **penv,
InvocationFunctions *ifn);
static jstring NewPlatformString(JNIEnv *env, char *s);
static jobjectArray NewPlatformStringArray(JNIEnv *env, char **strv, int strc);
-static jclass LoadMainClass(JNIEnv *env, jboolean isJar, char *name);
+static jclass LoadMainClass(JNIEnv *env, int mode, char *name);
static void TranslateApplicationArgs(int jargc, const char **jargv, int *pargc, char ***pargv);
static jboolean AddApplicationOptions(int cpathc, const char **cpathv);
@@ -158,18 +158,27 @@
* Running Java code in primordial thread caused many problems. We will
* create a new thread to invoke JVM. See 6316197 for more information.
*/
-static jlong threadStackSize = 0; /* stack size of the new thread */
+static jlong threadStackSize = 0; /* stack size of the new thread */
static jlong maxHeapSize = 0; /* max heap size */
static jlong initialHeapSize = 0; /* inital heap size */
int JNICALL JavaMain(void * args); /* entry point */
+enum LaunchMode { // cf. sun.launcher.LauncherHelper
+ LM_UNKNOWN = 0,
+ LM_CLASS,
+ LM_JAR
+};
+
+static const char *launchModeNames[]
+ = { "Unknown", "Main class", "JAR file" };
+
typedef struct {
- int argc;
- char ** argv;
- char * jarfile;
- char * classname;
- InvocationFunctions ifn;
+ int argc;
+ char **argv;
+ int mode;
+ char *what;
+ InvocationFunctions ifn;
} JavaMainArgs;
/*
@@ -189,8 +198,8 @@
jint ergo /* ergonomics class policy */
)
{
- char *jarfile = 0;
- char *classname = 0;
+ int mode = LM_UNKNOWN;
+ char *what = NULL;
char *cpath = 0;
char *main_class = NULL;
int ret;
@@ -277,24 +286,21 @@
SetClassPath(cpath);
}
- /*
- * Parse command line options; if the return value of
- * ParseArguments is false, the program should exit.
+ /* Parse command line options; if the return value of
+ * ParseArguments is false, the program should exit.
*/
- if (!ParseArguments(&argc, &argv, &jarfile, &classname, &ret, jvmpath)) {
+ if (!ParseArguments(&argc, &argv, &mode, &what, &ret, jrepath))
+ {
return(ret);
}
- /* Set bootclasspath for modules */
- SetModulesBootClassPath(jrepath);
-
/* Override class path if -jar flag was specified */
- if (jarfile != 0) {
- SetClassPath(jarfile);
+ if (mode == LM_JAR) {
+ SetClassPath(what); /* Override class path */
}
/* set the -Dsun.java.command pseudo property */
- SetJavaCommandLineProp(classname, jarfile, argc, argv);
+ SetJavaCommandLineProp(what, argc, argv);
/* Set the -Dsun.java.launcher pseudo property */
SetJavaLauncherProp();
@@ -305,7 +311,7 @@
/* Show the splash screen if needed */
ShowSplashScreen();
- return ContinueInNewThread(&ifn, argc, argv, jarfile, classname, ret);
+ return ContinueInNewThread(&ifn, argc, argv, mode, what, ret);
}
/*
@@ -353,13 +359,13 @@
JavaMainArgs *args = (JavaMainArgs *)_args;
int argc = args->argc;
char **argv = args->argv;
- char *jarfile = args->jarfile;
- char *classname = args->classname;
+ int mode = args->mode;
+ char *what = args->what;
InvocationFunctions ifn = args->ifn;
JavaVM *vm = 0;
JNIEnv *env = 0;
- jclass mainClass;
+ jclass mainClass = NULL;
jmethodID mainID;
jobjectArray mainArgs;
int ret = 0;
@@ -385,7 +391,7 @@
CHECK_EXCEPTION_LEAVE(1);
}
/* If the user specified neither a class name nor a JAR file */
- if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) {
+ if (printXUsage || printUsage || what == 0 || mode == LM_UNKNOWN) {
PrintUsage(env, printXUsage);
CHECK_EXCEPTION_LEAVE(1);
LEAVE();
@@ -399,11 +405,11 @@
(long)(jint)Counter2Micros(end-start));
}
- /* At this stage, argc/argv have the applications' arguments */
+ /* At this stage, argc/argv have the application's arguments */
if (JLI_IsTraceLauncher()){
int i;
- printf("Main-Class is '%s'\n", classname ? classname : "");
- printf("Apps' argc is %d\n", argc);
+ printf("%s is '%s'\n", launchModeNames[mode], what);
+ printf("App's argc is %d\n", argc);
for (i=0; i < argc; i++) {
printf(" argv[%2d] = '%s'\n", i, argv[i]);
}
@@ -431,11 +437,7 @@
* 2) Remove the vestages of maintaining main_class through
* the environment (and remove these comments).
*/
- if (jarfile != 0) {
- mainClass = LoadMainClass(env, JNI_TRUE, jarfile);
- } else {
- mainClass = LoadMainClass(env, JNI_FALSE, classname);
- }
+ mainClass = LoadMainClass(env, mode, what);
CHECK_EXCEPTION_NULL_LEAVE(mainClass);
/*
@@ -697,7 +699,7 @@
if (JLI_StrCCmp(str, "-Xms") == 0) {
jlong tmp;
if (parse_size(str + 4, &tmp)) {
- initialHeapSize = tmp;
+ initialHeapSize = tmp;
}
}
}
@@ -719,44 +721,6 @@
}
/*
- * Set the bootclasspath for modules.
- * A temporary workaround until jigsaw is integrated into JDK 7.
- */
-static void
-SetModulesBootClassPath(const char *jrepath)
-{
- char *def, *s;
- char pathname[MAXPATHLEN];
- const char separator[] = { FILE_SEPARATOR, '\0' };
- const char *orig = jrepath;
- static const char format[] = "-Xbootclasspath/p:%s";
- struct stat statbuf;
-
- /* return if jre/lib/rt.jar exists */
- JLI_Snprintf(pathname, sizeof(pathname), "%s%slib%srt.jar", jrepath, separator, separator);
- if (stat(pathname, &statbuf) == 0) {
- return;
- }
-
- /* return if jre/classes exists */
- JLI_Snprintf(pathname, sizeof(pathname), "%s%sclasses", jrepath, separator);
- if (stat(pathname, &statbuf) == 0) {
- return;
- }
-
- /* modularized jre */
- JLI_Snprintf(pathname, sizeof(pathname), "%s%slib%s*", jrepath, separator, separator);
- s = (char *) JLI_WildcardExpandClasspath(pathname);
- def = JLI_MemAlloc(sizeof(format)
- - 2 /* strlen("%s") */
- + JLI_StrLen(s));
- sprintf(def, format, s);
- AddOption(def, NULL);
- if (s != orig)
- JLI_MemFree((char *) s);
-}
-
-/*
* The SelectVersion() routine ensures that an appropriate version of
* the JRE is running. The specification for the appropriate version
* is obtained from either the manifest of a jar file (preferred) or
@@ -1000,16 +964,17 @@
/*
* Parses command line arguments. Returns JNI_FALSE if launcher
* should exit without starting vm, returns JNI_TRUE if vm needs
- * to be started to process given options. *pret (the launcher
+ * to be started to process given options. *pret (the launcher
* process return value) is set to 0 for a normal exit.
*/
static jboolean
-ParseArguments(int *pargc, char ***pargv, char **pjarfile,
- char **pclassname, int *pret, const char *jvmpath)
+ParseArguments(int *pargc, char ***pargv,
+ int *pmode, char **pwhat,
+ int *pret, const char *jrepath)
{
int argc = *pargc;
char **argv = *pargv;
- jboolean jarflag = JNI_FALSE;
+ int mode = LM_UNKNOWN;
char *arg;
*pret = 0;
@@ -1019,10 +984,11 @@
if (JLI_StrCmp(arg, "-classpath") == 0 || JLI_StrCmp(arg, "-cp") == 0) {
ARG_CHECK (argc, ARG_ERROR1, arg);
SetClassPath(*argv);
+ mode = LM_CLASS;
argv++; --argc;
} else if (JLI_StrCmp(arg, "-jar") == 0) {
ARG_CHECK (argc, ARG_ERROR2, arg);
- jarflag = JNI_TRUE;
+ mode = LM_JAR;
} else if (JLI_StrCmp(arg, "-help") == 0 ||
JLI_StrCmp(arg, "-h") == 0 ||
JLI_StrCmp(arg, "-?") == 0) {
@@ -1102,19 +1068,24 @@
}
if (--argc >= 0) {
- if (jarflag) {
- *pjarfile = *argv++;
- *pclassname = NULL;
- } else {
- *pjarfile = NULL;
- *pclassname = *argv++;
- }
+ *pwhat = *argv++;
+ }
+
+ if (*pwhat == NULL) {
+ *pret = 1;
+ } else if (mode == LM_UNKNOWN) {
+ /* default to LM_CLASS if -jar and -cp option are
+ * not specified */
+ mode = LM_CLASS;
+ }
+
+ if (argc >= 0) {
*pargc = argc;
*pargv = argv;
}
- if (*pjarfile == NULL && *pclassname == NULL) {
- *pret = 1;
- }
+
+ *pmode = mode;
+
return JNI_TRUE;
}
@@ -1263,7 +1234,7 @@
* call it for more details refer to the java implementation.
*/
static jclass
-LoadMainClass(JNIEnv *env, jboolean isJar, char *name)
+LoadMainClass(JNIEnv *env, int mode, char *name)
{
jclass cls;
jmethodID mid;
@@ -1276,9 +1247,9 @@
}
NULL_CHECK0(cls = FindBootStrapClass(env, "sun/launcher/LauncherHelper"));
NULL_CHECK0(mid = (*env)->GetStaticMethodID(env, cls, "checkAndLoadMain",
- "(ZZLjava/lang/String;)Ljava/lang/Object;"));
+ "(ZILjava/lang/String;)Ljava/lang/Class;"));
str = (*env)->NewStringUTF(env, name);
- result = (*env)->CallStaticObjectMethod(env, cls, mid, JNI_TRUE, isJar, str);
+ result = (*env)->CallStaticObjectMethod(env, cls, mid, JNI_TRUE, mode, str);
if (JLI_IsTraceLauncher()) {
end = CounterGet();
@@ -1424,8 +1395,7 @@
* property is not exported by HotSpot to the Java layer.
*/
void
-SetJavaCommandLineProp(char *classname, char *jarfile,
- int argc, char **argv)
+SetJavaCommandLineProp(char *what, int argc, char **argv)
{
int i = 0;
@@ -1433,22 +1403,17 @@
char* javaCommand = NULL;
char* dashDstr = "-Dsun.java.command=";
- if (classname == NULL && jarfile == NULL) {
+ if (what == NULL) {
/* unexpected, one of these should be set. just return without
* setting the property
*/
return;
}
- /* if the class name is not set, then use the jarfile name */
- if (classname == NULL) {
- classname = jarfile;
- }
-
/* determine the amount of memory to allocate assuming
* the individual components will be space separated
*/
- len = JLI_StrLen(classname);
+ len = JLI_StrLen(what);
for (i = 0; i < argc; i++) {
len += JLI_StrLen(argv[i]) + 1;
}
@@ -1459,7 +1424,7 @@
/* build the -D string */
*javaCommand = '\0';
JLI_StrCat(javaCommand, dashDstr);
- JLI_StrCat(javaCommand, classname);
+ JLI_StrCat(javaCommand, what);
for (i = 0; i < argc; i++) {
/* the components of the string are space separated. In
@@ -1479,7 +1444,8 @@
* JVM would like to know if it's created by a standard Sun launcher, or by
* user native application, the following property indicates the former.
*/
-void SetJavaLauncherProp() {
+void
+SetJavaLauncherProp() {
AddOption("-Dsun.java.launcher=SUN_STANDARD", NULL);
}
@@ -1913,8 +1879,8 @@
}
static int
-ContinueInNewThread(InvocationFunctions* ifn, int argc,
- char **argv, char *jarfile, char *classname, int ret)
+ContinueInNewThread(InvocationFunctions* ifn, int argc, char **argv,
+ int mode, char *what, int ret)
{
/*
@@ -1938,8 +1904,8 @@
args.argc = argc;
args.argv = argv;
- args.jarfile = jarfile;
- args.classname = classname;
+ args.mode = mode;
+ args.what = what;
args.ifn = *ifn;
rslt = ContinueInNewThread0(JavaMain, threadStackSize, (void*)&args);
--- a/jdk/src/share/bin/java.h Sat Jan 22 08:42:14 2011 -0500
+++ b/jdk/src/share/bin/java.h Sat Jan 22 08:43:25 2011 -0500
@@ -153,7 +153,7 @@
/* sun.java.launcher.* platform properties. */
void SetJavaLauncherPlatformProps(void);
-void SetJavaCommandLineProp(char* classname, char* jarfile, int argc, char** argv);
+void SetJavaCommandLineProp(char* what, int argc, char** argv);
void SetJavaLauncherProp(void);
/*
@@ -178,8 +178,9 @@
jboolean ServerClassMachine();
-static int ContinueInNewThread(InvocationFunctions* ifn, int argc, char** argv,
- char* jarfile, char* classname, int ret);
+static int ContinueInNewThread(InvocationFunctions* ifn,
+ int argc, char** argv,
+ int mode, char *what, int ret);
/*
* Initialize platform specific settings
--- a/jdk/src/share/classes/java/net/InetAddress.java Sat Jan 22 08:42:14 2011 -0500
+++ b/jdk/src/share/classes/java/net/InetAddress.java Sat Jan 22 08:43:25 2011 -0500
@@ -677,8 +677,7 @@
static InetAddressImpl impl;
- private static HashMap<String, InetAddress[]> lookupTable
- = new HashMap<String, InetAddress[]>();
+ private static final HashMap<String, Void> lookupTable = new HashMap<>();
/**
* Represents a cache entry
@@ -737,7 +736,7 @@
// As we iterate in insertion order we can
// terminate when a non-expired entry is found.
- LinkedList<String> expired = new LinkedList<String>();
+ LinkedList<String> expired = new LinkedList<>();
long now = System.currentTimeMillis();
for (String key : cache.keySet()) {
CacheEntry entry = cache.get(key);
@@ -1227,43 +1226,45 @@
// lookupTable and return null so the
// following code would do a lookup itself.
if ((addresses = checkLookupTable(host)) == null) {
- // This is the first thread which looks up the addresses
- // this host or the cache entry for this host has been
- // expired so this thread should do the lookup.
- for (NameService nameService : nameServices) {
- try {
- /*
- * Do not put the call to lookup() inside the
- * constructor. if you do you will still be
- * allocating space when the lookup fails.
- */
+ try {
+ // This is the first thread which looks up the addresses
+ // this host or the cache entry for this host has been
+ // expired so this thread should do the lookup.
+ for (NameService nameService : nameServices) {
+ try {
+ /*
+ * Do not put the call to lookup() inside the
+ * constructor. if you do you will still be
+ * allocating space when the lookup fails.
+ */
- addresses = nameService.lookupAllHostAddr(host);
- success = true;
- break;
- } catch (UnknownHostException uhe) {
- if (host.equalsIgnoreCase("localhost")) {
- InetAddress[] local = new InetAddress[] { impl.loopbackAddress() };
- addresses = local;
+ addresses = nameService.lookupAllHostAddr(host);
success = true;
break;
- }
- else {
- addresses = unknown_array;
- success = false;
- ex = uhe;
+ } catch (UnknownHostException uhe) {
+ if (host.equalsIgnoreCase("localhost")) {
+ InetAddress[] local = new InetAddress[] { impl.loopbackAddress() };
+ addresses = local;
+ success = true;
+ break;
+ }
+ else {
+ addresses = unknown_array;
+ success = false;
+ ex = uhe;
+ }
}
}
+
+ // Cache the addresses.
+ cacheAddresses(host, addresses, success);
+ if (!success && ex != null)
+ throw ex;
+ } finally {
+ // Delete host from the lookupTable and notify
+ // all threads waiting on the lookupTable monitor.
+ updateLookupTable(host);
}
-
- // Cache the addresses.
- cacheAddresses(host, addresses, success);
- // Delete the host from the lookupTable, and
- // notify all threads waiting for the monitor
- // for lookupTable.
- updateLookupTable(host);
- if (!success && ex != null)
- throw ex;
}
return addresses;
@@ -1271,16 +1272,13 @@
private static InetAddress[] checkLookupTable(String host) {
- // make sure addresses is null.
- InetAddress[] addresses = null;
-
synchronized (lookupTable) {
// If the host isn't in the lookupTable, add it in the
// lookuptable and return null. The caller should do
// the lookup.
if (lookupTable.containsKey(host) == false) {
lookupTable.put(host, null);
- return addresses;
+ return null;
}
// If the host is in the lookupTable, it means that another
@@ -1298,10 +1296,11 @@
// the host. This thread should retry to get the addresses
// from the addressCache. If it doesn't get the addresses from
// the cache, it will try to look up the addresses itself.
- addresses = getCachedAddresses(host);
+ InetAddress[] addresses = getCachedAddresses(host);
if (addresses == null) {
synchronized (lookupTable) {
lookupTable.put(host, null);
+ return null;
}
}
--- a/jdk/src/share/classes/sun/launcher/LauncherHelper.java Sat Jan 22 08:42:14 2011 -0500
+++ b/jdk/src/share/classes/sun/launcher/LauncherHelper.java Sat Jan 22 08:43:25 2011 -0500
@@ -401,6 +401,14 @@
}
}
+
+ // From src/share/bin/java.c:
+ // enum LaunchMode { LM_UNKNOWN = 0, LM_CLASS, LM_JAR };
+
+ private static final int LM_UNKNOWN = 0;
+ private static final int LM_CLASS = 1;
+ private static final int LM_JAR = 2;
+
/**
* This method does the following:
* 1. gets the classname from a Jar's manifest, if necessary
@@ -420,24 +428,40 @@
* @return
* @throws java.io.IOException
*/
- public static Object checkAndLoadMain(boolean printToStderr,
- boolean isJar, String name) throws IOException {
+ public static Class<?> checkAndLoadMain(boolean printToStderr,
+ int mode,
+ String what) throws IOException
+ {
+
+ ClassLoader ld = ClassLoader.getSystemClassLoader();
+
// get the class name
- String classname = (isJar) ? getMainClassFromJar(name) : name;
- classname = classname.replace('/', '.');
- ClassLoader loader = ClassLoader.getSystemClassLoader();
- Class<?> clazz = null;
+ String cn = null;
+ switch (mode) {
+ case LM_CLASS:
+ cn = what;
+ break;
+ case LM_JAR:
+ cn = getMainClassFromJar(what);
+ break;
+ default:
+ throw new InternalError("" + mode + ": Unknown launch mode");
+ }
+ cn = cn.replace('/', '.');
+
PrintStream ostream = (printToStderr) ? System.err : System.out;
+ Class<?> c = null;
try {
- clazz = loader.loadClass(classname);
+ c = ld.loadClass(cn);
} catch (ClassNotFoundException cnfe) {
- ostream.println(getLocalizedMessage("java.launcher.cls.error1", classname));
- NoClassDefFoundError ncdfe = new NoClassDefFoundError(classname);
+ ostream.println(getLocalizedMessage("java.launcher.cls.error1",
+ cn));
+ NoClassDefFoundError ncdfe = new NoClassDefFoundError(cn);
ncdfe.initCause(cnfe);
throw ncdfe;
}
- signatureDiagnostic(ostream, clazz);
- return clazz;
+ signatureDiagnostic(ostream, c);
+ return c;
}
static void signatureDiagnostic(PrintStream ostream, Class<?> clazz) {
--- a/jdk/src/windows/demo/jvmti/hprof/hprof_md.c Sat Jan 22 08:42:14 2011 -0500
+++ b/jdk/src/windows/demo/jvmti/hprof/hprof_md.c Sat Jan 22 08:43:25 2011 -0500
@@ -29,12 +29,14 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+// To ensure winsock2.h is used, it has to be included ahead of
+// windows.h, which includes winsock.h by default.
+#include <winsock2.h>
#include <windows.h>
#include <io.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <mmsystem.h>
-#include <winsock2.h>
#include <fcntl.h>
#include <process.h>
@@ -147,7 +149,7 @@
void
md_close(int filedes)
{
- (void)close(filedes);
+ (void)closesocket(filedes);
}
int
--- a/jdk/test/java/net/InetAddress/B4762344.java Sat Jan 22 08:42:14 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/**
- * @test
- * @bug 4762344
- * @summary 2nd nameservice provider is non functional
- * @build B4762344 SimpleNameService Simple1NameServiceDescriptor Simple2NameServiceDescriptor
- * @run main/othervm -Dsun.net.spi.nameservice.provider.1=simple1,sun -Dsun.net.spi.nameservice.provider.2=simple2,sun B4762344
- */
-
-import java.net.*;
-import java.util.*;
-
-
-public class B4762344 {
- private static String[][] hostnames = new String[][] {
- // both providers know this host, but with different address
- new String[] {"blade", "10.0.0.1"},
- // provider1 knwos this host
- new String[] {"blade.domain1", "10.0.0.2"},
- // provider2 knows this host
- new String[] {"blade.domain2", "20.0.0.2"}
- };
- private static String[][] hostaddrs = new String[][] {
- new String[] {"10.0.0.1", "blade"},
- new String[] {"10.0.0.2", "blade.domain1"},
- new String[] {"20.0.0.2", "blade.domain2"}
- };
-
- public static void main(String[] args) throws Exception {
- for (int i = 0; i < hostnames.length; i++) {
- doLookup(hostnames[i][0], hostnames[i][1]);
- }
- for (int i = 0; i < hostaddrs.length; i++) {
- doReverseLookup(hostaddrs[i][0], hostaddrs[i][1]);
- }
- }
-
- private static void doLookup(String host, String addr) throws Exception {
- String res = InetAddress.getByName(host).getHostAddress();
- if (!res.equals(addr)) {
- throw new RuntimeException("Test failed: wrong address for host " + host);
- }
- }
-
- private static void doReverseLookup(String addr, String host) throws Exception {
- StringTokenizer tokenizer = new StringTokenizer(addr, ".");
- byte addrs[] = new byte[4];
- for (int i = 0; i < 4; i++) {
- addrs[i] = (byte)Integer.parseInt(tokenizer.nextToken());
- }
- String res = InetAddress.getByAddress(addrs).getHostName();
- if (!res.equals(host)) {
- throw new RuntimeException("Test failed: wrong host name for address " + addr);
- }
- }
-}
--- a/jdk/test/java/net/InetAddress/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor Sat Jan 22 08:42:14 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-Simple1NameServiceDescriptor
-Simple2NameServiceDescriptor
--- a/jdk/test/java/net/InetAddress/Simple1NameServiceDescriptor.java Sat Jan 22 08:42:14 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- */
-
-import sun.net.spi.nameservice.*;
-
-
-public class Simple1NameServiceDescriptor implements NameServiceDescriptor {
- public NameService createNameService() {
- SimpleNameService ns = new SimpleNameService();
-
- // both providers know this host, but the address is different
- ns.put("blade", "10.0.0.1");
- // only this provider knows this host
- ns.put("blade.domain1", "10.0.0.2");
-
- return ns;
- }
-
- public String getProviderName() {
- return "sun";
- }
-
- public String getType() {
- return "simple1";
- }
-}
--- a/jdk/test/java/net/InetAddress/Simple2NameServiceDescriptor.java Sat Jan 22 08:42:14 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- */
-
-import sun.net.spi.nameservice.*;
-
-
-public class Simple2NameServiceDescriptor implements NameServiceDescriptor {
- public NameService createNameService() {
- SimpleNameService ns = new SimpleNameService();
- // both providers know this host, but the address of it is different
- ns.put("blade", "20.0.0.1");
- // only this provider knows this host
- ns.put("blade.domain2", "20.0.0.2");
-
- return ns;
- }
-
- public String getProviderName() {
- return "sun";
- }
-
- public String getType() {
- return "simple2";
- }
-}
--- a/jdk/test/java/net/InetAddress/SimpleNameService.java Sat Jan 22 08:42:14 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- */
-
-import java.net.*;
-import java.util.*;
-import sun.net.spi.nameservice.*;
-
-
-public class SimpleNameService implements NameService {
- // host name <-> host addr mapping
- private HashMap<String, String> hosts = new LinkedHashMap<String, String>();
-
- public void put(String host, String addr) {
- hosts.put(host, addr);
- }
-
- private static String addrToString(byte addr[]) {
- return Byte.toString(addr[0]) + "." +
- Byte.toString(addr[1]) + "." +
- Byte.toString(addr[2]) + "." +
- Byte.toString(addr[3]);
- }
-
- public SimpleNameService() {
- }
-
- public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
- String addr = hosts.get(host);
- if (addr == null) {
- throw new UnknownHostException(host);
- }
-
- StringTokenizer tokenizer = new StringTokenizer(addr, ".");
- byte addrs[] = new byte[4];
- for (int i = 0; i < 4; i++) {
- addrs[i] = (byte)Integer.parseInt(tokenizer.nextToken());
- }
- InetAddress[] ret = new InetAddress[1];
- ret[0] = InetAddress.getByAddress(host, addrs);
- return ret;
- }
-
- public String getHostByAddr(byte[] addr) throws UnknownHostException {
- String addrString = addrToString(addr);
- Iterator i = hosts.keySet().iterator();
- while (i.hasNext()) {
- String host = (String)i.next();
- String value = (String)hosts.get(host);
- if (value.equals(addrString)) {
- return host;
- }
- }
- throw new UnknownHostException();
- }
-}
--- a/jdk/test/sun/net/InetAddress/nameservice/B6442088.java Sat Jan 22 08:42:14 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* @test
- * @bug 6442088
- * @summary Change default DNS caching behavior for code not running under
- * security manager.
- *
- * @build B6442088 SimpleNameService SimpleNameServiceDescriptor
- * @run main/othervm/timeout=200 -Dsun.net.inetaddr.ttl=20 -Dsun.net.spi.nameservice.provider.1=simple,sun B6442088
- */
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.security.Security;
-
-public class B6442088 {
-
- public static void main(String args[]) throws Exception {
-
- // name service needs to resolve this.
- SimpleNameService.put("theclub", "129.156.220.219");
-
- test ("theclub", "129.156.220.219", true); // lk: 1
- test ("luster", "1.16.20.2", false); // lk: 2
-
- // name service now needs to know about luster
- SimpleNameService.put("luster", "10.5.18.21");
-
- test ("luster", "1.16.20.2", false); // lk: 2
- sleep (10+1);
- test("luster", "10.5.18.21", true, 3); // lk: 3
- sleep (5);
-
- SimpleNameService.put("foo", "10.5.18.22");
- SimpleNameService.put("theclub", "129.156.220.1");
-
- test ("theclub", "129.156.220.219", true, 3);
- test ("luster", "10.5.18.21", true, 3);
- test ("bar", "10.5.18.22", false, 4);
- test ("foo", "10.5.18.22", true, 5);
-
- // now delay to see if theclub has expired
- sleep (5);
-
- test ("foo", "10.5.18.22", true, 5);
- test ("theclub", "129.156.220.1", true, 6);
-
- sleep (11);
- // now see if luster has expired
- test ("luster", "10.5.18.21", true, 7);
- test ("theclub", "129.156.220.1", true, 7);
-
- // now delay to see if 3rd has expired
- sleep (10+6);
-
- test ("theclub", "129.156.220.1", true, 8);
- test ("luster", "10.5.18.21", true, 8);
- test ("foo", "10.5.18.22", true, 9);
- }
-
- /* throws RuntimeException if it fails */
-
- static void test (String host, String address,
- boolean shouldSucceed, int count) {
- test (host, address, shouldSucceed);
- int got = SimpleNameService.lookupCalls();
- if (got != count) {
- throw new RuntimeException ("lookups exp/got: " + count+"/"+got);
- }
- }
-
- static void sleep (int seconds) {
- try {
- Thread.sleep (seconds * 1000);
- } catch (InterruptedException e) {}
- }
-
- static void test (String host, String address, boolean shouldSucceed) {
- InetAddress addr = null;
- try {
- addr = InetAddress.getByName (host);
- if (!shouldSucceed) {
- throw new RuntimeException (host+":"+address+": should fail");
-
- }
- if (!address.equals(addr.getHostAddress())) {
- throw new RuntimeException(host+":"+address+": compare failed");
- }
- } catch (UnknownHostException e) {
- if (shouldSucceed) {
- throw new RuntimeException(host+":"+address+": should succeed");
- }
- }
- }
-
-}
--- a/jdk/test/sun/net/InetAddress/nameservice/CacheTest.java Sat Jan 22 08:42:14 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* @test
- * @bug 4292867
- * @summary Check that InetAddress doesn't continue to throw UHE
- * after the name service has recovered and the negative ttl
- * on the initial lookup has expired.
- *
- * @build CacheTest SimpleNameService SimpleNameServiceDescriptor
- * @run main/othervm/timeout=200 -Dsun.net.spi.nameservice.provider.1=simple,sun CacheTest
- */
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.security.Security;
-
-public class CacheTest {
-
-
- public static void main(String args[]) throws Exception {
-
- /*
- * First check the ttl on negative lookups is in the <15 second
- * range. If the ttl is <=0 it means we cache forever or always
- * consult the name service. For ttl > 15 the test would take
- * too long so we skip it (need to coordinate jtreg timeout
- * with negative ttl)
- */
- String ttlProp = "networkaddress.cache.negative.ttl";
- int ttl = 0;
- String policy = Security.getProperty(ttlProp);
- if (policy != null) {
- ttl = Integer.parseInt(policy);
- }
- if (ttl <= 0 || ttl > 15) {
- System.err.println("Security property " + ttlProp + " needs to " +
- " in 1-15 second range to execute this test");
- return;
-
- }
-
- /*
- * The following outlines how the test works :-
- *
- * 1. Do a lookup via InetAddress.getByName that it guaranteed
- * to succeed. This forces at least one entry into the cache
- * that will not expire.
- *
- * 2. Do a lookup via InetAddress.getByName that is guarnateed
- * to fail. This results in a negative lookup cached for
- * for a short period to time.
- *
- * 3. Wait for the cache entry to expire.
- *
- * 4. Do a lookup (which should consult the name service) and
- * the lookup should succeed.
- */
-
- // name service needs to resolve this.
- SimpleNameService.put("theclub", "129.156.220.219");
-
- // this lookup will succeed
- InetAddress.getByName("theclub");
-
- // lookup "luster" - this should throw UHE as name service
- // doesn't know anything about this host.
-
- try {
- InetAddress.getByName("luster");
- throw new RuntimeException("Test internal error " +
- " - luster is bring resolved by name service");
- } catch (UnknownHostException x) {
- }
-
- // name service now needs to know about luster
- SimpleNameService.put("luster", "10.5.18.21");
-
- // wait for the cache entry to expire and lookup should
- // succeed.
- Thread.currentThread().sleep(ttl*1000 + 1000);
- InetAddress.getByName("luster");
- }
-
-}
--- a/jdk/test/sun/net/InetAddress/nameservice/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor Sat Jan 22 08:42:14 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-# name service provider descriptor
-SimpleNameServiceDescriptor
--- a/jdk/test/sun/net/InetAddress/nameservice/SimpleNameService.java Sat Jan 22 08:42:14 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * A simple name service based on an in-memory HashMap.
- */
-import java.net.UnknownHostException;
-import java.net.InetAddress;
-import sun.net.spi.nameservice.*;
-import java.util.*;
-
-public final class SimpleNameService implements NameService {
-
- private static LinkedHashMap hosts = new LinkedHashMap();
-
- private static String addrToString(byte addr[]) {
- return Byte.toString(addr[0]) + "." +
- Byte.toString(addr[1]) + "." +
- Byte.toString(addr[2]) + "." +
- Byte.toString(addr[3]);
- }
-
- // ------------
-
- public static void put(String host, String addr) {
- hosts.put(host, addr);
- }
-
- public static void put(String host, byte addr[]) {
- hosts.put(host, addrToString(addr));
- }
-
- public static void remove(String host) {
- hosts.remove(host);
- }
-
- public static int entries () {
- return hosts.size();
- }
-
- public static int lookupCalls() {
- return lookupCalls;
- }
-
- static int lookupCalls = 0;
-
- // ------------
-
- public SimpleNameService() throws Exception {
- }
-
- public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
-
- lookupCalls ++;
-
- String value = (String)hosts.get(host);
- if (value == null) {
- throw new UnknownHostException(host);
- }
- StringTokenizer st = new StringTokenizer(value, ".");
- byte addr[] = new byte[4];
- for (int i=0; i<4; i++) {
- addr[i] = (byte)Integer.parseInt(st.nextToken());
- }
- InetAddress[] res = new InetAddress[1];
- res[0] = InetAddress.getByAddress(host, addr);
- return res;
- }
-
- public String getHostByAddr(byte[] addr) throws UnknownHostException {
- String addrString = addrToString(addr);
- Iterator i = hosts.keySet().iterator();
- while (i.hasNext()) {
- String host = (String)i.next();
- String value = (String)hosts.get(host);
- if (value.equals(addrString)) {
- return host;
- }
- }
- throw new UnknownHostException();
- }
-}
--- a/jdk/test/sun/net/InetAddress/nameservice/SimpleNameServiceDescriptor.java Sat Jan 22 08:42:14 2011 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * Descriptor for the simple name service
- */
-import sun.net.spi.nameservice.*;
-
-public final class SimpleNameServiceDescriptor implements NameServiceDescriptor {
- /**
- * Create a new instance of the corresponding name service.
- */
- public NameService createNameService() throws Exception {
- return new SimpleNameService();
- }
-
- /**
- * Returns this service provider's name
- *
- */
- public String getProviderName() {
- return "sun";
- }
-
- /**
- * Returns this name service type
- * "dns" "nis" etc
- */
- public String getType() {
- return "simple";
- }
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/chaining/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,23 @@
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code 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
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions
+
+Simple1NameServiceDescriptor
+Simple2NameServiceDescriptor
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/chaining/Providers.java Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 4762344
+ * @summary 2nd nameservice provider is non functional
+ * @compile -XDignore.symbol.file=true SimpleNameService.java
+ * Simple1NameServiceDescriptor.java
+ * Simple2NameServiceDescriptor.java
+ * @run main/othervm -Dsun.net.spi.nameservice.provider.1=simple1,sun -Dsun.net.spi.nameservice.provider.2=simple2,sun Providers
+ */
+
+import java.net.*;
+import java.util.*;
+
+
+public class Providers {
+ private static String[][] hostnames = new String[][] {
+ // both providers know this host, but with different address
+ new String[] {"blade", "10.0.0.1"},
+ // provider1 knwos this host
+ new String[] {"blade.domain1", "10.0.0.2"},
+ // provider2 knows this host
+ new String[] {"blade.domain2", "20.0.0.2"}
+ };
+ private static String[][] hostaddrs = new String[][] {
+ new String[] {"10.0.0.1", "blade"},
+ new String[] {"10.0.0.2", "blade.domain1"},
+ new String[] {"20.0.0.2", "blade.domain2"}
+ };
+
+ public static void main(String[] args) throws Exception {
+ for (int i = 0; i < hostnames.length; i++) {
+ doLookup(hostnames[i][0], hostnames[i][1]);
+ }
+ for (int i = 0; i < hostaddrs.length; i++) {
+ doReverseLookup(hostaddrs[i][0], hostaddrs[i][1]);
+ }
+ }
+
+ private static void doLookup(String host, String addr) throws Exception {
+ String res = InetAddress.getByName(host).getHostAddress();
+ if (!res.equals(addr)) {
+ throw new RuntimeException("Test failed: wrong address for host " + host);
+ }
+ }
+
+ private static void doReverseLookup(String addr, String host) throws Exception {
+ StringTokenizer tokenizer = new StringTokenizer(addr, ".");
+ byte addrs[] = new byte[4];
+ for (int i = 0; i < 4; i++) {
+ addrs[i] = (byte)Integer.parseInt(tokenizer.nextToken());
+ }
+ String res = InetAddress.getByAddress(addrs).getHostName();
+ if (!res.equals(host)) {
+ throw new RuntimeException("Test failed: wrong host name for address " + addr);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/chaining/Simple1NameServiceDescriptor.java Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ */
+
+import sun.net.spi.nameservice.*;
+
+
+public class Simple1NameServiceDescriptor implements NameServiceDescriptor {
+ public NameService createNameService() {
+ SimpleNameService ns = new SimpleNameService();
+
+ // both providers know this host, but the address is different
+ ns.put("blade", "10.0.0.1");
+ // only this provider knows this host
+ ns.put("blade.domain1", "10.0.0.2");
+
+ return ns;
+ }
+
+ public String getProviderName() {
+ return "sun";
+ }
+
+ public String getType() {
+ return "simple1";
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/chaining/Simple2NameServiceDescriptor.java Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ */
+
+import sun.net.spi.nameservice.*;
+
+
+public class Simple2NameServiceDescriptor implements NameServiceDescriptor {
+ public NameService createNameService() {
+ SimpleNameService ns = new SimpleNameService();
+ // both providers know this host, but the address of it is different
+ ns.put("blade", "20.0.0.1");
+ // only this provider knows this host
+ ns.put("blade.domain2", "20.0.0.2");
+
+ return ns;
+ }
+
+ public String getProviderName() {
+ return "sun";
+ }
+
+ public String getType() {
+ return "simple2";
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/chaining/SimpleNameService.java Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ */
+
+import java.net.*;
+import java.util.*;
+import sun.net.spi.nameservice.*;
+
+
+public class SimpleNameService implements NameService {
+ // host name <-> host addr mapping
+ private HashMap<String, String> hosts = new LinkedHashMap<String, String>();
+
+ public void put(String host, String addr) {
+ hosts.put(host, addr);
+ }
+
+ private static String addrToString(byte addr[]) {
+ return Byte.toString(addr[0]) + "." +
+ Byte.toString(addr[1]) + "." +
+ Byte.toString(addr[2]) + "." +
+ Byte.toString(addr[3]);
+ }
+
+ public SimpleNameService() {
+ }
+
+ public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
+ String addr = hosts.get(host);
+ if (addr == null) {
+ throw new UnknownHostException(host);
+ }
+
+ StringTokenizer tokenizer = new StringTokenizer(addr, ".");
+ byte addrs[] = new byte[4];
+ for (int i = 0; i < 4; i++) {
+ addrs[i] = (byte)Integer.parseInt(tokenizer.nextToken());
+ }
+ InetAddress[] ret = new InetAddress[1];
+ ret[0] = InetAddress.getByAddress(host, addrs);
+ return ret;
+ }
+
+ public String getHostByAddr(byte[] addr) throws UnknownHostException {
+ String addrString = addrToString(addr);
+ Iterator i = hosts.keySet().iterator();
+ while (i.hasNext()) {
+ String host = (String)i.next();
+ String value = (String)hosts.get(host);
+ if (value.equals(addrString)) {
+ return host;
+ }
+ }
+ throw new UnknownHostException();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/deadlock/Hang.java Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 7012768
+ * @compile -XDignore.symbol.file=true ThrowingNameService.java
+ * ThrowingNameServiceDescriptor.java
+ * @run main/othervm/timeout=30 -Dsun.net.spi.nameservice.provider.1=throwing,sun Hang
+ * @summary InetAddress lookupTable leaks/deadlocks when using unsupported
+ * name service spi
+ */
+
+import java.net.InetAddress;
+
+public class Hang {
+ public static void main(String[] args) throws Exception {
+ try {
+ // 1st attempt - IllegalStateException caught below
+ InetAddress.getByName("host.company.com");
+ } catch (IllegalStateException e) { }
+
+ // 2nd attempt - Stuck here forever if bug exists
+ InetAddress.getByName("host.company.com");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/deadlock/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,22 @@
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code 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
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+
+ThrowingNameServiceDescriptor
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/deadlock/ThrowingNameService.java Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import sun.net.spi.nameservice.NameService;
+
+public class ThrowingNameService implements NameService {
+ static boolean firstCall = true;
+
+ @Override
+ public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
+ if (firstCall) {
+ firstCall = false;
+ // throw unchecked exception first time round
+ throw new IllegalStateException();
+ }
+
+ // return any valid address
+ return new InetAddress[] { InetAddress.getLoopbackAddress() };
+ }
+
+ @Override
+ public String getHostByAddr(byte[] addr) throws UnknownHostException {
+ throw new IllegalStateException();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/deadlock/ThrowingNameServiceDescriptor.java Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import sun.net.spi.nameservice.*;
+
+public class ThrowingNameServiceDescriptor implements NameServiceDescriptor {
+ public NameService createNameService() {
+ return new ThrowingNameService();
+ }
+
+ @Override
+ public String getProviderName() {
+ return "sun";
+ }
+
+ @Override
+ public String getType() {
+ return "throwing";
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/simple/CacheTest.java Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 4292867
+ * @summary Check that InetAddress doesn't continue to throw UHE
+ * after the name service has recovered and the negative ttl
+ * on the initial lookup has expired.
+ * @compile -XDignore.symbol.file=true SimpleNameService.java
+ * SimpleNameServiceDescriptor.java
+ * @run main/othervm/timeout=200 -Dsun.net.spi.nameservice.provider.1=simple,sun CacheTest
+ */
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.security.Security;
+
+public class CacheTest {
+
+
+ public static void main(String args[]) throws Exception {
+
+ /*
+ * First check the ttl on negative lookups is in the <15 second
+ * range. If the ttl is <=0 it means we cache forever or always
+ * consult the name service. For ttl > 15 the test would take
+ * too long so we skip it (need to coordinate jtreg timeout
+ * with negative ttl)
+ */
+ String ttlProp = "networkaddress.cache.negative.ttl";
+ int ttl = 0;
+ String policy = Security.getProperty(ttlProp);
+ if (policy != null) {
+ ttl = Integer.parseInt(policy);
+ }
+ if (ttl <= 0 || ttl > 15) {
+ System.err.println("Security property " + ttlProp + " needs to " +
+ " in 1-15 second range to execute this test");
+ return;
+
+ }
+
+ /*
+ * The following outlines how the test works :-
+ *
+ * 1. Do a lookup via InetAddress.getByName that it guaranteed
+ * to succeed. This forces at least one entry into the cache
+ * that will not expire.
+ *
+ * 2. Do a lookup via InetAddress.getByName that is guarnateed
+ * to fail. This results in a negative lookup cached for
+ * for a short period to time.
+ *
+ * 3. Wait for the cache entry to expire.
+ *
+ * 4. Do a lookup (which should consult the name service) and
+ * the lookup should succeed.
+ */
+
+ // name service needs to resolve this.
+ SimpleNameService.put("theclub", "129.156.220.219");
+
+ // this lookup will succeed
+ InetAddress.getByName("theclub");
+
+ // lookup "luster" - this should throw UHE as name service
+ // doesn't know anything about this host.
+
+ try {
+ InetAddress.getByName("luster");
+ throw new RuntimeException("Test internal error " +
+ " - luster is bring resolved by name service");
+ } catch (UnknownHostException x) {
+ }
+
+ // name service now needs to know about luster
+ SimpleNameService.put("luster", "10.5.18.21");
+
+ // wait for the cache entry to expire and lookup should
+ // succeed.
+ Thread.currentThread().sleep(ttl*1000 + 1000);
+ InetAddress.getByName("luster");
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/simple/DefaultCaching.java Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 6442088
+ * @summary Change default DNS caching behavior for code not running under
+ * security manager.
+ * @compile -XDignore.symbol.file=true SimpleNameService.java
+ * SimpleNameServiceDescriptor.java
+ * @run main/othervm/timeout=200 -Dsun.net.inetaddr.ttl=20 -Dsun.net.spi.nameservice.provider.1=simple,sun DefaultCaching
+ */
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.security.Security;
+
+public class DefaultCaching {
+
+ public static void main(String args[]) throws Exception {
+
+ // name service needs to resolve this.
+ SimpleNameService.put("theclub", "129.156.220.219");
+
+ test ("theclub", "129.156.220.219", true); // lk: 1
+ test ("luster", "1.16.20.2", false); // lk: 2
+
+ // name service now needs to know about luster
+ SimpleNameService.put("luster", "10.5.18.21");
+
+ test ("luster", "1.16.20.2", false); // lk: 2
+ sleep (10+1);
+ test("luster", "10.5.18.21", true, 3); // lk: 3
+ sleep (5);
+
+ SimpleNameService.put("foo", "10.5.18.22");
+ SimpleNameService.put("theclub", "129.156.220.1");
+
+ test ("theclub", "129.156.220.219", true, 3);
+ test ("luster", "10.5.18.21", true, 3);
+ test ("bar", "10.5.18.22", false, 4);
+ test ("foo", "10.5.18.22", true, 5);
+
+ // now delay to see if theclub has expired
+ sleep (5);
+
+ test ("foo", "10.5.18.22", true, 5);
+ test ("theclub", "129.156.220.1", true, 6);
+
+ sleep (11);
+ // now see if luster has expired
+ test ("luster", "10.5.18.21", true, 7);
+ test ("theclub", "129.156.220.1", true, 7);
+
+ // now delay to see if 3rd has expired
+ sleep (10+6);
+
+ test ("theclub", "129.156.220.1", true, 8);
+ test ("luster", "10.5.18.21", true, 8);
+ test ("foo", "10.5.18.22", true, 9);
+ }
+
+ /* throws RuntimeException if it fails */
+
+ static void test (String host, String address,
+ boolean shouldSucceed, int count) {
+ test (host, address, shouldSucceed);
+ int got = SimpleNameService.lookupCalls();
+ if (got != count) {
+ throw new RuntimeException ("lookups exp/got: " + count+"/"+got);
+ }
+ }
+
+ static void sleep (int seconds) {
+ try {
+ Thread.sleep (seconds * 1000);
+ } catch (InterruptedException e) {}
+ }
+
+ static void test (String host, String address, boolean shouldSucceed) {
+ InetAddress addr = null;
+ try {
+ addr = InetAddress.getByName (host);
+ if (!shouldSucceed) {
+ throw new RuntimeException (host+":"+address+": should fail");
+
+ }
+ if (!address.equals(addr.getHostAddress())) {
+ throw new RuntimeException(host+":"+address+": compare failed");
+ }
+ } catch (UnknownHostException e) {
+ if (shouldSucceed) {
+ throw new RuntimeException(host+":"+address+": should succeed");
+ }
+ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/simple/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,22 @@
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code 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
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+
+SimpleNameServiceDescriptor # name service provider descriptor
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/simple/SimpleNameService.java Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * A simple name service based on an in-memory HashMap.
+ */
+import java.net.UnknownHostException;
+import java.net.InetAddress;
+import sun.net.spi.nameservice.*;
+import java.util.*;
+
+public final class SimpleNameService implements NameService {
+
+ private static LinkedHashMap hosts = new LinkedHashMap();
+
+ private static String addrToString(byte addr[]) {
+ return Byte.toString(addr[0]) + "." +
+ Byte.toString(addr[1]) + "." +
+ Byte.toString(addr[2]) + "." +
+ Byte.toString(addr[3]);
+ }
+
+ // ------------
+
+ public static void put(String host, String addr) {
+ hosts.put(host, addr);
+ }
+
+ public static void put(String host, byte addr[]) {
+ hosts.put(host, addrToString(addr));
+ }
+
+ public static void remove(String host) {
+ hosts.remove(host);
+ }
+
+ public static int entries () {
+ return hosts.size();
+ }
+
+ public static int lookupCalls() {
+ return lookupCalls;
+ }
+
+ static int lookupCalls = 0;
+
+ // ------------
+
+ public SimpleNameService() throws Exception {
+ }
+
+ public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
+
+ lookupCalls ++;
+
+ String value = (String)hosts.get(host);
+ if (value == null) {
+ throw new UnknownHostException(host);
+ }
+ StringTokenizer st = new StringTokenizer(value, ".");
+ byte addr[] = new byte[4];
+ for (int i=0; i<4; i++) {
+ addr[i] = (byte)Integer.parseInt(st.nextToken());
+ }
+ InetAddress[] res = new InetAddress[1];
+ res[0] = InetAddress.getByAddress(host, addr);
+ return res;
+ }
+
+ public String getHostByAddr(byte[] addr) throws UnknownHostException {
+ String addrString = addrToString(addr);
+ Iterator i = hosts.keySet().iterator();
+ while (i.hasNext()) {
+ String host = (String)i.next();
+ String value = (String)hosts.get(host);
+ if (value.equals(addrString)) {
+ return host;
+ }
+ }
+ throw new UnknownHostException();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/net/InetAddress/nameservice/simple/SimpleNameServiceDescriptor.java Sat Jan 22 08:43:25 2011 -0500
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * Descriptor for the simple name service
+ */
+import sun.net.spi.nameservice.*;
+
+public final class SimpleNameServiceDescriptor implements NameServiceDescriptor {
+ /**
+ * Create a new instance of the corresponding name service.
+ */
+ public NameService createNameService() throws Exception {
+ return new SimpleNameService();
+ }
+
+ /**
+ * Returns this service provider's name
+ *
+ */
+ public String getProviderName() {
+ return "sun";
+ }
+
+ /**
+ * Returns this name service type
+ * "dns" "nis" etc
+ */
+ public String getType() {
+ return "simple";
+ }
+}