/* * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ import java.net.NetworkInterface; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.net.InetAddress; import java.net.Inet4Address; import java.net.SocketException; import java.io.IOException; import java.io.PrintStream; import java.io.UnsupportedEncodingException; import java.util.List; import java.util.ArrayList; import java.util.Set; import java.util.Collections; import java.util.Enumeration; import java.util.Iterator; import java.nio.ByteBuffer; import com.sun.nio.sctp.SctpChannel; import static java.lang.System.out; public class Util { static final int SMALL_BUFFER = 128; static final String SMALL_MESSAGE = "Under the bridge and over the dam, looking for berries, berries for jam"; static final int LARGE_BUFFER = 32768; static final String LARGE_MESSAGE; static { StringBuffer sb = new StringBuffer(LARGE_BUFFER); for (int i=0; i<460; i++) sb.append(SMALL_MESSAGE); LARGE_MESSAGE = sb.toString(); } static boolean isSCTPSupported() { try { SctpChannel c = SctpChannel.open(); c.close(); return true; } catch (IOException ioe) { ioe.printStackTrace(); } catch (UnsupportedOperationException e) { out.println(e); } return false; } /** * Returns a list of all the addresses on the system. * @param inclLoopback * if {@code true}, include the loopback addresses * @param ipv4Only * it {@code true}, only IPv4 addresses will be included */ static List<InetAddress> getAddresses(boolean inclLoopback, boolean ipv4Only) throws SocketException { ArrayList<InetAddress> list = new ArrayList<InetAddress>(); Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces(); for (NetworkInterface netInf : Collections.list(nets)) { Enumeration<InetAddress> addrs = netInf.getInetAddresses(); for (InetAddress addr : Collections.list(addrs)) { if (!list.contains(addr) && (inclLoopback ? true : !addr.isLoopbackAddress()) && (ipv4Only ? (addr instanceof Inet4Address) : true)) { list.add(addr); } } } return list; } static void dumpAddresses(SctpChannel channel, PrintStream printStream) throws IOException { Set<SocketAddress> addrs = channel.getAllLocalAddresses(); printStream.println("Local Addresses: "); for (Iterator<SocketAddress> it = addrs.iterator(); it.hasNext(); ) { InetSocketAddress addr = (InetSocketAddress)it.next(); printStream.println("\t" + addr); } } /** * Compare the contents of the given ByteBuffer with the contens of the * given byte array. true if, and only if, the contents are the same. */ static boolean compare(ByteBuffer bb, byte[] message) { if (message.length != bb.remaining()) { out.println("Compare failed, byte array length != to buffer remaining"); return false; } for (int i=0; i<message.length; i++) { byte b = bb.get(); if (message[i] != b) { out.println("Position " + i + ": " + message[i] + " != " + b); return false; } } return true; } static boolean compare(ByteBuffer bb, String str) { try{ return Util.compare(bb, str.getBytes("ISO-8859-1")); } catch (UnsupportedEncodingException unsupported) { throw new AssertionError(unsupported); } } }