mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2026-06-19 07:10:58 +00:00
Add support for IPv6-only hosts
This commit is contained in:
@@ -42,7 +42,8 @@ public class ComputerDetails {
|
|||||||
if (details.activeAddress != null) {
|
if (details.activeAddress != null) {
|
||||||
this.activeAddress = details.activeAddress;
|
this.activeAddress = details.activeAddress;
|
||||||
}
|
}
|
||||||
if (details.localAddress != null) {
|
// We can get IPv4 loopback addresses with GS IPv6 Forwarder
|
||||||
|
if (details.localAddress != null && !details.localAddress.startsWith("127.")) {
|
||||||
this.localAddress = details.localAddress;
|
this.localAddress = details.localAddress;
|
||||||
}
|
}
|
||||||
if (details.remoteAddress != null) {
|
if (details.remoteAddress != null) {
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
package com.limelight.nvstream.mdns;
|
package com.limelight.nvstream.mdns;
|
||||||
|
|
||||||
import java.net.Inet4Address;
|
|
||||||
import java.net.Inet6Address;
|
import java.net.Inet6Address;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
|
||||||
public class MdnsComputer {
|
public class MdnsComputer {
|
||||||
private Inet4Address v4Addr;
|
private InetAddress localAddr;
|
||||||
private Inet6Address v6Addr;
|
private Inet6Address v6Addr;
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
public MdnsComputer(String name, Inet4Address v4Addr, Inet6Address v6Addr) {
|
public MdnsComputer(String name, InetAddress localAddress, Inet6Address v6Addr) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.v4Addr = v4Addr;
|
this.localAddr = localAddress;
|
||||||
this.v6Addr = v6Addr;
|
this.v6Addr = v6Addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -18,11 +18,11 @@ public class MdnsComputer {
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Inet4Address getAddressV4() {
|
public InetAddress getLocalAddress() {
|
||||||
return v4Addr;
|
return localAddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Inet6Address getAddressV6() {
|
public Inet6Address getIpv6Address() {
|
||||||
return v6Addr;
|
return v6Addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,9 +40,9 @@ public class MdnsComputer {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((other.v4Addr != null && v4Addr == null) ||
|
if ((other.localAddr != null && localAddr == null) ||
|
||||||
(other.v4Addr == null && v4Addr != null) ||
|
(other.localAddr == null && localAddr != null) ||
|
||||||
(other.v4Addr != null && !other.v4Addr.equals(v4Addr))) {
|
(other.localAddr != null && !other.localAddr.equals(localAddr))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,6 +60,6 @@ public class MdnsComputer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "["+name+" - "+v4Addr+" - "+v6Addr+"]";
|
return "["+name+" - "+localAddr+" - "+v6Addr+"]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+21
-16
@@ -160,6 +160,20 @@ public class MdnsDiscoveryAgent implements ServiceListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Inet6Address getLocalAddress(Inet6Address[] addresses) {
|
||||||
|
for (Inet6Address addr : addresses) {
|
||||||
|
if (addr.isLinkLocalAddress() || addr.isSiteLocalAddress()) {
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
// fc00::/7 - ULAs
|
||||||
|
else if ((addr.getAddress()[0] & 0xfe) == 0xfc) {
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private Inet6Address getLinkLocalAddress(Inet6Address[] addresses) {
|
private Inet6Address getLinkLocalAddress(Inet6Address[] addresses) {
|
||||||
for (Inet6Address addr : addresses) {
|
for (Inet6Address addr : addresses) {
|
||||||
if (addr.isLinkLocalAddress()) {
|
if (addr.isLinkLocalAddress()) {
|
||||||
@@ -247,7 +261,7 @@ public class MdnsDiscoveryAgent implements ServiceListener {
|
|||||||
for (Inet4Address v4Addr : v4Addrs) {
|
for (Inet4Address v4Addr : v4Addrs) {
|
||||||
synchronized (computers) {
|
synchronized (computers) {
|
||||||
MdnsComputer computer = new MdnsComputer(info.getName(), v4Addr, v6GlobalAddr);
|
MdnsComputer computer = new MdnsComputer(info.getName(), v4Addr, v6GlobalAddr);
|
||||||
if (computers.put(computer.getAddressV4(), computer) == null) {
|
if (computers.put(computer.getLocalAddress(), computer) == null) {
|
||||||
// This was a new entry
|
// This was a new entry
|
||||||
listener.notifyComputerAdded(computer);
|
listener.notifyComputerAdded(computer);
|
||||||
}
|
}
|
||||||
@@ -256,25 +270,16 @@ public class MdnsDiscoveryAgent implements ServiceListener {
|
|||||||
|
|
||||||
// If there were no IPv4 addresses, use IPv6 for registration
|
// If there were no IPv4 addresses, use IPv6 for registration
|
||||||
if (v4Addrs.length == 0) {
|
if (v4Addrs.length == 0) {
|
||||||
// Prefer a global address
|
Inet6Address v6LocalAddr = getLocalAddress(v6Addrs);
|
||||||
if (v6GlobalAddr != null) {
|
|
||||||
MdnsComputer computer = new MdnsComputer(info.getName(), null, v6GlobalAddr);
|
if (v6LocalAddr != null || v6GlobalAddr != null) {
|
||||||
if (computers.put(computer.getAddressV6(), computer) == null) {
|
MdnsComputer computer = new MdnsComputer(info.getName(), v6LocalAddr, v6GlobalAddr);
|
||||||
|
if (computers.put(v6LocalAddr != null ?
|
||||||
|
computer.getLocalAddress() : computer.getIpv6Address(), computer) == null) {
|
||||||
// This was a new entry
|
// This was a new entry
|
||||||
listener.notifyComputerAdded(computer);
|
listener.notifyComputerAdded(computer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
// Use link-local if we have no other option
|
|
||||||
Inet6Address v6LinkLocalAddr = getLinkLocalAddress(v6Addrs);
|
|
||||||
if (v6LinkLocalAddr != null) {
|
|
||||||
MdnsComputer computer = new MdnsComputer(info.getName(), null, v6LinkLocalAddr);
|
|
||||||
if (computers.put(computer.getAddressV6(), computer) == null) {
|
|
||||||
// This was a new entry
|
|
||||||
listener.notifyComputerAdded(computer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Submodule moonlight-common/src/main/jni/moonlight-core/moonlight-common-c updated: 6245934462...25dfbcfd41
Reference in New Issue
Block a user