summaryrefslogtreecommitdiff
path: root/windows/WinUI/ZeroTierNetwork.cs
diff options
context:
space:
mode:
Diffstat (limited to 'windows/WinUI/ZeroTierNetwork.cs')
-rw-r--r--windows/WinUI/ZeroTierNetwork.cs474
1 files changed, 457 insertions, 17 deletions
diff --git a/windows/WinUI/ZeroTierNetwork.cs b/windows/WinUI/ZeroTierNetwork.cs
index cce65441..d6802385 100644
--- a/windows/WinUI/ZeroTierNetwork.cs
+++ b/windows/WinUI/ZeroTierNetwork.cs
@@ -1,54 +1,494 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace WinUI
{
- public class ZeroTierNetwork
+ [Serializable]
+ public class ZeroTierNetwork : ISerializable, IEquatable<ZeroTierNetwork>, IComparable<ZeroTierNetwork>, INotifyPropertyChanged
{
+ private string networkId;
+ private string macAddress;
+ private string networkName;
+ private string networkStatus;
+ private string networkType;
+ private Int32 mtu;
+ private bool dhcp;
+ private bool bridge;
+ private bool broadcastEnabled;
+ private Int32 portError;
+ private Int32 netconfRevision;
+ private string[] assignedAddresses;
+ private NetworkRoute[] routes;
+ private string deviceName;
+ private bool allowManaged;
+ private bool allowGlobal;
+ private bool allowDefault;
+ private bool isConnected;
+
+ protected ZeroTierNetwork(SerializationInfo info, StreamingContext ctx)
+ {
+ try
+ {
+ NetworkId = info.GetString("nwid");
+ MacAddress = info.GetString("mac");
+ NetworkName = info.GetString("name");
+ NetworkStatus = info.GetString("status");
+ NetworkType = info.GetString("type");
+ MTU = info.GetInt32("mtu");
+ DHCP = info.GetBoolean("dhcp");
+ Bridge = info.GetBoolean("bridge");
+ BroadcastEnabled = info.GetBoolean("broadcastEnabled");
+ PortError = info.GetInt32("portError");
+ NetconfRevision = info.GetInt32("netconfRevision");
+ AssignedAddresses = (string[])info.GetValue("assignedAddresses", typeof(string[]));
+ Routes = (NetworkRoute[])info.GetValue("routes", typeof(NetworkRoute[]));
+ DeviceName = info.GetString("portDeviceName");
+ AllowManaged = info.GetBoolean("allowManaged");
+ AllowGlobal = info.GetBoolean("allowGlobal");
+ AllowDefault = info.GetBoolean("allowDefault");
+ }
+ catch { }
+ IsConnected = false;
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ public virtual void GetObjectData(SerializationInfo info, StreamingContext ctx)
+ {
+ info.AddValue("nwid", NetworkId);
+ info.AddValue("mac", MacAddress);
+ info.AddValue("name", NetworkName);
+ info.AddValue("status", NetworkStatus);
+ info.AddValue("type", NetworkType);
+ info.AddValue("mtu", MTU);
+ info.AddValue("dhcp", DHCP);
+ info.AddValue("bridge", Bridge);
+ info.AddValue("broadcastEnabled", BroadcastEnabled);
+ info.AddValue("portError", PortError);
+ info.AddValue("netconfRevision", NetconfRevision);
+ info.AddValue("assignedAddresses", AssignedAddresses);
+ info.AddValue("routes", Routes);
+ info.AddValue("portDeviceName", DeviceName);
+ info.AddValue("allowManaged", AllowManaged);
+ info.AddValue("allowGlobal", AllowGlobal);
+ info.AddValue("allowDefault", AllowDefault);
+ }
+
+ public void UpdateNetwork(ZeroTierNetwork network)
+ {
+ if (network == null)
+ return;
+
+ if (!NetworkId.Equals(network.NetworkId))
+ {
+ NetworkId = network.NetworkId;
+ }
+
+ if (!MacAddress.Equals(network.MacAddress))
+ {
+ MacAddress = network.MacAddress;
+ }
+
+ if (!NetworkName.Equals(network.NetworkName))
+ {
+ NetworkName = network.NetworkName;
+ }
+
+ if (!NetworkStatus.Equals(network.NetworkStatus))
+ {
+ NetworkStatus = network.NetworkStatus;
+ }
+
+ if (!NetworkType.Equals(network.NetworkType))
+ {
+ NetworkType = network.NetworkType;
+ }
+
+ if (MTU != network.MTU)
+ {
+ MTU = network.MTU;
+ }
+
+ if (DHCP != network.DHCP)
+ {
+ DHCP = network.DHCP;
+ }
+
+ if (Bridge != network.Bridge)
+ {
+ Bridge = network.Bridge;
+ }
+
+ if (BroadcastEnabled != network.BroadcastEnabled)
+ {
+ BroadcastEnabled = network.BroadcastEnabled;
+ }
+
+ if (PortError != network.PortError)
+ {
+ PortError = network.PortError;
+ }
+
+ if (NetconfRevision != network.NetconfRevision)
+ {
+ NetconfRevision = network.NetconfRevision;
+ }
+
+ AssignedAddresses = network.AssignedAddresses;
+
+ Routes = network.Routes;
+
+ if (!DeviceName.Equals(network.DeviceName))
+ {
+ DeviceName = network.DeviceName;
+ }
+
+ if (AllowManaged != network.AllowManaged)
+ {
+ AllowManaged = network.AllowManaged;
+ }
+
+ if (AllowGlobal != network.AllowGlobal)
+ {
+ AllowGlobal = network.AllowGlobal;
+ }
+
+ if (AllowDefault != network.AllowDefault)
+ {
+ AllowDefault = network.AllowDefault;
+ }
+
+ if (IsConnected != network.IsConnected)
+ {
+ IsConnected = network.IsConnected;
+ }
+ }
+
+ protected void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+
[JsonProperty("nwid")]
- public string NetworkId { get; set; }
+ public string NetworkId {
+ get
+ {
+ return networkId;
+ }
+ set
+ {
+ networkId = value;
+ NotifyPropertyChanged();
+ }
+ }
[JsonProperty("mac")]
- public string MacAddress { get; set; }
+ public string MacAddress
+ {
+ get
+ {
+ return macAddress;
+ }
+ set
+ {
+ macAddress = value;
+ NotifyPropertyChanged();
+ }
+ }
[JsonProperty("name")]
- public string NetworkName { get; set; }
+ public string NetworkName
+ {
+ get
+ {
+ return networkName;
+ }
+ set
+ {
+ networkName = value;
+ NotifyPropertyChanged();
+ }
+ }
[JsonProperty("status")]
- public string NetworkStatus { get; set; }
+ public string NetworkStatus
+ {
+ get
+ {
+ return networkStatus;
+ }
+ set
+ {
+ networkStatus = value;
+ NotifyPropertyChanged();
+ }
+
+ }
[JsonProperty("type")]
- public string NetworkType { get; set; }
+ public string NetworkType
+ {
+ get
+ {
+ return networkType;
+ }
+ set
+ {
+ networkType = value;
+ NotifyPropertyChanged();
+ }
+ }
[JsonProperty("mtu")]
- public int MTU { get; set; }
+ public int MTU
+ {
+ get
+ {
+ return mtu;
+ }
+ set
+ {
+ mtu = value;
+ NotifyPropertyChanged();
+ }
+ }
[JsonProperty("dhcp")]
- public bool DHCP { get; set; }
+ public bool DHCP
+ {
+ get
+ {
+ return dhcp;
+ }
+ set
+ {
+ dhcp = value;
+ NotifyPropertyChanged();
+ }
+ }
[JsonProperty("bridge")]
- public bool Bridge { get; set ; }
+ public bool Bridge
+ {
+ get
+ {
+ return bridge;
+ }
+ set
+ {
+ bridge = value;
+ NotifyPropertyChanged();
+ }
+ }
[JsonProperty("broadcastEnabled")]
- public bool BroadcastEnabled { get ; set; }
+ public bool BroadcastEnabled
+ {
+ get
+ {
+ return broadcastEnabled;
+ }
+ set
+ {
+ broadcastEnabled = value;
+ NotifyPropertyChanged();
+ }
+ }
[JsonProperty("portError")]
- public int PortError { get; set; }
+ public int PortError
+ {
+ get
+ {
+ return portError;
+ }
+ set
+ {
+ portError = value;
+ NotifyPropertyChanged();
+ }
+ }
[JsonProperty("netconfRevision")]
- public int NetconfRevision { get; set; }
-
- [JsonProperty("multicastSubscriptions")]
- public string[] MulticastSubscriptions { get; set; }
+ public int NetconfRevision
+ {
+ get
+ {
+ return netconfRevision;
+ }
+ set
+ {
+ netconfRevision = value;
+ NotifyPropertyChanged();
+ }
+ }
[JsonProperty("assignedAddresses")]
- public string[] AssignedAddresses { get; set; }
+ public string[] AssignedAddresses
+ {
+ get
+ {
+ return assignedAddresses;
+ }
+ set
+ {
+ assignedAddresses = value;
+ NotifyPropertyChanged();
+ }
+ }
+
+ [JsonProperty("routes")]
+ public NetworkRoute[] Routes
+ {
+ get
+ {
+ return routes;
+ }
+ set
+ {
+ routes = value;
+ NotifyPropertyChanged();
+ }
+ }
[JsonProperty("portDeviceName")]
- public string DeviceName { get; set; }
+ public string DeviceName
+ {
+ get
+ {
+ return deviceName;
+ }
+ set
+ {
+ deviceName = value;
+ NotifyPropertyChanged();
+ }
+ }
+
+ [JsonProperty("allowManaged")]
+ public bool AllowManaged
+ {
+ get
+ {
+ return allowManaged;
+ }
+ set
+ {
+ allowManaged = value;
+ NotifyPropertyChanged();
+ }
+ }
+
+ [JsonProperty("allowGlobal")]
+ public bool AllowGlobal
+ {
+ get
+ {
+ return allowGlobal;
+ }
+ set
+ {
+ allowGlobal = value;
+ NotifyPropertyChanged();
+ }
+ }
+
+ [JsonProperty("allowDefault")]
+ public bool AllowDefault
+ {
+ get
+ {
+ return allowDefault;
+ }
+ set
+ {
+ allowDefault = value;
+ NotifyPropertyChanged();
+ }
+ }
+
+ public bool IsConnected
+ {
+ get
+ {
+ return isConnected;
+ }
+ set
+ {
+ isConnected = value;
+ NotifyPropertyChanged();
+ }
+ }
+
+ public String Title
+ {
+ get
+ {
+
+ if (NetworkName != null && NetworkName.Length > 0)
+ {
+ return NetworkId + " (" + NetworkName + ")";
+ }
+ else
+ {
+ return NetworkId;
+ }
+ }
+ }
+
+ public bool Equals(ZeroTierNetwork network)
+ {
+ if (NetworkId == null || network == null)
+ return false;
+
+ return NetworkId.Equals(network.NetworkId);
+ }
+
+ public int CompareTo(ZeroTierNetwork network)
+ {
+ if (NetworkId == null || network == null)
+ return -1;
+
+ UInt64 thisNwid = UInt64.Parse(NetworkId, System.Globalization.NumberStyles.HexNumber);
+ UInt64 otherNwid = UInt64.Parse(network.NetworkId, System.Globalization.NumberStyles.HexNumber);
+
+ if (thisNwid > otherNwid)
+ {
+ return 1;
+ }
+ else if (thisNwid < otherNwid)
+ {
+ return -1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ }
+
+ public class NetworkEqualityComparer : IEqualityComparer<ZeroTierNetwork>
+ {
+ public bool Equals(ZeroTierNetwork lhs, ZeroTierNetwork rhs)
+ {
+ if (lhs.NetworkId.Equals(rhs.NetworkId))
+ {
+ lhs.UpdateNetwork(rhs);
+ return true;
+ }
+ return false;
+ }
+
+ public int GetHashCode(ZeroTierNetwork obj)
+ {
+ return obj.NetworkId.GetHashCode();
+ }
}
}