|
|
|
|
@ -27,6 +27,8 @@
|
|
|
|
|
|
|
|
|
|
package com.zerotier.sdk; |
|
|
|
|
|
|
|
|
|
import android.util.Log; |
|
|
|
|
|
|
|
|
|
import java.lang.Comparable; |
|
|
|
|
import java.lang.Override; |
|
|
|
|
import java.lang.String; |
|
|
|
|
@ -35,6 +37,8 @@ import java.net.InetSocketAddress;
|
|
|
|
|
import java.util.Collections; |
|
|
|
|
|
|
|
|
|
public final class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> { |
|
|
|
|
private final static String TAG = "VirtualNetworkConfig"; |
|
|
|
|
|
|
|
|
|
public static final int MAX_MULTICAST_SUBSCRIPTIONS = 4096; |
|
|
|
|
public static final int ZT_MAX_ZT_ASSIGNED_ADDRESSES = 16; |
|
|
|
|
|
|
|
|
|
@ -58,30 +62,93 @@ public final class VirtualNetworkConfig implements Comparable<VirtualNetworkConf
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public boolean equals(VirtualNetworkConfig cfg) { |
|
|
|
|
ArrayList<String> current = new ArrayList<>(); |
|
|
|
|
ArrayList<String> newConfig = new ArrayList<>(); |
|
|
|
|
ArrayList<String> aaCurrent = new ArrayList<>(); |
|
|
|
|
ArrayList<String> aaNew = new ArrayList<>(); |
|
|
|
|
for (InetSocketAddress s : assignedAddresses) { |
|
|
|
|
current.add(s.toString()); |
|
|
|
|
aaCurrent.add(s.toString()); |
|
|
|
|
} |
|
|
|
|
for (InetSocketAddress s : cfg.assignedAddresses) { |
|
|
|
|
newConfig.add(s.toString()); |
|
|
|
|
aaNew.add(s.toString()); |
|
|
|
|
} |
|
|
|
|
Collections.sort(current); |
|
|
|
|
Collections.sort(newConfig); |
|
|
|
|
boolean aaEqual = current.equals(newConfig); |
|
|
|
|
|
|
|
|
|
current.clear(); |
|
|
|
|
newConfig.clear(); |
|
|
|
|
Collections.sort(aaCurrent); |
|
|
|
|
Collections.sort(aaNew); |
|
|
|
|
boolean aaEqual = aaCurrent.equals(aaNew); |
|
|
|
|
|
|
|
|
|
ArrayList<String> rCurrent = new ArrayList<>(); |
|
|
|
|
ArrayList<String> rNew = new ArrayList<>(); |
|
|
|
|
for (VirtualNetworkRoute r : routes) { |
|
|
|
|
current.add(r.toString()); |
|
|
|
|
rCurrent.add(r.toString()); |
|
|
|
|
} |
|
|
|
|
for (VirtualNetworkRoute r : cfg.routes) { |
|
|
|
|
newConfig.add(r.toString()); |
|
|
|
|
rNew.add(r.toString()); |
|
|
|
|
} |
|
|
|
|
Collections.sort(rCurrent); |
|
|
|
|
Collections.sort(rNew); |
|
|
|
|
boolean routesEqual = rCurrent.equals(rNew); |
|
|
|
|
|
|
|
|
|
if (this.nwid != cfg.nwid) { |
|
|
|
|
Log.i(TAG, "nwid Changed. Old: " + Long.toHexString(this.nwid) + " (" + Long.toString(this.nwid) + "), " + |
|
|
|
|
"New: " + Long.toHexString(cfg.nwid) + " (" + Long.toString(cfg.nwid) + ")"); |
|
|
|
|
} |
|
|
|
|
if (this.mac != cfg.mac) { |
|
|
|
|
Log.i(TAG, "MAC Changed. Old: " + Long.toHexString(this.mac) + ", New: " + Long.toHexString(cfg.mac)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!this.name.equals(cfg.name)) { |
|
|
|
|
Log.i(TAG, "Name Changed. Old: " + this.name + " New: "+ cfg.name); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!this.type.equals(cfg.type)) { |
|
|
|
|
Log.i(TAG, "TYPE changed. Old " + this.type + ", New: " + cfg.type); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (this.mtu != cfg.mtu) { |
|
|
|
|
Log.i(TAG, "MTU Changed. Old: " + this.mtu + ", New: " + cfg.mtu); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (this.dhcp != cfg.dhcp) { |
|
|
|
|
Log.i(TAG, "DHCP Flag Changed. Old: " + this.dhcp + ", New: " + cfg.dhcp); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (this.bridge != cfg.bridge) { |
|
|
|
|
Log.i(TAG, "Bridge Flag Changed. Old: " + this.bridge + ", New: " + cfg.bridge); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (this.broadcastEnabled != cfg.broadcastEnabled) { |
|
|
|
|
Log.i(TAG, "Broadcast Flag Changed. Old: "+ this.broadcastEnabled +", New: " + this.broadcastEnabled); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (this.portError != cfg.portError) { |
|
|
|
|
Log.i(TAG, "Port Error Changed. Old: " + this.portError + ", New: " + this.portError); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (this.enabled != cfg.enabled) { |
|
|
|
|
Log.i(TAG, "Enabled Changed. Old: " + this.enabled + ", New: " + this.enabled); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!aaEqual) { |
|
|
|
|
Log.i(TAG, "Assigned Addresses Changed"); |
|
|
|
|
Log.i(TAG, "Old:"); |
|
|
|
|
for (String s : aaCurrent) { |
|
|
|
|
Log.i(TAG, " " + s); |
|
|
|
|
} |
|
|
|
|
Log.i(TAG, "New:"); |
|
|
|
|
for (String s : aaNew) { |
|
|
|
|
Log.i(TAG, " " +s); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!routesEqual) { |
|
|
|
|
Log.i(TAG, "Managed Routes Changed"); |
|
|
|
|
Log.i(TAG, "Old:"); |
|
|
|
|
for (String s : rCurrent) { |
|
|
|
|
Log.i(TAG, " " + s); |
|
|
|
|
} |
|
|
|
|
Log.i(TAG, "New:"); |
|
|
|
|
for (String s : rNew) { |
|
|
|
|
Log.i(TAG, " " + s); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Collections.sort(current); |
|
|
|
|
Collections.sort(newConfig); |
|
|
|
|
boolean routesEqual = current.equals(newConfig); |
|
|
|
|
|
|
|
|
|
return this.nwid == cfg.nwid && |
|
|
|
|
this.mac == cfg.mac && |
|
|
|
|
|