/* * $Id: OctetConverter.java 5067 2005-03-24 06:10:10Z dfs $ * * Copyright 2004-2005 Daniel F. Savarese * Contact Information: http://www.savarese.org/contact.html * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.savarese.org/software/ApacheLicense-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.savarese.vserv.tcpip; /** * OctetConverter is a utility singleton class for converting IP * octets to and from other representations. * * @author <a href="http://www.savarese.org/">Daniel F. Savarese</a> */ public final class OctetConverter { private OctetConverter() { } /** * Converts a set of IPv4 octets to a 32-bit word. * * @param octets A byte array containing the IPv4 octets. * @param offset The offset into the array where the octets start. * @return The 32-bit word representation of the IPv4 address. */ public static final int octetsToInt(byte[] octets, int offset) { return (((octets[offset] & 0xff) << 24) | ((octets[offset + 1] & 0xff) << 16) | ((octets[offset + 2] & 0xff) << 8) | (octets[offset + 3] & 0xff)); } /** * Same as <code>octetsToInt(octets, 0);</code> */ public static final int octetsToInt(byte[] octets) { return octetsToInt(octets, 0); } /** * Converts a set of octets to a 64-bit word. * * @param octets A byte array containing the octets. * @param offset The offset into the array where the octets start. * @return The 64-bit word representation of the octets. */ public static final long octetsToLong(byte[] octets, int offset) { return (((octets[offset] & 0xffffL) << 56) | ((octets[offset + 1] & 0xffL) << 48) | ((octets[offset + 2] & 0xffL) << 40) | ((octets[offset + 3] & 0xffL) << 32) | ((octets[offset + 4] & 0xffL) << 24) | ((octets[offset + 5] & 0xffL) << 16) | ((octets[offset + 6] & 0xffL) << 8) | (octets[offset + 7] & 0xffL)); } /** * Same as <code>octetsToLong(octets, 0);</code> */ public static final long octetsToLong(byte[] octets) { return octetsToLong(octets, 0); } /** * Converts a set of IPv4 octets to a string representation. * * @param buffer The StringBuffer to which to append the string. * @param octets A byte array containing the IPv4 octets. * @param offset The offset into the array where the octets start. */ public static final void octetsToString(StringBuffer buffer, byte[] octets, int offset) { buffer.append(octets[offset++] & 0xff); buffer.append("."); buffer.append(octets[offset++] & 0xff); buffer.append("."); buffer.append(octets[offset++] & 0xff); buffer.append("."); buffer.append(octets[offset++] & 0xff); } /** * Same as <code>octetsToString(buffer, octets, 0);</code> */ public static final void octetsToString(StringBuffer buffer, byte[] octets) { octetsToString(buffer, octets, 0); } /** * Converts a 32-bit word representation of an IPv4 address to a * string representation. * * @param buffer The StringBuffer to which to append the string. * @param address The 32-bit word representation of the address. */ public static final void intToString(StringBuffer buffer, int address) { buffer.append(0xff & (address >>> 24)); buffer.append("."); buffer.append(0xff & (address >>> 16)); buffer.append("."); buffer.append(0xff & (address >>> 8)); buffer.append("."); buffer.append(0xff & address); } /** * Converts a 32-bit word representation of an IPv4 address to a * byte array of octets. * * @param address The 32-bit word representation of the IPv4 address. * @param octets The byte array in which to store the IPv4 octets. * @param offset The offset into the array where the octets start. */ public static final void intToOctets(int address, byte[] octets, int offset) { octets[offset] = (byte)(0xff & (address >>> 24)); octets[offset + 1] = (byte)(0xff & (address >>> 16)); octets[offset + 2] = (byte)(0xff & (address >>> 8)); octets[offset + 3] = (byte)(0xff & address); } /** * Same as <code>intToOctets(address, octets, 0);</code> */ public static final void intToOctets(int address, byte[] octets) { intToOctets(address, octets, 0); } /** * Converts a 64-bit word to a byte array of octets. * * @param address The 64-bit word. * @param octets The byte array in which to store octets. * @param offset The offset into the array where the octets start. */ public static final void longToOctets(long address, byte[] octets, int offset) { octets[offset] = (byte)(0xffL & (address >>> 56)); octets[offset + 1] = (byte)(0xffL & (address >>> 48)); octets[offset + 2] = (byte)(0xffL & (address >>> 40)); octets[offset + 3] = (byte)(0xffL & (address >>> 32)); octets[offset + 4] = (byte)(0xffL & (address >>> 24)); octets[offset + 5] = (byte)(0xffL & (address >>> 16)); octets[offset + 6] = (byte)(0xffL & (address >>> 8)); octets[offset + 7] = (byte)(0xffL & address); } /** * Same as <code>longToOctets(address, octets, 0);</code> */ public static final void longToOctets(long address, byte[] octets) { longToOctets(address, octets, 0); } }