home *** CD-ROM | disk | FTP | other *** search
- package java.net;
-
- import java.io.Serializable;
- import java.security.AccessController;
- import java.util.HashMap;
- import sun.net.InetAddressCachePolicy;
- import sun.security.action.GetPropertyAction;
- import sun.security.action.LoadLibraryAction;
-
- public final class InetAddress implements Serializable {
- String hostName;
- int address;
- int family;
- private static final long serialVersionUID = 3286316764910316507L;
- private static HashMap addressCache;
- private static InetAddress unknownAddress;
- private static InetAddress localHost;
- private static InetAddress[] unknown_array;
- static InetAddress anyLocalAddress;
- static InetAddressImpl impl;
- private static HashMap lookupTable;
- private static InetAddress loopbackHost;
-
- InetAddress() {
- this.family = impl.getInetFamily();
- }
-
- InetAddress(String var1, byte[] var2) {
- this.hostName = var1;
- this.family = impl.getInetFamily();
- this.address = var2[3] & 255;
- this.address |= var2[2] << 8 & '\uff00';
- this.address |= var2[1] << 16 & 16711680;
- this.address |= var2[0] << 24 & -16777216;
- }
-
- public boolean isMulticastAddress() {
- return (this.address & -268435456) == -536870912;
- }
-
- public String getHostName() {
- return this.getHostName(true);
- }
-
- String getHostName(boolean var1) {
- if (this.hostName == null) {
- try {
- this.hostName = impl.getHostByAddr(this.address);
- if (var1) {
- SecurityManager var2 = System.getSecurityManager();
- if (var2 != null) {
- var2.checkConnect(this.hostName, -1);
- }
- }
-
- InetAddress[] var7 = getAllByName0(this.hostName, var1);
- boolean var3 = false;
- if (var7 != null) {
- for(int var4 = 0; !var3 && var4 < var7.length; ++var4) {
- var3 = this.address == var7[var4].address;
- }
- }
-
- if (!var3) {
- this.hostName = this.getHostAddress();
- return this.getHostAddress();
- }
- } catch (SecurityException var5) {
- this.hostName = this.getHostAddress();
- } catch (UnknownHostException var6) {
- this.hostName = this.getHostAddress();
- }
- }
-
- return this.hostName;
- }
-
- public byte[] getAddress() {
- byte[] var1 = new byte[]{(byte)(this.address >>> 24 & 255), (byte)(this.address >>> 16 & 255), (byte)(this.address >>> 8 & 255), (byte)(this.address & 255)};
- return var1;
- }
-
- public String getHostAddress() {
- return (this.address >>> 24 & 255) + "." + (this.address >>> 16 & 255) + "." + (this.address >>> 8 & 255) + "." + (this.address >>> 0 & 255);
- }
-
- public int hashCode() {
- return this.address;
- }
-
- public boolean equals(Object var1) {
- return var1 != null && var1 instanceof InetAddress && ((InetAddress)var1).address == this.address;
- }
-
- public String toString() {
- return this.getHostName() + "/" + this.getHostAddress();
- }
-
- private static void cacheAddress(String var0, Object var1) {
- int var2 = InetAddressCachePolicy.get();
- if (var2 != 0) {
- long var3 = -1L;
- if (var2 != -1) {
- var3 = System.currentTimeMillis() + (long)(var2 * 1000);
- }
-
- cacheAddress(var0, var1, var3);
- }
- }
-
- private static void cacheAddress(String var0, Object var1, long var2) {
- var0 = var0.toLowerCase();
- HashMap var4 = addressCache;
- synchronized(var4) {
- CacheEntry var5 = (CacheEntry)addressCache.get(var0);
- if (var5 == null) {
- var5 = new CacheEntry(var0, var1, var2);
- addressCache.put(var0, var5);
- } else {
- var5.address = var1;
- var5.expiration = var2;
- }
-
- }
- }
-
- private static Object getCachedAddress(String var0) {
- var0 = var0.toLowerCase();
- if (InetAddressCachePolicy.get() == 0) {
- return null;
- } else {
- HashMap var1 = addressCache;
- synchronized(var1) {
- CacheEntry var2 = (CacheEntry)addressCache.get(var0);
- if (var2 != null && var2.expiration < System.currentTimeMillis() && var2.expiration >= 0L) {
- var2 = null;
- }
-
- Object var3 = var2 != null ? var2.address : null;
- return var3;
- }
- }
- }
-
- public static InetAddress getByName(String var0) throws UnknownHostException {
- Object var1 = null;
- if (var0 != null && var0.length() != 0) {
- if (!Character.isDigit(var0.charAt(0))) {
- return getAllByName0(var0)[0];
- } else {
- int var2 = 0;
- int var3 = 0;
- char[] var4 = var0.toCharArray();
- int var5 = 0;
-
- label54:
- while(var5 < var4.length) {
- char var6 = var4[var5];
- if (var6 >= '0' && var6 <= '9') {
- int var7 = 0;
-
- while(true) {
- if (var6 != '.') {
- if (var6 < '0' || var6 > '9') {
- return getAllByName0(var0)[0];
- }
-
- var7 = var7 * 10 + var6 - 48;
- ++var5;
- if (var5 < var4.length) {
- var6 = var4[var5];
- continue;
- }
- }
-
- if (var7 > 255) {
- return getAllByName0(var0)[0];
- }
-
- var2 = (var2 << 8) + var7;
- ++var3;
- ++var5;
- continue label54;
- }
- }
-
- return getAllByName0(var0)[0];
- }
-
- if (var3 == 4 && !var0.endsWith(".")) {
- InetAddress var8 = new InetAddress();
- var8.address = var2;
- var8.hostName = null;
- return var8;
- } else {
- return getAllByName0(var0)[0];
- }
- }
- } else {
- return loopbackHost;
- }
- }
-
- public static InetAddress[] getAllByName(String var0) throws UnknownHostException {
- if (var0 != null && var0.length() != 0) {
- if (Character.isDigit(var0.charAt(0))) {
- InetAddress[] var1 = new InetAddress[]{getByName(var0)};
- return var1;
- } else {
- return getAllByName0(var0);
- }
- } else {
- throw new UnknownHostException("empty string");
- }
- }
-
- private static InetAddress[] getAllByName0(String var0) throws UnknownHostException {
- return getAllByName0(var0, true);
- }
-
- static InetAddress[] getAllByName0(String var0, boolean var1) throws UnknownHostException {
- Object var2 = null;
- Object var3 = null;
- if (var1) {
- SecurityManager var4 = System.getSecurityManager();
- if (var4 != null) {
- var4.checkConnect(var0, -1);
- }
- }
-
- var2 = getCachedAddress(var0);
- if (var2 == null) {
- var2 = getAddressFromNameService(var0);
- }
-
- if (var2 == unknown_array) {
- throw new UnknownHostException(var0);
- } else {
- try {
- var3 = ((InetAddress[])var2).clone();
- if (var3 == null) {
- throw new CloneNotSupportedException();
- }
- } catch (CloneNotSupportedException var5) {
- ((Throwable)var5).printStackTrace();
- }
-
- return (InetAddress[])var3;
- }
- }
-
- private static Object getAddressFromNameService(String var0) {
- Object var1 = null;
- if ((var1 = checkLookupTable(var0)) == null) {
- try {
- byte[][] var2 = impl.lookupAllHostAddr(var0);
- InetAddress[] var3 = new InetAddress[var2.length];
-
- for(int var4 = 0; var4 < var2.length; ++var4) {
- byte[] var5 = var2[var4];
- var3[var4] = new InetAddress(var0, var5);
- }
-
- var1 = var3;
- } catch (UnknownHostException var10) {
- var1 = unknown_array;
- } finally {
- cacheAddress(var0, var1);
- updateLookupTable(var0);
- }
- }
-
- return var1;
- }
-
- private static Object checkLookupTable(String var0) {
- Object var1 = null;
- HashMap var2 = lookupTable;
- synchronized(var2) {
- if (!lookupTable.containsKey(var0)) {
- lookupTable.put(var0, (Object)null);
- return var1;
- }
-
- while(lookupTable.containsKey(var0)) {
- try {
- lookupTable.wait();
- } catch (InterruptedException var7) {
- }
- }
- }
-
- var1 = getCachedAddress(var0);
- if (var1 == null) {
- HashMap var3 = lookupTable;
- synchronized(var3) {
- lookupTable.put(var0, (Object)null);
- }
- }
-
- return var1;
- }
-
- private static void updateLookupTable(String var0) {
- HashMap var1 = lookupTable;
- synchronized(var1) {
- lookupTable.remove(var0);
- lookupTable.notifyAll();
- }
- }
-
- public static synchronized InetAddress getLocalHost() throws UnknownHostException {
- if (localHost.equals(unknownAddress)) {
- throw new UnknownHostException();
- } else {
- SecurityManager var0 = System.getSecurityManager();
-
- try {
- if (localHost.address == -1) {
- localHost = getAllByName(localHost.hostName)[0];
- }
-
- if (var0 != null) {
- var0.checkConnect(localHost.getHostName(), -1);
- }
- } catch (SecurityException var2) {
- return loopbackHost;
- }
-
- return localHost;
- }
- }
-
- private static native void init();
-
- static {
- AccessController.doPrivileged(new LoadLibraryAction("net"));
- init();
- addressCache = new HashMap();
- lookupTable = new HashMap();
- String var0 = (String)AccessController.doPrivileged(new GetPropertyAction("impl.prefix", ""));
-
- try {
- impl = null;
- impl = (InetAddressImpl)Class.forName("java.net." + var0 + "InetAddressImpl").newInstance();
- } catch (ClassNotFoundException var6) {
- System.err.println("Class not found: java.net." + var0 + "InetAddressImpl:\ncheck impl.prefix property " + "in your properties file.");
- } catch (InstantiationException var7) {
- System.err.println("Could not instantiate: java.net." + var0 + "InetAddressImpl:\ncheck impl.prefix property " + "in your properties file.");
- } catch (IllegalAccessException var8) {
- System.err.println("Cannot access class: java.net." + var0 + "InetAddressImpl:\ncheck impl.prefix property " + "in your properties file.");
- }
-
- if (impl == null) {
- try {
- impl = (InetAddressImpl)Class.forName("java.net.InetAddressImpl").newInstance();
- } catch (Exception var5) {
- throw new Error("System property impl.prefix incorrect");
- }
- }
-
- unknownAddress = new InetAddress();
- anyLocalAddress = new InetAddress();
- impl.makeAnyLocalAddress(anyLocalAddress);
- byte[] var1 = new byte[]{127, 0, 0, 1};
- loopbackHost = new InetAddress("localhost", var1);
-
- try {
- localHost = new InetAddress();
- localHost.hostName = impl.getLocalHostName();
- localHost.address = -1;
- } catch (Exception var4) {
- localHost = unknownAddress;
- }
-
- String var2 = "0.0.0.0";
- unknown_array = new InetAddress[1];
- unknown_array[0] = new InetAddress(var2, unknownAddress.getAddress());
- cacheAddress(var2, unknown_array, -1L);
- }
- }
-