/** * Copyright 2013-2015 Seagate Technology LLC. * * This Source Code Form is subject to the terms of the Mozilla * Public License, v. 2.0. If a copy of the MPL was not * distributed with this file, You can obtain one at * https://mozilla.org/MP:/2.0/. * * This program is distributed in the hope that it will be useful, * but is provided AS-IS, WITHOUT ANY WARRANTY; including without * the implied warranty of MERCHANTABILITY, NON-INFRINGEMENT or * FITNESS FOR A PARTICULAR PURPOSE. See the Mozilla Public * License for more details. * * See www.openkinetic.org for more project information */ package com.seagate.kinetic.simulator.utility; import java.io.UnsupportedEncodingException; import java.net.Inet6Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Date; import java.util.Enumeration; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import kinetic.simulator.SimulatorConfiguration; import com.google.protobuf.ByteString; import com.seagate.kinetic.proto.Kinetic.Command.GetLog.Configuration; import com.seagate.kinetic.proto.Kinetic.Command.GetLog.Configuration.Interface; import com.seagate.kinetic.simulator.internal.SimulatorEngine; public abstract class ConfigurationUtil { private final static Logger logger = Logger .getLogger(ConfigurationUtil.class.getName()); public final static String VENDER = SimulatorConfiguration.VENDER; public final static String MODEL = SimulatorConfiguration.MODEL; // public static final String SERIAL_PREFIX = "SIMULATOR-SN-"; public final static String COMPILATION_DATE = new Date().toString(); public final static String PROTOCOL_COMPILATION_DATE = new Date() .toString(); @SuppressWarnings("static-access") public static Configuration getConfiguration(SimulatorEngine engine) throws UnknownHostException, UnsupportedEncodingException { SimulatorConfiguration config = engine.getServiceConfiguration(); Configuration.Builder configuration = Configuration.newBuilder(); configuration.setVendor(VENDER); configuration.setModel(MODEL); configuration.setSerialNumber(ByteString.copyFrom( config.getSerialNumber(), "UTF8")); configuration.setWorldWideName(ByteString.copyFrom( config.getWorldWideName(), "UTF8")); configuration.setCompilationDate(COMPILATION_DATE); configuration.setProtocolCompilationDate(PROTOCOL_COMPILATION_DATE); configuration.setVersion(SimulatorConfiguration.getSimulatorVersion()); List<Interface> interfaces = new ArrayList<Interface>(); Interface.Builder itf1 = null; try { Enumeration<NetworkInterface> netInterfaces = NetworkInterface .getNetworkInterfaces(); while (netInterfaces.hasMoreElements()) { // get next interface NetworkInterface ni = netInterfaces.nextElement(); itf1 = Interface.newBuilder(); // display name could be null returned from NetworkInterface API if (ni.getDisplayName() != null) { itf1.setName(ni.getDisplayName()); } // set mac addr byte[] mac = ni.getHardwareAddress(); if (mac != null) { String macS = bytesToStringMac(mac); itf1.setMAC(ByteString.copyFromUtf8(macS)); } // get inet addresses on this interface Enumeration<InetAddress> addresses = ni.getInetAddresses(); while (addresses.hasMoreElements()) { // get next inet addr InetAddress addr2 = addresses.nextElement(); // get string address String addrString = addr2.getHostAddress(); if (addr2 instanceof Inet6Address) { itf1.setIpv6Address(ByteString.copyFromUtf8(addrString)); } else { itf1.setIpv4Address(ByteString.copyFromUtf8(addrString)); } } interfaces.add(itf1.build()); } } catch (SocketException e) { logger.log(Level.SEVERE, "Can not get the network Interface"); } for (Interface tempItf : interfaces) { configuration.addInterface(tempItf); } configuration.setPort(config.getPort()); configuration.setTlsPort(config.getSslPort()); if (null != config.getSimulatorVersion()) { configuration.setVersion(config.getSimulatorVersion()); } if (null != config.getSimulatorSourceHash()) { configuration.setSourceHash(config.getSimulatorSourceHash()); } if (null != config.getProtocolVersion()) { configuration.setProtocolVersion(config.getProtocolVersion()); } if (null != config.getProtocolSourceHash()) { configuration.setProtocolSourceHash(config.getProtocolSourceHash()); } return configuration.build(); } private static String bytesToStringMac(byte[] mac) { StringBuilder sb = new StringBuilder(18); for (byte b : mac) { if (sb.length() > 0) { sb.append(':'); } sb.append(String.format("%02x", b)); } return sb.toString(); } }