From f87ff2f9cef16a7110403e23174bc2333950efba Mon Sep 17 00:00:00 2001
From: jimtng <2554958+jimtng@users.noreply.github.com>
Date: Thu, 29 Dec 2022 20:52:25 +1000
Subject: [PATCH] [chromecast] Fix constant disconnections (#14105)

When ipv6 is configured on the network, Chromecast devices will randomly
return ipv4 and/or multiple ipv6 addresses during mdns discovery.
This would trigger a thingUpdated call which will call dispose/initialize,
causing the thing to go offline/online.

Signed-off-by: Jimmy Tanagra <jcode@tanagra.id.au>
---
 .../internal/discovery/ChromecastDiscoveryParticipant.java | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/bundles/org.openhab.binding.chromecast/src/main/java/org/openhab/binding/chromecast/internal/discovery/ChromecastDiscoveryParticipant.java b/bundles/org.openhab.binding.chromecast/src/main/java/org/openhab/binding/chromecast/internal/discovery/ChromecastDiscoveryParticipant.java
index 1aad236ae48..682042cfaa1 100644
--- a/bundles/org.openhab.binding.chromecast/src/main/java/org/openhab/binding/chromecast/internal/discovery/ChromecastDiscoveryParticipant.java
+++ b/bundles/org.openhab.binding.chromecast/src/main/java/org/openhab/binding/chromecast/internal/discovery/ChromecastDiscoveryParticipant.java
@@ -14,6 +14,7 @@ package org.openhab.binding.chromecast.internal.discovery;
 
 import static org.openhab.binding.chromecast.internal.ChromecastBindingConstants.*;
 
+import java.net.Inet4Address;
 import java.util.Dictionary;
 import java.util.Map;
 import java.util.Set;
@@ -89,7 +90,11 @@ public class ChromecastDiscoveryParticipant implements MDNSDiscoveryParticipant
         if (isAutoDiscoveryEnabled) {
             ThingUID uid = getThingUID(service);
             if (uid != null) {
-                String host = service.getHostAddresses()[0];
+                Inet4Address[] addresses = service.getInet4Addresses();
+                if (addresses.length == 0) {
+                    return null;
+                }
+                String host = addresses[0].getHostAddress();
                 int port = service.getPort();
                 logger.debug("Chromecast Found: {} {}", host, port);
                 String id = service.getPropertyString(PROPERTY_DEVICE_ID);