https://bugs.kde.org/show_bug.cgi?id=470085
--- Comment #4 from Axel <thas5egh2chae...@pm.me> --- The identity packet is broadcast on the wrong network interface because onNetworkChange is called before the wifi interface becomes the default. I logged the current default network in sendUdpIdentityPacket: diff --git a/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java b/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java index e7983928..651b9025 100644 --- a/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java +++ b/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java @@ -368,6 +375,11 @@ public class LanLinkProvider extends BaseLinkProvider { return; } + ConnectivityManager connectivityManager = this.context.getSystemService(ConnectivityManager.class); + Network network = connectivityManager.getActiveNetwork(); + LinkProperties linkProperties = connectivityManager.getLinkProperties(network); + Log.i("LanLinkProvider", "default network interface: " + linkProperties.getInterfaceName()); + NetworkPacket identity = NetworkPacket.createIdentityPacket(context); identity.set("tcpPort", tcpServer.getLocalPort()); and got the cellular interface instead of wifi: 2023-08-15 16:25:14.906 21199-21239 KDE/BackgroundService org.kde.kdeconnect_tp D onNetworkChange 2023-08-15 16:25:14.933 21199-21294 LanLinkProvider org.kde.kdeconnect_tp I default network interface: rmnet0 to validate this I put a 500ms sleep before the call to sendUdpIdentityPacket in broadcastUdpIdentityPacket and got the correct interface and the phone connected to the computer: 2023-08-15 16:27:23.245 21637-21683 KDE/BackgroundService org.kde.kdeconnect_tp D onNetworkChange 2023-08-15 16:27:23.751 21637-21687 LanLinkProvider org.kde.kdeconnect_tp I default network interface: wlan0 2023-08-15 16:27:23.786 21637-21687 KDE/LanLinkProvider org.kde.kdeconnect_tp I identity packet received from a TCP connection from [...] I removed the sleep and hacked onNetworkChange to pass the new network from the callback on to sendUdpIdentityPacket and bind the socket to the right interface: diff --git a/src/org/kde/kdeconnect/BackgroundService.java b/src/org/kde/kdeconnect/BackgroundService.java index 10c73ab2..b37aa6c8 100644 --- a/src/org/kde/kdeconnect/BackgroundService.java +++ b/src/org/kde/kdeconnect/BackgroundService.java @@ -136,7 +136,7 @@ public class BackgroundService extends Service { @Override public void onAvailable(Network network) { connectedToNonCellularNetwork.postValue(true); - onNetworkChange(); + onNetworkChange(network); } @Override public void onLost(Network network) { diff --git a/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java b/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java index e7983928..dc6c391e 100644 --- a/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java +++ b/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java }); } @WorkerThread - public void sendUdpIdentityPacket(List<InetAddress> ipList) { + public void sendUdpIdentityPacket(Network network, List<InetAddress> ipList) { if (tcpServer == null || !tcpServer.isBound()) { Log.i("LanLinkProvider", "Won't broadcast UDP packet if TCP socket is not ready yet"); return; } @@ -382,11 +397,17 @@ public class LanLinkProvider extends BaseLinkProvider { DatagramSocket socket; try { socket = new DatagramSocket(); + if (network != null) { + network.bindSocket(socket); + } socket.setReuseAddress(true); socket.setBroadcast(true); } catch (SocketException e) { Log.e("KDE/LanLinkProvider", "Failed to create DatagramSocket", e); return; } Works fine but should probably be done a bit more careful for real: 2023-08-15 16:49:26.104 22943-22985 KDE/BackgroundService org.kde.kdeconnect_tp D onNetworkChange 2023-08-15 16:49:26.111 22943-22992 LanLinkProvider org.kde.kdeconnect_tp I default network interface: rmnet0 2023-08-15 16:49:26.115 22943-22992 LanLinkProvider org.kde.kdeconnect_tp I callback network interface: wlan0 2023-08-15 16:49:26.146 22943-22992 KDE/LanLinkProvider org.kde.kdeconnect_tp I identity packet received from a TCP connection from [...] -- You are receiving this mail because: You are watching all bug changes.