/// <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 AWSPublicIpAddressRanges Parse(string fileContent) { const string createDateKey = "createDate"; const string prefixesKey = "prefixes"; const string ipPrefixKey = "ip_prefix"; const string regionKey = "region"; const string serviceKey = "service"; const string createDateFormatString = "yyyy-MM-dd-HH-mm-ss"; try { var instance = new AWSPublicIpAddressRanges(); var json = JsonMapper.ToObject(new JsonReader(fileContent)); DateTime?creationDateTime = null; try { var createdAt = (string)json[createDateKey]; creationDateTime = DateTime.ParseExact(createdAt, createDateFormatString, null); } catch (FormatException) { } catch (ArgumentNullException) { } instance.CreateDate = creationDateTime.GetValueOrDefault(DateTime.Now.ToUniversalTime()); var parsedRanges = new List <AWSPublicIpAddressRange>(); instance.AllAddressRanges = parsedRanges; var ranges = json[prefixesKey]; if (!ranges.IsArray) { throw new InvalidDataException("Expected array content for prefixes key."); } parsedRanges.AddRange(from JsonData range in ranges select new AWSPublicIpAddressRange { IpPrefix = (string)range[ipPrefixKey], Region = (string)range[regionKey], Service = (string)range[serviceKey] }); return(instance); } catch (Exception e) { throw new InvalidDataException("IP address ranges content in unexpected/invalid format.", e); } }
private static AWSPublicIpAddressRanges Parse(string fileContent) { try { var instance = new AWSPublicIpAddressRanges(); var json = JsonMapper.ToObject(new JsonReader(fileContent)); DateTime?creationDateTime = null; try { var createdAt = (string)json[createDateKey]; creationDateTime = DateTime.ParseExact(createdAt, createDateFormatString, null); } catch (FormatException) { } catch (ArgumentNullException) { } #pragma warning disable CS0612 // Type or member is obsolete instance.CreateDate = creationDateTime.GetValueOrDefault(AWSSDKUtils.CorrectedUtcNow); #pragma warning restore CS0612 // Type or member is obsolete // ipv4 and v6 addresses occupy different keys in the data file and can't easily be merged // so process each subset separately var parsedRanges = new List <AWSPublicIpAddressRange>(); var ipv4Ranges = json[ipv4PrefixesKey]; var ipv6Ranges = json[ipv6PrefixesKey]; if (!ipv4Ranges.IsArray || !ipv6Ranges.IsArray) { throw new InvalidDataException("Expected array content for ip_prefixes and/or ipv6_prefixes keys."); } parsedRanges.AddRange(ParseRange(ipv4Ranges, AWSPublicIpAddressRange.AddressFormat.Ipv4)); parsedRanges.AddRange(ParseRange(ipv6Ranges, AWSPublicIpAddressRange.AddressFormat.Ipv6)); instance.AllAddressRanges = parsedRanges; return(instance); } catch (Exception e) { throw new InvalidDataException("IP address ranges content in unexpected/invalid format.", e); } }
private static AWSPublicIpAddressRanges Parse(string fileContent) { try { AWSPublicIpAddressRanges aWSPublicIpAddressRanges = new AWSPublicIpAddressRanges(); JsonData jsonData = JsonMapper.ToObject(new JsonReader(fileContent)); DateTime?dateTime = null; try { string s = (string)jsonData["createDate"]; dateTime = DateTime.ParseExact(s, "yyyy-MM-dd-HH-mm-ss", null); } catch (FormatException) { } catch (ArgumentNullException) { } aWSPublicIpAddressRanges.CreateDate = dateTime.GetValueOrDefault(DateTime.Now.ToUniversalTime()); List <AWSPublicIpAddressRange> list = new List <AWSPublicIpAddressRange>(); JsonData jsonData2 = jsonData["prefixes"]; JsonData jsonData3 = jsonData["ipv6_prefixes"]; if (!jsonData2.IsArray || !jsonData3.IsArray) { throw new InvalidDataException("Expected array content for ip_prefixes and/or ipv6_prefixes keys."); } list.AddRange(ParseRange(jsonData2, AWSPublicIpAddressRange.AddressFormat.Ipv4)); list.AddRange(ParseRange(jsonData3, AWSPublicIpAddressRange.AddressFormat.Ipv6)); aWSPublicIpAddressRanges.AllAddressRanges = list; return(aWSPublicIpAddressRanges); } catch (Exception innerException) { throw new InvalidDataException("IP address ranges content in unexpected/invalid format.", innerException); } }
private static AWSPublicIpAddressRanges Parse(string fileContent) { try { var instance = new AWSPublicIpAddressRanges(); var json = JsonMapper.ToObject(new JsonReader(fileContent)); DateTime? creationDateTime = null; try { var createdAt = (string)json[createDateKey]; creationDateTime = DateTime.ParseExact(createdAt, createDateFormatString, null); } catch (FormatException) { } catch (ArgumentNullException) { } instance.CreateDate = creationDateTime.GetValueOrDefault(DateTime.Now.ToUniversalTime()); // ipv4 and v6 addresses occupy different keys in the data file and can't easily be merged // so process each subset separately var parsedRanges = new List<AWSPublicIpAddressRange>(); var ipv4Ranges = json[ipv4PrefixesKey]; var ipv6Ranges = json[ipv6PrefixesKey]; if (!ipv4Ranges.IsArray || !ipv6Ranges.IsArray) throw new InvalidDataException("Expected array content for ip_prefixes and/or ipv6_prefixes keys."); parsedRanges.AddRange(ParseRange(ipv4Ranges, AWSPublicIpAddressRange.AddressFormat.Ipv4)); parsedRanges.AddRange(ParseRange(ipv6Ranges, AWSPublicIpAddressRange.AddressFormat.Ipv6)); instance.AllAddressRanges = parsedRanges; return instance; } catch (Exception e) { throw new InvalidDataException("IP address ranges content in unexpected/invalid format.", e); } }
private static AWSPublicIpAddressRanges Parse(string fileContent) { const string createDateKey = "createDate"; const string prefixesKey = "prefixes"; const string ipPrefixKey = "ip_prefix"; const string regionKey = "region"; const string serviceKey = "service"; const string createDateFormatString = "yyyy-MM-dd-HH-mm-ss"; try { var instance = new AWSPublicIpAddressRanges(); var json = JsonMapper.ToObject(new JsonReader(fileContent)); DateTime? creationDateTime = null; try { var createdAt = (string)json[createDateKey]; creationDateTime = DateTime.ParseExact(createdAt, createDateFormatString, null); } catch (FormatException) { } catch (ArgumentNullException) { } instance.CreateDate = creationDateTime.GetValueOrDefault(DateTime.Now.ToUniversalTime()); var parsedRanges = new List<AWSPublicIpAddressRange>(); instance.AllAddressRanges = parsedRanges; var ranges = json[prefixesKey]; if (!ranges.IsArray) throw new InvalidDataException("Expected array content for prefixes key."); parsedRanges.AddRange(from JsonData range in ranges select new AWSPublicIpAddressRange { IpPrefix = (string)range[ipPrefixKey], Region = (string)range[regionKey], Service = (string)range[serviceKey] }); return instance; } catch (Exception e) { throw new InvalidDataException("IP address ranges content in unexpected/invalid format.", e); } }