1470c1f75f26d58eb33bbaa0d7e08ed2723f25647Elliott Hughes/* 2e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * contributor license agreements. See the NOTICE file distributed with 4e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * this work for additional information regarding copyright ownership. 5e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * (the "License"); you may not use this file except in compliance with 7e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * the License. You may obtain a copy of the License at 8470c1f75f26d58eb33bbaa0d7e08ed2723f25647Elliott Hughes * 9e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10470c1f75f26d58eb33bbaa0d7e08ed2723f25647Elliott Hughes * 11e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Unless required by applicable law or agreed to in writing, software 12e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * See the License for the specific language governing permissions and 15e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * limitations under the License. 16e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 17e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 18e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespackage tests.support; 19e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 20e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.FileInputStream; 21e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.IOException; 22e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.InputStream; 23e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.util.Hashtable; 24e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 25e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/** 26e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * This class is responsible for providing the dynamic names and addresses for 27e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * the java.net classes. There are two directories which need to be placed on an 28e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * ftp server and an http server which should accompany this source. The 29e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * ftp-files have to be placed on an ftp server and have to be the root of a 30e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * user jcltest with password jclpass. The testres files must be available on an 31e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * HTTP server and the name and location can be configured below. 32e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 33e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespublic class Support_Configuration { 34e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 35e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String DomainAddress = "apache.org"; 36e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 37e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String WebName = "jcltest."; 38e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 39e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static final String HomeAddress; 40e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 41e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String TestResourcesDir = "/testres231"; 42e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 43e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static final String TestResources; 44e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 45e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String HomeAddressResponse = "HTTP/1.1 200 OK"; 46e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 47e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String HomeAddressSoftware = "Jetty(6.0.x)"; 48e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 49e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String ProxyServerTestHost = "jcltest.apache.org"; 50e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 51e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String SocksServerTestHost = "jcltest.apache.org"; 52e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 53e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static int SocksServerTestPort = 1080; 54e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 55e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes // Need an IP address that does not resolve to a host name 56e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String UnresolvedIP = "192.168.99.99"; 57e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 58e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes // the bytes for an address which represents an address which is not 59e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes // one of the addresses for any of our machines on which tests will run 60e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes // it is used to verify we get the expected error when we try to bind 61e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes // to an address that is not one of the machines local addresses 62e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static byte nonLocalAddressBytes[] = { 1, 0, 0, 0 }; 63e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 64e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String InetTestIP = "127.0.0.1"; 65e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 66e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String InetTestIP2 = "127.0.0.1"; 67e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 68e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static final String HomeAddress6 = "jcltest6.apache.org"; 69e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 70e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String ProxyServerTestHostIPv6 = "jcltest6.apache.org"; 71e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 72e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes // ip address that resolves to a host that is not present on the local 73e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes // network 74e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes // this allows us to check the timeouts for connect 75e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String ResolvedNotExistingHost = "9.26.194.72"; 76e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 77e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes /** 78e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * You can compute the hash code with the following code: try { String name = 79e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * "whatever.xxx.com"; 80e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * System.out.println(InetAddress.getByName(name).hashCode()); } catch 81e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * (UnknownHostException e) {} 82e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 83e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 84e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String FTPTestAddress = "jcltest:jclpass@localhost"; 85e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 86e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String URLConnectionLastModifiedString = "Mon, 14 Jun 1999 21:06:22 GMT"; 87e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 88e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static long URLConnectionLastModified = 929394382000L; 89e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 90e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static boolean RunCommTests = false; 91e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 92e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String Port1 = "COM1"; 93e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 94e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static String Port2 = "COM2"; 95e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 96e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes static Hashtable<String, String> props = null; 97e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes static { 98e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes loadProperties(); 99e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes HomeAddress = WebName + DomainAddress; 100e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes TestResources = HomeAddress + TestResourcesDir; 101e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 102e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 103e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes static void loadProperties() { 104e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes InputStream in = null; 105e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes Hashtable<String, String> props = new Hashtable<String, String>(); 106e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 107e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes String iniName = System.getProperty("test.ini.file", "JCLAuto.ini"); 108e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (System.getProperty("test.comm") != null) { 109e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes RunCommTests = true; 110e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 111e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 112e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes try { 113e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes in = new FileInputStream(iniName); 114e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } catch (IOException e) { 115e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } catch (Exception e) { 116e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes System.out.println("SupportConfiguration.loadProperties()"); 117e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes System.out.println(e); 118e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes e.printStackTrace(); 119e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 120e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (in == null) { 121e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes try { 122e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes Class<?> cl = Class 123e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes .forName("com.ibm.support.Support_Configuration"); 124e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes in = cl.getResourceAsStream(iniName); 125e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } catch (ClassNotFoundException e) { 126e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 127e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 128e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes try { 129e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (in != null) { 130e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes load(in, props); 131e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 132e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } catch (IOException e) { 133e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 134e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (props.size() == 0) { 135e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return; 136e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 137e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes String value; 138e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 139e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("DomainAddress"); 140e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 141e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DomainAddress = value; 142e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 143e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 144e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("WebName"); 145e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 146e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes WebName = value; 147e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 148e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 149e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("TestResourcesDir"); 150e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 151e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes TestResourcesDir = value; 152e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 153e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("HomeAddressResponse"); 154e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 155e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes HomeAddressResponse = value; 156e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 157e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 158e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("HomeAddressSoftware"); 159e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 160e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes HomeAddressSoftware = value; 161e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 162e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 163e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("ProxyServerTestHost"); 164e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 165e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes ProxyServerTestHost = value; 166e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 167e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 168e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("SocksServerTestHost"); 169e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 170e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes SocksServerTestHost = value; 171e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 172e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 173e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("SocksServerTestPort"); 174e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 175e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes SocksServerTestPort = Integer.parseInt(value); 176e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 177e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 178e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("UnresolvedIP"); 179e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 180e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes UnresolvedIP = value; 181e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 182e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 183e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("FTPTestAddress"); 184e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 185e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes FTPTestAddress = value; 186e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 187e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 188e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("URLConnectionLastModifiedString"); 189e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 190e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes URLConnectionLastModifiedString = value; 191e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 192e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 193e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("URLConnectionLastModified"); 194e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 195e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes URLConnectionLastModified = Long.parseLong(value); 196e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 197e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 198e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("Port1"); 199e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 200e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes Port1 = value; 201e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 202e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 203e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("Port2"); 204e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 205e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes Port2 = value; 206e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 207e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 208e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("ProxyServerTestHostIPv6"); 209e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 210e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes ProxyServerTestHostIPv6 = value; 211e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 212e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 213e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value = props.get("ResolvedNotExistingHost"); 214e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (value != null) { 215e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes ResolvedNotExistingHost = value; 216e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 217e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 218e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 219e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 220e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes static void load(InputStream in, Hashtable<String, String> result) throws IOException { 221e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes int NONE = 0, SLASH = 1, UNICODE = 2, CONTINUE = 3, DONE = 4, IGNORE = 5; 222e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes int mode = NONE, unicode = 0, count = 0, nextChar; 223e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes StringBuffer key = new StringBuffer(), value = new StringBuffer(), buffer = key; 224e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes boolean firstChar = true; 225e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 226e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes while ((nextChar = in.read()) != -1) { 227e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (mode == UNICODE) { 228e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes int digit = Character.digit((char) nextChar, 16); 229e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (digit >= 0) { 230e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes unicode = (unicode << 4) + digit; 231e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (++count < 4) { 232e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 233e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 234e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 235e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = NONE; 236e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes buffer.append((char) unicode); 237e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (nextChar != '\n') { 238e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 239e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 240e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 241e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (mode == SLASH) { 242e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = NONE; 243e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes switch (nextChar) { 244e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case '\r': 245e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = CONTINUE; // Look for a following \n 246e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 247e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case '\n': 248e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = IGNORE; // Ignore whitespace on the next line 249e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 250e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case 'b': 251e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes nextChar = '\b'; 252e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes break; 253e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case 'f': 254e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes nextChar = '\f'; 255e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes break; 256e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case 'n': 257e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes nextChar = '\n'; 258e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes break; 259e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case 'r': 260e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes nextChar = '\r'; 261e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes break; 262e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case 't': 263e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes nextChar = '\t'; 264e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes break; 265e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case 'u': 266e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = UNICODE; 267e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes unicode = count = 0; 268e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 269e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 270e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } else { 271e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes switch (nextChar) { 272e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case '#': 273e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case '!': 274e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (firstChar) { 275e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes while ((nextChar = in.read()) != -1) { 276e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (nextChar == '\r' || nextChar == '\n') { 277e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes break; 278e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 279e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 280e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 281e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 282e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes break; 283e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case '\n': 284e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (mode == CONTINUE) { // Part of a \r\n sequence 285e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = IGNORE; // Ignore whitespace on the next line 286e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 287e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 288e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes // fall into the next case 289e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case '\r': 290e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = NONE; 291e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes firstChar = true; 292e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (key.length() > 0 || buffer == value) { 293e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes result.put(key.toString(), value.toString()); 294e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 295e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes key.setLength(0); 296e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes value.setLength(0); 297e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes buffer = key; 298e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 299e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case '\\': 300e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = SLASH; 301e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 302e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case ':': 303e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes case '=': 304e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (buffer == key) { 305e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes buffer = value; 306e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 307e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 308e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes break; 309e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 310e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes char c = (char) nextChar; 311e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if ((c >= 0x1c && c <= 0x20) || (c >= 0x9 && c <= 0xd)) { 312e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (mode == CONTINUE) { 313e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = IGNORE; 314e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 315e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (buffer.length() == 0 || mode == IGNORE) { 316e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 317e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 318e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (buffer == key) { 319e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = DONE; 320e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes continue; 321e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 322e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 323e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (mode == IGNORE || mode == CONTINUE) { 324e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = NONE; 325e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 326e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 327e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes firstChar = false; 328e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (mode == DONE) { 329e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes buffer = value; 330e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes mode = NONE; 331e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 332e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes buffer.append((char) nextChar); 333e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 334e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (key.length() > 0 || buffer == value) { 335e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes result.put(key.toString(), value.toString()); 336e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 337e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 338e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 339e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes} 340