All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cosylab.epics.caj.util.nif.InetAddressUtilV6 Maven / Gradle / Ivy

Go to download

JCA is an EPICS Channel Access library for Java. For more information concerning EPICS or Channel Access please refer to the <a href="http://www.aps.anl.gov/epics">EPICS Web pages</a> or read the <a href="http://www.aps.anl.gov/epics/base/R3-14/8-docs/CAref.html">Channel Access manual (3.14)</a>. <p>This module also includes CAJ, A 100% pure Java implementation of the EPICS Channel Access library.</p>

There is a newer version: 2.4.10
Show newest version
/*
 * Copyright (c) 2004 by Cosylab
 *
 * The full license specifying the redistribution, modification, usage and other
 * rights and obligations is included with the distribution of this project in
 * the file "LICENSE-CAJ". If the license is not included visit Cosylab web site,
 * .
 *
 * THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, NOT EVEN THE
 * IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE, ASSUMES
 * _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE RESULTING FROM THE USE, MODIFICATION,
 * OR REDISTRIBUTION OF THIS SOFTWARE.
 */

package com.cosylab.epics.caj.util.nif;

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;

/**
 * InetAddress utility methods.
 * This class needs Java 6 or never. To compile on older version, simply remove this file.
 * CAJ will detect this and use defaults.
 * @author Matej Sekoranja
 * @version $Id: InetAddressUtil.java,v 1.4 2009/12/22 21:50:26 msekoranja Exp $
 */
public class InetAddressUtilV6 {

	/**
	 * Get broadcast addresses.
	 * @param port port to be added to get socket address.
	 * @return array of broadcast addresses with given port.
	 */
	public static InetSocketAddress[] getBroadcastAddresses(int port) {
		Enumeration nets;
		try {
			nets = NetworkInterface.getNetworkInterfaces();
		} catch (SocketException se) {
			// fallback
			return new InetSocketAddress[] { new InetSocketAddress("255.255.255.255", port) };
		}

		ArrayList list = new ArrayList(10);

		while (nets.hasMoreElements())
		{
			NetworkInterface net = (NetworkInterface)nets.nextElement();
			try
			{
				if (net.isUp())
				{
					List interfaceAddresses = net.getInterfaceAddresses();
					if (interfaceAddresses != null)
					{
						Iterator iter = interfaceAddresses.iterator();
						while (iter.hasNext())
						{
							InterfaceAddress addr = (InterfaceAddress)iter.next();
							if (addr.getBroadcast() != null)
							{
								InetSocketAddress isa = new InetSocketAddress(addr.getBroadcast(), port);
								if (!list.contains(isa))
									list.add(isa);
							}
						}
					}
				}
			} catch (Throwable th) {
				// some methods throw exceptions, some return null (and they shouldn't)
				// noop, skip that interface
			}
		}
		
		// fallback to loop
		if (list.size() == 0)
			list.add(new InetSocketAddress(InetAddress.getLoopbackAddress(), port));
		
		InetSocketAddress[] retVal = new InetSocketAddress[list.size()];
		list.toArray(retVal);
		return retVal;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy