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); } } }