/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.openstack.atlas.util.ip; /** * * @author carlos.garza@rackspace.com */ import org.openstack.atlas.util.ip.exception.IPStringConversionException; import org.openstack.atlas.util.converters.BitConverters; import java.util.regex.Pattern; import java.util.regex.Matcher; public class IPv4 { private String ip; public static String bytes2IpString(byte[] in) throws IPStringConversionException { String ipStr; if (in.length != 4) { String msg = "Error IPv4 requires byte array of length 4"; throw new IPStringConversionException(msg); } ipStr = String.format("%d.%d.%d.%d", BitConverters.ubyte2int(in[0]), BitConverters.ubyte2int(in[1]), BitConverters.ubyte2int(in[2]), BitConverters.ubyte2int(in[3])); return ipStr; } public IPv4() { } public void setIp(String ip) { this.ip = ip; } public void setIp(byte[] in) throws IPStringConversionException { ip = bytes2IpString(in); } public IPv4(String ip) { setIp(ip); } public IPv4(byte[] in) throws IPStringConversionException { setIp(in); } public String getIp() { return ip; } public String getString() { return ip; } public byte[] getBytes() throws IPStringConversionException { byte[] out = new byte[4]; int octet; int i; if (ip == null) { throw new IPStringConversionException("Error ip address is null"); } String ippatternstr = "^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$"; Pattern ipPattern = Pattern.compile(ippatternstr); Matcher ipMatch = ipPattern.matcher(ip); if (ipMatch.find()) { for (i = 1; i <= 4; i++) { try { octet = Integer.parseInt(ipMatch.group(i)); } catch (NumberFormatException e) { String format = "Error ipv4 octet[%d] is not a valid integer in ip %s"; String msg = String.format(format, i, ip); throw new IPStringConversionException(msg); } if (octet < 0 || octet > 255) { String format = "Error ipv4 octet[%d](%d) is not in range 0 - 255 in ip %s"; String msg = String.format(format, i, octet, ip); throw new IPStringConversionException(msg); } out[i - 1] = BitConverters.int2ubyte((int) (octet % 256)); } } else { String err = String.format("Error %s is not a valid IPv4 string", ip); throw new IPStringConversionException(err); } return out; } }