/// <summary> /// Downloads the most recent copy of the endpoint address file and /// parses it to a collection of address range objects. /// </summary> public static AWSPublicIpAddressRanges Load(IWebProxy proxy) { const int maxDownloadRetries = 3; var retries = 0; while (retries < maxDownloadRetries) { try { var content = AWSSDKUtils.DownloadStringContent(IpAddressRangeEndpoint, proxy); AWSPublicIpAddressRanges instance = Parse(content); return(instance); } catch (Exception e) { retries++; if (retries == maxDownloadRetries) { throw new AmazonServiceException( string.Format(CultureInfo.InvariantCulture, "Error downloading public IP address ranges file from {0}.", IpAddressRangeEndpoint), e); } } var delay = (int)(Math.Pow(4, retries) * 100); delay = Math.Min(delay, 30 * 1000); AWSSDKUtils.Sleep(delay); } return(null); }
private static List <string> GetItems(string relativeOrAbsolutePath, int tries, bool slurp) { var items = new List <string>(); try { // if we are given a relative path, we assume the data we need exists under the // main metadata root var uri = relativeOrAbsolutePath.StartsWith(EC2_METADATA_SVC, StringComparison.Ordinal) ? new Uri(relativeOrAbsolutePath) : new Uri(EC2_METADATA_ROOT + relativeOrAbsolutePath); var content = AWSSDKUtils.DownloadStringContent(uri, TimeSpan.FromSeconds(5)); using (var stream = new StringReader(content)) { if (slurp) { items.Add(stream.ReadToEnd()); } else { string line; do { line = stream.ReadLine(); if (line != null) { items.Add(line.Trim()); } }while (line != null); } } } catch (WebException wex) { var response = wex.Response as HttpWebResponse; if (response != null && response.StatusCode == HttpStatusCode.NotFound) { return(null); } if (tries <= 1) { Logger.GetLogger(typeof(EC2InstanceMetadata)).Error(wex, "Unable to contact EC2 Metadata service."); return(null); } PauseExponentially(tries); return(GetItems(relativeOrAbsolutePath, tries - 1, slurp)); } return(items); }
public static AWSPublicIpAddressRanges Load() { int num = 0; while (num < 3) { try { return(Parse(AWSSDKUtils.DownloadStringContent(IpAddressRangeEndpoint))); } catch (Exception innerException) { num++; if (num == 3) { throw new AmazonServiceException(string.Format(CultureInfo.InvariantCulture, "Error downloading public IP address ranges file from {0}.", IpAddressRangeEndpoint), innerException); } } AWSSDKUtils.Sleep(Math.Min((int)(Math.Pow(4.0, (double)num) * 100.0), 30000)); } return(null); }