コード例 #1
1
ファイル: PointProvider.cs プロジェクト: rickparrish/PDDNS
        public override void Update(HostConfig HC, IPAddress ipAddress)
        {
            if (HC == null) throw new ArgumentNullException("HC");
            if (ipAddress == null) throw new ArgumentNullException("ipAddress");

            using (RMWebClient WC = new RMWebClient())
            {
                WC.ContentType = "application/xml";
                WC.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(HC.Username + ":" + HC.Password.GetPlainText()));
                WC.Headers["Accept"] = "application/xml";
                WC.UseDefaultCredentials = false;

                try
                {
                    string Url = "https://pointhq.com";
                    Url += "/zones/" + HC.ProviderSpecificSettings[HostConfig.POINT_ZONE_ID];
                    Url += "/records/" + HC.ProviderSpecificSettings[HostConfig.POINT_RECORD_ID];

                    string ResponseText = WC.UploadString(Url, "PUT", "<zone-record><data>" + ipAddress.ToString() + "</data><ttl type=\"integer\">60</ttl></zone-record>").Trim();
                    if (!ResponseText.Contains(ipAddress.ToString()))
                    {
                        HC.Disabled = true;
                        HC.DisabledReason = "Reason not known.";
                        HC.Save();

                        Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason);
                    }
                }
                catch (WebException wex)
                {
                    HC.Disabled = true;
                    switch (((HttpWebResponse)wex.Response).StatusCode)
                    {
                        case HttpStatusCode.Forbidden: HC.DisabledReason = "Current user does not have access to requested resource."; break;
                        case HttpStatusCode.NotFound: HC.DisabledReason = "Record not found."; break;
                        default: HC.DisabledReason = "An unknown response code was received: \"" + ((HttpWebResponse)wex.Response).StatusCode + "\""; break;
                    }
                    HC.Save();

                    Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason);
                }
                catch (Exception ex)
                {
                    HC.Disabled = true;
                    HC.DisabledReason = "Unhandled exception (" + ex.Message + ")";
                    HC.Save();

                    Logging.instance.LogException("Unable to update host \"" + HC.Hostname + "\"", ex);
                }
            }
        }
コード例 #2
0
ファイル: AddPointForm.cs プロジェクト: rickparrish/PDDNS
        void cmdRetrieve_Click(object sender, EventArgs e)
        {
            if (!Dialog.ValidateIsEmailAddress(txtEmailAddress)) return;
            if (!Dialog.ValidateIsNotEmpty(txtAPIKey)) return;

            lvZoneRecords.Items.Clear();

            using (RMWebClient WC = new RMWebClient())
            {
                WC.ContentType = "application/xml";
                WC.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(txtEmailAddress.Text.Trim() + ":" + txtAPIKey.Text.Trim()));
                WC.Headers["Accept"] = "application/xml";
                WC.UseDefaultCredentials = false;

                // Get all zones
                try
                {
                    string ZonesXml = WC.DownloadString("https://pointhq.com/zones");
                    XmlSerializer XS = new XmlSerializer(typeof(Point.zones));
                    Point.zones Zones = null;
                    using (TextReader TR = new StringReader(ZonesXml))
                    {
                        Zones = (Point.zones)XS.Deserialize(TR);
                    }

                    // Now get all records for each zone
                    foreach (Point.zonesZone Zone in Zones.zone)
                    {
                        string ZoneRecordsXml = WC.DownloadString("https://pointhq.com/zones/" + Zone.id.ToString() + "/records");
                        XS = new XmlSerializer(typeof(Point.zonerecords));
                        Point.zonerecords ZoneRecords = null;
                        using (TextReader TR = new StringReader(ZoneRecordsXml))
                        {
                            ZoneRecords = (Point.zonerecords)XS.Deserialize(TR);
                        }

                        foreach (Point.zonerecordsZonerecord ZoneRecord in ZoneRecords.zonerecord)
                        {
                            if (ZoneRecord.recordtype.ToUpper() == "A")
                            {
                                ListViewItem LVI = new ListViewItem(ZoneRecord.name.TrimEnd('.'));
                                LVI.SubItems.Add(ZoneRecord.zoneid.ToString());
                                LVI.SubItems.Add(ZoneRecord.id.ToString());
                                lvZoneRecords.Items.Add(LVI);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logging.instance.LogException("Error retrieving Point zone records", ex);
                    Dialog.Error("Error retrieving hostnames:\r\n\r\n" + ex.Message, "Error");
                }
            }
        }
コード例 #3
0
ファイル: UPnP.cs プロジェクト: Samotron/RMLib
        private static string GetServiceUrl(string descriptionUrl)
        {
            // Download description file from router
            string ResponseText = "";

            using (RMWebClient WC = new RMWebClient())
            {
                WC.Timeout   = 5000;
                ResponseText = WC.DownloadString(descriptionUrl);
            }

            // Load xml into parser
            XmlDocument XmlDoc = new XmlDocument();

            XmlDoc.LoadXml(ResponseText);

            // Add namespace
            XmlNamespaceManager NSManager = new XmlNamespaceManager(XmlDoc.NameTable);

            NSManager.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0");

            // Find deviceType node and ensure it's an internet gateway device
            XmlNode DeviceTypeNode = XmlDoc.SelectSingleNode("//tns:device/tns:deviceType/text()", NSManager);

            if (!DeviceTypeNode.Value.ToLower().Contains("internetgatewaydevice"))
            {
                return(null);
            }

            // Find controlURL node
            XmlNode ControlUrlNode = XmlDoc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANIPConnection:1\"]/tns:controlURL/text()", NSManager);

            if (ControlUrlNode == null)
            {
                _WANPPP        = true;
                ControlUrlNode = XmlDoc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANPPPConnection:1\"]/tns:controlURL/text()", NSManager);
                if (ControlUrlNode == null)
                {
                    return(null);
                }
            }

            // Return the path to the service url
            string BaseUrl = descriptionUrl.Substring(7);         // Trim http://

            BaseUrl = BaseUrl.Substring(0, BaseUrl.IndexOf("/")); // Trim everything after first /
            if (ControlUrlNode.Value.StartsWith("/"))
            {
                return("http://" + BaseUrl + ControlUrlNode.Value);
            }
            else
            {
                return("http://" + BaseUrl + "/" + ControlUrlNode.Value);
            }
        }
コード例 #4
0
ファイル: WebUtils.cs プロジェクト: Robin--/RMLib
 static public string HttpGet(string url)
 {
     try
     {
         using (RMWebClient WC = new RMWebClient())
         {
             return(WC.DownloadString(url));
         }
     }
     catch (Exception)
     {
         return(string.Empty);
     }
 }
コード例 #5
0
ファイル: UPnP.cs プロジェクト: Samotron/RMLib
        private static IPAddress GetExternalIPAddress(string serviceUrl)
        {
            string RequestText = "<?xml version=\"1.0\"?>" +
                                 "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" +
                                 "<s:Body>" +
                                 "<u:GetExternalIPAddress xmlns:u=\"urn:schemas-upnp-org:service:WAN" + (_WANPPP ? "PPP" : "IP") + "Connection:1\"></u:GetExternalIPAddress>" +
                                 "</s:Body>" +
                                 "</s:Envelope>";

            byte[] RequestBytes = Encoding.ASCII.GetBytes(RequestText);

            // Request the router tell us the external ip
            byte[] ResponseBytes = null;
            string ResponseText  = null;

            using (RMWebClient WC = new RMWebClient())
            {
                WC.ContentType = "text/xml; charset=\"utf-8\"";
                WC.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:WAN" + (_WANPPP ? "PPP" : "IP") + "Connection:1#GetExternalIPAddress\"");
                WC.Timeout    = 5000;
                ResponseBytes = WC.UploadData(serviceUrl, RequestBytes);
                ResponseText  = Encoding.ASCII.GetString(ResponseBytes);
            }

            // Load xml into parser
            XmlDocument XmlDoc = new XmlDocument();

            XmlDoc.LoadXml(ResponseText);

            // Add namespace
            XmlNamespaceManager NSManager = new XmlNamespaceManager(XmlDoc.NameTable);

            NSManager.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0");

            // Get IP
            string IP = XmlDoc.SelectSingleNode("//NewExternalIPAddress/text()", NSManager).Value;

            // Return if it's valid
            IPAddress Result = null;

            if (IPAddress.TryParse(IP, out Result) && !WebUtils.IsPrivateIP(Result))
            {
                return(Result);
            }
            else
            {
                return(IPAddress.None);
            }
        }
コード例 #6
0
ファイル: WebUtils.cs プロジェクト: Robin--/RMLib
        public static IPAddress GetExternalIPv4ByHttp(int port)
        {
            using (RMWebClient WC = new RMWebClient())
            {
                WC.Timeout = 5000;
                string IP = WC.DownloadString("http://www.randm.ca:" + port.ToString() + "/whats-my-ip.php");

                // Return if it's valid
                IPAddress Result = IPAddress.None;
                if (IPAddress.TryParse(IP, out Result) && !WebUtils.IsPrivateIP(Result))
                {
                    return(Result);
                }
            }

            return(IPAddress.None);
        }
コード例 #7
0
ファイル: NoIPProvider.cs プロジェクト: rickparrish/PDDNS
        public override void Update(HostConfig HC, IPAddress ipAddress)
        {
            if (HC == null) throw new ArgumentNullException("HC");
            if (ipAddress == null) throw new ArgumentNullException("ipAddress");

            using (RMWebClient WC = new RMWebClient())
            {
                WC.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(HC.Username + ":" + HC.Password.GetPlainText()));
                WC.UseDefaultCredentials = false;
                WC.UserAgent = ProcessUtils.CompanyName + " " + ProcessUtils.ProductName + "/" + ProcessUtils.ProductVersion + " [email protected]";

                string Url = "https://dynupdate.no-ip.com/nic/update";
                Url += "?hostname=" + Uri.EscapeDataString(HC.Hostname);
                Url += "&myip=" + ipAddress.ToString();

                string ResponseText = WC.DownloadString(Url).Trim().ToLower();
                if (ResponseText.Contains(ipAddress.ToString()))
                {
                    if (ResponseText.Contains("nochg"))
                    {
                        Logging.instance.LogWarning("Host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + ") successfully updated, but returned NOCHG response.  Too many of these could cause your account to be banned by the provider.");
                    }
                }
                else
                {
                    HC.Disabled = true;
                    switch (ResponseText)
                    {
                        case "nohost": HC.DisabledReason = "Hostname supplied does not exist under specified account"; break;
                        case "badauth": HC.DisabledReason = "Invalid username password combination"; break;
                        case "badagent": HC.DisabledReason = "Client disabled."; break;
                        case "!donator": HC.DisabledReason = "An update request was sent including a feature that is not available to that particular user such as offline options."; break;
                        case "abuse": HC.DisabledReason = "Username is blocked due to abuse. Either for not following our update specifications or disabled due to violation of the No-IP terms of service."; break;
                        case "911":
                            Logging.instance.LogWarning("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): A fatal error on the provider's side such as a database outage.  Will retry in 1 hour.");
                            return;
                        default: HC.DisabledReason = "An unknown response code was received: \"" + ResponseText + "\""; break;
                    }
                    HC.Save();

                    Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason);
                }
            }
        }
コード例 #8
0
        public override IPAddress[] GetRemoteIPs(HostConfig HC)
        {
            if (HC == null) throw new ArgumentNullException("HC");

            using (RMWebClient WC = new RMWebClient())
            {
                try
                {
                    NameValueCollection Params = new NameValueCollection();
                    Params.Add("a", "rec_load_all");
                    Params.Add("email", HC.Username);
                    Params.Add("tkn", HC.Password.GetPlainText());
                    Params.Add("z", HC.ProviderSpecificSettings[HostConfig.CLOUDFLARE_ZONE_NAME]);
                    Hashtable rec_load_all_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params)));
                    if (rec_load_all_response["result"].ToString() == "success")
                    {
                        Hashtable Response = (Hashtable)rec_load_all_response["response"];
                        Hashtable Recs = (Hashtable)Response["recs"];
                        ArrayList Objs = (ArrayList)Recs["objs"];

                        foreach (Hashtable Obj in Objs)
                        {
                            if (Obj["name"].ToString().ToLower() == HC.Hostname.ToLower())
                            {
                                return new IPAddress[] {
                                    IPAddress.Parse(Obj["content"].ToString())
                                };
                            }
                        }
                    }
                    else
                    {
                        Logging.instance.LogError("Unable to get remote IPs \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + (rec_load_all_response["msg"] == null ? "Unknown reason" : rec_load_all_response["msg"].ToString()));
                    }
                }
                catch (Exception ex)
                {
                    Logging.instance.LogException("Unable to get remote IPs \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + ")", ex);
                }
            }

            return null;
        }
コード例 #9
0
ファイル: WebUtils.cs プロジェクト: Robin--/RMLib
        static public string HttpPost(string url, NameValueCollection nameValues)
        {
            bool OldExpect100Continue = ServicePointManager.Expect100Continue;

            ServicePointManager.Expect100Continue = false;

            try
            {
                using (RMWebClient WC = new RMWebClient())
                {
                    return(RMEncoding.Ansi.GetString(WC.UploadValues(url, nameValues)));
                }
            }
            catch (Exception)
            {
                // TODO Consider not catching this
                return(string.Empty);
            }
            finally
            {
                ServicePointManager.Expect100Continue = OldExpect100Continue;
            }
        }
コード例 #10
0
ファイル: DtDNSProvider.cs プロジェクト: rickparrish/PDDNS
        public override void Update(HostConfig HC, IPAddress ipAddress)
        {
            if (HC == null) throw new ArgumentNullException("HC");
            if (ipAddress == null) throw new ArgumentNullException("ipAddress");

            using (RMWebClient WC = new RMWebClient())
            {
                string Url = "https://www.dtdns.com/api/autodns.cfm";
                Url += "?id=" + Uri.EscapeDataString(HC.Hostname);
                Url += "&pw=" + Uri.EscapeDataString(HC.Password.GetPlainText());
                Url += "&ip=" + ipAddress.ToString();
                Url += "&client=PDDNS";

                string ResponseText = WC.DownloadString(Url).Trim();
                if (!ResponseText.Contains(ipAddress.ToString()))
                {
                    HC.Disabled = true;
                    HC.DisabledReason = ResponseText;
                    HC.Save();

                    Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason);
                }
            }
        }
コード例 #11
0
        void cmdRetrieve_Click(object sender, EventArgs e)
        {
            if (!Dialog.ValidateIsEmailAddress(txtEmailAddress)) return;
            if (!Dialog.ValidateIsNotEmpty(txtAPIKey)) return;

            lvZoneRecords.Items.Clear();

            using (RMWebClient WC = new RMWebClient())
            {
                // Get all zones
                try
                {
                    NameValueCollection Params = new NameValueCollection();
                    Params.Add("a", "zone_load_multi");
                    Params.Add("email", txtEmailAddress.Text.Trim());
                    Params.Add("tkn", txtAPIKey.Text.Trim());
                    Hashtable zone_load_multi_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params)));
                    if ((zone_load_multi_response["result"] != null) && (zone_load_multi_response["result"].ToString() == "success"))
                    {
                        Hashtable Response = (Hashtable)zone_load_multi_response["response"];
                        Hashtable Zones = (Hashtable)Response["zones"];
                        ArrayList Objs = (ArrayList)Zones["objs"];

                        // Now get all records for each zone
                        foreach (Hashtable Zone in Objs)
                        {
                            Params = new NameValueCollection();
                            Params.Add("a", "rec_load_all");
                            Params.Add("email", txtEmailAddress.Text.Trim());
                            Params.Add("tkn", txtAPIKey.Text.Trim());
                            Params.Add("z", Zone["zone_name"].ToString());
                            Hashtable rec_load_all_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params)));
                            Response = (Hashtable)rec_load_all_response["response"];
                            Hashtable Recs = (Hashtable)Response["recs"];
                            Objs = (ArrayList)Recs["objs"];

                            foreach (Hashtable ZoneRecord in Objs)
                            {
                                if (ZoneRecord["type"].ToString() == "A")
                                {
                                    ListViewItem LVI = new ListViewItem(ZoneRecord["name"].ToString());
                                    LVI.SubItems.Add(ZoneRecord["zone_name"].ToString());
                                    LVI.SubItems.Add(ZoneRecord["rec_id"].ToString());
                                    lvZoneRecords.Items.Add(LVI);
                                }
                            }
                        }
                    }
                    else
                    {
                        if (zone_load_multi_response["msg"] == null)
                        {
                            throw new Exception("Unknown error");
                        }
                        else
                        {
                            throw new Exception(zone_load_multi_response["msg"].ToString());
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logging.instance.LogException("Error retrieving CloudFlare zone records", ex);
                    Dialog.Error("Error retrieving hostnames:\r\n\r\n" + ex.Message, "Error");
                }
            }
        }
コード例 #12
0
ファイル: WebUtils.cs プロジェクト: Robin--/RMLib
        public static IPAddress GetExternalIPv4ByHttp(int port)
        {
            using (RMWebClient WC = new RMWebClient())
            {
                WC.Timeout = 5000;
                string IP = WC.DownloadString("http://www.randm.ca:" + port.ToString() + "/whats-my-ip.php");

                // Return if it's valid
                IPAddress Result = IPAddress.None;
                if (IPAddress.TryParse(IP, out Result) && !WebUtils.IsPrivateIP(Result)) return Result;
            }

            return IPAddress.None;
        }
コード例 #13
0
ファイル: WebUtils.cs プロジェクト: Robin--/RMLib
        public static string HttpPost(string url, NameValueCollection nameValues)
        {
            bool OldExpect100Continue = ServicePointManager.Expect100Continue;
            ServicePointManager.Expect100Continue = false;

            try
            {
                using (RMWebClient WC = new RMWebClient())
                {
                    return RMEncoding.Ansi.GetString(WC.UploadValues(url, nameValues));
                }
            }
            catch (Exception)
            {
                // TODO Consider not catching this
                return string.Empty;
            }
            finally
            {
                ServicePointManager.Expect100Continue = OldExpect100Continue;
            }
        }
コード例 #14
0
ファイル: WebUtils.cs プロジェクト: Robin--/RMLib
 public static string HttpGet(string url)
 {
     try
     {
         using (RMWebClient WC = new RMWebClient())
         {
             return WC.DownloadString(url);
         }
     }
     catch (Exception)
     {
         return string.Empty;
     }
 }
コード例 #15
0
ファイル: UPnP.cs プロジェクト: Robin--/RMLib
        private static string GetServiceUrl(string descriptionUrl)
        {
            // Download description file from router
            string ResponseText = "";
            using (RMWebClient WC = new RMWebClient())
            {
                WC.Timeout = 5000;
                ResponseText = WC.DownloadString(descriptionUrl);
            }

            // Load xml into parser
            XmlDocument XmlDoc = new XmlDocument();
            XmlDoc.LoadXml(ResponseText);

            // Add namespace
            XmlNamespaceManager NSManager = new XmlNamespaceManager(XmlDoc.NameTable);
            NSManager.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0");

            // Find deviceType node and ensure it's an internet gateway device
            XmlNode DeviceTypeNode = XmlDoc.SelectSingleNode("//tns:device/tns:deviceType/text()", NSManager);
            if (!DeviceTypeNode.Value.ToLower().Contains("internetgatewaydevice")) return null;

            // Find controlURL node
            XmlNode ControlUrlNode = XmlDoc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANIPConnection:1\"]/tns:controlURL/text()", NSManager);
            if (ControlUrlNode == null)
            {
                _WANPPP = true;
                ControlUrlNode = XmlDoc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANPPPConnection:1\"]/tns:controlURL/text()", NSManager);
                if (ControlUrlNode == null) return null;
            }

            // Return the path to the service url
            string BaseUrl = descriptionUrl.Substring(7); // Trim http://
            BaseUrl = BaseUrl.Substring(0, BaseUrl.IndexOf("/")); // Trim everything after first /
            if (ControlUrlNode.Value.StartsWith("/"))
            {
                return "http://" + BaseUrl + ControlUrlNode.Value;
            }
            else
            {
                return "http://" + BaseUrl + "/" + ControlUrlNode.Value;
            }
        }
コード例 #16
0
ファイル: UPnP.cs プロジェクト: Robin--/RMLib
        private static IPAddress GetExternalIPAddress(string serviceUrl)
        {
            string RequestText = "<?xml version=\"1.0\"?>" +
                                 "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" +
                                 "<s:Body>" +
                                 "<u:GetExternalIPAddress xmlns:u=\"urn:schemas-upnp-org:service:WAN" + (_WANPPP ? "PPP" : "IP") + "Connection:1\"></u:GetExternalIPAddress>" +
                                 "</s:Body>" +
                                 "</s:Envelope>";
            byte[] RequestBytes = Encoding.ASCII.GetBytes(RequestText);

            // Request the router tell us the external ip
            byte[] ResponseBytes = null;
            string ResponseText = null;
            using (RMWebClient WC = new RMWebClient())
            {
                WC.ContentType = "text/xml; charset=\"utf-8\"";
                WC.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:WAN" + (_WANPPP ? "PPP" : "IP") + "Connection:1#GetExternalIPAddress\"");
                WC.Timeout = 5000;
                ResponseBytes = WC.UploadData(serviceUrl, RequestBytes);
                ResponseText = Encoding.ASCII.GetString(ResponseBytes);
            }

            // Load xml into parser
            XmlDocument XmlDoc = new XmlDocument();
            XmlDoc.LoadXml(ResponseText);

            // Add namespace
            XmlNamespaceManager NSManager = new XmlNamespaceManager(XmlDoc.NameTable);
            NSManager.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0");

            // Get IP
            string IP = XmlDoc.SelectSingleNode("//NewExternalIPAddress/text()", NSManager).Value;

            // Return if it's valid
            IPAddress Result = null;
            if (IPAddress.TryParse(IP, out Result) && !WebUtils.IsPrivateIP(Result))
            {
                return Result;
            }
            else
            {
                return IPAddress.None;
            }
        }
コード例 #17
0
ファイル: DownloadFileForm.cs プロジェクト: Robin--/RMLibUI
        void WC_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                pbDownload.Value = 0;
                Dialog.Information("Download Aborted", "Download Aborted");

                // Clean up the aborted download
                FileUtils.FileDelete(lblTo.Text);

                DialogResult = DialogResult.Cancel;
                Close();
            }
            else
            {
                DialogResult = DialogResult.OK;
                Close();
            }

            lock (_Lock)
            {
                _WebClient = null;
            }
        }
コード例 #18
0
ファイル: DownloadFileForm.cs プロジェクト: Robin--/RMLibUI
 private void frmRMFileDownload_Load(object sender, EventArgs e)
 {
     lock (_Lock)
     {
         _WebClient = new RMWebClient();
         _WebClient.DownloadFileCompleted += new AsyncCompletedEventHandler(WC_DownloadFileCompleted);
         _WebClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(WC_DownloadProgressChanged);
         _WebClient.DownloadFileAsync(new Uri(lblFrom.Text), lblTo.Text);
     }
 }
コード例 #19
0
        public override void Update(HostConfig HC, IPAddress ipAddress)
        {
            if (HC == null) throw new ArgumentNullException("HC");
            if (ipAddress == null) throw new ArgumentNullException("ipAddress");

            using (RMWebClient WC = new RMWebClient())
            {
                try
                {
                    NameValueCollection Params = new NameValueCollection();
                    Params.Add("a", "rec_edit");
                    Params.Add("content", ipAddress.ToString());
                    Params.Add("email", HC.Username);
                    Params.Add("id", HC.ProviderSpecificSettings[HostConfig.CLOUDFLARE_REC_ID]);
                    int HostnamePeriodCount = HC.Hostname.Count(x => x == '.'); // TODO Do this for other providers too
                    switch (HostnamePeriodCount) {
                        case 0: throw new Exception("Hostname has 0 periods?");
                        case 1: Params.Add("name", HC.Hostname); break; // One period == full domain name (ie github.com)
                        default: Params.Add("name", string.Join(".", HC.Hostname.Split('.'), 0, HostnamePeriodCount - 1)); break; // More than one period == all but last element (ie www.github.com or a.b.c.d.github.com)
                    }
                    Params.Add("tkn", HC.Password.GetPlainText());
                    Params.Add("ttl", "1");
                    Params.Add("type", "A");
                    Params.Add("z", HC.ProviderSpecificSettings[HostConfig.CLOUDFLARE_ZONE_NAME]);
                    Hashtable rec_edit_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params)));
                    if (rec_edit_response["result"].ToString() == "success")
                    {
                        Hashtable Response = (Hashtable)rec_edit_response["response"];
                        Hashtable Rec = (Hashtable)Response["rec"];
                        Hashtable Obj = (Hashtable)Rec["obj"];

                        if (!Obj["content"].ToString().Contains(ipAddress.ToString()))
                        {
                            HC.Disabled = true;
                            HC.DisabledReason = rec_edit_response["msg"].ToString();
                            HC.Save();

                            Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason);
                        }
                    }
                    else
                    {
                        HC.Disabled = true;
                        HC.DisabledReason = (rec_edit_response["msg"] == null) ? "Unknown reason" : rec_edit_response["msg"].ToString();
                        HC.Save();

                        Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason);
                    }
                }
                catch (Exception ex)
                {
                    HC.Disabled = true;
                    HC.DisabledReason = "Unhandled exception (" + ex.Message + ")";
                    HC.Save();

                    Logging.instance.LogException("Unable to update host \"" + HC.Hostname + "\"", ex);
                }
            }
        }