From f70128084071b4790c14a2df731989fb44b56e3d Mon Sep 17 00:00:00 2001 From: Adrian Moennich Date: Sat, 12 Dec 2015 21:21:05 +0100 Subject: [PATCH 1/2] Add getInet4AddressByName util --- .../main/java/org/xbmc/kore/utils/NetUtils.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/src/main/java/org/xbmc/kore/utils/NetUtils.java b/app/src/main/java/org/xbmc/kore/utils/NetUtils.java index b4d077b..b27cac6 100644 --- a/app/src/main/java/org/xbmc/kore/utils/NetUtils.java +++ b/app/src/main/java/org/xbmc/kore/utils/NetUtils.java @@ -24,6 +24,7 @@ import java.io.FileReader; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; +import java.net.Inet4Address; import java.net.InetAddress; import java.net.InterfaceAddress; import java.net.NetworkInterface; @@ -36,6 +37,21 @@ import java.util.Enumeration; public class NetUtils { private static final String TAG = LogUtils.makeLogTag(NetUtils.class); + /** + * Gets an IPv4 address from a host name + * @param host The host to look up + * @return Inet4Address + */ + public static Inet4Address getInet4AddressByName(String host) throws UnknownHostException { + InetAddress[] addrs = InetAddress.getAllByName(host); + for (InetAddress addr : addrs) { + if (addr instanceof Inet4Address) { + return (Inet4Address)addr; + } + } + throw new UnknownHostException("No ipv4 address found"); + } + /** * Convert a IPv4 address from an integer to an InetAddress. * @param hostAddress an int corresponding to the IPv4 address in network byte order From 2c369ef63f683fa15d407a3912a9c32081c493da Mon Sep 17 00:00:00 2001 From: Adrian Moennich Date: Sat, 12 Dec 2015 21:21:20 +0100 Subject: [PATCH 2/2] Do not attempt EventServer connection via IPv6 EventServer only listens on IPv4 addresses, even if the machine running kodi has IPv6 support (the webserver on the other hand does listen on both IPv4 and IPv6). fixes #148 --- .../org/xbmc/kore/eventclient/EventServerConnection.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/xbmc/kore/eventclient/EventServerConnection.java b/app/src/main/java/org/xbmc/kore/eventclient/EventServerConnection.java index dd5e859..44eaf55 100644 --- a/app/src/main/java/org/xbmc/kore/eventclient/EventServerConnection.java +++ b/app/src/main/java/org/xbmc/kore/eventclient/EventServerConnection.java @@ -26,6 +26,7 @@ import org.xbmc.kore.jsonrpc.HostConnection; import org.xbmc.kore.jsonrpc.method.Application; import org.xbmc.kore.jsonrpc.type.ApplicationType; import org.xbmc.kore.utils.LogUtils; +import org.xbmc.kore.utils.NetUtils; import org.xbmc.kore.utils.Utils; import java.io.IOException; @@ -97,7 +98,7 @@ public class EventServerConnection { @Override public void run() { try { - hostInetAddress = InetAddress.getByName(hostInfo.getAddress()); + hostInetAddress = NetUtils.getInet4AddressByName(hostInfo.getAddress()); } catch (UnknownHostException exc) { LogUtils.LOGD(TAG, "Got an UnknownHostException, disabling EventServer"); hostInetAddress = null; @@ -164,7 +165,7 @@ public class EventServerConnection { // Get the InetAddress final InetAddress hostInetAddress; try { - hostInetAddress = InetAddress.getByName(hostInfo.getAddress()); + hostInetAddress = NetUtils.getInet4AddressByName(hostInfo.getAddress()); } catch (UnknownHostException exc) { LogUtils.LOGD(TAG, "Couldn't get host InetAddress"); reportTestResult(callerHandler, callerCallback, false);