]> git.basschouten.com Git - openhab-addons.git/commitdiff
[dscalarm] Remove org.apache.commons.net.util.SubnetUtils (#17407)
authorlsiepel <leosiepel@gmail.com>
Sun, 13 Oct 2024 11:32:49 +0000 (13:32 +0200)
committerGitHub <noreply@github.com>
Sun, 13 Oct 2024 11:32:49 +0000 (13:32 +0200)
* Remove apache

Signed-off-by: Leo Siepel <leosiepel@gmail.com>
bundles/org.openhab.binding.dscalarm/src/main/java/org/openhab/binding/dscalarm/internal/discovery/EnvisalinkBridgeDiscovery.java

index 1bb9490c6972a1ab05e1e1683ceef8aa84d4faff..343ef4278e2263d11cb594f9fdcd9d8a642b032e 100644 (file)
@@ -15,15 +15,17 @@ package org.openhab.binding.dscalarm.internal.discovery;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.net.Inet4Address;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
-import java.net.NetworkInterface;
 import java.net.Socket;
 import java.net.SocketException;
 import java.net.SocketTimeoutException;
+import java.net.UnknownHostException;
+import java.util.List;
 
-import org.apache.commons.net.util.SubnetUtils;
-import org.apache.commons.net.util.SubnetUtils.SubnetInfo;
+import org.openhab.core.net.CidrAddress;
+import org.openhab.core.net.NetUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -57,43 +59,29 @@ public class EnvisalinkBridgeDiscovery {
     public synchronized void discoverBridge() {
         logger.debug("Starting Envisalink Bridge Discovery.");
 
-        SubnetUtils subnetUtils = null;
-        SubnetInfo subnetInfo = null;
-        long lowIP = 0;
-        long highIP = 0;
-
+        CidrAddress localCidrAddress;
         try {
             InetAddress localHost = InetAddress.getLocalHost();
-            NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);
-            subnetUtils = new SubnetUtils(localHost.getHostAddress() + "/"
-                    + networkInterface.getInterfaceAddresses().get(0).getNetworkPrefixLength());
-            subnetInfo = subnetUtils.getInfo();
-            lowIP = convertIPToNumber(subnetInfo.getLowAddress());
-            highIP = convertIPToNumber(subnetInfo.getHighAddress());
-        } catch (IllegalArgumentException e) {
-            logger.warn("discoverBridge(): Illegal Argument Exception - {}", e.toString());
-            return;
-        } catch (Exception e) {
-            logger.warn("discoverBridge(): Error - Unable to get Subnet Information! {}", e.toString());
+            localCidrAddress = NetUtil.getAllInterfaceAddresses().stream()
+                    .filter(f -> f.getAddress() instanceof Inet4Address && f.getAddress().equals(localHost)).findFirst()
+                    .orElse(null);
+        } catch (UnknownHostException e) {
+            logger.warn("discoverBridge(): UnknownHostException - {}", e.toString());
             return;
         }
 
-        logger.debug("   Local IP Address: {} - {}", subnetInfo.getAddress(),
-                convertIPToNumber(subnetInfo.getAddress()));
-        logger.debug("   Subnet:           {} - {}", subnetInfo.getNetworkAddress(),
-                convertIPToNumber(subnetInfo.getNetworkAddress()));
-        logger.debug("   Network Prefix:   {}", subnetInfo.getCidrSignature().split("/")[1]);
-        logger.debug("   Network Mask:     {}", subnetInfo.getNetmask());
-        logger.debug("   Low IP:           {}", convertNumberToIP(lowIP));
-        logger.debug("   High IP:          {}", convertNumberToIP(highIP));
+        List<InetAddress> addressesToScan = localCidrAddress != null
+                ? NetUtil.getAddressesRangeByCidrAddress(localCidrAddress, 16)
+                : List.of();
 
-        for (long ip = lowIP; ip <= highIP; ip++) {
+        logger.debug("Performing discovery on {} ip addresses", addressesToScan.size());
+        for (InetAddress inetAddress : addressesToScan) {
             try (Socket socket = new Socket()) {
-                ipAddress = convertNumberToIP(ip);
 
                 socket.setReuseAddress(true);
                 socket.setReceiveBufferSize(32);
-                socket.connect(new InetSocketAddress(ipAddress, ENVISALINK_BRIDGE_PORT), CONNECTION_TIMEOUT);
+                socket.connect(new InetSocketAddress(inetAddress.getHostAddress(), ENVISALINK_BRIDGE_PORT),
+                        CONNECTION_TIMEOUT);
                 if (socket.isConnected()) {
                     String message = "";
                     socket.setSoTimeout(SO_TIMEOUT);
@@ -128,55 +116,4 @@ public class EnvisalinkBridgeDiscovery {
             }
         }
     }
-
-    /**
-     * Convert an IP address to a number.
-     *
-     * @param ipAddress
-     * @return
-     */
-    private long convertIPToNumber(String ipAddress) {
-        String[] octets = ipAddress.split("\\.");
-
-        if (octets.length != 4) {
-            throw new IllegalArgumentException("Invalid IP address: " + ipAddress);
-        }
-
-        long ip = 0;
-
-        for (int i = 3; i >= 0; i--) {
-            long octet = Long.parseLong(octets[3 - i]);
-
-            if (octet != (octet & 0xff)) {
-                throw new IllegalArgumentException("Invalid IP address: " + ipAddress);
-            }
-
-            ip |= octet << (i * 8);
-        }
-
-        return ip;
-    }
-
-    /**
-     * Convert a number to an IP address.
-     *
-     * @param ip
-     * @return
-     */
-    private String convertNumberToIP(long ip) {
-        StringBuilder ipAddress = new StringBuilder(15);
-
-        for (int i = 0; i < 4; i++) {
-
-            ipAddress.insert(0, Long.toString(ip & 0xff));
-
-            if (i < 3) {
-                ipAddress.insert(0, '.');
-            }
-
-            ip = ip >> 8;
-        }
-
-        return ipAddress.toString();
-    }
 }