From ffd70986b3b709fbd5704087ae1c440a60d2de6a Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 29 May 2016 16:04:55 -0500 Subject: [PATCH] Improve mDNS for multi-homed systems --- .../nvstream/mdns/MdnsDiscoveryAgent.java | 41 ++++++++----------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/moonlight-common/src/com/limelight/nvstream/mdns/MdnsDiscoveryAgent.java b/moonlight-common/src/com/limelight/nvstream/mdns/MdnsDiscoveryAgent.java index 7d60ab5b..2bee06b8 100644 --- a/moonlight-common/src/com/limelight/nvstream/mdns/MdnsDiscoveryAgent.java +++ b/moonlight-common/src/com/limelight/nvstream/mdns/MdnsDiscoveryAgent.java @@ -106,41 +106,32 @@ public class MdnsDiscoveryAgent implements ServiceListener { } private void handleResolvedServiceInfo(ServiceInfo info) { - MdnsComputer computer; - pendingResolution.remove(info.getName()); try { - computer = parseServerInfo(info); - if (computer == null) { - LimeLog.info("mDNS: Invalid response for machine: "+info.getName()); - return; - } + handleServiceInfo(info); } catch (UnsupportedEncodingException e) { // Invalid DNS response LimeLog.info("mDNS: Invalid response for machine: "+info.getName()); return; } - - synchronized (computers) { - if (computers.put(computer.getAddress(), computer) == null) { - // This was a new entry - listener.notifyComputerAdded(computer); - } - } } - private static MdnsComputer parseServerInfo(ServiceInfo info) throws UnsupportedEncodingException { + private void handleServiceInfo(ServiceInfo info) throws UnsupportedEncodingException { Inet4Address addrs[] = info.getInet4Addresses(); - if (addrs.length == 0) { - LimeLog.info("mDNS: "+info.getName()+" is missing addresses"); - return null; + + LimeLog.info("mDNS: "+info.getName()+" has "+addrs.length+" addresses"); + + // Add a computer object for each IPv4 address reported by the PC + for (Inet4Address addr : addrs) { + synchronized (computers) { + MdnsComputer computer = new MdnsComputer(info.getName(), addr); + if (computers.put(computer.getAddress(), computer) == null) { + // This was a new entry + listener.notifyComputerAdded(computer); + } + } } - - Inet4Address address = addrs[0]; - String name = info.getName(); - - return new MdnsComputer(name, address); } public void startDiscovery(final int discoveryIntervalMs) { @@ -171,7 +162,9 @@ public class MdnsDiscoveryAgent implements ServiceListener { ServiceInfo[] infos = resolver.getServiceInfos(SERVICE_TYPE, name, 500); if (infos != null && infos.length != 0) { LimeLog.info("mDNS: Resolved (retry) with "+infos.length+" service entries"); - handleResolvedServiceInfo(infos[0]); + for (ServiceInfo svcinfo : infos) { + handleResolvedServiceInfo(svcinfo); + } } }