From 2c454a0ec55ec8b80bd469fefdb23f3ce5761f69 Mon Sep 17 00:00:00 2001 From: Koen J Date: Fri, 6 Jun 2025 11:20:04 +0200 Subject: [PATCH] Added boolean setting to allow link local casting over ipv4. --- .../main/java/com/futo/platformplayer/Settings.kt | 5 +++++ .../com/futo/platformplayer/casting/StateCasting.kt | 13 ++++++++++--- app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/Settings.kt b/app/src/main/java/com/futo/platformplayer/Settings.kt index b8e23283..e8f4f70a 100644 --- a/app/src/main/java/com/futo/platformplayer/Settings.kt +++ b/app/src/main/java/com/futo/platformplayer/Settings.kt @@ -681,6 +681,11 @@ class Settings : FragmentedStorageFileJson() { @Serializable(with = FlexibleBooleanSerializer::class) var allowIpv6: Boolean = true; + @AdvancedField + @FormField(R.string.allow_ipv4, FieldForm.TOGGLE, R.string.allow_ipv4_description, 5) + @Serializable(with = FlexibleBooleanSerializer::class) + var allowLinkLocalIpv4: Boolean = false; + /*TODO: Should we have a different casting quality? @FormField("Preferred Casting Quality", FieldForm.DROPDOWN, "", 3) @DropdownFieldOptionsId(R.array.preferred_quality_array) diff --git a/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt b/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt index b2c2156c..1e8e1830 100644 --- a/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt +++ b/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt @@ -1221,9 +1221,16 @@ class StateCasting { private fun getLocalUrl(ad: CastingDevice): String { var address = ad.localAddress!! - if (address.isLinkLocalAddress) { - address = findPreferredAddress() ?: address - Logger.i(TAG, "Selected casting address: $address") + if (Settings.instance.casting.allowLinkLocalIpv4) { + if (address.isLinkLocalAddress && address is Inet6Address) { + address = findPreferredAddress() ?: address + Logger.i(TAG, "Selected casting address: $address") + } + } else { + if (address.isLinkLocalAddress) { + address = findPreferredAddress() ?: address + Logger.i(TAG, "Selected casting address: $address") + } } return "http://${address.toUrlAddress().trim('/')}:${_castServer.port}"; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e2b7d730..b2513e21 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -76,6 +76,8 @@ Always proxy requests when casting data through the device. Allow IPV6 If casting over IPV6 is allowed, can cause issues on some networks + Allow Link Local IPV4 + If casting over IPV4 link local is allowed, can cause issues on some networks Discover Find new video sources to add These sources have been disabled