diff options
Diffstat (limited to 'windows/WinUI/ZeroTierNetwork.cs')
-rw-r--r-- | windows/WinUI/ZeroTierNetwork.cs | 474 |
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(); + } } } |