package org.xins.common.net;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import org.xins.common.MandatoryArgumentChecker;
import org.xins.common.text.ParseException;
public final class IPAddressUtils {
private IPAddressUtils() {
}
public static int ipToInt(String ip)
throws IllegalArgumentException, ParseException {
MandatoryArgumentChecker.check("ip", ip);
int value;
StringTokenizer tokenizer = new StringTokenizer(ip, ".", false);
try {
value = ipPartToInt(ip, tokenizer.nextToken());
value <<= 8;
value += ipPartToInt(ip, tokenizer.nextToken());
value <<= 8;
value += ipPartToInt(ip, tokenizer.nextToken());
value <<= 8;
value += ipPartToInt(ip, tokenizer.nextToken());
} catch (NoSuchElementException nsee) {
throw newParseException(ip);
}
if (tokenizer.hasMoreTokens()) {
throw newParseException(ip);
}
return value;
}
private static int ipPartToInt(String ip, String part)
throws ParseException {
char[] partString = part.toCharArray();
int length = partString.length;
if (length == 1) {
char c0 = partString[0];
if (c0 >= '0' && c0 <= '9') {
return c0 - '0';
}
} else if (length == 2) {
char c0 = partString[0];
char c1 = partString[1];
if (c0 >= '1' && c0 <= '9' && c1 >= '0' && c1 <= '9') {
return ((c0 - '0') * 10) + (c1 - '0');
}
} else if (length == 3) {
char c0 = partString[0];
char c1 = partString[1];
char c2 = partString[2];
if (c0 >= '1' && c0 <= '2'
&& c1 >= '0' && c1 <= '9'
&& c2 >= '0' && c2 <= '9') {
int value = ((c0 - '0') * 100) + ((c1 - '0') * 10) + (c2 - '0');
if (value <= 255) {
return value;
}
}
}
throw newParseException(ip);
}
public static String getLocalHostIPAddress() {
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException exception) {
return "127.0.0.1";
} catch (NoClassDefFoundError error) {
return "127.0.0.1";
}
}
public static String getLocalHost() {
String hostname = "localhost";
try {
hostname = InetAddress.getLocalHost().getCanonicalHostName();
} catch (UnknownHostException unknownHostException) {
String unknownMessage = unknownHostException.getMessage();
int twoDotPos = unknownMessage.indexOf(':');
if (twoDotPos != -1) {
hostname = unknownMessage.substring(0, twoDotPos);
}
} catch (SecurityException securityException) {
} catch (NoClassDefFoundError error) {
}
return hostname;
}
private static ParseException newParseException(String ip) {
String detail = "The string \"" + ip + "\" is not a valid IP address.";
return new ParseException(detail);
}
}