From 7b86176d0ea2cd307ff5dd3570e822cb8bd2436b Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 4 Nov 2015 18:28:07 -0800 Subject: Don't go kaboom when the ZeroTier service isn't running. --- windows/WinUI/APIHandler.cs | 140 +++++++++++++++++++++++++++++++------------- 1 file changed, 98 insertions(+), 42 deletions(-) (limited to 'windows/WinUI/APIHandler.cs') diff --git a/windows/WinUI/APIHandler.cs b/windows/WinUI/APIHandler.cs index 8e7408a5..ada7369a 100644 --- a/windows/WinUI/APIHandler.cs +++ b/windows/WinUI/APIHandler.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using System.Net; using System.IO; +using System.Windows; using Newtonsoft.Json; namespace WinUI @@ -36,21 +37,32 @@ namespace WinUI request.ContentType = "application/json"; } - var httpResponse = (HttpWebResponse)request.GetResponse(); - using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) + try { - var responseText = streamReader.ReadToEnd(); - - ZeroTierStatus status = null; - try - { - status = JsonConvert.DeserializeObject(responseText); - } - catch (JsonReaderException e) + var httpResponse = (HttpWebResponse)request.GetResponse(); + using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { - Console.WriteLine(e.ToString()); + var responseText = streamReader.ReadToEnd(); + + ZeroTierStatus status = null; + try + { + status = JsonConvert.DeserializeObject(responseText); + } + catch (JsonReaderException e) + { + Console.WriteLine(e.ToString()); + } + return status; } - return status; + } + catch (System.Net.Sockets.SocketException) + { + return null; + } + catch (System.Net.WebException) + { + return null; } } @@ -65,21 +77,32 @@ namespace WinUI request.Method = "GET"; request.ContentType = "application/json"; - var httpResponse = (HttpWebResponse)request.GetResponse(); - using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) + try { - var responseText = streamReader.ReadToEnd(); - - List networkList = null; - try + var httpResponse = (HttpWebResponse)request.GetResponse(); + using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { - networkList = JsonConvert.DeserializeObject>(responseText); + var responseText = streamReader.ReadToEnd(); + + List networkList = null; + try + { + networkList = JsonConvert.DeserializeObject>(responseText); + } + catch (JsonReaderException e) + { + Console.WriteLine(e.ToString()); + } + return networkList; } - catch (JsonReaderException e) - { - Console.WriteLine(e.ToString()); - } - return networkList; + } + catch (System.Net.Sockets.SocketException) + { + return null; + } + catch (System.Net.WebException) + { + return null; } } @@ -93,11 +116,22 @@ namespace WinUI request.Method = "POST"; - var httpResponse = (HttpWebResponse)request.GetResponse(); + try + { + var httpResponse = (HttpWebResponse)request.GetResponse(); - if (httpResponse.StatusCode != HttpStatusCode.OK) + if (httpResponse.StatusCode != HttpStatusCode.OK) + { + Console.WriteLine("Error sending join network message"); + } + } + catch (System.Net.Sockets.SocketException) { - Console.WriteLine("Error sending join network message"); + MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service."); + } + catch (System.Net.WebException) + { + MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service."); } } @@ -111,11 +145,22 @@ namespace WinUI request.Method = "DELETE"; - var httpResponse = (HttpWebResponse)request.GetResponse(); + try + { + var httpResponse = (HttpWebResponse)request.GetResponse(); - if (httpResponse.StatusCode != HttpStatusCode.OK) + if (httpResponse.StatusCode != HttpStatusCode.OK) + { + Console.WriteLine("Error sending leave network message"); + } + } + catch (System.Net.Sockets.SocketException) + { + MessageBox.Show("Error Leaving Network: Cannot connect to ZeroTier service."); + } + catch (System.Net.WebException) { - Console.WriteLine("Error sending leave network message"); + MessageBox.Show("Error Leaving Network: Cannot connect to ZeroTier service."); } } @@ -130,21 +175,32 @@ namespace WinUI request.Method = "GET"; request.ContentType = "application/json"; - var httpResponse = (HttpWebResponse)request.GetResponse(); - using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) + try { - var responseText = streamReader.ReadToEnd(); - - List peerList = null; - try - { - peerList = JsonConvert.DeserializeObject>(responseText); - } - catch (JsonReaderException e) + var httpResponse = (HttpWebResponse)request.GetResponse(); + using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { - Console.WriteLine(e.ToString()); + var responseText = streamReader.ReadToEnd(); + + List peerList = null; + try + { + peerList = JsonConvert.DeserializeObject>(responseText); + } + catch (JsonReaderException e) + { + Console.WriteLine(e.ToString()); + } + return peerList; } - return peerList; + } + catch (System.Net.Sockets.SocketException) + { + return null; + } + catch (System.Net.WebException) + { + return null; } } } -- cgit v1.2.3 From df74dd6e41007b55ca879967092ab59af4c3a279 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 4 Nov 2015 20:03:25 -0800 Subject: make the peers page prettier --- windows/WinUI/APIHandler.cs | 2 +- windows/WinUI/MainWindow.xaml | 16 ++++++++++++++++ windows/WinUI/PeersPage.xaml | 11 +++++++++-- windows/WinUI/ZeroTierPeer.cs | 36 ++++++++++++++++++++++++++++++++++-- 4 files changed, 60 insertions(+), 5 deletions(-) (limited to 'windows/WinUI/APIHandler.cs') diff --git a/windows/WinUI/APIHandler.cs b/windows/WinUI/APIHandler.cs index ada7369a..2968c963 100644 --- a/windows/WinUI/APIHandler.cs +++ b/windows/WinUI/APIHandler.cs @@ -181,7 +181,7 @@ namespace WinUI using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); - + //Console.WriteLine(responseText); List peerList = null; try { diff --git a/windows/WinUI/MainWindow.xaml b/windows/WinUI/MainWindow.xaml index b5365a37..660cbd9b 100644 --- a/windows/WinUI/MainWindow.xaml +++ b/windows/WinUI/MainWindow.xaml @@ -19,7 +19,23 @@ + + + + + @@ -13,7 +20,7 @@ - + diff --git a/windows/WinUI/ZeroTierPeer.cs b/windows/WinUI/ZeroTierPeer.cs index 3153f7e2..06a8896b 100644 --- a/windows/WinUI/ZeroTierPeer.cs +++ b/windows/WinUI/ZeroTierPeer.cs @@ -12,11 +12,43 @@ namespace WinUI [JsonProperty("address")] public string Address { get; set; } + private Int64 _lastUnicast; [JsonProperty("lastUnicastFrame")] - public UInt64 LastUnicastFrame { get; set; } + public Int64 LastUnicastFrame + { + get + { + if (_lastUnicast == 0) + return 0; + + TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1); + Int64 millisecondsSinceEpoch = (Int64)t.TotalMilliseconds; + return (millisecondsSinceEpoch - _lastUnicast) / 1000; + } + set + { + _lastUnicast = value; + } + } + private Int64 _lastMulticast; [JsonProperty("lastMulticastFrame")] - public UInt64 LastMulticastFrame { get; set; } + public Int64 LastMulticastFrame + { + get + { + if (_lastMulticast == 0) + return 0; + + TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1); + Int64 millisecondsSinceEpoch = (Int64)t.TotalMilliseconds; + return (millisecondsSinceEpoch - _lastMulticast) / 1000; + } + set + { + _lastMulticast = value; + } + } [JsonProperty("versionMajor")] public int VersionMajor { get; set; } -- cgit v1.2.3 From 86c74d8a65ae45d6ff0433da7d4d4acb6cba8fcb Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 4 Nov 2015 20:34:49 -0800 Subject: set manifest to require administrator privileges and read the authtoken and port from disk --- windows/WinUI/APIHandler.cs | 7 +++-- windows/WinUI/MainWindow.xaml.cs | 66 ++++++++++++++++++++++++++++++++-------- windows/WinUI/WinUI.csproj | 4 +++ windows/WinUI/app.manifest | 55 +++++++++++++++++++++++++++++++++ 4 files changed, 117 insertions(+), 15 deletions(-) create mode 100644 windows/WinUI/app.manifest (limited to 'windows/WinUI/APIHandler.cs') diff --git a/windows/WinUI/APIHandler.cs b/windows/WinUI/APIHandler.cs index 2968c963..92b83021 100644 --- a/windows/WinUI/APIHandler.cs +++ b/windows/WinUI/APIHandler.cs @@ -14,7 +14,7 @@ namespace WinUI public class APIHandler { - static string authtoken = "p3ptrzds5jkr2hbx5ipbyf04"; // delete me! + private string authtoken; private string url = null; @@ -23,9 +23,10 @@ namespace WinUI url = "http://127.0.0.1:9993"; } - public APIHandler(string host, int port) + public APIHandler(int port, string authtoken) { - url = "http://" + host + ":" + port; + url = "http://localhost:" + port; + this.authtoken = authtoken; } public ZeroTierStatus GetStatus() diff --git a/windows/WinUI/MainWindow.xaml.cs b/windows/WinUI/MainWindow.xaml.cs index 103165b3..535cb386 100644 --- a/windows/WinUI/MainWindow.xaml.cs +++ b/windows/WinUI/MainWindow.xaml.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -23,7 +24,7 @@ namespace WinUI /// public partial class MainWindow : Window { - APIHandler handler = new APIHandler(); + APIHandler handler; Regex charRegex = new Regex("[0-9a-fxA-FX]"); Regex wholeStringRegex = new Regex("^[0-9a-fxA-FX]+$"); @@ -35,22 +36,63 @@ namespace WinUI { InitializeComponent(); - networksPage.SetAPIHandler(handler); - - updateStatus(); - if (!connected) + if (InitAPIHandler()) { - MessageBox.Show("Unable to connect to ZeroTier Service."); + networksPage.SetAPIHandler(handler); + + updateStatus(); + if (!connected) + { + MessageBox.Show("Unable to connect to ZeroTier Service."); + } + + updateNetworks(); + updatePeers(); + + DataObject.AddPastingHandler(joinNetworkID, OnPaste); + + timer.Elapsed += new ElapsedEventHandler(OnUpdateTimer); + timer.Interval = 2000; + timer.Enabled = true; } + } - updateNetworks(); - updatePeers(); + private bool InitAPIHandler() + { + String ztDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\ZeroTier\\One"; + String authToken = ""; + Int32 port = 9993; + try + { + byte[] tmp = File.ReadAllBytes(ztDir + "\\authtoken.secret"); + authToken = System.Text.Encoding.ASCII.GetString(tmp).Trim(); + } + catch + { + MessageBox.Show("Unable to read ZeroTier One authtoken.secret from:\r\n" + ztDir, "ZeroTier One"); + this.Close(); + return false; + } - DataObject.AddPastingHandler(joinNetworkID, OnPaste); + if ((authToken == null) || (authToken.Length <= 0)) + { + MessageBox.Show("Unable to read ZeroTier One authtoken.secret from:\r\n" + ztDir, "ZeroTier One"); + this.Close(); + return false; + } + try + { + byte[] tmp = File.ReadAllBytes(ztDir + "\\zerotier-one.port"); + port = Int32.Parse(System.Text.Encoding.ASCII.GetString(tmp).Trim()); + if ((port <= 0) || (port > 65535)) + port = 9993; + } + catch + { + } - timer.Elapsed += new ElapsedEventHandler(OnUpdateTimer); - timer.Interval = 2000; - timer.Enabled = true; + handler = new APIHandler(port, authToken); + return true; } private void updateStatus() diff --git a/windows/WinUI/WinUI.csproj b/windows/WinUI/WinUI.csproj index 5ebfedcf..c3eeaba4 100644 --- a/windows/WinUI/WinUI.csproj +++ b/windows/WinUI/WinUI.csproj @@ -63,6 +63,9 @@ false + + app.manifest + @@ -161,6 +164,7 @@ ResXFileCodeGenerator Resources.Designer.cs + SettingsSingleFileGenerator diff --git a/windows/WinUI/app.manifest b/windows/WinUI/app.manifest new file mode 100644 index 00000000..b537bf49 --- /dev/null +++ b/windows/WinUI/app.manifest @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3