/// <summary> /// Sends the request to join a network /// </summary> /// <param name="nwid">Hexadecimal Network ID</param> /// <param name="allowManaged">Specify if it's managed</param> /// <param name="allowGlobal">Specify if it's global</param> /// <param name="allowDefault">Specify if it's allowed to be the default route</param> public void JoinNetwork(string nwid, bool allowManaged = true, bool allowGlobal = false, bool allowDefault = false) { Task.Factory.StartNew(() => { var request = WebRequest.Create(url + "/network/" + nwid + "?auth=" + authtoken) as HttpWebRequest; if (request == null) { return; } request.Method = "POST"; request.ContentType = "applicaiton/json"; request.Timeout = 30000; try { using (var streamWriter = new StreamWriter(((HttpWebRequest)request).GetRequestStream())) { string json = "{\"allowManaged\":" + (allowManaged ? "true" : "false") + "," + "\"allowGlobal\":" + (allowGlobal ? "true" : "false") + "," + "\"allowDefault\":" + (allowDefault ? "true" : "false") + "}"; streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } } catch (System.Net.WebException) { throw new LibZeroTierException("Error Joining Network: Cannot connect to ZeroTier service."); } try { var httpResponse = (HttpWebResponse)request.GetResponse(); if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) { APIHandler.initHandler(true); } else if (httpResponse.StatusCode != HttpStatusCode.OK) { Console.WriteLine("Error sending join network message"); } } catch (System.Net.Sockets.SocketException) { throw new LibZeroTierException("Error Joining Network: Cannot connect to ZeroTier service."); } catch (System.Net.WebException e) { HttpWebResponse res = (HttpWebResponse)e.Response; if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) { APIHandler.initHandler(true); } throw new LibZeroTierException("Error Joining Network: Cannot connect to ZeroTier service."); } }); }
/// <summary> /// Leaves a specified network /// </summary> /// <param name="nwid">Hexadecimal network ID</param> public void LeaveNetwork(string nwid) { Task.Factory.StartNew(() => { var request = WebRequest.Create(url + "/network/" + nwid + "?auth=" + authtoken) as HttpWebRequest; if (request == null) { return; } request.Method = "DELETE"; request.Timeout = 30000; try { var httpResponse = (HttpWebResponse)request.GetResponse(); if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) { APIHandler.initHandler(true); } else if (httpResponse.StatusCode != HttpStatusCode.OK) { Console.WriteLine("Error sending leave network message"); } } catch (System.Net.Sockets.SocketException) { throw new LibZeroTierException("Error Leaving Network: Cannot connect to ZeroTier service."); } catch (System.Net.WebException e) { HttpWebResponse res = (HttpWebResponse)e.Response; if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) { APIHandler.initHandler(true); } throw new LibZeroTierException("Error Leaving Network: Cannot connect to ZeroTier service."); } catch { Console.WriteLine("Error leaving network: Unknown error"); } }); }
/// <summary> /// Returns the current networks you're connected to. /// </summary> /// <returns>List of ZeroTierNetwork objects</returns> public List<ZeroTierNetwork> GetNetworks() { var request = WebRequest.Create(url + "/network" + "?auth=" + authtoken) as HttpWebRequest; if (request == null) { throw new LibZeroTierException("ZeroTier Request Response Empty"); } request.Method = "GET"; request.ContentType = "application/json"; request.Timeout = 10000; try { var httpResponse = (HttpWebResponse)request.GetResponse(); if (httpResponse.StatusCode == HttpStatusCode.OK) { using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); List<ZeroTierNetwork> networkList = null; try { networkList = JsonConvert.DeserializeObject<List<ZeroTierNetwork>>(responseText); foreach (ZeroTierNetwork n in networkList) { // all networks received via JSON are connected by definition n.IsConnected = true; } } catch (JsonReaderException e) { Console.WriteLine(e.ToString()); } return networkList; } } else if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) { APIHandler.initHandler(true); } } catch (System.Net.Sockets.SocketException) { throw new LibZeroTierException("ZeroTier Request Response Empty"); } catch (System.Net.WebException e) { HttpWebResponse res = (HttpWebResponse)e.Response; if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) { APIHandler.initHandler(true); } else { throw new LibZeroTierException("ZeroTier Request Response Empty"); } } return null; }
/// <summary> /// Gets the status response from the ZeroTier service. /// </summary> /// <returns></returns> public ZeroTierStatus GetStatus() { var request = WebRequest.Create(url + "/status" + "?auth=" + authtoken) as HttpWebRequest; request.Headers.Add("X-ZT1-Auth",authtoken); if (request != null) { request.Method = "GET"; request.ContentType = "application/json"; } try { var httpResponse = (HttpWebResponse)request.GetResponse(); if (httpResponse.StatusCode == HttpStatusCode.OK) { using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); ZeroTierStatus status = null; try { status = JsonConvert.DeserializeObject<ZeroTierStatus>(responseText); if (ZeroTierAddress != status.Address) { ZeroTierAddress = status.Address; } } catch (JsonReaderException e) { Console.WriteLine(e.ToString()); } return status; } } else if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) { APIHandler.initHandler(true); return null; } } catch (System.Net.Sockets.SocketException ex) { throw new LibZeroTierException("ZeroTier Exception:", ex); } catch (System.Net.WebException e) { HttpWebResponse res = (HttpWebResponse)e.Response; if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) { APIHandler.initHandler(true); return null; } else { throw new LibZeroTierException("ZeroTier Exception:", e); } } return null; }